<?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>68329</bug_id>
          
          <creation_ts>2011-09-18 17:54:21 -0700</creation_ts>
          <short_desc>DFG should support continuous optimization</short_desc>
          <delta_ts>2011-09-27 12:48:44 -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>68335</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>469212</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 17:54:21 -0700</bug_when>
    <thetext>In the current tiered compilation scheme, the DFG may perform a speculation that turns out to be false later in the program&apos;s lifetime.  Currently this means that the program systematically fails speculation for that code block, resulting in poor performance.

The DFG should be able to reoptimize the relevant code block with updated speculations.

This involves:

1) Being able to jettison the old DFG code block, but so long as no stack frame is running on it.

2) Being able to update predictions over time.

3) Having heuristics that determine when it would be profitable to reoptimize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469217</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 19:35:40 -0700</bug_when>
    <thetext>It looks like adding the ability to mark CodeBlocks in the conservative marker is mostly performance-neutral.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;JettisonCB&quot; at /Volumes/Data/pizlo/octonary/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               JettisonCB                                   
SunSpider:
   3d-cube                                7.7796+-0.1853          7.7159+-0.1270       
   3d-morph                               7.5034+-0.1601          7.4898+-0.1230       
   3d-raytrace                            7.6260+-0.1326          7.5335+-0.1745         might be 1.0123x faster
   access-binary-trees                    2.3017+-0.0509          2.2925+-0.0934       
   access-fannkuch                       11.4303+-0.1660    ?    11.6360+-0.1596       ? might be 1.0180x slower
   access-nbody                           4.2085+-0.0754    ^     3.8239+-0.0846       ^ definitely 1.1006x faster
   access-nsieve                          2.6087+-0.0820          2.5766+-0.0415         might be 1.0125x faster
   bitops-3bit-bits-in-byte               1.6489+-0.0373    ?     1.6678+-0.0454       ? might be 1.0115x slower
   bitops-bits-in-byte                    2.7311+-0.0303    ?     2.7410+-0.0772       ?
   bitops-bitwise-and                     3.5697+-0.0873          3.5299+-0.0864         might be 1.0113x faster
   bitops-nsieve-bits                     5.2416+-0.0833    ?     5.2612+-0.0723       ?
   controlflow-recursive                  1.9781+-0.0433          1.9708+-0.0563       
   crypto-aes                             6.8613+-0.2177    ?     6.9913+-0.2410       ? might be 1.0189x slower
   crypto-md5                             2.7334+-0.0518    ?     2.7985+-0.0689       ? might be 1.0238x slower
   crypto-sha1                            2.2083+-0.0603          2.1808+-0.0475         might be 1.0126x faster
   date-format-tofte                      9.9839+-0.1474    ?    10.1863+-0.1228       ? might be 1.0203x slower
   date-format-xparb                      9.0108+-0.3826          8.7002+-0.1493         might be 1.0357x faster
   math-cordic                            6.1725+-0.1297    ?     6.2024+-0.1388       ?
   math-partial-sums                      7.3134+-0.1048          7.2668+-0.1245       
   math-spectral-norm                     2.5721+-0.0469    ?     2.6382+-0.0664       ? might be 1.0257x slower
   regexp-dna                            10.8081+-0.2950    ?    10.8432+-0.1563       ?
   string-base64                          5.6656+-0.1398    ?     5.7008+-0.1246       ?
   string-fasta                           6.9114+-0.1404    ?     6.9835+-0.1214       ? might be 1.0104x slower
   string-tagcloud                       11.8874+-0.1724         11.8395+-0.1860       
   string-unpack-code                    18.6655+-0.1657    ?    18.7603+-0.4900       ?
   string-validate-input                  6.5207+-0.1124          6.4334+-0.1503         might be 1.0136x faster

   &lt;arithmetic&gt;                           6.3824+-0.0342          6.3755+-0.0252       
   &lt;geometric&gt;                            5.2612+-0.0271          5.2475+-0.0176       
   &lt;harmonic&gt;                             4.2911+-0.0266          4.2802+-0.0274       

                                            TipOfTree               JettisonCB                                   
V8:
   crypto                                83.2440+-0.3707    ^    82.3064+-0.5042       ^ definitely 1.0114x faster
   deltablue                            241.8391+-2.0837    ?   243.4727+-1.5806       ?
   earley-boyer                          96.1417+-0.2934         95.7106+-0.5460       
   raytrace                              69.7033+-1.0869    ?    69.7215+-0.7712       ?
   regexp                               106.1064+-0.3785    ?   106.3670+-0.3294       ?
   richards                             216.8097+-0.5041        216.5710+-0.7715       
   splay                                 98.9097+-0.5848    ?    99.5432+-0.5767       ?

   &lt;arithmetic&gt;                         130.3934+-0.4094    ?   130.5275+-0.3473       ?
   &lt;geometric&gt;                          117.3718+-0.3798        117.3549+-0.3047       
   &lt;harmonic&gt;                           107.6083+-0.4179        107.4964+-0.3393       

                                            TipOfTree               JettisonCB                                   
Kraken:
   ai-astar                             635.7456+-4.1857        630.3726+-4.3410       
   audio-beat-detection                 463.0082+-1.4343    !   472.5084+-2.1826       ! definitely 1.0205x slower
   audio-dft                            420.2750+-2.4124        420.0530+-2.2228       
   audio-fft                            364.8925+-3.5600    ?   369.1498+-0.9085       ? might be 1.0117x slower
   audio-oscillator                     315.5371+-0.4917    ^   312.9771+-0.5289       ^ definitely 1.0082x faster
   imaging-darkroom                     417.1771+-6.5275    ?   423.8325+-15.0247      ? might be 1.0160x slower
   imaging-desaturate                   217.6311+-1.1461    ?   218.2500+-0.2932       ?
   imaging-gaussian-blur                592.2451+-0.8057        590.7516+-2.4122       
   json-parse-financial                  49.6200+-0.3170    ?    50.0082+-0.3647       ?
   json-stringify-tinderbox              67.7365+-0.4645    ?    68.2077+-0.3253       ?
   stanford-crypto-aes                  144.1274+-0.9559    ?   144.7559+-0.8604       ?
   stanford-crypto-ccm                  110.2297+-0.3680    !   113.0208+-0.5793       ! definitely 1.0253x slower
   stanford-crypto-pbkdf2               394.1354+-3.2859    ?   396.0956+-3.0744       ?
   stanford-crypto-sha256-iterative     146.3190+-0.9362    !   148.6070+-0.7463       ! definitely 1.0156x slower

   &lt;arithmetic&gt;                         309.9057+-0.6356    ?   311.3279+-1.1983       ?
   &lt;geometric&gt;                          241.9557+-0.3347    !   243.5964+-0.7942       ! definitely 1.0068x slower
   &lt;harmonic&gt;                           172.8240+-0.4237    !   174.3479+-0.5745       ! definitely 1.0088x slower

                                            TipOfTree               JettisonCB                                   
All benchmarks:
   &lt;arithmetic&gt;                         115.2633+-0.2232    ?   115.7031+-0.4024       ?
   &lt;geometric&gt;                           26.1323+-0.0832    ?    26.1466+-0.0580       ?
   &lt;harmonic&gt;                             7.5744+-0.0460          7.5563+-0.0473</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469238</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 22:23:52 -0700</bug_when>
    <thetext>Looks like adding a speculative success counter to the code that DFG emits is *almost* performance neutral.  It&apos;s a slight loss, but hopefully I can make up for it by the increased robustness.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;JettisonCB&quot; at /Volumes/Data/pizlo/octonary/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               JettisonCB                                   
SunSpider:
   3d-cube                                7.7189+-0.1412          7.7112+-0.1051       
   3d-morph                               7.4322+-0.1846    ?     7.4622+-0.1422       ?
   3d-raytrace                            7.6861+-0.0888          7.5094+-0.0946         might be 1.0235x faster
   access-binary-trees                    2.3022+-0.0572    ?     2.3973+-0.0883       ? might be 1.0413x slower
   access-fannkuch                       11.5342+-0.1283    ?    11.5562+-0.1893       ?
   access-nbody                           4.1764+-0.1071    ^     3.8803+-0.0972       ^ definitely 1.0763x faster
   access-nsieve                          2.5951+-0.0377    ?     2.6183+-0.0797       ?
   bitops-3bit-bits-in-byte               1.6526+-0.0440    !     1.7839+-0.0379       ! definitely 1.0794x slower
   bitops-bits-in-byte                    2.7086+-0.0479          2.6894+-0.0520       
   bitops-bitwise-and                     3.6113+-0.0852    ?     3.6227+-0.0851       ?
   bitops-nsieve-bits                     5.3445+-0.0918    ?     5.3558+-0.1016       ?
   controlflow-recursive                  1.9275+-0.0509    !     2.1499+-0.0869       ! definitely 1.1154x slower
   crypto-aes                             6.9565+-0.2272          6.8406+-0.3221         might be 1.0169x faster
   crypto-md5                             2.7340+-0.0502    ?     2.7975+-0.0356       ? might be 1.0232x slower
   crypto-sha1                            2.2154+-0.0499    ?     2.3144+-0.0540       ? might be 1.0447x slower
   date-format-tofte                      9.7958+-0.1211    ?     9.9403+-0.1487       ? might be 1.0147x slower
   date-format-xparb                      8.7927+-0.1389    ?     8.8095+-0.1998       ?
   math-cordic                            6.2006+-0.1075          6.1583+-0.0908       
   math-partial-sums                      7.2989+-0.1076          7.2459+-0.0633       
   math-spectral-norm                     2.6274+-0.0671          2.5728+-0.0299         might be 1.0212x faster
   regexp-dna                            10.9608+-0.1526         10.7005+-0.1278         might be 1.0243x faster
   string-base64                          5.7498+-0.1633          5.7256+-0.1321       
   string-fasta                           6.9099+-0.1548    ?     7.0445+-0.1264       ? might be 1.0195x slower
   string-tagcloud                       11.5898+-0.1934    ?    11.8337+-0.1978       ? might be 1.0210x slower
   string-unpack-code                    18.4722+-0.1787    ?    18.8110+-0.5315       ? might be 1.0183x slower
   string-validate-input                  6.4533+-0.1169    ?     6.4611+-0.1352       ?

   &lt;arithmetic&gt;                           6.3633+-0.0157    ?     6.3843+-0.0220       ?
   &lt;geometric&gt;                            5.2546+-0.0131    !     5.2953+-0.0155       ! definitely 1.0077x slower
   &lt;harmonic&gt;                             4.2874+-0.0205    !     4.3699+-0.0179       ! definitely 1.0193x slower

                                            TipOfTree               JettisonCB                                   
V8:
   crypto                                82.8718+-0.5337         82.4999+-0.4342       
   deltablue                            241.8472+-2.3797    !   245.6910+-1.1746       ! definitely 1.0159x slower
   earley-boyer                          98.3761+-2.6772         96.7450+-0.2958         might be 1.0169x faster
   raytrace                              69.0379+-0.2578    !    70.1706+-0.4662       ! definitely 1.0164x slower
   regexp                               106.5903+-1.2884        105.7796+-0.9258       
   richards                             217.2081+-0.8096    !   225.6307+-1.1982       ! definitely 1.0388x slower
   splay                                 98.6183+-0.5517         98.4457+-0.6877       

   &lt;arithmetic&gt;                         130.6500+-0.3123    !   132.1375+-0.3785       ! definitely 1.0114x slower
   &lt;geometric&gt;                          117.5667+-0.3564    ?   118.2467+-0.3255       ?
   &lt;harmonic&gt;                           107.6964+-0.4021    ?   107.9803+-0.3229       ?

                                            TipOfTree               JettisonCB                                   
Kraken:
   ai-astar                             630.8458+-4.8120        628.8718+-4.5694       
   audio-beat-detection                 465.4545+-2.0257    !   473.6872+-0.9470       ! definitely 1.0177x slower
   audio-dft                            424.4798+-5.0051        418.3906+-2.0215         might be 1.0146x faster
   audio-fft                            362.5508+-1.6881    ?   367.1407+-2.9210       ? might be 1.0127x slower
   audio-oscillator                     315.8901+-0.7736    ^   312.8390+-1.2768       ^ definitely 1.0098x faster
   imaging-darkroom                     413.5906+-2.0065        412.9257+-1.1696       
   imaging-desaturate                   217.8714+-0.7518        212.2578+-5.0701         might be 1.0264x faster
   imaging-gaussian-blur                591.4198+-1.2417    !   598.7139+-2.5048       ! definitely 1.0123x slower
   json-parse-financial                  49.7857+-0.5397         49.6653+-0.6754       
   json-stringify-tinderbox              67.6122+-0.3064         67.4863+-0.2974       
   stanford-crypto-aes                  144.6965+-1.1703    ^   141.7946+-0.6062       ^ definitely 1.0205x faster
   stanford-crypto-ccm                  111.3790+-0.7516    ?   111.6174+-0.6448       ?
   stanford-crypto-pbkdf2               393.2011+-2.0680        391.7593+-2.1244       
   stanford-crypto-sha256-iterative     147.4451+-0.6313    ?   148.8170+-0.9358       ?

   &lt;arithmetic&gt;                         309.7302+-0.4355        309.7119+-0.6984       
   &lt;geometric&gt;                          242.2064+-0.3787        241.6892+-0.5748       
   &lt;harmonic&gt;                           173.2442+-0.5841        172.6992+-0.6739       

                                            TipOfTree               JettisonCB                                   
All benchmarks:
   &lt;arithmetic&gt;                         115.2387+-0.1474    ?   115.4664+-0.2303       ?
   &lt;geometric&gt;                           26.1288+-0.0404    !    26.2463+-0.0382       ! definitely 1.0045x slower
   &lt;harmonic&gt;                             7.5683+-0.0355    !     7.7104+-0.0309       ! definitely 1.0188x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469250</commentid>
    <comment_count>3</comment_count>
      <attachid>107808</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 23:20:03 -0700</bug_when>
    <thetext>Created attachment 107808
work in progress

This is still a work in progress, and has known problems: https://bugs.webkit.org/show_bug.cgi?id=68335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470340</commentid>
    <comment_count>4</comment_count>
      <attachid>108051</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 14:26:30 -0700</bug_when>
    <thetext>Created attachment 108051
work in progress - ruggedized it some more

This still needs some tuning.  I&apos;m not yet sure if the control logic is right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470447</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 16:19:08 -0700</bug_when>
    <thetext>OK, this is starting to pay dividends.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;JettisonCB&quot; at /Volumes/Data/pizlo/octonary/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               JettisonCB                                   
SunSpider:
   3d-cube                                7.7479+-0.1731    ?     7.9242+-0.1771       ? might be 1.0227x slower
   3d-morph                               7.6610+-0.1180    ?     7.7199+-0.1663       ?
   3d-raytrace                            7.7748+-0.2494          7.7302+-0.2144       
   access-binary-trees                    2.3929+-0.1053    ?     2.4276+-0.0592       ? might be 1.0145x slower
   access-fannkuch                       11.6314+-0.2240         11.6311+-0.2365       
   access-nbody                           3.6431+-0.0896          3.5825+-0.0991         might be 1.0169x faster
   access-nsieve                          2.7376+-0.0882          2.6075+-0.0662         might be 1.0499x faster
   bitops-3bit-bits-in-byte               1.7140+-0.0182    !     1.8333+-0.0347       ! definitely 1.0696x slower
   bitops-bits-in-byte                    2.9296+-0.0530          2.8637+-0.0790         might be 1.0230x faster
   bitops-bitwise-and                     3.7218+-0.1415          3.6575+-0.1019         might be 1.0176x faster
   bitops-nsieve-bits                     5.2566+-0.0682    ?     5.3743+-0.1044       ? might be 1.0224x slower
   controlflow-recursive                  2.0677+-0.0778    ?     2.1981+-0.0528       ? might be 1.0631x slower
   crypto-aes                             7.0142+-0.3549    ?     7.4064+-0.3338       ? might be 1.0559x slower
   crypto-md5                             2.8135+-0.0794          2.7879+-0.0848       
   crypto-sha1                            2.3213+-0.0602    ?     2.3260+-0.0753       ?
   date-format-tofte                     10.3116+-0.2344    ?    10.4378+-0.2828       ? might be 1.0122x slower
   date-format-xparb                      8.4533+-0.2499    !     9.1867+-0.2216       ! definitely 1.0868x slower
   math-cordic                            6.4422+-0.1535    ^     6.1436+-0.1015       ^ definitely 1.0486x faster
   math-partial-sums                      7.5496+-0.1807          7.5091+-0.1570       
   math-spectral-norm                     2.6941+-0.0547          2.6068+-0.0639         might be 1.0335x faster
   regexp-dna                            10.9435+-0.1595         10.9386+-0.3098       
   string-base64                          5.9421+-0.2571          5.7747+-0.1178         might be 1.0290x faster
   string-fasta                           7.2544+-0.2391          7.2107+-0.2189       
   string-tagcloud                       12.1558+-0.3529    ?    12.4166+-0.3872       ? might be 1.0215x slower
   string-unpack-code                    18.8967+-0.5173    ?    19.1674+-0.5064       ? might be 1.0143x slower
   string-validate-input                  6.5833+-0.2060    ?     6.6301+-0.2131       ?

   &lt;arithmetic&gt;                           6.4867+-0.0486    ?     6.5420+-0.0324       ?
   &lt;geometric&gt;                            5.3690+-0.0395    ?     5.4003+-0.0259       ?
   &lt;harmonic&gt;                             4.4092+-0.0436    ?     4.4385+-0.0324       ?

                                            TipOfTree               JettisonCB                                   
V8:
   crypto                                74.6046+-0.4070    ^    72.2672+-0.7195       ^ definitely 1.0323x faster
   deltablue                            225.3433+-1.7379    !   236.4885+-1.9668       ! definitely 1.0495x slower
   earley-boyer                          92.6612+-0.3991    !    93.8201+-0.3120       ! definitely 1.0125x slower
   raytrace                              64.1926+-0.8124    ?    65.7157+-0.7643       ? might be 1.0237x slower
   regexp                               108.8970+-1.1601        107.2254+-0.9922         might be 1.0156x faster
   richards                             201.0203+-1.6227        199.9424+-1.4012       
   splay                                 99.7791+-0.9625    ?    99.9235+-1.1515       ?

   &lt;arithmetic&gt;                         123.7854+-0.3773    !   125.0547+-0.4416       ! definitely 1.0103x slower
   &lt;geometric&gt;                          111.7982+-0.2680    ?   112.3245+-0.2848       ?
   &lt;harmonic&gt;                           102.3350+-0.3228    ?   102.5040+-0.2686       ?

                                            TipOfTree               JettisonCB                                   
Kraken:
   ai-astar                             616.7712+-6.1676    ?   645.2968+-46.3494      ? might be 1.0462x slower
   audio-beat-detection                 473.3009+-3.6924    ?   475.1594+-1.1196       ?
   audio-dft                            451.4413+-8.3904    ^   431.5748+-10.9037      ^ definitely 1.0460x faster
   audio-fft                            365.7535+-3.3272    !   370.9031+-1.0182       ! definitely 1.0141x slower
   audio-oscillator                     397.7187+-1.8295    ^   257.9338+-1.5908       ^ definitely 1.5419x faster
   imaging-darkroom                     418.8900+-1.2035    !   427.1599+-5.2615       ! definitely 1.0197x slower
   imaging-desaturate                   220.7046+-1.7507    ^   209.8197+-1.0989       ^ definitely 1.0519x faster
   imaging-gaussian-blur                579.1448+-2.5212    !   601.6267+-4.1585       ! definitely 1.0388x slower
   json-parse-financial                  49.3908+-0.4090    ^    48.4404+-0.3049       ^ definitely 1.0196x faster
   json-stringify-tinderbox              67.7263+-0.3530    !    69.1170+-0.8160       ! definitely 1.0205x slower
   stanford-crypto-aes                  141.1874+-1.5834        138.7216+-1.0138         might be 1.0178x faster
   stanford-crypto-ccm                  112.6815+-1.0384    ^   109.8747+-0.7353       ^ definitely 1.0255x faster
   stanford-crypto-pbkdf2               376.7632+-2.9107    ^   210.0397+-2.0894       ^ definitely 1.7938x faster
   stanford-crypto-sha256-iterative      85.6741+-0.6838    !    98.8062+-5.4666       ! definitely 1.1533x slower

   &lt;arithmetic&gt;                         311.2249+-0.8779    ^   292.4624+-4.0149       ^ definitely 1.0642x faster
   &lt;geometric&gt;                          236.9719+-0.3964    ^   222.2244+-1.5810       ^ definitely 1.0664x faster
   &lt;harmonic&gt;                           164.4145+-0.4336    ^   159.6218+-0.9891       ^ definitely 1.0300x faster

                                            TipOfTree               JettisonCB                                   
All benchmarks:
   &lt;arithmetic&gt;                         114.7298+-0.2931    ^   109.3606+-1.2316       ^ definitely 1.0491x faster
   &lt;geometric&gt;                           26.0741+-0.1104    ^    25.6799+-0.1002       ^ definitely 1.0153x faster
   &lt;harmonic&gt;                             7.7682+-0.0751    ?     7.8152+-0.0554       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470560</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 19:18:14 -0700</bug_when>
    <thetext>Another set of numbers, after I retuned heuristics.



Benchmark report for SunSpider, V8, and Kraken.

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

Collected 30 samples per benchmark/VM, with 10 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               JettisonCB                                   
SunSpider:
   3d-cube                                7.8287+-0.1801          7.7857+-0.1290       
   3d-morph                               7.4884+-0.0773    ?     7.5740+-0.0923       ? might be 1.0114x slower
   3d-raytrace                            7.7084+-0.1338    ?     7.7715+-0.1481       ?
   access-binary-trees                    2.3010+-0.0647    ?     2.3496+-0.0664       ? might be 1.0211x slower
   access-fannkuch                       11.7645+-0.1926         11.7477+-0.1384       
   access-nbody                           3.5246+-0.0608    ?     3.5652+-0.0426       ? might be 1.0115x slower
   access-nsieve                          2.6844+-0.0391          2.6315+-0.0415         might be 1.0201x faster
   bitops-3bit-bits-in-byte               1.7098+-0.0180    !     1.8508+-0.0221       ! definitely 1.0825x slower
   bitops-bits-in-byte                    2.8851+-0.0596          2.8684+-0.0465       
   bitops-bitwise-and                     3.6722+-0.0491          3.6144+-0.0580         might be 1.0160x faster
   bitops-nsieve-bits                     5.3017+-0.0575          5.2930+-0.0508       
   controlflow-recursive                  2.0053+-0.0217    !     2.2261+-0.0320       ! definitely 1.1101x slower
   crypto-aes                             6.8837+-0.1819    ?     7.1632+-0.1964       ? might be 1.0406x slower
   crypto-md5                             2.7919+-0.0505    ?     2.8382+-0.0552       ? might be 1.0166x slower
   crypto-sha1                            2.2869+-0.0389    ?     2.3167+-0.0327       ? might be 1.0131x slower
   date-format-tofte                     10.2693+-0.1475    ?    10.4425+-0.1998       ? might be 1.0169x slower
   date-format-xparb                      8.5748+-0.1433    !     8.9042+-0.1078       ! definitely 1.0384x slower
   math-cordic                            6.2616+-0.0786    ?     6.3709+-0.2127       ? might be 1.0175x slower
   math-partial-sums                      7.3857+-0.0780    ?     7.4007+-0.0649       ?
   math-spectral-norm                     2.6995+-0.0357          2.6817+-0.0456       
   regexp-dna                            11.0040+-0.1446         10.8350+-0.0903         might be 1.0156x faster
   string-base64                          5.8660+-0.1334    ?     5.8988+-0.1038       ?
   string-fasta                           7.1117+-0.1103          7.1099+-0.0881       
   string-tagcloud                       12.2060+-0.2481         11.9507+-0.1893         might be 1.0214x faster
   string-unpack-code                    18.6964+-0.2333    ?    18.8706+-0.2691       ?
   string-validate-input                  6.5685+-0.1292          6.4310+-0.0923         might be 1.0214x faster

   &lt;arithmetic&gt;                           6.4415+-0.0217    ?     6.4805+-0.0219       ?
   &lt;geometric&gt;                            5.3131+-0.0157    !     5.3704+-0.0167       ! definitely 1.0108x slower
   &lt;harmonic&gt;                             4.3488+-0.0208    !     4.4321+-0.0200       ! definitely 1.0192x slower

                                            TipOfTree               JettisonCB                                   
V8:
   crypto                                73.6284+-0.4434    ^    71.4785+-0.3800       ^ definitely 1.0301x faster
   deltablue                            226.9347+-1.8829    !   234.8437+-1.0423       ! definitely 1.0349x slower
   earley-boyer                          92.7009+-0.1703    !    93.5526+-0.2832       ! definitely 1.0092x slower
   raytrace                              63.5931+-0.2230    !    65.9612+-0.4625       ! definitely 1.0372x slower
   regexp                               107.0856+-0.3063    ^   105.8491+-0.2453       ^ definitely 1.0117x faster
   richards                             199.1884+-0.7157        198.4284+-0.3962       
   splay                                 98.6054+-0.4033    ?    98.6821+-0.3222       ?

   &lt;arithmetic&gt;                         123.1052+-0.3103    !   124.1137+-0.2069       ! definitely 1.0082x slower
   &lt;geometric&gt;                          110.9591+-0.2091    !   111.5271+-0.1670       ! definitely 1.0051x slower
   &lt;harmonic&gt;                           101.4372+-0.1854    !   101.8516+-0.1787       ! definitely 1.0041x slower

                                            TipOfTree               JettisonCB                                   
Kraken:
   ai-astar                             617.5456+-3.9583    !   651.3233+-28.0772      ! definitely 1.0547x slower
   audio-beat-detection                 472.5390+-1.3604        472.4413+-0.8757       
   audio-dft                            421.9768+-1.8677        420.5146+-1.2780       
   audio-fft                            362.8723+-0.7421    !   369.4401+-0.6687       ! definitely 1.0181x slower
   audio-oscillator                     395.1065+-0.5801    ^   256.0258+-0.6453       ^ definitely 1.5432x faster
   imaging-darkroom                     416.9501+-0.7603    !   422.6921+-2.3323       ! definitely 1.0138x slower
   imaging-desaturate                   218.0053+-0.5017    ^   209.1474+-0.3462       ^ definitely 1.0424x faster
   imaging-gaussian-blur                577.9357+-0.9834    !   594.7917+-1.6422       ! definitely 1.0292x slower
   json-parse-financial                  48.9424+-0.2693         48.7625+-0.2108       
   json-stringify-tinderbox              67.5042+-0.1889    !    68.2908+-0.3009       ! definitely 1.0117x slower
   stanford-crypto-aes                  140.8445+-0.3586    ^   137.5372+-0.4014       ^ definitely 1.0240x faster
   stanford-crypto-ccm                  110.5309+-0.6147        109.6368+-0.5200       
   stanford-crypto-pbkdf2               371.6750+-1.0003    ^   207.7955+-0.7730       ^ definitely 1.7887x faster
   stanford-crypto-sha256-iterative      85.3478+-0.2156         85.3476+-0.2550       

   &lt;arithmetic&gt;                         307.6983+-0.3252    ^   289.5533+-2.1522       ^ definitely 1.0627x faster
   &lt;geometric&gt;                          234.4093+-0.2309    ^   218.6223+-0.7991       ^ definitely 1.0722x faster
   &lt;harmonic&gt;                           162.9500+-0.2738    ^   156.3084+-0.3215       ^ definitely 1.0425x faster

                                            TipOfTree               JettisonCB                                   
All benchmarks:
   &lt;arithmetic&gt;                         113.5530+-0.0900    ^   108.3199+-0.6472       ^ definitely 1.0483x faster
   &lt;geometric&gt;                           25.8106+-0.0427    ^    25.4498+-0.0588       ^ definitely 1.0142x faster
   &lt;harmonic&gt;                             7.6628+-0.0358    !     7.8014+-0.0344       ! definitely 1.0181x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470564</commentid>
    <comment_count>7</comment_count>
      <attachid>108101</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 19:41:18 -0700</bug_when>
    <thetext>Created attachment 108101
the patch

I&apos;ll let this simmer here for a bit.  I&apos;m expecting bot failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470566</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-20 19:43:18 -0700</bug_when>
    <thetext>Attachment 108101 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/heap/Heap.h:103:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:2001:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/bytecode/CodeBlock.cpp:2002:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/heap/ConservativeRoots.h:41:  The parameter name &quot;codeBlocks&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 19 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>470567</commentid>
    <comment_count>9</comment_count>
      <attachid>108102</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 19:45:14 -0700</bug_when>
    <thetext>Created attachment 108102
the patch

Fixed conflict that caused a file to get dropped from the patch.  Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470568</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-20 19:50:49 -0700</bug_when>
    <thetext>Attachment 108102 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/heap/Heap.h:103:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 20 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>470569</commentid>
    <comment_count>11</comment_count>
      <attachid>108103</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 19:55:34 -0700</bug_when>
    <thetext>Created attachment 108103
the patch - fix more style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470571</commentid>
    <comment_count>12</comment_count>
      <attachid>108103</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-20 20:09:28 -0700</bug_when>
    <thetext>Comment on attachment 108103
the patch - fix more style

Attachment 108103 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9767540</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470572</commentid>
    <comment_count>13</comment_count>
      <attachid>108104</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 20:17:26 -0700</bug_when>
    <thetext>Created attachment 108104
the patch

Apparently the last patch did not have enough kilobytes in it.  Added necessary build stuff to the various project files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470579</commentid>
    <comment_count>14</comment_count>
      <attachid>108104</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-09-20 20:45:00 -0700</bug_when>
    <thetext>Comment on attachment 108104
the patch

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

&gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.cpp:18
&gt; +/*
&gt; + *  Copyright (C) 2011 Apple Inc. All rights reserved.
&gt; + *
&gt; + *  This library is free software; you can redistribute it and/or
&gt; + *  modify it under the terms of the GNU Lesser General Public
&gt; + *  License as published by the Free Software Foundation; either
&gt; + *  version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + *  This library is distributed in the hope that it will be useful,
&gt; + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + *  Lesser General Public License for more details.
&gt; + *
&gt; + *  You should have received a copy of the GNU Lesser General Public
&gt; + *  License along with this library; if not, write to the Free Software
&gt; + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
&gt; + *
&gt; + */

We usually use a BSD license for new code.

&gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.h:18
&gt; +/*
&gt; + *  Copyright (C) 2011 Apple Inc. All rights reserved.
&gt; + *
&gt; + *  This library is free software; you can redistribute it and/or
&gt; + *  modify it under the terms of the GNU Lesser General Public
&gt; + *  License as published by the Free Software Foundation; either
&gt; + *  version 2 of the License, or (at your option) any later version.
&gt; + *
&gt; + *  This library is distributed in the hope that it will be useful,
&gt; + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
&gt; + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
&gt; + *  Lesser General Public License for more details.
&gt; + *
&gt; + *  You should have received a copy of the GNU Lesser General Public
&gt; + *  License along with this library; if not, write to the Free Software
&gt; + *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
&gt; + *
&gt; + */

We usually use a BSD license for new code.

&gt; Source/JavaScriptCore/wtf/BitVector.h:27
&gt; +/*
&gt; + * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
&gt; + *
&gt; + * Redistribution and use in source and binary forms, with or without
&gt; + * modification, are permitted provided that the following conditions
&gt; + * are met:
&gt; + *
&gt; + * 1.  Redistributions of source code must retain the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer.
&gt; + * 2.  Redistributions in binary form must reproduce the above copyright
&gt; + *     notice, this list of conditions and the following disclaimer in the
&gt; + *     documentation and/or other materials provided with the distribution.
&gt; + * 3.  Neither the name of Apple Computer, Inc. (&quot;Apple&quot;) nor the names of
&gt; + *     its contributors may be used to endorse or promote products derived
&gt; + *     from this software without specific prior written permission.
&gt; + *
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
&gt; + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
&gt; + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
&gt; + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
&gt; + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
&gt; + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
&gt; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
&gt; + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
&gt; + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
&gt; + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; + */

We usually use the 2 clause BSD license (http://www.webkit.org/coding/bsd-license.html) for new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470587</commentid>
    <comment_count>15</comment_count>
      <attachid>108106</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 21:20:38 -0700</bug_when>
    <thetext>Created attachment 108106
the patch - fix license

Changed the licenses on the three new files to 2-clause BSD.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470591</commentid>
    <comment_count>16</comment_count>
      <attachid>108106</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-20 21:36:20 -0700</bug_when>
    <thetext>Comment on attachment 108106
the patch - fix license

I&apos;m getting sick of these #if ENABLE(JIT_VERBOSE_OSR) blocks, can we please add a #define JIT_OSR_LOG(...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470592</commentid>
    <comment_count>17</comment_count>
      <attachid>108106</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-20 21:52:45 -0700</bug_when>
    <thetext>Comment on attachment 108106
the patch - fix license

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

Alas i won&apos;t finish reviewing this tonight -- i&apos;m a little tired to follow the logic for keeping the jettisoned code blocks live for the right amount of time :-(

It may be worth making code block refcounted though if you think that would simplify things

&gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.h:73
&gt; +    // It would be great to use an OwnPtr&lt;CodeBlock&gt; here but that would
&gt; +    // almost certainly not work.
&gt; +    HashMap&lt;CodeBlock*, bool&gt; m_map;

Why can&apos;t we make CodeBlock RefCounted?  Then just use RefPtr&lt;CodeBlock&gt; -- a single word for the ref count vs. the hulking mass of code block doesn&apos;t seem too expensive</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470599</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 22:25:52 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 108106 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108106&amp;action=review
&gt; 
&gt; Alas i won&apos;t finish reviewing this tonight -- i&apos;m a little tired to follow the logic for keeping the jettisoned code blocks live for the right amount of time :-(
&gt; 
&gt; It may be worth making code block refcounted though if you think that would simplify things
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.h:73
&gt; &gt; +    // It would be great to use an OwnPtr&lt;CodeBlock&gt; here but that would
&gt; &gt; +    // almost certainly not work.
&gt; &gt; +    HashMap&lt;CodeBlock*, bool&gt; m_map;
&gt; 
&gt; Why can&apos;t we make CodeBlock RefCounted?  Then just use RefPtr&lt;CodeBlock&gt; -- a single word for the ref count vs. the hulking mass of code block doesn&apos;t seem too expensive

There is a benefit to the way it works now: I know when a CodeBlock gets destroyed by looking at the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470609</commentid>
    <comment_count>19</comment_count>
      <attachid>108106</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-20 22:47:25 -0700</bug_when>
    <thetext>Comment on attachment 108106
the patch - fix license

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

Some good stuff here, but the ConservativeRoots thing needs reworking, and some refactoring would improve clarity.

&gt; Source/JavaScriptCore/heap/ConservativeRoots.cpp:72
&gt; +    m_codeBlocks-&gt;mark(p);

Doing a full pointer-hashed lookup on every pointer defeats a lot of prior optimization work on conservative root gathering, which was a win at the time. It also kind of confuses the role of the ConservativeRoots class, since the ConservativeRoots class is used to gather roots form anywhere -- currently, the C stack or the JS stack -- but you&apos;re only interested in CodeBlock entries in the JS stack (and then, only in call frames).

You should rework this.

One option is just to wait and blow away all jettisoned CodeBlocks unconditionally when exiting the VM. (In some cases, this is better, since there&apos;s no guarantee that a given VM invocation that fails lots of speculations will ever run the GC.)

Another option is to do a specific scan for CodeBlocks in the JS stack if and only if the set of jettisoned CodeBlocks reaches a threshold. (This scan can become much more efficient in the future, once JC&apos;s top-of-stack work is done, and we have exact backtrace information.)

Or you can combine the two options.

&gt; Source/JavaScriptCore/heap/Heap.cpp:397
&gt; +void Heap::jettisonCodeBlock(PassOwnPtr&lt;CodeBlock&gt; codeBlock)

Since this doesn&apos;t actually do the jettisoning, I&apos;d call it &quot;addJettisonedCodeBlock&quot; instead.

&gt; Source/JavaScriptCore/heap/Heap.h:197
&gt; +        JettisonedCodeBlocks m_codeBlocks;

&quot;m_jettisonedCodeBlocks&quot;, please. Otherwise, m_codeBlocks reads like it&apos;s the set of all CodeBlocks.

&gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.cpp:42
&gt; +    HashMap&lt;CodeBlock*, bool&gt;::iterator begin = m_map.begin();
&gt; +    HashMap&lt;CodeBlock*, bool&gt;::iterator end = m_map.end();
&gt; +    for (HashMap&lt;CodeBlock*, bool&gt;::iterator iter = begin; iter != end; ++iter)
&gt; +        delete iter-&gt;first;

Would deleteAllKeys work here?

&gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.h:72
&gt; +    // It would be great to use an OwnPtr&lt;CodeBlock&gt; here but that would
&gt; +    // almost certainly not work.

Yeah, HashMap doesn&apos;t support OwnPtr.

&gt; Source/JavaScriptCore/wtf/BitVector.h:57
&gt; +        : m_bitsOrPointer(static_cast&lt;uintptr_t&gt;(1) &lt;&lt; maxInlineBits())

Since tagging bits with the inline tag comes up a lot, I&apos;d suggest a helper function: uintptr_t makeInlineBits(uintptr_t bits). So, this would turn into a call to makeInlineBits(0). The helper function can also ASSERT that bits does not already have the tag bit set.

&gt; Source/JavaScriptCore/wtf/BitVector.h:90
&gt; +    size_t bounds() const

Since this is modified by resize() and ensureSize(), &quot;size()&quot; is probably a better name for it.

&gt; Source/JavaScriptCore/wtf/BitVector.h:112
&gt; +            m_bitsOrPointer = (static_cast&lt;uintptr_t&gt;(1) &lt;&lt; maxInlineBits()) | *myOutOfLineBits-&gt;bits();

This would become &quot;makeInlineBits(*myOutOfLineBits-&gt;bits())&quot;, which seems cleaner.

&gt; Source/JavaScriptCore/wtf/BitVector.h:120
&gt; +    void clear()

I think this would read a little better as &quot;clearAll&quot;, matching Bitmap::clearAll. Our other collection types treat clear as setSize(0), so seeing clear() right after setSize(n) in client code is pretty weird.

&gt; Source/JavaScriptCore/wtf/BitVector.h:125
&gt; +            bzero(outOfLineBits()-&gt;bits(), bounds() &gt;&gt; 3);

&gt;&gt; 3 would be a little less magical as a helper function: size_t byteCount(size_t bitCount); Seems to come up a lot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470615</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 23:32:12 -0700</bug_when>
    <thetext>So this discussion uncovered a bug: JettisonedCodeBlocks traces all CodeBlocks it has, not just the ones that were marked.  I&apos;ll fix that.

But that observation also uncovers why your two proposals (blowing away JettisonedCodeBlocks on VM exit and/or having a separate mini-GC for JettisonedCodeBlocks) will cause a memory leak.

When a GC happens, we want all dead state to go away, within the limits of conservative scanning.  CodeBlocks can refer to a lot of stuff.  So we only want to scan them if they&apos;re live.  That means marking those jettisoned CodeBlocks that are found to be referenced from the RegisterFile.  Your two proposals, as I understand them, won&apos;t do this, since they both imply scanning the RegisterFile for CodeBlocks in a separate phase that is not part of the GC.  This means that the GC risks marking too much stuff, and hence, leaking memory.  A memory leak is likely to be less performant than calling JettisonedCodeBlocks::mark() in ConservativeRoots.

I see two options that are robust, and that address some of your concerns:

1) Add a markCodeBlocks(JettisonedCodeBlocks&amp;) method to RegisterFile.  This can have a fast check to see if JettisonedCodeBlocks is empty, in which case it does no work.  This is probably the easiest conceptually, and will probably perform just fine.

2) Add an enum parameter to ConservativeRoots::add() that says if you&apos;re looking at a RegisterFile.  This is the best option.  ConservativeRoots already does a linear scan over the RegisterFile.  It&apos;s most efficient to have that scan include CodeBlock detection, so we&apos;re only touching each location in the RegisterFile once during a collection.  If that enum tells ConservativeRoots::add() that it&apos;s looking at the RegisterFile, it can go and look at JettisonedCodeBlocks.  Otherwise it can ignore them.  This parameter could even be a template parameter, or something like that, to ensure that we don&apos;t do extra checks when scanning the C stack.

There&apos;s a separate question of whether or not to add the bloom filter (or similar) optimizations to JettisonedCodeBlocks.  I don&apos;t think that will be necessary.  JettisonedCodeBlocks should be small or empty.  If it&apos;s empty then in (1) we can just bail out immediately.  It&apos;s more likely to be small, but not empty, though, since the continuous optimization system does seem to want to recompile stuff in roughly half of our benchmarks.  A small set of JettisonedCodeBlocks means a small hashtable, which is likely to be no slower than a bloom filter.

If JettisonedCodeBlocks gets big, then it means that we&apos;ve already lost, since it could only happen if a lot of recompilation occurred.  My goal is to ensure that this doesn&apos;t happen.  This should already be the case, because of the exponential back-off in recompilation that is already part of this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470623</commentid>
    <comment_count>21</comment_count>
      <attachid>108112</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 00:16:17 -0700</bug_when>
    <thetext>Created attachment 108112
the patch - fix review

I addressed Geoff&apos;s review, mostly.  I believe that the GC must mark jettisoned CodeBlocks.  I changed this so that ConservativeMarker no longer marks CodeBlocks unconditionally; it will only do so if add() is passed a JettisonedCodeBlocks.  Internally this is templatized, so we could support any number of different &quot;MarkHooks&quot; in the ConservativeMarker.

All of the other issues are addressed.

I haven&apos;t addressed Oliver&apos;s two concerns (RefCounted on CodeBlock and logging).  I&apos;ll look at the logging tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470624</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-21 00:18:37 -0700</bug_when>
    <thetext>Attachment 108112 did not pass style-queue:

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

Source/JavaScriptCore/heap/ConservativeRoots.h:55:  The parameter name &quot;markHook&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/heap/ConservativeRoots.h:58:  The parameter name &quot;markHook&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 27 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>470630</commentid>
    <comment_count>23</comment_count>
      <attachid>108112</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-21 00:28:34 -0700</bug_when>
    <thetext>Comment on attachment 108112
the patch - fix review

Attachment 108112 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9774617</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470632</commentid>
    <comment_count>24</comment_count>
      <attachid>108113</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 00:33:29 -0700</bug_when>
    <thetext>Created attachment 108113
the patch - fix style, attempt to fix GTK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470635</commentid>
    <comment_count>25</comment_count>
      <attachid>108113</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-21 00:45:16 -0700</bug_when>
    <thetext>Comment on attachment 108113
the patch - fix style, attempt to fix GTK

Attachment 108113 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9773576</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470638</commentid>
    <comment_count>26</comment_count>
      <attachid>108116</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 00:49:07 -0700</bug_when>
    <thetext>Created attachment 108116
the patch - another GTK attempt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470640</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-21 00:52:46 -0700</bug_when>
    <thetext>Attachment 108116 did not pass style-queue:

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

Source/JavaScriptCore/wtf/BitVector.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 27 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>470641</commentid>
    <comment_count>28</comment_count>
      <attachid>108117</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 00:54:51 -0700</bug_when>
    <thetext>Created attachment 108117
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470928</commentid>
    <comment_count>29</comment_count>
      <attachid>108117</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-21 10:49:01 -0700</bug_when>
    <thetext>Comment on attachment 108117
the patch - fix style

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

Looks like the Windows build is still angry:

2&gt;c:\cygwin\home\buildbot\WebKit\Source\JavaScriptCore\wtf/BitVector.h(31) : fatal error C1083: Cannot open include file: &apos;strings.h&apos;: No such file or directory

&gt; CodeBlocks can refer to a lot of stuff.  So we only want to scan them if they&apos;re live.

Fair point.

&gt; It&apos;s most efficient to have that scan include CodeBlock detection, so we&apos;re only touching each location in the RegisterFile once during a collection.

Another fair point.

I&apos;m happy with the solution you came up with. (Thinking about this, it occurred to me that, long-term, if we GC-allocate CodeBlocks, the normal conservative scan will &quot;just work&quot;.)

r- for the Windows build.

&gt; Source/JavaScriptCore/heap/Heap.cpp:504
&gt; +    m_jettisonedCodeBlocks.traceCodeBlocks(visitor);

This should be followed by visitor.drain().

&gt; Source/JavaScriptCore/heap/Heap.h:103
&gt; +        void addJettisonCodeBlock(PassOwnPtr&lt;CodeBlock&gt;);

Typo: Should be &quot;addJettisonedCodeBlock&quot;, not &quot;addJettisonCodeBlock&quot;.

&gt; Source/JavaScriptCore/wtf/BitVector.h:96
&gt; +        if (m_bitsOrPointer &gt;&gt; maxInlineBits())

Should be &quot;isInline()&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471085</commentid>
    <comment_count>30</comment_count>
      <attachid>108215</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 13:05:19 -0700</bug_when>
    <thetext>Created attachment 108215
the patch - fix review, windows

Fixed the vaerious typos that Geoff found.  Fixed Windows, hopefully.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471140</commentid>
    <comment_count>31</comment_count>
      <attachid>108215</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-21 14:03:55 -0700</bug_when>
    <thetext>Comment on attachment 108215
the patch - fix review, windows

Windows build failure:
2&gt;c:\cygwin\home\buildbot\WebKit\Source\JavaScriptCore\wtf/BitVector.h(132) : error C3861: &apos;bzero&apos;: identifier not found</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471141</commentid>
    <comment_count>32</comment_count>
      <attachid>108230</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 14:04:21 -0700</bug_when>
    <thetext>Created attachment 108230
the patch - another attempt to fix Windows

Today I learned that bzero is deprecated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471149</commentid>
    <comment_count>33</comment_count>
      <attachid>108230</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-09-21 14:12:22 -0700</bug_when>
    <thetext>Comment on attachment 108230
the patch - another attempt to fix Windows

I&apos;m guessing this will build. Hope I don&apos;t jinx it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471150</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 14:13:51 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 108230 [details])
&gt; I&apos;m guessing this will build. Hope I don&apos;t jinx it.

Thanks, I&apos;ll wait until it&apos;s happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471257</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-21 16:36:51 -0700</bug_when>
    <thetext>Landed in r95681.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474155</commentid>
    <comment_count>36</comment_count>
      <attachid>108230</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-27 12:44:41 -0700</bug_when>
    <thetext>Comment on attachment 108230
the patch - another attempt to fix Windows

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

&gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.h:58
&gt; +        // This checks for both of those nasty cases in one go.
&gt; +        // 0 + 1 = 1
&gt; +        // -1 + 1 = 0
&gt; +        if (value + 1 &lt;= 1)
&gt; +            return;

Why not just value &lt; 1 ?  I guess ptr_t is unsigned?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474158</commentid>
    <comment_count>37</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-27 12:48:44 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 108230 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108230&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/JettisonedCodeBlocks.h:58
&gt; &gt; +        // This checks for both of those nasty cases in one go.
&gt; &gt; +        // 0 + 1 = 1
&gt; &gt; +        // -1 + 1 = 0
&gt; &gt; +        if (value + 1 &lt;= 1)
&gt; &gt; +            return;
&gt; 
&gt; Why not just value &lt; 1 ?  I guess ptr_t is unsigned?

value is a uintptr_t, so yes.  value &lt; 1 would only check for the zero case.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107808</attachid>
            <date>2011-09-18 23:20:03 -0700</date>
            <delta_ts>2011-09-20 14:26:30 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>recomp_patch_1.diff</filename>
            <type>text/plain</type>
            <size>39403</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU0MDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNT
LiBUaGlzIHN0aWxsIGhhcyBrbm93biBwcm9ibGVtczoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzM1CisgICAgICAgIAorICAgICAgICBJIHdpbGwg
Zml4IHRob3NlIHNlcGFyYXRlbHkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpqZXR0
aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVFbnRyeSk6Cisg
ICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3Rz
KToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cyk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAv
Q29uc2VydmF0aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAo
SlNDOjpIZWFwOjpqZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtS
b290cyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAqIGhlYXAvSGVh
cC5oOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OkpldHRpc29uZWRDb2RlQmxvY2tzKToK
KyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2Nr
cyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcyk6CisgICAgICAg
IChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MpOgor
ICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tzKToKKyAg
ICAgICAgKiBoZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6bWFyayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNU
SU9OKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpq
ZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpqZXR0aXNv
bk9wdGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlz
b25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0
aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRp
c29uT3B0aW1pemVkQ29kZUZvcik6CisKIDIwMTEtMDktMTggIERhbiBCZXJuc3RlaW4gIDxtaXR6
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmVkIFByb2ZpbGVyU2VydmVyLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDYgKzc0LDggQEAKIAkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8q
IFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICov
OyB9OwogCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRThFMTQyMDdB
NTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovOyB9OwogCQkwRkQ4MkVGNTE0MjMwNzVC
MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyogREZHSW50cmluc2lj
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZE
ODJGMkIxNDI2Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0
dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxv
Y2tzLmNwcCAqLzsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3
NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4
OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAt
ODEzLDYgKzgxNSw4IEBACiAJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRU
eXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5
cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAx
NzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHSW50cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2lj
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5
NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQx
MjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NB
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MjEsNiArMTYyNSw4IEBACiAJCTE0MkUzMTJBMTM0RkYw
QTYwMEFGQURCNSAvKiBoZWFwICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9j
a3MuY3BwICovLAorCQkJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJl
bmNlSGFydmVzdGVyLmggKi8sCiAJCQkJMEZDODE1MTQxNDA1MTE4RDAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmggKi8sCiAJCQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNw
ZWN0cnVtLmNwcCAqLywKQEAgLTI0MjMsNiArMjQyOSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFD
NTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1
NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQx
NDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHND
aGVja2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMwOTcsNiArMzEwNCw3IEBA
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyog
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIw
N0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyOCw2ICsxNDI4LDggQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9zb3VyY2VPZmZzZXQo
c291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJsZShzeW1UYWIpCiAgICAgLCBtX2FsdGVy
bmF0aXZlKGFsdGVybmF0aXZlKQorICAgICwgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKDAp
CisgICAgLCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKDApCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKQEAgLTE5MzUsNiArMTkz
NywyNyBAQCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0aERGCiAgICAgICAg
IHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCh0aGlzKTsKICAgICBy
ZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDYWxsKHRoaXMpOwogfQorCit2b2lkIFBy
b2dyYW1Db2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NF
UlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKGdsb2JhbERh
dGEpOworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7
CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoZ2xvYmFsRGF0YSwgbV9pc0NvbnN0cnVjdG9yID8g
Q29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KICNlbmRpZgogCiAjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw5ICszNjAsMTEgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVX
aXRoQXJpdHlDaGVjazsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkg
eyByZXR1cm4gbV9qaXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsg
fQogICAgICAgICBKSVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENv
ZGUuaml0VHlwZSgpOyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFi
bGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9
CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwg
U2NvcGVDaGFpbk5vZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0ds
b2JhbERhdGEmKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgp
ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAg
ICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY0NywyMyArNjQ5LDM1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBhcyB0aGlzIGlzIGNhbGxlZCBmcm9tIHRoZSBD
b2RlQmxvY2sgY29uc3RydWN0b3IuCiAgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgYXJlIHByb3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZUFm
dGVyV2FybVVwKCkgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIC8vIG9wdGltaXpl
WFlaKCkgbWV0aG9kcyBmcm9tIEpJVC1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgc3RhdGljIGlu
dDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQz
Ml90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gLTEwMDA7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGludDMy
X3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gLTUwMDA7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlu
dDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuICZtX2V4ZWN1dGVDb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoQ29kZUJsb2NrLCBtX2V4ZWN1dGVDb3VudGVyKTsgfQorCiAgICAgICAgIC8vIENh
bGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlLiBU
aGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJpZ2dl
cnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGlu
ZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQog
ICAgICAgICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAgICAgICAg
IG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50
IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC02ODcsNiAr
NzAxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9
IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICAgICAgfQogICAgICAg
ICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2Vy
IHRvIGZpcmUgb25seSBhZnRlcgorICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgorICAgICAg
ICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9leGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVw
KCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBjYXVzZSBh
biBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIHNvb24sIGJ1dAogICAgICAgICAvLyBub3Qg
bmVjZXNzYXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXphdGlv
bgogICAgICAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1pemF0aW9uIG1lYW5zIHRo
YXQgYWxsIGNhbGxzIGFyZQpAQCAtNzEwLDkgKzczMSw0NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAwOwogICAgICAgICB9CiAgICAgICAgIAor
ICAgICAgICBpbnQzMl90IGV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRl
Q291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0cmFj
a3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gZGVjaWRlIHdo
ZW4gdG8gcmVvcHRpbWl6ZS4gSXQncyBpbnRlcmVzdGluZyB0byBub3RlIHRoYXQgdGhlc2UKKyAg
ICAgICAgLy8gY291bnRlcnMgbWF5IG92ZXJmbG93IHdpdGhvdXQgYW55IHByb3RlY3Rpb24uIFRo
ZSBzdWNjZXNzCisgICAgICAgIC8vIGNvdW50ZXIgd2lsbCBvdmVyZmxvdyBiZWZvcmUgdGhlIGZh
aWwgb25lIGRvZXMsIGJlY3Vhc2UgdGhlCisgICAgICAgIC8vIGZhaWwgb25lIGlzIHVzZWQgYXMg
YSB0cmlnZ2VyIHRvIHJlb3B0aW1pemUuIFNvIHRoZSB3b3JzdCBjYXNlCisgICAgICAgIC8vIGlz
IHRoYXQgdGhlIHN1Y2Nlc3MgY291bnRlciBvdmVyZmxvd3MgYW5kIHdlIHJlb3B0aW1pemUgd2l0
aG91dAorICAgICAgICAvLyBuZWVkaW5nIHRvLiBCdXQgdGhpcyBpcyBoYXJtbGVzcy4gSWYgYSBt
ZXRob2QgcmVhbGx5IGRpZAorICAgICAgICAvLyBleGVjdXRlIDJeMzIgdGltZXMgdGhlbiBjb21w
aWxpbmcgaXQgYWdhaW4gcHJvYmFibHkgd29uJ3QgaHVydAorICAgICAgICAvLyBhbnlvbmUuCisg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICBzdGF0aWMgdW5zaWduZWQgZGVzaXJlZFN1Y2Nlc3NGYWls
UmF0aW8oKSB7IHJldHVybiAxMDsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG51bWJlciBv
ZiBmYWlsdXJlcyB0aGF0IHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIHJhdGlvLgorICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAxMDsgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpOworICAgICAgICB9
CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91
bGRPcHRpbWl6ZU5vdygpOwpAQCAtODEwLDYgKzg2OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7CiAKICAgICAgICAg
aW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOworICAgICAgICB1aW50MzJfdCBtX3NwZWN1bGF0aXZl
U3VjY2Vzc0NvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVGYWlsQ291bnRl
cjsKICAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsKIAogICAgICAg
ICBzdHJ1Y3QgUmFyZURhdGEgewpAQCAtODY4LDYgKzkyOCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
I2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0
KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBD
b2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxl
V2l0aERGRygpOwogI2VuZGlmCkBAIC04OTQsNiArOTU1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENv
ZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHKCk7CiAjZW5kaWYKQEAgLTkyMSw2ICs5ODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
ZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29k
ZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdp
dGhERkcoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgsOSBA
QCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgLy8gICAgICAg
ICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVudHJ5
IGlzCiAgICAgLy8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgogICAgIC8vCisgICAg
Ly8gICAgIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBub3Qg
cmVzdWx0IGluIHRoZSBjb2RlCisgICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxvb3As
IHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCiAgICAg
Ly8gICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291bnRl
ciB0bwogICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuIFRo
aXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgogICAgIC8vICAgICAoYSkgYW5kIChiKSwg
c2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkgZm9y
CkBAIC00MTUsMTEgKzQxOCw0MCBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVX
aXRoT1NSCiAgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3IGxv
b3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKICAgICAvLyAgICAgYmVjb21lIG5vbi1u
ZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50cnkK
ICAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhlIG9s
ZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJp
bmcgKGEpIGFuZCAoYikuIFRoaXMgaGV1cmlzdGljIG1heSBuZWVkIHRvIGJlCi0gICAgLy8gICAg
IHJldGhvdWdodCBpbiB0aGUgZnV0dXJlLCBwYXJ0aWN1bGFybHkgaWYgd2Ugc3VwcG9ydCByZW9w
dGltaXppbmcgY29kZQotICAgIC8vICAgICB3aXRoIG5ldyB2YWx1ZSBwcm9maWxlcyBnYXRoZXJl
ZCBmcm9tIGNvZGUgdGhhdCBkaWQgT1NSIGV4aXQuCisgICAgLy8gICAgIGdvb2Qgam9iIG9mIGVu
c3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCksCisg
ICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0aGUg
ZXhlY3V0ZSBjb3VudGVyLgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBudW1i
ZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vICAgICBs
YXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2VzcyBy
YXRlKSwgYW5kIGlmCisgICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3VnaCBu
dW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gICAgIGNvdW50ZXIg
dG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vICAgICBjb3VudGVy
VmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIGxvYWQzMihBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291
bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSwgR1BS
SW5mbzo6cmVnVDEpOworICAgIGFkZDMyKEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7CisgICAg
YWRkMzIoSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpy
ZWdUMiwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSkpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFkZHJlc3Mo
R1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKCkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgSnVtcCBmZXdGYWlscyA9IGJy
YW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEltbTMyKENvZGVCbG9jazo6bGFy
Z2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKENvZGVCbG9jazo6ZGVz
aXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7
CiAgICAgCi0gICAgc3RvcmUzMihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291
bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpKSwgY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCktPmFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkpOworICAgIEp1bXAgbG93RmFpbFJhdGUg
PSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7
CisgICAgCisgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIHN0b3Jl
MzIoSW1tMzIoQ29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9u
KCkpLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNv
dW50ZXIoKSkpOworICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBm
ZXdGYWlscy5saW5rKHRoaXMpOworICAgIGxvd0ZhaWxSYXRlLmxpbmsodGhpcyk7CisgICAgCisg
ICAgc3RvcmUzMihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgCisgICAgZG9uZUFkanVz
dGluZy5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIDEyKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhl
IGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCkBAIC00ODEsNiArNTEz
LDggQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKICAgICAvLyBib3RoIG5vcm1h
bCByZXR1cm4gY29kZSBhbmQgd2hlbiBqdW1waW5nIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyKS4K
ICAgICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDIpOwogICAg
IGVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMiwgUmVnaXN0ZXJGaWxlOjpS
ZXR1cm5QQyk7CisgICAgCisgICAgYWRkUHRyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoY29k
ZUJsb2NrKCktPmFkZHJlc3NPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwogfQogCiB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3Ig
ZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmlu
ZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMAorI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZF
UkJPU0UgMQogLy8gRW1pdCBsb2dnaW5nIGZvciBPU1IgZXhpdCB2YWx1ZSByZWNvdmVyaWVzIGF0
IGV2ZXJ5IG5vZGUsIG5vdCBqdXN0IG5vZGVzIHRoYXQKIC8vIGFjdHVhbGx5IGhhcyBzcGVjdWxh
dGlvbiBjaGVja3MuCiAjZGVmaW5lIEVOQUJMRV9ERkdfVkVSQk9TRV9WQUxVRV9SRUNPVkVSSUVT
IDAKQEAgLTUwLDcgKzUwLDcgQEAKIC8vIEVtaXQgYSBicmVha3BvaW50IGludG8gdGhlIHNwZWN1
bGF0aW9uIGZhaWx1cmUgY29kZS4KICNkZWZpbmUgRU5BQkxFX0RGR19KSVRfQlJFQUtfT05fU1BF
Q1VMQVRJT05fRkFJTFVSRSAwCiAvLyBMb2cgZXZlcnkgc3BlY3VsYXRpb24gZmFpbHVyZS4KLSNk
ZWZpbmUgRU5BQkxFX0RGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAorI2RlZmluZSBF
TkFCTEVfREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSAxCiAvLyBEaXNhYmxlIHRoZSBE
RkcgSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19E
RUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIEVuYWJsZSBPU1IgZW50cnkgZnJvbSBiYXNlbGluZSBK
SVQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZl
Um9vdHMuY3BwCShyZXZpc2lvbiA5NTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNp
bmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogaW5s
aW5lIGJvb2wgaXNQb2ludGVyQWxpZ25lZCh2b2lkKiBwKQpAQCAtMzMsNiArMzUsMjcgQEAgaW5s
aW5lIGJvb2wgaXNQb2ludGVyQWxpZ25lZCh2b2lkKiBwKQogICAgIHJldHVybiAhKChpbnRwdHJf
dCkocCkgJiAoc2l6ZW9mKGNoYXIqKSAtIDEpKTsKIH0KIAorQ29uc2VydmF0aXZlUm9vdHM6OkNv
bnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiBibG9ja3MsIEpldHRpc29uZWRD
b2RlQmxvY2tzKiBjb2RlQmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQorICAg
ICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQorICAgICwgbV9i
bG9ja3MoYmxvY2tzKQorICAgICwgbV9jb2RlQmxvY2tzKGNvZGVCbG9ja3MpCit7CisgICAgaWYg
KCFtX2NvZGVCbG9ja3MpIHsKKyAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgSmV0dGlzb25lZENv
ZGVCbG9ja3Mgc3RydWN0dXJlLCBzbyB0aGF0IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoKQorICAg
ICAgICAvLyBkb2Vzbid0IGhhdmUgdG8gZG8gYW55IG51bGwgY2hlY2tzIG9uIG1fY29kZUJsb2Nr
cy4KKyAgICAgICAgbV9teUNvZGVCbG9ja3MgPSBhZG9wdFB0cihuZXcgSmV0dGlzb25lZENvZGVC
bG9ja3MoKSk7CisgICAgICAgIG1fY29kZUJsb2NrcyA9IG1fbXlDb2RlQmxvY2tzLmdldCgpOwor
ICAgIH0KK30KKworQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCit7Cisg
ICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRl
Y29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsK
K30KKwogdm9pZCBDb25zZXJ2YXRpdmVSb290czo6Z3JvdygpCiB7CiAgICAgc2l6ZV90IG5ld0Nh
cGFjaXR5ID0gbV9jYXBhY2l0eSA9PSBpbmxpbmVDYXBhY2l0eSA/IG5vbklubGluZUNhcGFjaXR5
IDogbV9jYXBhY2l0eSAqIDI7CkBAIC00Niw2ICs2OSw4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9v
dHM6Omdyb3coKQogCiBpbmxpbmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIHAs
IFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIpCiB7CisgICAgbV9jb2RlQmxvY2tzLT5tYXJrKHApOwor
ICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3Io
cCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2FuZGlk
YXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxvY2tzLT5zZXQoKS5j
b250YWlucyhjYW5kaWRhdGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29uc2VydmF0aXZlUm9vdHMuaAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
MSArMzMsMTIgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKZXR0
aXNvbmVkQ29kZUJsb2NrczsKIGNsYXNzIEhlYXA7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3Rz
IHsKIHB1YmxpYzoKLSAgICBDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCop
OworICAgIENvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiwgSmV0dGlzb25l
ZENvZGVCbG9ja3MqIGNvZGVCbG9ja3MgPSAwKTsKICAgICB+Q29uc2VydmF0aXZlUm9vdHMoKTsK
IAogICAgIHZvaWQgYWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBlbmQpOwpAQCAtNTYsMjMgKzU3LDEx
IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9jYXBhY2l0eTsK
ICAgICBjb25zdCBNYXJrZWRCbG9ja1NldCogbV9ibG9ja3M7CisgICAgSmV0dGlzb25lZENvZGVC
bG9ja3MqIG1fY29kZUJsb2NrczsKKyAgICBPd25QdHI8SmV0dGlzb25lZENvZGVCbG9ja3M+IG1f
bXlDb2RlQmxvY2tzOwogICAgIEpTQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07
CiB9OwogCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0
IE1hcmtlZEJsb2NrU2V0KiBibG9ja3MpCi0gICAgOiBtX3Jvb3RzKG1faW5saW5lUm9vdHMpCi0g
ICAgLCBtX3NpemUoMCkKLSAgICAsIG1fY2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkpCi0gICAgLCBt
X2Jsb2NrcyhibG9ja3MpCi17Ci19Ci0KLWlubGluZSBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKLXsKLSAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQotICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOwotfQotCiBpbmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3Rz
OjpzaXplKCkKIHsKICAgICByZXR1cm4gbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Niw2ICs0ODYsMTEgQEAgdm9pZCBIZWFw
OjptYXJrUHJvdGVjdGVkT2JqZWN0cyhIZWFwUm9vdAogICAgICAgICBoZWFwUm9vdFZpc2l0b3Iu
dmlzaXQoJml0LT5maXJzdCk7CiB9CiAKK3ZvaWQgSGVhcDo6amV0dGlzb25Db2RlQmxvY2soUGFz
c093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBtX2NvZGVCbG9ja3MuYWRkQ29k
ZUJsb2NrKGNvZGVCbG9jayk7Cit9CisKIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZl
Y3RvcjxWYWx1ZVN0cmluZ1BhaXI+KiB0ZW1wVmVjdG9yKQogewogICAgIG1fdGVtcFNvcnRpbmdW
ZWN0b3JzLmFwcGVuZCh0ZW1wVmVjdG9yKTsKQEAgLTU0OCwxMCArNTUzLDEyIEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKCkKICAgICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwog
CiAgICAgdm9pZCogZHVtbXk7Ci0KKyAgICAKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcygp
OworICAgIAogICAgIC8vIFdlIGdhdGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNsZWFy
aW5nIG1hcmsgYml0cyBiZWNhdXNlIGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1c2Vz
IHRoZSBtYXJrIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFsaWQu
Ci0gICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX2Jsb2Nrcyk7Cisg
ICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX2Jsb2NrcywgJm1fY29k
ZUJsb2Nrcyk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyht
YWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7CiAKICAgICBDb25zZXJ2YXRpdmVSb290cyByZWdp
c3RlckZpbGVSb290cygmbV9ibG9ja3MpOwpAQCAtNTYxLDcgKzU2OCw3IEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKCkKIAogICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gbV9zbG90VmlzaXRvcjsK
ICAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNpdG9yKHZpc2l0b3IpOwotCisgICAgCiAg
ICAgdmlzaXRvci5hcHBlbmQobWFjaGluZVRocmVhZFJvb3RzKTsKICAgICB2aXNpdG9yLmRyYWlu
KCk7CiAKQEAgLTU4NSw2ICs1OTIsOCBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAKICAgICBt
X2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRvcik7CiAgICAgdmlzaXRvci5kcmFpbigp
OworICAgIAorICAgIG1fY29kZUJsb2Nrcy50cmFjZUNvZGVCbG9ja3ModmlzaXRvcik7CiAKICAg
ICAvLyBXZWFrIGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQgbGFzdCwgYmVjYXVzZSB0aGVpciBvd25l
cnMgdXNlIHRoZSBzZXQgb2YKICAgICAvLyBvcGFxdWUgcm9vdHMgdG8gZGV0ZXJtaW5lIHJlYWNo
YWJpbGl0eS4KQEAgLTY4MCw2ICs2ODksNyBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dn
bGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVfR0NfTUFSS0VEKCk7CiAgICAgCiAgICAg
cmVzZXRBbGxvY2F0b3IoKTsKKyAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRDb2RlQmxv
Y2tzKCk7CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0gRG9Td2VlcCkgewogICAgICAgICBzd2Vl
cCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTUzOTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDYgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkhhbmRsZUhlYXAuaCIKICNpbmNsdWRlICJIYW5kbGVT
dGFjay5oIgorI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiTWFy
a2VkQmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUgIk5ld1Nw
YWNlLmgiCkBAIC05OCw2ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
cHJvdGVjdChKU1ZhbHVlKTsKICAgICAgICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRy
dWUgd2hlbiB0aGUgcHJvdGVjdCBjb3VudCBkcm9wcyB0byAwLgorICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbkNvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKTsK
IAogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBzaXplX3QgY2FwYWNpdHkoKTsKQEAg
LTIwNyw2ICsyMTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU2xvdFZpc2l0b3IgbV9z
bG90VmlzaXRvcjsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhh
bmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CisgICAgICAgIEpldHRpc29uZWRDb2RlQmxvY2tzIG1f
Y29kZUJsb2NrczsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworSmV0dGlzb25lZENvZGVCbG9ja3M6OkpldHRpc29uZWRDb2Rl
QmxvY2tzKCkgeyB9CisKK0pldHRpc29uZWRDb2RlQmxvY2tzOjp+SmV0dGlzb25lZENvZGVCbG9j
a3MoKQoreworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0g
bV9tYXAuYmVnaW4oKTsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBl
bmQgPSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0
ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgZGVsZXRl
IGl0ZXItPmZpcnN0OworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxv
Y2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQobV9tYXAu
ZmluZChjb2RlQmxvY2suZ2V0KCkpID09IG1fbWFwLmVuZCgpKTsKKyAgICAKKyAgICBtX21hcC5h
ZGQoY29kZUJsb2NrLmxlYWtQdHIoKSwgZmFsc2UpOworfQorCit2b2lkIEpldHRpc29uZWRDb2Rl
QmxvY2tzOjpjbGVhck1hcmtzKCkKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+Ojpp
dGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBi
b29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVC
bG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgICAgIGl0ZXItPnNlY29uZCA9IGZhbHNlOworfQorCit2b2lkIEpldHRpc29uZWRDb2Rl
QmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKQoreworICAgIFZlY3RvcjxDb2RlQmxv
Y2sqPiB0b1JlbW92ZTsKKyAgICAKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29s
Pjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9j
ayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsK
KyAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQo
aXRlci0+Zmlyc3QpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV9tYXAucmVtb3ZlKHRvUmVtb3ZlW2ld
KTsKKyAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ldOworICAgIH0KK30KKwordm9pZCBKZXR0aXNv
bmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikK
K3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFw
LmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0g
bV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRv
ciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPmZpcnN0
LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2Rl
QmxvY2tzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0
aXNvbmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBKZXR0aXNvbmVkQ29kZUJs
b2Nrc19oCisjZGVmaW5lIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKworI2luY2x1ZGUgPHd0Zi9G
YXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xh
c3MgU2xvdFZpc2l0b3I7CisKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsgLy8gT25seSBtYWxsb2MnZCBpbiBDb25zZXJ2YXRpdmVSb290
cworcHVibGljOgorICAgIEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgfkpldHRp
c29uZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgdm9pZCBhZGRDb2RlQmxvY2soUGFzc093blB0
cjxDb2RlQmxvY2s+KTsKKyAgICAKKyAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAKKyAgICB2
b2lkIG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgSGFzaE1h
cDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGljX2Nh
c3Q8Q29kZUJsb2NrKj4oY2FuZGlkYXRlQ29kZUJsb2NrKSk7CisgICAgICAgIGlmIChpdGVyID09
IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpdGVyLT5zZWNvbmQg
PSB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29kZUJsb2Nrcygp
OworICAgIAorICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7CisKK3ByaXZh
dGU6CisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgdG8gdXNlIGFuIE93blB0cjxDb2RlQmxvY2s+
IGhlcmUgYnV0IHRoYXQgd291bGQKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3b3JrLgor
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5NTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUo
SklUKQogCiAvLyBWZXJib3NlIGxvZ2dpbmcgZm9yIE9TUi1yZWxhdGVkIGNvZGUuCi0jZGVmaW5l
IEVOQUJMRV9KSVRfVkVSQk9TRV9PU1IgMAorI2RlZmluZSBFTkFCTEVfSklUX1ZFUkJPU0VfT1NS
IDEKIAogLy8gV2UndmUgcnVuIGludG8gc29tZSBwcm9ibGVtcyB3aGVyZSBjaGFuZ2luZyB0aGUg
c2l6ZSBvZiB0aGUgY2xhc3MgSklUIGxlYWRzIHRvCiAvLyBwZXJmb3JtYW5jZSBmbHVjdHVhdGlv
bnMuICBUcnkgZm9yY2luZyBhbGlnbm1lbnQgaW4gYW4gYXR0ZW1wdCB0byBzdGFiYWxpemUgdGhp
cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5
NTM5OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTE0LDcgKzE5MTQsMjMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3B0aW1pemVfZnJvbQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2Rl
QmxvY2soKTsKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gc3RhY2tGcmFtZS5hcmdzWzBd
LmludDMyKCk7CiAKLSAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQo
KSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVkIG9w
dGltaXplX2Zyb21fbG9vcCB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWRcbiIsIGNvZGVCbG9jay0+
ZXhlY3V0ZUNvdW50ZXIoKSk7CisjZW5kaWYKKworICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGlt
aXplZFJlcGxhY2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAg
ICBwcmludGYoIkNvbnNpZGVyaW5nIGxvb3AgT1NSIGludG8gJXAoJXApIHdpdGggc3VjY2Vzcy9m
YWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisjZW5kaWYKKyAg
ICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkT3B0aW1pemVOb3coKSkg
eworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdn
ZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpLT5qZXR0aXNvbihjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAg
ICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5z
aG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAg
ICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVj
YXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIiwgY29kZUJsb2NrKTsKQEAgLTE5NjAs
NiArMTk3NiwyNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAg
ICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBzdWNjZWVkZWQsIE9TUiBmYWlsZWQu
XG4iLCBjb2RlQmxvY2spOwogI2VuZGlmCiAKKyAgICAvLyBDb3VudCB0aGUgT1NSIGZhaWx1cmUg
YXMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhhcHBlbnMgYSBsb3QsIHRoZW4KKyAg
ICAvLyByZW9wdGltaXplLgorICAgIGNvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvbkZhaWx1cmUo
KTsKKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiRW5jb3Vu
dGVyZWQgbG9vcCBPU1IgZmFpbHVyZSBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8l
dS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAo
Y29kZUJsb2NrLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gQ29kZUJsb2NrOjpsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpCisgICAgICAgICYmIGNvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6
ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJU
cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBPU1IgZmFp
bCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5kaWYKKyAg
ICAgICAgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5qZXR0aXNvbihjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBp
dCBtaWdodCBzdWNjZWVkIG5leHQgdGltZSEgTGV0IHRoZSBjb2RlIHJ1biBhIGJpdAogICAgIC8v
IGxvbmdlciBhbmQgdGhlbiB0cnkgYWdhaW4uCiAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVy
V2FybVVwKCk7CkBAIC0xOTcyLDggKzIwMDYsMjQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemVfZnJvbQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwogICAgIAotICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkp
CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1p
emVfZnJvbV9yZXQgd2l0aCBleGVjdXRlQ291bnRlciA9ICVkXG4iLCBjb2RlQmxvY2stPmV4ZWN1
dGVDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRS
ZXBsYWNlbWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJp
bnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9T
RV9PU1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2Yg
JXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCkpOworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPmpldHRp
c29uKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+b3B0
aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOworICAgIH0K
ICAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTUzOTkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQs
MTggQEAgREZHOjpJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmlucwogfQogI2VuZGlm
CiAKKy8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tzLgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPFQ+JiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJU
KGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBB
U1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBPd25QdHI8VD4gY29kZUJsb2Nr
VG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgY29kZUJsb2NrID0gc3RhdGlj
X3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRpdmUo
KSk7CisgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAg
IGdsb2JhbERhdGEuaGVhcC5qZXR0aXNvbkNvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENv
ZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKK30KKwogY29uc3QgQ2xh
c3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlNjcmlwdEV4ZWN1dGFibGUiLCAm
RXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCB9OwogCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4
ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6
OnNfaW5mbywgMCwgMCB9OwpAQCAtMjExLDYgKzIyMywxMyBAQCBKU09iamVjdCogRXZhbEV4ZWN1
dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRXZhbEV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7
CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrKTsKKyAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CisgICAg
QVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQorCiB2b2lkIEV2YWxF
eGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7CkBAIC0zMzAsNiArMzQ5LDEz
IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICByZXR1cm4g
MDsKIH0KIAordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxE
YXRhLCBtX3Byb2dyYW1Db2RlQmxvY2spOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dy
YW1Db2RlQmxvY2stPmdldEpJVENvZGUoKTsKKyAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxX
aXRoQXJpdHlDaGVjayk7Cit9CisKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnVubGlua0NhbGxz
KCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtNTMzLDYgKzU1OSwyMCBAQCBKU09iamVjdCogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2Nv
ZGVCbG9ja0ZvckNhbGwpOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNh
bGwtPmdldEpJVENvZGUoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBt
X2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpOworfQorCit2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxE
YXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0
ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVENvZGUoKTsKKyAgICBtX2ppdENvZGVG
b3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk1Mzk5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsK
IAogICAgICAgICBFdmFsQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsK
QEAgLTM5Miw2ICszOTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7
CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERh
dGEmKTsKIAogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAg
ICAgICAgIHsKQEAgLTQ3NSw2ICs0NzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEm
KTsKIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgICAgIHsK
QEAgLTQ5OCw2ICs1MDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3Bl
Q2hhaW5Ob2RlKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ29uc3RydWN0KCkgY29uc3QKICAgICAgICAgewpAQCAtNTM4LDYgKzU0NiwxNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3Ry
dWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKSAKKyAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENv
ZGVGb3JDYWxsKGdsb2JhbERhdGEpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICAgICAgamV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KGdsb2JhbERhdGEpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGtpbmQg
PT0gQ29kZUZvckNhbGwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108051</attachid>
            <date>2011-09-20 14:26:30 -0700</date>
            <delta_ts>2011-09-20 19:41:18 -0700</delta_ts>
            <desc>work in progress - ruggedized it some more</desc>
            <filename>recomp_patch_2.diff</filename>
            <type>text/plain</type>
            <size>59068</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXT1JLIElOIFBST0dSRVNT
LiBUaGlzIHN0aWxsIGhhcyBrbm93biBwcm9ibGVtcy4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkV2YWxDb2Rl
QmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmpldHRp
c29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3Bl
Y3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGls
ZUVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGhlYXAvQ29uc2Vy
dmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6Q29uc2Vy
dmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZh
dGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmFkZCk6CisgICAg
ICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oOgorICAgICAgICAqIGhlYXAvSGVhcC5jcHA6
CisgICAgICAgIChKU0M6OkhlYXA6OmpldHRpc29uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6CisgICAgICAg
ICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENv
ZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6fkpldHRpc29u
ZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmFkZENv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpjbGVhck1hcmtz
KToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2VkQ29k
ZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0cmFjZUNvZGVC
bG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAgICAgKiBqaXQv
SklULmg6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5F
X1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAg
ICAgIChKU0M6OmpldHRpc29uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFi
bGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCk6CisgICAg
ICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0
YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKToKKwogMjAxMS0wOS0yMCAgQ2hhbmdTZW9r
IE9oICA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CiAKICAgICAgICAgW0dUS10gcmVxdWVzdEFuaW1h
dGlvbkZyYW1lIHN1cHBvcnQgZm9yIGd0ayBwb3J0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQyOCw3ICsxNDI4LDEwIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG8KICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNldCkKICAgICAsIG1fc3ltYm9sVGFi
bGUoc3ltVGFiKQogICAgICwgbV9hbHRlcm5hdGl2ZShhbHRlcm5hdGl2ZSkKKyAgICAsIG1fc3Bl
Y3VsYXRpdmVTdWNjZXNzQ291bnRlcigwKQorICAgICwgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcigwKQorICAgICwgbV9yZW9wdGlt
aXphdGlvblJldHJ5Q291bnRlcigwKQogewogICAgIEFTU0VSVChtX3NvdXJjZSk7CiAgICAgCkBA
IC0xOTM1LDYgKzE5MzgsMjcgQEAgYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FuQ29tcGlsZVdp
dGhERgogICAgICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3Qo
dGhpcyk7CiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ2FsbCh0aGlzKTsK
IH0KKwordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCit7CisgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8
UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVk
Q29kZShnbG9iYWxEYXRhKTsKK30KKwordm9pZCBFdmFsQ29kZUJsb2NrOjpqZXR0aXNvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRD
b2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Cisg
ICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRp
c29uT3B0aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKK30KKwordm9pZCBGdW5jdGlvbkNvZGVCbG9j
azo6amV0dGlzb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRK
SVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJl
cGxhY2VtZW50KCkpOworICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKGdsb2JhbERhdGEsIG1faXND
b25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Cit9CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKQEAgLTE5NzQsOCArMTk5OCw4IEBAIGJvb2wg
Q29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAgICAgcHJpbnRmKCJQcm9maWxlIGhvdG5l
c3M6ICVsZiwgJWxmXG4iLCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCAoZG91YmxlKW51bWJlck9m
U2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJl
ck9mVmFsdWVQcm9maWxlcygpKTsKICNlbmRpZgogCi0gICAgaWYgKChkb3VibGUpbnVtYmVyT2ZM
aXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgPj0gMC43NQotICAgICAgICAmJiAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmls
ZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxl
cygpID49IDAuNSkKKyAgICBpZiAoKG51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID09
IDAuMCB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IDAuNzUpCisgICAgICAgICYmIChudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSA9PSAwLjAgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblBy
b2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJv
ZmlsZXMoKSA+PSAwLjUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcisrOwpAQCAtMjAxNCw3ICsyMDM4LDEyIEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiAgICAgfQogICAgIGZwcmludGYoc3RkZXJyLCAiU2xv
d0Nhc2VQcm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1iZXJPZlNsb3dDYXNlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAgICAgIFNsb3dDYXNl
UHJvZmlsZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAgUmFyZUNhc2VQ
cm9maWxlKiBwcm9maWxlID0gc2xvd0Nhc2VQcm9maWxlKGkpOworICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0LCBwcm9m
aWxlLT5tX2NvdW50ZXIpOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWNpYWxGYXN0
Q2FzZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mU3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMoKTsgKytpKSB7CisgICAgICAgIFJh
cmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUoaSk7CiAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNv
ZGVPZmZzZXQsIHByb2ZpbGUtPm1fY291bnRlcik7CiAgICAgfQogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTU1NjcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2luY2x1ZGUgIkNvbXBh
Y3RKSVRDb2RlTWFwLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJFdmFs
Q29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRDb2Rl
LmgiCkBAIC0zMzMsNiArMzM0LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAg
ICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogYXBwZW5kREZHT1NSRW50cnlEYXRhKHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSBlbnRyeTsKKyAgICAgICAgICAgIGVudHJ5Lm1f
Ynl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBlbnRyeS5tX21hY2hp
bmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgICAgICBtX2RmZ09TUkVu
dHJ5LmFwcGVuZChlbnRyeSk7CisgICAgICAgICAgICByZXR1cm4gJm1fZGZnT1NSRW50cnkubGFz
dCgpOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mREZHT1NSRW50cmllcygp
IGNvbnN0IHsgcmV0dXJuIG1fZGZnT1NSRW50cnkuc2l6ZSgpOyB9CisgICAgICAgIERGRzo6T1NS
RW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGEodW5zaWduZWQgaSkgeyByZXR1cm4gJm1fZGZnT1NS
RW50cnlbaV07IH0KKyAgICAgICAgREZHOjpPU1JFbnRyeURhdGEqIGRmZ09TUkVudHJ5RGF0YUZv
ckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaDxERkc6Ok9TUkVudHJ5RGF0YSwgdW5zaWduZWQsIERG
Rzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleD4obV9kZmdPU1JFbnRyeS5iZWdpbigpLCBt
X2RmZ09TUkVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIH0KICNlbmRpZgog
CiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQpAQCAtMzYwLDkgKzM3NiwxMSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29kZVdpdGhBcml0
eUNoZWNrOwogICAgICAgICB9CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVy
biBtX2ppdENvZGU7IH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldEpJVENvZGVX
aXRoQXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOyB9CiAgICAg
ICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIG1faml0Q29kZS5qaXRU
eXBlKCk7IH0KICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9y
eSgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5KCk7IH0KICAgICAg
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0
YSYpID0gMDsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7CiAgICAgICAgIGJv
b2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQpAQCAtNjg1LDExICs3MDMsMzcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIC8vIHRyaWdnZXIgZmlsZXMuIEFsbCBDb2RlQmxvY2tzIHN0YXJ0
IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKICAgICAgICAgLy8gYXMgdGhpcyBpcyBj
YWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgogICAgICAgICAKKyAgICAgICAg
Ly8gV2hlbiB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVzLCB3ZSB0cmln
Z2VyIGEKKyAgICAgICAgLy8gcmVvcHRpbWl6YXRpb24uIEJ1dCBlYWNoIHRpbWUsIHdlIGluY3Jl
YXNlIHRoZSBvcHRpbWl6YXRpb24gdHJpZ2dlcgorICAgICAgICAvLyB0byBhdm9pZCB0aHJhc2hp
bmcuCisgICAgICAgIHVuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIgPD0gMTgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY291bnRSZW9wdGltaXphdGlv
bigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIr
KzsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID4gMTgpCisg
ICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IDE4OworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHRv
IHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZUFmdGVyV2FybVVwKCkgZnJvbSBK
SVQtZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIC8vIG9wdGltaXplWFlaKCkgbWV0aG9kcyBmcm9t
IEpJVC1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgc3RhdGljIGludDMyX3QgY291bnRlclZhbHVl
Rm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLTEw
MDA7CisgICAgICAgICAgICByZXR1cm4gLTEwMDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAtNTAwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpbnQzMl90KiBhZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpCkBAIC02OTcs
MTIgKzc0MSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAmbV9leGVj
dXRlQ291bnRlcjsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVC
bG9jaywgbV9leGVjdXRlQ291bnRlcik7IH0KKworICAgICAgICBpbnQzMl90IGV4ZWN1dGVDb3Vu
dGVyKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9v
cHRpbWl6YXRpb25EZWxheUNvdW50ZXI7IH0KKyAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhp
cyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlLiBUaGlzIGlz
CiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJpZ2dlcnMgYXJl
IHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGluZyBiYXNl
bGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAgICAgICAgIG1fZXhl
Y3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGlt
aXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC03MjYsNiArNzc2LDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICAgICAgfQogICAgICAgICAKKyAg
ICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZp
cmUgb25seSBhZnRlcgorICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgorICAgICAgICB2b2lk
IG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9leGVj
dXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBjYXVzZSBhbiBvcHRp
bWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIHNvb24sIGJ1dAogICAgICAgICAvLyBub3QgbmVjZXNz
YXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXphdGlvbgogICAg
ICAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1pemF0aW9uIG1lYW5zIHRoYXQgYWxs
IGNhbGxzIGFyZQpAQCAtNzQ2LDE4ICs4MDMsNzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplU29vbigpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAwOworICAgICAgICAg
ICAgbV9leGVjdXRlQ291bnRlciA9IC0xMDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHNwZWN1bGF0aXZlIEpJVCB0
cmFja3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAgLy8gZGVjaWRl
IHdoZW4gdG8gcmVvcHRpbWl6ZS4gSXQncyBpbnRlcmVzdGluZyB0byBub3RlIHRoYXQgdGhlc2UK
KyAgICAgICAgLy8gY291bnRlcnMgbWF5IG92ZXJmbG93IHdpdGhvdXQgYW55IHByb3RlY3Rpb24u
IFRoZSBzdWNjZXNzCisgICAgICAgIC8vIGNvdW50ZXIgd2lsbCBvdmVyZmxvdyBiZWZvcmUgdGhl
IGZhaWwgb25lIGRvZXMsIGJlY3Vhc2UgdGhlCisgICAgICAgIC8vIGZhaWwgb25lIGlzIHVzZWQg
YXMgYSB0cmlnZ2VyIHRvIHJlb3B0aW1pemUuIFNvIHRoZSB3b3JzdCBjYXNlCisgICAgICAgIC8v
IGlzIHRoYXQgdGhlIHN1Y2Nlc3MgY291bnRlciBvdmVyZmxvd3MgYW5kIHdlIHJlb3B0aW1pemUg
d2l0aG91dAorICAgICAgICAvLyBuZWVkaW5nIHRvLiBCdXQgdGhpcyBpcyBoYXJtbGVzcy4gSWYg
YSBtZXRob2QgcmVhbGx5IGRpZAorICAgICAgICAvLyBleGVjdXRlIDJeMzIgdGltZXMgdGhlbiBj
b21waWxpbmcgaXQgYWdhaW4gcHJvYmFibHkgd29uJ3QgaHVydAorICAgICAgICAvLyBhbnlvbmUu
CisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25TdWNjZXNzKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKys7CiAgICAgICAg
IH0KICAgICAgICAgCisgICAgICAgIHZvaWQgY291bnRTcGVjdWxhdGlvbkZhaWx1cmUoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIrKzsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdWludDMyX3Qgc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsgfQorICAgICAgICB1
aW50MzJfdCBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyOyB9CisgICAgICAgIAorICAgICAgICB1aW50MzJfdCogYWRkcmVzc09m
U3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpIHsgcmV0dXJuICZtX3NwZWN1bGF0aXZlU3VjY2Vz
c0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1bGF0aXZlRmFpbENv
dW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOyB9CisgICAgICAgIAor
ICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRl
cigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc3BlY3VsYXRpdmVTdWNj
ZXNzQ291bnRlcik7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3Nw
ZWN1bGF0aXZlRmFpbENvdW50ZXIpOyB9CisgICAgICAgIAogICAgICAgICAvLyBUaGUgYW1vdW50
IGJ5IHdoaWNoIHRoZSBKSVQgd2lsbCBpbmNyZW1lbnQgbV9leGVjdXRlQ291bnRlci4KICAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGV4ZWN1dGVDb3VudGVySW5jcmVtZW50Rm9yTG9vcCgpIHsgcmV0
dXJuIDE7IH0KICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGV4ZWN1dGVDb3VudGVySW5jcmVtZW50
Rm9yUmV0dXJuKCkgeyByZXR1cm4gMTU7IH0KKworICAgICAgICAvLyBUaGUgc3VjY2Vzcy9mYWls
dXJlIHJhdGlvIHdlIHdhbnQuCisgICAgICAgIHVuc2lnbmVkIGRlc2lyZWRTdWNjZXNzRmFpbFJh
dGlvKCkgeyByZXR1cm4gMTA7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2Yg
ZmFpbHVyZXMgdGhhdCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KKyAgICAgICAgdW5z
aWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAxMCA8PCBhbHRlcm5hdGl2
ZSgpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVuc2lnbmVkIGxh
cmdlRmFpbENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUo
KS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBzaG91bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRl
c2lyZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3Bl
Y3VsYXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBs
YXJnZUZhaWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
b29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpID49IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkgPj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAgICAgIH0KICAg
ICAgICAgCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIHNob3VsZE9w
dGltaXplTm93KCk7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCByZW9wdGltaXpl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KHJlcGxhY2VtZW50KCkgIT0gdGhpcyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0
aXNvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAg
ICAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxF
KFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKICAgICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygp
OwpAQCAtODI3LDYgKzkzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFw
OworICAgICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fZGZnT1NSRW50cnk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxW
YWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTg1MSw3ICs5NjMsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0
aW9uczsKIAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHVpbnQz
Ml90IG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKKyAgICAgICAgdWludDMyX3QgbV9zcGVj
dWxhdGl2ZUZhaWxDb3VudGVyOwogICAgICAgICB1aW50OF90IG1fb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyOworICAgICAgICB1aW50OF90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAK
ICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CkBAIC05MDksNiArMTAyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShK
SVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwog
I2VuZGlmCkBAIC05MzUsNiArMTA1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShK
SVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwog
I2VuZGlmCkBAIC05NjIsNiArMTA3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShK
SVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVChwcm9maWxlKTsKICAgICAgICAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0aW9uID0gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjaWYg
RU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgWyV1LCAl
dV0gcHJlZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlv
blRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFtAJXUsIGJj
IyV1XSBwcmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0
aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0
aW9uOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiA5NTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDkgQEAgdm9p
ZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIC8vICAgICAgICAgZW50
cnksIHNpbmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwog
ICAgIC8vICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KICAgICAvLworICAgIC8vICAg
ICAoZCkgRnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3Vs
dCBpbiB0aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1
bHQgaW4gcmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLwogICAgIC8vICAg
ICBUbyBlbnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8K
ICAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNl
ZW1zIGxpa2UgaXQgd291bGQgZW5kYW5nZXIKICAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNl
IHRoZW4gZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgpAQCAt
NDE1LDExICs0MTgsNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9T
UgogICAgIC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywg
dGhlbiB0aGUgY291bnRlciB3aWxsIG5ldmVyCiAgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRp
dmUgYW5kIE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CiAgICAg
Ly8gICAgIHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklU
LCB3aGljaCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChh
KSBhbmQgKGIpLiBUaGlzIGhldXJpc3RpYyBtYXkgbmVlZCB0byBiZQotICAgIC8vICAgICByZXRo
b3VnaHQgaW4gdGhlIGZ1dHVyZSwgcGFydGljdWxhcmx5IGlmIHdlIHN1cHBvcnQgcmVvcHRpbWl6
aW5nIGNvZGUKLSAgICAvLyAgICAgd2l0aCBuZXcgdmFsdWUgcHJvZmlsZXMgZ2F0aGVyZWQgZnJv
bSBjb2RlIHRoYXQgZGlkIE9TUiBleGl0LgorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmlu
ZyAoYSkgYW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8v
ICAgICBzaW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1
dGUgY291bnRlci4KKyAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9m
IHNwZWN1bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICAgbGFyZ2Vy
IHRoYW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSks
IGFuZCBpZgorICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVy
IG9mIGZhaWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vICAgICBjb3VudGVyIHRvIDA7
IG90aGVyd2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLgorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihj
b2RlQmxvY2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBsb2FkMzIoQWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIo
KSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86
OnJlZ1QxKTsKKyAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGFkZDMy
KEltbTMyKC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIs
IEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkpKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigp
KSk7CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gz
MihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VG
YWlsQ291bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKGNvZGVCbG9jaygpLT5kZXNp
cmVkU3VjY2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsK
KyAgICAKKyAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJ
bmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29k
ZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKSksIGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRl
cigpKTsKKyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgc3RvcmUz
MihJbW0zMihDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24o
KSksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291
bnRlcigpKSk7CisgICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOworICAgIAorICAgIGZl
d0ZhaWxzLmxpbmsodGhpcyk7CisgICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKKyAgICAKKyAg
ICBzdG9yZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAKKyAgICBkb25lQWRqdXN0
aW5nLmxpbmsodGhpcyk7CiAgICAgCiAgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUg
bGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKQEAgLTQ4MSw2ICs1MTMs
OCBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFs
IHJldHVybiBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgog
ICAgIHByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAg
ZW1pdFB1dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJl
dHVyblBDKTsKKyAgICAKKyAgICBhZGRQdHIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhjb2Rl
QmxvY2soKS0+YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7CiB9CiAKIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKQEAgLTQ5OCwxMCArNTMyLDYgQEAgdm9pZCBK
SVRDb21waWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2ZSA9
IHNwZWN1bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3BlY3Vs
YXRpdmUsIGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0jaWYgRU5BQkxFKERGR19PU1JfRU5UUlkp
Ci0gICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5p
c2goKSk7Ci0jZW5kaWYKLSAgICAKICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogCiAg
ICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGV4Y2Vw
dGlvbiBjaGVja3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiA5NTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw0NiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQog
ICAgIHsKLSAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYmFzaWNCbG9jay5ieXRl
Y29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7Cisj
aWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCisgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBj
b2RlQmxvY2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdp
biwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAgICAgICAK
KyAgICAgICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7CisgICAgICAgIHVuc2lnbmVk
IGxhc3RMaXZlTG9jYWwgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAg
ICAgICAgICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVudHJ5
LT5tX2xpdmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1lbnQgKyAxKTsKKyAgICAgICAg
ICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUFyZ3VtZW50OyArK2kpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBO
b05vZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2V0KGkp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVBcmd1bWVudHMuY2xlYXIoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUxvY2Fs
KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxv
Y2FsICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExp
dmVMb2NhbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2NhbHNb
aV0udmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFy
aWFibGVzLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyKCk7CisjZWxzZQorICAgICAgICBVTlVTRURf
UEFSQU0oYmFzaWNCbG9jayk7CisjZW5kaWYKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zNTMsNyAr
MzkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9TUiBlbnRy
eXBvaW50cy4KICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOwotICAgIENvbXBhY3RKSVRDb2RlTWFw
OjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVydHlBY2Nl
c3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0aW9uQ2Fs
bCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0YUNhbGxU
b1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIsIGludDhf
dCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3Ig
ZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmlu
ZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMAorI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZF
UkJPU0UgMQogLy8gRW1pdCBkdW1wcyBkdXJpbmcgcHJvcGFnYXRpb24sIGluIGFkZGl0aW9uIHRv
IGp1c3QgYWZ0ZXIuCiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSAwCiAvLyBFbWl0IGxvZ2dpbmcgZm9yIE9TUiBleGl0IHZhbHVlIHJlY292ZXJpZXMgYXQgZXZl
cnkgbm9kZSwgbm90IGp1c3Qgbm9kZXMgdGhhdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk1NTY3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDgg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29k
ZU1hcCgpKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1iZXJPZkRGR09TUkVudHJpZXMoKSk7
CiAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIHByaW50ZigiT1NSIGluICVwKCVw
KSBmcm9tIGJjIyV1XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0
ZWNvZGVJbmRleCk7CkBAIC02Niw2ICs2Nyw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVj
U3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9j
ay0+ZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICAK
KyAgICBBU1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsKICAg
ICAKICAgICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0byBwZXJmb3Jt
IE9TUiBlbnRyeS4gSXQgbWF5IGZpbmQKICAgICAvLyB0aGF0IGl0IGlzIHVuc2FmZSB0byBkbyBz
bywgZm9yIGFueSBudW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50ZWQKQEAgLTk3
LDcgKzEwMSw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRp
Y3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0
aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25z
LT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgICAgIGlmIChpIDwgZW50cnktPm1f
bGl2ZUFyZ3VtZW50cy5ib3VuZHMoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChpKQor
ICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3Vt
ZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGlj
dGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUsMTEgKzEx
MCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0IGFuIE9T
UiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRoZW4gd2Ug
c2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kp
IHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5yZWdp
c3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSkgewor
ICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuYm91bmRzKCkgJiYgZW50cnkt
Pm1fbGl2ZVZhcmlhYmxlcy5nZXQoaSkKKyAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxp
ZChnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25z
LT5nZXRQcmVkaWN0aW9uKGkpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAg
ICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMs
IGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2Ny
aXB0aW9uKCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihp
KSkpOwogI2VuZGlmCkBAIC0xMzksMzAgKzE0Miw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBleGVjLT5zZXRDb2RlQmxvY2soY29kZUJsb2Nr
KTsKICAgICAKLSAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG1hY2hp
bmUgY29kZSBhZGRyZXNzLiBUaGUgREZHIHN0b3JlcwotICAgIC8vICAgIHRoZSBtYWNoaW5lIGNv
ZGUgb2Zmc2V0cyBvZiBPU1IgdGFyZ2V0cyBpbiBhIENvbXBhY3RKSVRDb2RlTWFwLgotICAgIC8v
ICAgIERlY29kaW5nIGl0IGlzIG5vdCBzdXBlciBlZmZpY2llbnQsIGJ1dCB3ZSBleHBlY3QgdGhh
dCBPU1IgZW50cnkKLSAgICAvLyAgICBoYXBwZW5zIHN1ZmZpY2llbnRseSByYXJlbHksIGFuZCB0
aGF0IE9TUiBlbnRyeXBvaW50cyBhcmUgc3VmZmljaWVudGx5Ci0gICAgLy8gICAgZmV3LCB0aGF0
IHRoaXMgd29uJ3QgaHVydCB0aHJvdWdocHV0LiBOb3RlIHRoYXQgdGhlIG9ubHkgcmVhbAotICAg
IC8vICAgIHJlYXNvbiB3aHkgd2UgdXNlIGEgQ29tcGFjdEpJVENvZGVNYXAgaXMgdG8gYXZvaWQg
aGF2aW5nIHRvIGludHJvZHVjZQotICAgIC8vICAgIHlldCBhbm90aGVyIGRhdGEgc3RydWN0dXJl
IGZvciBtYXBwaW5nIGJldHdlZW4gYnl0ZWNvZGUgaW5kaWNlcyBhbmQKLSAgICAvLyAgICBtYWNo
aW5lIGNvZGUgb2Zmc2V0cy4KLSAgICAKLSAgICBDb21wYWN0SklUQ29kZU1hcDo6RGVjb2RlciBk
ZWNvZGVyKGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKLSAgICB1bnNpZ25lZCBtYWNoaW5lQ29k
ZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICB3aGls
ZSAoZGVjb2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSkgewotICAgICAgICB1bnNpZ25l
ZCBjdXJyZW50Qnl0ZWNvZGVJbmRleDsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudE1hY2hpbmVD
b2RlT2Zmc2V0OwotICAgICAgICBkZWNvZGVyLnJlYWQoY3VycmVudEJ5dGVjb2RlSW5kZXgsIGN1
cnJlbnRNYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgICAgIGlmIChjdXJyZW50Qnl0ZWNvZGVJbmRl
eCA9PSBieXRlY29kZUluZGV4KSB7Ci0gICAgICAgICAgICBtYWNoaW5lQ29kZU9mZnNldCA9IGN1
cnJlbnRNYWNoaW5lQ29kZU9mZnNldDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIEFTU0VSVChtYWNoaW5lQ29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIC8vIDQpIEZpbmQgYW5kIHJldHVybiB0aGUg
ZGVzdGluYXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuCiAgICAgCi0gICAgdm9pZCogcmVzdWx0
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFjaGluZUNvZGVPZmZzZXQpOworICAg
IHZvaWQqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIGVudHJ5LT5tX21h
Y2hpbmVDb2RlT2Zmc2V0KTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAg
IHByaW50ZigiICAgIE9TUiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3MgJXAuXG4iLCBy
ZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2
aXNpb24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgREZHT1NSRW50cnlfaAog
I2RlZmluZSBERkdPU1JFbnRyeV9oCiAKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CkBAIC0zNCw2ICszNiwxOCBAQCBjbGFz
cyBDb2RlQmxvY2s7CiBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQorc3Ry
dWN0IE9TUkVudHJ5RGF0YSB7CisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVu
c2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgQml0VmVjdG9yIG1fbGl2ZUFyZ3VtZW50
czsKKyAgICBCaXRWZWN0b3IgbV9saXZlVmFyaWFibGVzOworfTsKKworaW5saW5lIHVuc2lnbmVk
IGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEp
Cit7CisgICAgcmV0dXJuIG9zckVudHJ5RGF0YS0+bV9ieXRlY29kZUluZGV4OworfQorCiB2b2lk
KiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7CiAjZWxzZQogaW5saW5lIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gMDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1NTY3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3Nyw2ICs4NzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7
CisgICAgICAgICAgICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCisgICAgICAgICAgICBub25TcGVj
dWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lv
biA5NTU2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNpbmNsdWRlICJKZXR0aXNvbmVk
Q29kZUJsb2Nrcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIGJvb2wgaXNQb2ludGVy
QWxpZ25lZCh2b2lkKiBwKQpAQCAtMzMsNiArMzUsMjcgQEAgaW5saW5lIGJvb2wgaXNQb2ludGVy
QWxpZ25lZCh2b2lkKiBwKQogICAgIHJldHVybiAhKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNo
YXIqKSAtIDEpKTsKIH0KIAorQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNv
bnN0IE1hcmtlZEJsb2NrU2V0KiBibG9ja3MsIEpldHRpc29uZWRDb2RlQmxvY2tzKiBjb2RlQmxv
Y2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQorICAgICwgbV9zaXplKDApCisgICAg
LCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQorICAgICwgbV9ibG9ja3MoYmxvY2tzKQorICAg
ICwgbV9jb2RlQmxvY2tzKGNvZGVCbG9ja3MpCit7CisgICAgaWYgKCFtX2NvZGVCbG9ja3MpIHsK
KyAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgSmV0dGlzb25lZENvZGVCbG9ja3Mgc3RydWN0dXJl
LCBzbyB0aGF0IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoKQorICAgICAgICAvLyBkb2Vzbid0IGhh
dmUgdG8gZG8gYW55IG51bGwgY2hlY2tzIG9uIG1fY29kZUJsb2Nrcy4KKyAgICAgICAgbV9teUNv
ZGVCbG9ja3MgPSBhZG9wdFB0cihuZXcgSmV0dGlzb25lZENvZGVCbG9ja3MoKSk7CisgICAgICAg
IG1fY29kZUJsb2NrcyA9IG1fbXlDb2RlQmxvY2tzLmdldCgpOworICAgIH0KK30KKworQ29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCit7CisgICAgaWYgKG1fcm9vdHMgIT0g
bV9pbmxpbmVSb290cykKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSht
X3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKK30KKwogdm9pZCBDb25zZXJ2
YXRpdmVSb290czo6Z3JvdygpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbV9jYXBhY2l0
eSA9PSBpbmxpbmVDYXBhY2l0eSA/IG5vbklubGluZUNhcGFjaXR5IDogbV9jYXBhY2l0eSAqIDI7
CkBAIC00Niw2ICs2OSw4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogCiBpbmxp
bmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBm
aWx0ZXIpCiB7CisgICAgbV9jb2RlQmxvY2tzLT5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJs
b2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRl
ci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAg
QVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxvY2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTIgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrczsK
IGNsYXNzIEhlYXA7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1YmxpYzoKLSAgICBD
b25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCopOworICAgIENvbnNlcnZhdGl2
ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiwgSmV0dGlzb25lZENvZGVCbG9ja3MqIGNvZGVC
bG9ja3MgPSAwKTsKICAgICB+Q29uc2VydmF0aXZlUm9vdHMoKTsKIAogICAgIHZvaWQgYWRkKHZv
aWQqIGJlZ2luLCB2b2lkKiBlbmQpOwpAQCAtNTYsMjMgKzU3LDExIEBAIHByaXZhdGU6CiAgICAg
c2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBjb25zdCBNYXJrZWRC
bG9ja1NldCogbV9ibG9ja3M7CisgICAgSmV0dGlzb25lZENvZGVCbG9ja3MqIG1fY29kZUJsb2Nr
czsKKyAgICBPd25QdHI8SmV0dGlzb25lZENvZGVCbG9ja3M+IG1fbXlDb2RlQmxvY2tzOwogICAg
IEpTQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07CiB9OwogCi1pbmxpbmUgQ29u
c2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiBi
bG9ja3MpCi0gICAgOiBtX3Jvb3RzKG1faW5saW5lUm9vdHMpCi0gICAgLCBtX3NpemUoMCkKLSAg
ICAsIG1fY2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkpCi0gICAgLCBtX2Jsb2NrcyhibG9ja3MpCi17
Ci19Ci0KLWlubGluZSBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKLXsK
LSAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikp
OwotfQotCiBpbmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKIHsKICAgICBy
ZXR1cm4gbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDk1NTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NCw2ICszOTQsMTEgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2Jq
ZWN0cyhIZWFwUm9vdAogICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5maXJzdCk7
CiB9CiAKK3ZvaWQgSGVhcDo6amV0dGlzb25Db2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+
IGNvZGVCbG9jaykKK3sKKyAgICBtX2NvZGVCbG9ja3MuYWRkQ29kZUJsb2NrKGNvZGVCbG9jayk7
Cit9CisKIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1Bh
aXI+KiB0ZW1wVmVjdG9yKQogewogICAgIG1fdGVtcFNvcnRpbmdWZWN0b3JzLmFwcGVuZCh0ZW1w
VmVjdG9yKTsKQEAgLTQ1NiwxMCArNDYxLDEyIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAg
ICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwogCiAgICAgdm9pZCogZHVtbXk7
Ci0KKyAgICAKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIAogICAgIC8vIFdl
IGdhdGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNsZWFyaW5nIG1hcmsgYml0cyBiZWNh
dXNlIGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1c2VzIHRoZSBtYXJrIGJpdHMgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFsaWQuCi0gICAgQ29uc2VydmF0aXZl
Um9vdHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKKyAgICBD
b25zZXJ2YXRpdmVSb290cyBtYWNoaW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tz
KCksICZtX2NvZGVCbG9ja3MpOwogICAgIG1fbWFjaGluZVRocmVhZHMuZ2F0aGVyQ29uc2VydmF0
aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkpOwogCiAgICAgQ29uc2VydmF0aXZl
Um9vdHMgcmVnaXN0ZXJGaWxlUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCkpOwpAQCAtNDY5
LDcgKzQ3Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKIAogICAgIFNsb3RWaXNpdG9yJiB2
aXNpdG9yID0gbV9zbG90VmlzaXRvcjsKICAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNp
dG9yKHZpc2l0b3IpOwotCisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQobWFjaGluZVRocmVhZFJv
b3RzKTsKICAgICB2aXNpdG9yLmRyYWluKCk7CiAKQEAgLTQ5Myw2ICs1MDAsOCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cygpCiAKICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRv
cik7CiAgICAgdmlzaXRvci5kcmFpbigpOworICAgIAorICAgIG1fY29kZUJsb2Nrcy50cmFjZUNv
ZGVCbG9ja3ModmlzaXRvcik7CiAKICAgICAvLyBXZWFrIGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQg
bGFzdCwgYmVjYXVzZSB0aGVpciBvd25lcnMgdXNlIHRoZSBzZXQgb2YKICAgICAvLyBvcGFxdWUg
cm9vdHMgdG8gZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4KQEAgLTU4OCw2ICs1OTcsNyBAQCB2b2lk
IEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVf
R0NfTUFSS0VEKCk7CiAgICAgCiAgICAgcmVzZXRBbGxvY2F0b3IoKTsKKyAgICBtX2NvZGVCbG9j
a3MuZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0g
RG9Td2VlcCkgewogICAgICAgICBzd2VlcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJBbGxvY2F0aW9u
U3BhY2UuaCIKICNpbmNsdWRlICJIYW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2su
aCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJs
b2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZS5oIgpAQCAtOTgsNiArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHBy
b3RlY3QoSlNWYWx1ZSk7CiAgICAgICAgIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVl
IHdoZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KKyAgICAgICAgCisgICAgICAgIHZv
aWQgamV0dGlzb25Db2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayk7CiAK
ICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0x
OTEsNiArMTk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xv
dFZpc2l0b3I7CiAgICAgICAgIEhhbmRsZUhlYXAgbV9oYW5kbGVIZWFwOwogICAgICAgICBIYW5k
bGVTdGFjayBtX2hhbmRsZVN0YWNrOworICAgICAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcyBtX2Nv
ZGVCbG9ja3M7CiAgICAgICAgIAogICAgICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVC
bG9ja3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK0pldHRpc29uZWRDb2RlQmxvY2tzOjpKZXR0aXNvbmVkQ29kZUJs
b2NrcygpIHsgfQorCitKZXR0aXNvbmVkQ29kZUJsb2Nrczo6fkpldHRpc29uZWRDb2RlQmxvY2tz
KCkKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1f
bWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5k
ID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGRlbGV0ZSBp
dGVyLT5maXJzdDsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6YWRkQ29kZUJsb2Nr
KFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKG1fbWFwLmZp
bmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21hcC5lbmQoKSk7CisgICAgCisgICAgbV9tYXAuYWRk
KGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNlKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJs
b2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRl
cmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQor
ICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxzZTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJs
b2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJsb2Nr
Kj4gdG9SZW1vdmU7CisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0
b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46
Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sq
LCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgIGlmICghaXRlci0+c2Vjb25kKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0
ZXItPmZpcnN0KTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
UmVtb3ZlLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fbWFwLnJlbW92ZSh0b1JlbW92ZVtpXSk7
CisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKKyAgICB9Cit9CisKK3ZvaWQgSmV0dGlzb25l
ZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7
CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5i
ZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1f
bWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3Ig
aXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5maXJzdC0+
dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlz
b25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgSmV0dGlzb25lZENvZGVCbG9j
a3NfaAorI2RlZmluZSBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCisKKyNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNz
IFNsb3RWaXNpdG9yOworCitjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrcyB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7IC8vIE9ubHkgbWFsbG9jJ2QgaW4gQ29uc2VydmF0aXZlUm9vdHMK
K3B1YmxpYzoKKyAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIAorICAgIH5KZXR0aXNv
bmVkQ29kZUJsb2NrcygpOworICAgIAorICAgIHZvaWQgYWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8
Q29kZUJsb2NrPik7CisgICAgCisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgdm9p
ZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIC8vIFdlIGhh
dmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJlY2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhh
c2hNYXAgYXMgbWFya2Vycy4KKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICAv
LyBUaGlzIGNoZWNrcyBmb3IgYm90aCBvZiB0aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCisg
ICAgICAgIC8vIDAgKyAxID0gMQorICAgICAgICAvLyAtMSArIDEgPSAwCisgICAgICAgIGlmICh2
YWx1ZSArIDEgPD0gMSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRp
Y19jYXN0PENvZGVCbG9jayo+KGNhbmRpZGF0ZUNvZGVCbG9jaykpOworICAgICAgICBpZiAoaXRl
ciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaXRlci0+c2Vj
b25kID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvZGVCbG9j
a3MoKTsKKyAgICAKKyAgICB2b2lkIHRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworCitw
cml2YXRlOgorICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IHRvIHVzZSBhbiBPd25QdHI8Q29kZUJs
b2NrPiBoZXJlIGJ1dCB0aGF0IHdvdWxkCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBub3Qgd29y
ay4KKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+IG1fbWFwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgRU5B
QkxFKEpJVCkKIAogLy8gVmVyYm9zZSBsb2dnaW5nIGZvciBPU1ItcmVsYXRlZCBjb2RlLgotI2Rl
ZmluZSBFTkFCTEVfSklUX1ZFUkJPU0VfT1NSIDAKKyNkZWZpbmUgRU5BQkxFX0pJVF9WRVJCT1NF
X09TUiAxCiAKIC8vIFdlJ3ZlIHJ1biBpbnRvIHNvbWUgcHJvYmxlbXMgd2hlcmUgY2hhbmdpbmcg
dGhlIHNpemUgb2YgdGhlIGNsYXNzIEpJVCBsZWFkcyB0bwogLy8gcGVyZm9ybWFuY2UgZmx1Y3R1
YXRpb25zLiAgVHJ5IGZvcmNpbmcgYWxpZ25tZW50IGluIGFuIGF0dGVtcHQgdG8gc3RhYmFsaXpl
IHRoaXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTkxNCw3ICsxOTE0LDIyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZv
aWQsIG9wdGltaXplX2Zyb20KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJn
c1swXS5pbnQzMigpOwogCi0gICAgaWYgKCFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2Vt
ZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiRW50ZXJl
ZCBvcHRpbWl6ZV9mcm9tX2xvb3Agd2l0aCBleGVjdXRlQ291bnRlciA9ICVkLCByZW9wdGltaXph
dGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAldVxuIiwg
Y29kZUJsb2NrLT5leGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0
cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOworI2Vu
ZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7Cisj
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJDb25zaWRlcmluZyBs
b29wIE9TUiBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9j
aywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNw
ZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVj
dWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpKSB7CisjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGlt
aXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3ApLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCkpOworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93
KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCJE
ZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICVwIChpbiBsb29wKSBiZWNhdXNlIG9mIGluc3VmZmlj
aWVudCBwcm9maWxpbmcuXG4iLCBjb2RlQmxvY2spOwpAQCAtMTk1Miw2ICsxOTY3LDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2VuZGlmCiAKICAgICAgICAg
Y29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKKyAgICAgICAgb3B0aW1pemVkQ29kZUJsb2NrLT5j
b3VudFNwZWN1bGF0aW9uU3VjY2VzcygpOwogICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVT
UyhhZGRyZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NjAsNiArMTk3NiwzMCBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgcHJpbnRmKCJP
cHRpbWl6aW5nICVwIGZyb20gbG9vcCBzdWNjZWVkZWQsIE9TUiBmYWlsZWQuXG4iLCBjb2RlQmxv
Y2spOwogI2VuZGlmCiAKKyAgICAvLyBDb3VudCB0aGUgT1NSIGZhaWx1cmUgYXMgYSBzcGVjdWxh
dGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhhcHBlbnMgYSBsb3QsIHRoZW4KKyAgICAvLyByZW9wdGlt
aXplLgorICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvbkZhaWx1cmUoKTsK
KyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiRW5jb3VudGVy
ZWQgbG9vcCBPU1IgZmFpbHVyZSBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5c
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICAvLyBXZSBh
cmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdHJpZ2dlcmluZyByZW9wdGltaXphdGlv
biBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCisgICAgLy8gYmVmb3JlIGl0LiBJZiB3ZSBlbnRlciB0
aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdnZXIgd2l0aCBhIGJ1Y2tldCBmdWxsIG9mIGZhaWwK
KyAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJlYWxseSB3b3VsZCBsaWtlIHRvIHJlb3B0aW1pemUg
aW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2UgY292ZXJzCisgICAgLy8gc29tZXRoaW5nIGVsc2U6
IHRoZXJlIHdlcmVuJ3QgbWFueSAob3IgYW55KSBzcGVjdWxhdGlvbiBmYWlsdXJlcyBiZWZvcmUs
IGJ1dCB3ZSBqdXN0CisgICAgLy8gZmFpbGVkIHRvIGVudGVyIHRoZSBzcGVjdWxhdGl2ZSBjb2Rl
IGJlY2F1c2Ugc29tZSB2YXJpYWJsZSBoYWQgdGhlIHdyb25nIHZhbHVlIG9yCisgICAgLy8gYmVj
YXVzZSB0aGUgT1NSIGNvZGUgZGVjaWRlZCBmb3IgYW55IHNwdXJpb3VzIHJlYXNvbiB0aGF0IGl0
IGRpZCBub3Qgd2FudCB0byBPU1IKKyAgICAvLyByaWdodCBub3cuIFNvLCB3ZSBvbmx5IHRyaWdn
ZXIgcmVvcHRpbWl6YXRpb24gb25seSB1cG9uIHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSAobm9uLWxv
b3ApCisgICAgLy8gcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KKyAgICBpZiAob3B0aW1pemVkQ29k
ZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXAp
IChpbiBsb29wIGFmdGVyIE9TUiBmYWlsKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gT1NS
IGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5leHQgdGltZSEgTGV0IHRo
ZSBjb2RlIHJ1biBhIGJpdAogICAgIC8vIGxvbmdlciBhbmQgdGhlbiB0cnkgYWdhaW4uCiAgICAg
Y29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CkBAIC0xOTcyLDggKzIwMTIsMjMgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIAotICAgIGlmIChjb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkpCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAg
ICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9yZXQgd2l0aCBleGVjdXRlQ291bnRlciA9
ICVkLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIgPSAldVxuIiwgY29kZUJsb2NrLT5leGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBs
YWNlbWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRm
KCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVwbGFj
ZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0
aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCktPnNob3VsZFJlb3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9P
U1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAo
JXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkp
OworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAK
ICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewogI2lmIEVOQUJMRShK
SVRfVkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTU1NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTggQEAg
REZHOjpJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmlucwogfQogI2VuZGlmCiAKKy8v
IFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tzLgordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgT3duUHRyPFQ+JiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVC
bG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBPd25QdHI8VD4gY29kZUJsb2NrVG9KZXR0
aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgY29kZUJsb2NrID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7Cisg
ICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygpOworICAgIGdsb2Jh
bERhdGEuaGVhcC5qZXR0aXNvbkNvZGVCbG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9j
az4oY29kZUJsb2NrVG9KZXR0aXNvbi5yZWxlYXNlKCkpKTsKK30KKwogY29uc3QgQ2xhc3NJbmZv
IFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIlNjcmlwdEV4ZWN1dGFibGUiLCAmRXhlY3V0
YWJsZUJhc2U6OnNfaW5mbywgMCwgMCB9OwogCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFi
bGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5m
bywgMCwgMCB9OwpAQCAtMjExLDYgKzIyMywxMyBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6
OmNvbXBpbGVJbnRlcm5hCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRXZhbEV4ZWN1dGFibGU6
OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAg
amV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9ldmFsQ29kZUJsb2NrKTsKKyAgICBtX2pp
dENvZGVGb3JDYWxsID0gbV9ldmFsQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CisgICAgQVNTRVJU
KCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQorCiB2b2lkIEV2YWxFeGVjdXRh
YmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7CkBAIC0zMzAsNiArMzQ5LDEzIEBAIEpT
T2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGlsZUludGUKICAgICByZXR1cm4gMDsKIH0K
IAordm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBt
X3Byb2dyYW1Db2RlQmxvY2spOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dyYW1Db2Rl
QmxvY2stPmdldEpJVENvZGUoKTsKKyAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJp
dHlDaGVjayk7Cit9CisKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OnVubGlua0NhbGxzKCkKIHsK
ICNpZiBFTkFCTEUoSklUKQpAQCAtNTMzLDYgKzU1OSwyMCBAQCBKU09iamVjdCogRnVuY3Rpb25F
eGVjdXRhYmxlOjpjb21waWxlRm9yCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2NvZGVCbG9j
a0ZvckNhbGwpOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPmdl
dEpJVENvZGUoKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBtX2NvZGVC
bG9ja0ZvckNhbGwtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpOworfQorCit2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVENvZGUoKTsKKyAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRDb2Rl
V2l0aEFyaXR5Q2hlY2soKTsKK30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhF
UklUUyh0aGlzLCAmc19pbmZvKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk1NTY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIAor
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsKIAogICAg
ICAgICBFdmFsQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsKQEAgLTM5
Miw2ICszOTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsK
IAogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAg
IHsKQEAgLTQ3NSw2ICs0NzksOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSosIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMgPSAwKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmKTsKIAog
ICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CiAgICAgICAgIHsKQEAgLTQ5
OCw2ICs1MDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5O
b2RlKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNv
bnN0cnVjdChKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29u
c3RydWN0KCkgY29uc3QKICAgICAgICAgewpAQCAtNTM4LDYgKzU0NiwxNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4
ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBq
ZXR0aXNvbk9wdGltaXplZENvZGVGb3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09
IENvZGVGb3JDYWxsKSAKKyAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JD
YWxsKGdsb2JhbERhdGEpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgICAgICAgICAgamV0dGlzb25P
cHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KGdsb2JhbERhdGEpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29k
ZUZvckNhbGwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCaXRWZWN0b3JfaAorI2RlZmlu
ZSBCaXRWZWN0b3JfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBhIHNwYWNl
LWVmZmljaWVudCwgcmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2Fz
ZSBpdAorLy8gb2NjdXBpZXMgb25lIHdvcmQsIGJ1dCBpZiBuZWNlc3NhcnksIGl0IHdpbGwgaW5m
bGF0ZSB0aGlzIG9uZSB3b3JkIHRvIHBvaW50CisvLyB0byBhIHNpbmdsZSBjaHVuayBvZiBvdXQt
b2YtbGluZSBhbGxvY2F0ZWQgc3RvcmFnZSB0byBzdG9yZSBhbiBhcmJpdHJhcnkgbnVtYmVyCisv
LyBvZiBiaXRzLgorLy8KKy8vIC0gVGhlIGJpdHZlY3RvciBuZWVkcyB0byBiZSByZXNpemVkIG1h
bnVhbGx5IChqdXN0IGNhbGwgZW5zdXJlU2l6ZSgpKS4KKy8vCisvLyAtIFRoZSBiaXR2ZWN0b3Ig
cmVtZW1iZXJzIHRoZSBib3VuZCBvZiBob3cgbWFueSBiaXRzIGNhbiBiZSBzdG9yZWQsIGJ1dCB0
aGlzCisvLyAgIG1heSBiZSBzbGlnaHRseSBncmVhdGVyIChieSBhcyBtdWNoIGFzIHNvbWUgcGxh
dGZvcm0tc3BlY2lmaWMgY29uc3RhbnQpCisvLyAgIHRoYW4gdGhlIGxhc3QgYXJndW1lbnQgcGFz
c2VkIHRvIGVuc3VyZVNpemUoKS4KKy8vCisvLyAtIEFjY2Vzc2VzIEFTU0VSVCB0aGF0IHlvdSBh
cmUgd2l0aGluIGJvdW5kcy4KKy8vCisvLyAtIEJpdHMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGlu
aXRpYWxpemVkIHRvIHplcm8uCisvLworLy8gT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgQml0VmVj
dG9yIGNsYXNzIG1heSBub3QgYmUgdGhlIGZhc3Rlc3QgYXJvdW5kLCBzaW5jZQorLy8gaXQgZG9l
cyBjb25kaXRpb25hbHMgb24gZXZlcnkgZ2V0L3NldC9jbGVhci4gQnV0IGl0IGlzIGdyZWF0IGlm
IHlvdSBuZWVkIHRvCisvLyBqdWdnbGUgYSBsb3Qgb2YgdmFyaWFibGUtbGVuZ3RoIEJpdFZlY3Rv
cnMgYW5kIHlvdSdyZSB3b3JyaWVkIGFib3V0IHdhc3RpbmcKKy8vIHNwYWNlLgorCitjbGFzcyBC
aXRWZWN0b3IgeworcHVibGljOiAKKyAgICBCaXRWZWN0b3IoKQorICAgICAgICA6IG1fYml0c09y
UG9pbnRlcihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIEJpdFZlY3Rvcihjb25zdCBCaXRWZWN0b3ImIG90aGVyKQor
ICAgICAgICA6IG1fYml0c09yUG9pbnRlcihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1h
eElubGluZUJpdHMoKSkKKyAgICB7CisgICAgICAgICgqdGhpcykgPSBvdGhlcjsKKyAgICB9Cisg
ICAgCisgICAgfkJpdFZlY3RvcigpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxp
bmVCaXRzKCkpOworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBC
aXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IG5ld0JpdHNPclBvaW50
ZXI7CisgICAgICAgIGlmIChvdGhlci5pc0lubGluZSgpKQorICAgICAgICAgICAgbmV3Qml0c09y
UG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0T2ZMaW5lQml0czo6Y3Jl
YXRlKG90aGVyLmJvdW5kcygpKTsKKyAgICAgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRz
LT5iaXRzKCksIG90aGVyLmJpdHMoKSwgb3RoZXIuYm91bmRzKCkgPj4gMyk7CisgICAgICAgICAg
ICBuZXdCaXRzT3JQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9m
TGluZUJpdHMpOworICAgICAgICB9CisgICAgICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICAgICAg
ICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKKyAgICAgICAgbV9i
aXRzT3JQb2ludGVyID0gbmV3Qml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIHNpemVfdCBib3VuZHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1f
Yml0c09yUG9pbnRlciA+PiBtYXhJbmxpbmVCaXRzKCkpCisgICAgICAgICAgICByZXR1cm4gbWF4
SW5saW5lQml0cygpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5udW1CaXRzKCk7
CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAg
ICAgICAgaWYgKG51bUJpdHMgPD0gYm91bmRzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHJlc2l6ZU91dE9mTGluZShudW1CaXRzKTsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBl
bnN1cmVTaXplKCksIGJ1dCBzdXBwb3J0cyByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVj
dG9yLgorICAgIHZvaWQgcmVzaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAgaWYg
KGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAo
bnVtQml0cyA8PSBtYXhJbmxpbmVCaXRzKCkpIHsKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHMq
IG15T3V0T2ZMaW5lQml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICAgICAgICAgIG1fYml0c09y
UG9pbnRlciA9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkg
fCAqbXlPdXRPZkxpbmVCaXRzLT5iaXRzKCk7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpk
ZXN0cm95KG15T3V0T2ZMaW5lQml0cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJlc2l6ZU91dE9mTGluZShudW1CaXRzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAg
ICAgICAgIG1fYml0c09yUG9pbnRlciA9IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4
SW5saW5lQml0cygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiemVybyhvdXRPZkxpbmVC
aXRzKCktPmJpdHMoKSwgYm91bmRzKCkgPj4gMyk7CisgICAgfQorCisgICAgYm9vbCBnZXQoc2l6
ZV90IGJpdCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXQgPCBib3VuZHMoKSk7Cisg
ICAgICAgIHJldHVybiAhIShiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gJiAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgYml0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGJpdCA8IGJvdW5kcygpKTsKKyAgICAgICAgYml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVy
KCldIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRl
cigpIC0gMSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihzaXplX3QgYml0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJpdCA8IGJvdW5kcygpKTsKKyAgICAgICAgYml0cygpW2JpdCA+
PiBiaXRzSW5Qb2ludGVyKCldICY9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0
ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNp
emVfdCBiaXQsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpCisgICAgICAg
ICAgICBzZXQoYml0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xlYXIoYml0KTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhJbmxpbmVCaXRzKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXRzSW5Qb2ludGVyKCkgLSAxOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBPdXRPZkxpbmVC
aXRzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1CaXRzOyB9CisgICAgICAgIHNpemVfdCBudW1Xb3JkcygpIGNvbnN0IHsgcmV0dXJu
IChtX251bUJpdHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAxKSA+PiBiaXRzSW5Qb2ludGVyKCk7IH0K
KyAgICAgICAgdWludHB0cl90KiBiaXRzKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPih0aGlzICsgMSk7IH0KKyAgICAgICAgY29uc3QgdWludHB0cl90KiBiaXRzKCkgY29u
c3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRyX3QqPih0aGlzICsgMSk7
IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBPdXRPZkxpbmVCaXRzKiBjcmVhdGUoc2l6ZV90
IG51bUJpdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG51bUJpdHMgPSAobnVtQml0cyArIGJp
dHNJblBvaW50ZXIoKSAtIDEpICYgfmJpdHNJblBvaW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgKGZhc3RNYWxsb2Moc2l6ZW9mKE91dE9mTGluZUJpdHMpICsgKG51bUJpdHMgPj4gYml0
c0luUG9pbnRlcigpKSkpIE91dE9mTGluZUJpdHMobnVtQml0cyk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5l
Qml0cykKKyAgICAgICAgeworICAgICAgICAgICAgZmFzdEZyZWUob3V0T2ZMaW5lQml0cyk7Cisg
ICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIE91dE9mTGluZUJpdHMoc2l6ZV90IG51
bUJpdHMpCisgICAgICAgICAgICA6IG1fbnVtQml0cyhudW1CaXRzKQorICAgICAgICB7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBtX251bUJpdHM7CisgICAgfTsKKyAgICAK
KyAgICBib29sIGlzSW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzT3JQb2ludGVyID4+IG1h
eElubGluZUJpdHMoKTsgfQorICAgIAorICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIG91dE9mTGlu
ZUJpdHMoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IE91dE9mTGluZUJp
dHMqPihtX2JpdHNPclBvaW50ZXIpOyB9CisgICAgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0
cygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8T3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9p
bnRlcik7IH0KKyAgICAKKyAgICB2b2lkIHJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cykK
KyAgICB7CisgICAgICAgIEFTU0VSVChudW1CaXRzID4gbWF4SW5saW5lQml0cygpKTsKKyAgICAg
ICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0
ZShudW1CaXRzKTsKKyAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgYml0
cygpLCBzdGQ6Om1pbihib3VuZHMoKSwgbnVtQml0cykgPj4gMyk7CisgICAgICAgIGlmICghaXNJ
bmxpbmUoKSkKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0
cygpKTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG5ld091dE9mTGluZUJpdHMpOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QqIGJpdHMo
KQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gJm1f
Yml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+Yml0cygpOwor
ICAgIH0KKyAgICAKKyAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gJm1fYml0c09yUG9pbnRl
cjsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+Yml0cygpOworICAgIH0KKyAgICAK
KyAgICB1aW50cHRyX3QgbV9iaXRzT3JQb2ludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6Qml0VmVjdG9yOworCisjZW5kaWYgLy8gQml0VmVjdG9yX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk1NTY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NDEs
NyArODQxLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIEVOQUJMRV9ERUJVR19XSVRIX0JSRUFLUE9J
TlQgMAotI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfQ09VTlRFUlMgMAorI2RlZmluZSBFTkFCTEVf
U0FNUExJTkdfQ09VTlRFUlMgMQogI2RlZmluZSBFTkFCTEVfU0FNUExJTkdfRkxBR1MgMAogI2Rl
ZmluZSBFTkFCTEVfT1BDT0RFX1NBTVBMSU5HIDAKICNkZWZpbmUgRU5BQkxFX0NPREVCTE9DS19T
QU1QTElORyAwCkBAIC05MjcsNyArOTI3LDcgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5B
QkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSkgJiYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotI2Rl
ZmluZSBFTkFCTEVfVkVSQk9TRV9WQUxVRV9QUk9GSUxFIDAKKyNkZWZpbmUgRU5BQkxFX1ZFUkJP
U0VfVkFMVUVfUFJPRklMRSAxCiAjZW5kaWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9TSU1QTEVf
SEVBUF9QUk9GSUxJTkcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108101</attachid>
            <date>2011-09-20 19:41:18 -0700</date>
            <delta_ts>2011-09-20 19:45:14 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>recomp_patch_3.diff</filename>
            <type>text/plain</type>
            <size>57149</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAKKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxv
Y2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmFk
ZCk6CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmpldHRpc29uQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5j
cHA6CisgICAgICAgIChKU0M6OmpldHRpc29uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZh
bEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OlByb2dy
YW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVj
dCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKToKKwogMjAxMS0wOS0yMCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgYWx3YXlz
IHNwZWN1bGF0ZXMgaW50ZWdlciBvbiBtb2R1bG8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDI4LDcgKzE0MjgsMTAgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICwgbV9zb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1ib2xUYWJs
ZShzeW1UYWIpCiAgICAgLCBtX2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQorICAgICwgbV9zcGVj
dWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKDApCisgICAgLCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIo
MCkKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKDApCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICAKQEAg
LTE5MzUsNiArMTkzOCwyNyBAQCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21waWxlV2l0
aERGCiAgICAgICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0cnVjdCh0
aGlzKTsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDYWxsKHRoaXMpOwog
fQorCit2b2lkIFByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxQ
cm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENv
ZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAg
ICBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlz
b25PcHRpbWl6ZWRDb2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEZ1bmN0aW9uQ29kZUJsb2Nr
OjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJUKGdldEpJ
VFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVw
bGFjZW1lbnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJF
eGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoZ2xvYmFsRGF0YSwgbV9pc0Nv
bnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KICNlbmRpZgog
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQpAQCAtMTk3NCw4ICsxOTk4LDggQEAgYm9vbCBD
b2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBwcmludGYoIlByb2ZpbGUgaG90bmVz
czogJWxmLCAlbGZcbiIsIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIChkb3VibGUpbnVtYmVyT2ZT
YW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkpOwogI2VuZGlmCiAKLSAgICBpZiAoKGRvdWJsZSludW1iZXJPZkxp
dmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyA+PSAwLjc1Ci0gICAgICAgICYmIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgPj0gMC41KQorICAgIGlmICgobnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPT0g
MC4wIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPj0gMC43NSkKKyAgICAgICAgJiYgKG51bWJl
ck9mVmFsdWVQcm9maWxlcygpID09IDAuMCB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJv
ZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9m
aWxlcygpID49IDAuNSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyKys7CkBAIC0yMDE0LDcgKzIwMzgsMTIgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKICAgICB9CiAgICAgZnByaW50ZihzdGRlcnIsICJTbG93
Q2FzZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bWJlck9mU2xvd0Nhc2VQcm9maWxlcygpOyArK2kpIHsKLSAgICAgICAgU2xvd0Nhc2VQ
cm9maWxlKiBwcm9maWxlID0gc2xvd0Nhc2VQcm9maWxlKGkpOworICAgICAgICBSYXJlQ2FzZVBy
b2ZpbGUqIHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQsIHByb2Zp
bGUtPm1fY291bnRlcik7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY2lhbEZhc3RD
YXNlUHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbnVtYmVyT2ZTcGVjaWFsRmFzdENhc2VQcm9maWxlcygpOyArK2kpIHsKKyAgICAgICAgUmFy
ZUNhc2VQcm9maWxlKiBwcm9maWxlID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZShpKTsKICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29k
ZU9mZnNldCwgcHJvZmlsZS0+bV9jb3VudGVyKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNiArMzEsNyBAQAogI2RlZmluZSBDb2RlQmxvY2tfaAogCiAjaW5jbHVkZSAiQ29tcGFj
dEpJVENvZGVNYXAuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkV2YWxD
b2RlQ2FjaGUuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUu
aCIKQEAgLTMzMyw2ICszMzQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIHJldHVybiBtX2ppdENvZGVNYXAuZ2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBhcHBlbmRERkdPU1JFbnRyeURhdGEodW5zaWduZWQg
Ynl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIERGRzo6T1NSRW50cnlEYXRhIGVudHJ5OworICAgICAgICAgICAgZW50cnkubV9i
eXRlY29kZUluZGV4ID0gYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGVudHJ5Lm1fbWFjaGlu
ZUNvZGVPZmZzZXQgPSBtYWNoaW5lQ29kZU9mZnNldDsKKyAgICAgICAgICAgIG1fZGZnT1NSRW50
cnkuYXBwZW5kKGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiAmbV9kZmdPU1JFbnRyeS5sYXN0
KCk7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdPU1JFbnRyaWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9kZmdPU1JFbnRyeS5zaXplKCk7IH0KKyAgICAgICAgREZHOjpPU1JF
bnRyeURhdGEqIGRmZ09TUkVudHJ5RGF0YSh1bnNpZ25lZCBpKSB7IHJldHVybiAmbV9kZmdPU1JF
bnRyeVtpXTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhRm9y
Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gYmluYXJ5U2VhcmNoPERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZH
OjpnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4PihtX2RmZ09TUkVudHJ5LmJlZ2luKCksIG1f
ZGZnT1NSRW50cnkuc2l6ZSgpLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgfQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCkBAIC0zNjAsOSArMzc2LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5
Q2hlY2s7CiAgICAgICAgIH0KICAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJu
IG1faml0Q29kZTsgfQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0SklUQ29kZVdp
dGhBcml0eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KICAgICAg
ICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5
cGUoKTsgfQogICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5
KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogICAgICAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hh
aW5Ob2RlKikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRh
JikgPSAwOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsKICAgICAgICAgYm9v
bCBoYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpCkBAIC02ODUsMTEgKzcwMywzNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgLy8gdHJpZ2dlciBmaWxlcy4gQWxsIENvZGVCbG9ja3Mgc3RhcnQg
b3V0IHdpdGggb3B0aW1pemVBZnRlcldhcm1VcCgpLAogICAgICAgICAvLyBhcyB0aGlzIGlzIGNh
bGxlZCBmcm9tIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuCiAgICAgICAgIAorICAgICAgICAv
LyBXaGVuIHdlIG9ic2VydmUgYSBsb3Qgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMsIHdlIHRyaWdn
ZXIgYQorICAgICAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2ggdGltZSwgd2UgaW5jcmVh
c2UgdGhlIG9wdGltaXphdGlvbiB0cmlnZ2VyCisgICAgICAgIC8vIHRvIGF2b2lkIHRocmFzaGlu
Zy4KKyAgICAgICAgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
ciA8PSAxOCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9u
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcisr
OworICAgICAgICAgICAgaWYgKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPiAxOCkKKyAg
ICAgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gMTg7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8g
c3VwcG9ydCBjYWxsaW5nCi0gICAgICAgIC8vIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSBmcm9tIEpJ
VC1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgLy8gb3B0aW1pemVYWVooKSBtZXRob2RzIGZyb20g
SklULWdlbmVyYXRlZCBjb2RlLgorICAgICAgICBzdGF0aWMgaW50MzJfdCBjb3VudGVyVmFsdWVG
b3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9y
T3B0aW1pemVBZnRlcldhcm1VcCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAtMTAw
MDsKKyAgICAgICAgICAgIHJldHVybiAtMTAwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRl
cigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IC01MDAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGludDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkKQEAgLTY5Nywx
MiArNzQxLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICZtX2V4ZWN1
dGVDb3VudGVyOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX2V4ZWN1dGVDb3VudGVyKTsgfQorCisgICAgICAgIGludDMyX3QgZXhlY3V0ZUNvdW50
ZXIoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGVDb3VudGVyOyB9CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29w
dGltaXphdGlvbkRlbGF5Q291bnRlcjsgfQorICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlz
IHRvIGZvcmNlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRoaXMgaXMK
ICAgICAgICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUg
dHlwaWNhbGx5IG1vcmUKICAgICAgICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0aW5nIGJhc2Vs
aW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAwOworICAgICAgICAgICAgbV9leGVj
dXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHByZXZlbnQgb3B0aW1p
emF0aW9uIGZyb20gaGFwcGVuaW5nIGFnYWluLiBOb3RlIHRoYXQKQEAgLTcyNiw2ICs3NzYsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gY291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgICAgICB9CiAgICAgICAgIAorICAg
ICAgICAvLyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmly
ZSBvbmx5IGFmdGVyCisgICAgICAgIC8vIGEgbG90IG9mIHdhcm0tdXAuCisgICAgICAgIHZvaWQg
b3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1
dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGlt
aXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CiAgICAgICAgIC8vIG5vdCBuZWNlc3Nh
cmlseSB0aGUgbmV4dCBvbmUuIFRoaXMgbWFrZXMgc2Vuc2UgaWYgb3B0aW1pemF0aW9uCiAgICAg
ICAgIC8vIHN1Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwg
Y2FsbHMgYXJlCkBAIC03NDYsMTggKzgwMyw3MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8gaW4gdGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAg
ICAgICAgewotICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IC0xMDA7CisgICAgICAgICAg
ICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3BlY3VsYXRpdmUgSklUIHRy
YWNrcyBpdHMgc3VjY2VzcyByYXRlLCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAvLyBkZWNpZGUg
d2hlbiB0byByZW9wdGltaXplLiBJdCdzIGludGVyZXN0aW5nIHRvIG5vdGUgdGhhdCB0aGVzZQor
ICAgICAgICAvLyBjb3VudGVycyBtYXkgb3ZlcmZsb3cgd2l0aG91dCBhbnkgcHJvdGVjdGlvbi4g
VGhlIHN1Y2Nlc3MKKyAgICAgICAgLy8gY291bnRlciB3aWxsIG92ZXJmbG93IGJlZm9yZSB0aGUg
ZmFpbCBvbmUgZG9lcywgYmVjdWFzZSB0aGUKKyAgICAgICAgLy8gZmFpbCBvbmUgaXMgdXNlZCBh
cyBhIHRyaWdnZXIgdG8gcmVvcHRpbWl6ZS4gU28gdGhlIHdvcnN0IGNhc2UKKyAgICAgICAgLy8g
aXMgdGhhdCB0aGUgc3VjY2VzcyBjb3VudGVyIG92ZXJmbG93cyBhbmQgd2UgcmVvcHRpbWl6ZSB3
aXRob3V0CisgICAgICAgIC8vIG5lZWRpbmcgdG8uIEJ1dCB0aGlzIGlzIGhhcm1sZXNzLiBJZiBh
IG1ldGhvZCByZWFsbHkgZGlkCisgICAgICAgIC8vIGV4ZWN1dGUgMl4zMiB0aW1lcyB0aGVuIGNv
bXBpbGluZyBpdCBhZ2FpbiBwcm9iYWJseSB3b24ndCBodXJ0CisgICAgICAgIC8vIGFueW9uZS4K
KyAgICAgICAgCisgICAgICAgIHZvaWQgY291bnRTcGVjdWxhdGlvblN1Y2Nlc3MoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIrKzsKICAgICAgICAg
fQogICAgICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uRmFpbHVyZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcisrOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB1aW50MzJfdCBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyOyB9CisgICAgICAgIHVp
bnQzMl90IHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGF0
aXZlRmFpbENvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZT
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVTdWNjZXNz
Q291bnRlcjsgfQorICAgICAgICB1aW50MzJfdCogYWRkcmVzc09mU3BlY3VsYXRpdmVGYWlsQ291
bnRlcigpIHsgcmV0dXJuICZtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7IH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxhdGl2ZVN1Y2Nl
c3NDb3VudGVyKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3BlY3VsYXRp
dmVGYWlsQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc3Bl
Y3VsYXRpdmVGYWlsQ291bnRlcik7IH0KKyAgICAgICAgCiAgICAgICAgIC8vIFRoZSBhbW91bnQg
Ynkgd2hpY2ggdGhlIEpJVCB3aWxsIGluY3JlbWVudCBtX2V4ZWN1dGVDb3VudGVyLgogICAgICAg
ICBzdGF0aWMgdW5zaWduZWQgZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkgeyByZXR1
cm4gMTsgfQogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRG
b3JSZXR1cm4oKSB7IHJldHVybiAxNTsgfQorCisgICAgICAgIC8vIFRoZSBzdWNjZXNzL2ZhaWx1
cmUgcmF0aW8gd2Ugd2FudC4KKyAgICAgICAgdW5zaWduZWQgZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0
aW8oKSB7IHJldHVybiA2OyB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGZh
aWx1cmVzIHRoYXQgdHJpZ2dlcnMgdGhlIHVzZSBvZiB0aGUgcmF0aW8uCisgICAgICAgIHVuc2ln
bmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkKCkgeyByZXR1cm4gMjAgPDwgYWx0ZXJuYXRpdmUo
KS0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICB1bnNpZ25lZCBsYXJn
ZUZhaWxDb3VudFRocmVzaG9sZEZvckxvb3AoKSB7IHJldHVybiAxIDw8IGFsdGVybmF0aXZlKCkt
PnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
c2hvdWxkUmVvcHRpbWl6ZU5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkZXNp
cmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49IHNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gbGFy
Z2VGYWlsQ291bnRUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBzaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSAqIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIo
KSA+PSBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpID49IGxhcmdlRmFpbENvdW50VGhyZXNob2xkRm9yTG9vcCgpOworICAgICAgICB9CiAgICAg
ICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91bGRPcHRp
bWl6ZU5vdygpOwogI2Vsc2UKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVvcHRpbWl6ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZXBsYWNlbWVudCgpICE9IHRoaXMpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+amV0dGlz
b24oZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAg
ICAgICAgICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShW
RVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsZXMoKTsK
QEAgLTgyNyw2ICs5MzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2lmIEVOQUJMRShE
RkdfSklUKQogICAgICAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsK
KyAgICAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBtX2RmZ09TUkVudHJ5OwogI2VuZGlm
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFs
dWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC04NTEsNyArOTYzLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlv
bnM7CiAKICAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOworICAgICAgICB1aW50MzJf
dCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1fc3BlY3Vs
YXRpdmVGYWlsQ291bnRlcjsKICAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlcjsKKyAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogCiAg
ICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwpAQCAtOTA5LDYgKzEwMjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklU
KQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNl
bmRpZgpAQCAtOTM1LDYgKzEwNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklU
KQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNl
bmRpZgpAQCAtOTYyLDYgKzEwNzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklU
KQogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQg
amV0dGlzb24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Miw3ICs0OTIsNyBAQCBw
cml2YXRlOgogICAgICAgICBBU1NFUlQocHJvZmlsZSk7CiAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGlvbiA9IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2lmIEVO
QUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJEeW5hbWljIFsldSwgJXVd
IHByZWRpY3Rpb246ICVzXG4iLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgsIHByZWRpY3Rpb25U
b1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgIHByaW50ZigiRHluYW1pYyBbQCV1LCBiYyMl
dV0gcHJlZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlv
blRvU3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gcHJlZGljdGlv
bjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw5IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAvLyAgICAgICAgIGVudHJ5
LCBzaW5jZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKICAg
ICAvLyAgICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCiAgICAgLy8KKyAgICAvLyAgICAg
KGQpIEZyZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQg
aW4gdGhlIGNvZGUKKyAgICAvLyAgICAgICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0
IGluIHJlY29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCisgICAgLy8KICAgICAvLyAgICAg
VG8gZW5zdXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCiAg
ICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVt
cyBsaWtlIGl0IHdvdWxkIGVuZGFuZ2VyCiAgICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0
aGVuIGV2ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKQEAgLTQx
NSwxMSArNDE4LDQwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IK
ICAgICAvLyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRo
ZW4gdGhlIGNvdW50ZXIgd2lsbCBuZXZlcgogICAgIC8vICAgICBiZWNvbWUgbm9uLW5lZ2F0aXZl
IGFuZCBPU1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQogICAgIC8v
ICAgICB3aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwg
d2hpY2ggZG9lcyBhIHByZXR0eQotICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkg
YW5kIChiKS4gVGhpcyBoZXVyaXN0aWMgbWF5IG5lZWQgdG8gYmUKLSAgICAvLyAgICAgcmV0aG91
Z2h0IGluIHRoZSBmdXR1cmUsIHBhcnRpY3VsYXJseSBpZiB3ZSBzdXBwb3J0IHJlb3B0aW1pemlu
ZyBjb2RlCi0gICAgLy8gICAgIHdpdGggbmV3IHZhbHVlIHByb2ZpbGVzIGdhdGhlcmVkIGZyb20g
Y29kZSB0aGF0IGRpZCBPU1IgZXhpdC4KKyAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcg
KGEpIGFuZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAvLyAg
ICAgc2luY2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRl
IGNvdW50ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBz
cGVjdWxhdGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gICAgIGxhcmdlciB0
aGFuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBh
bmQgaWYKKyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBv
ZiBmYWlsdXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICAgY291bnRlciB0byAwOyBv
dGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZv
ck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29k
ZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgbG9hZDMyKEFkZHJlc3MoR1BS
SW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkp
LCBHUFJJbmZvOjpyZWdUMik7CisgICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpLCBHUFJJbmZvOjpy
ZWdUMSk7CisgICAgYWRkMzIoSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBhZGQzMihJ
bW0zMigtMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCBB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWls
Q291bnRlcigpKSk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkp
OworICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBKdW1wIGZld0ZhaWxzID0gYnJhbmNoMzIo
QmVsb3dPckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgSW1tMzIoY29kZUJsb2NrKCktPmxhcmdlRmFp
bENvdW50VGhyZXNob2xkKCkpKTsKKyAgICBtdWwzMihJbW0zMihjb2RlQmxvY2soKS0+ZGVzaXJl
ZFN1Y2Nlc3NGYWlsUmF0aW8oKSksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgCisgICAgSnVtcCBsb3dGYWlsUmF0ZSA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5m
bzo6cmVnVDIsIEdQUkluZm86OnJlZ1QxKTsKICAgICAKLSAgICBzdG9yZTMyKEltbTMyKGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
KCkpLCBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+YWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIo
KSk7CisgICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIHN0b3JlMzIo
SW1tMzIoQ29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkp
LCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50
ZXIoKSkpOworICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBmZXdG
YWlscy5saW5rKHRoaXMpOworICAgIGxvd0ZhaWxSYXRlLmxpbmsodGhpcyk7CisgICAgCisgICAg
c3RvcmUzMihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9y
T3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKSksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVC
bG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgCisgICAgZG9uZUFkanVzdGlu
Zy5saW5rKHRoaXMpOwogICAgIAogICAgIC8vIDEyKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxh
c3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCkBAIC00ODEsNiArNTEzLDgg
QEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKICAgICAvLyBib3RoIG5vcm1hbCBy
ZXR1cm4gY29kZSBhbmQgd2hlbiBqdW1waW5nIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyKS4KICAg
ICBwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDIpOwogICAgIGVt
aXRQdXRUb0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMiwgUmVnaXN0ZXJGaWxlOjpSZXR1
cm5QQyk7CisgICAgCisgICAgYWRkUHRyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoY29kZUJs
b2NrKCktPmFkZHJlc3NPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwogfQogCiB2b2lk
IEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCkBAIC00OTgsMTAgKzUzMiw2IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICBib29sIGNvbXBpbGVkU3BlY3VsYXRpdmUgPSBz
cGVjdWxhdGl2ZS5jb21waWxlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChjb21waWxlZFNwZWN1bGF0
aXZlLCBjb21waWxlZFNwZWN1bGF0aXZlKTsKIAotI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQot
ICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29kZXIuZmluaXNo
KCkpOwotI2VuZGlmCi0gICAgCiAgICAgbGlua09TUkV4aXRzKHNwZWN1bGF0aXZlKTsKIAogICAg
IC8vIEl0ZXJhdGUgb3ZlciB0aGUgbV9jYWxscyB2ZWN0b3IsIGNoZWNraW5nIGZvciBleGNlcHRp
b24gY2hlY2tzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNDYgQEAgcHVibGljOgog
ICAgIAogICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaykKICAg
ICB7Ci0gICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKGJhc2ljQmxvY2suYnl0ZWNv
ZGVCZWdpbiwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworI2lm
IEVOQUJMRShERkdfT1NSX0VOVFJZKQorICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29k
ZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4s
IGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIGxhc3RMaXZlQXJndW1lbnQgPSAwOworICAgICAgICB1bnNpZ25lZCBs
YXN0TGl2ZUxvY2FsID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgbGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgbGFzdExpdmVMb2NhbCA9IGk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUFyZ3VtZW50KSB7CisgICAgICAgICAgICBlbnRyeS0+
bV9saXZlQXJndW1lbnRzLnJlc2l6ZShsYXN0TGl2ZUFyZ3VtZW50ICsgMSk7CisgICAgICAgICAg
ICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVBcmd1bWVudDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLnNldChpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbnRyeS0+bV9saXZl
QXJndW1lbnRzLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBpZiAobGFzdExpdmVMb2NhbCkg
eworICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5yZXNpemUobGFzdExpdmVMb2Nh
bCArIDEpOworICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhcigpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZl
TG9jYWw7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ld
LnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlh
Ymxlcy5zZXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhcigpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGJhc2ljQmxvY2spOworI2VuZGlmCiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzUzLDcgKzM5
Miw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgLy8gSklUIGNvZGUgbWFwIGZvciBPU1IgZW50cnlw
b2ludHMuCiAgICAgTGFiZWwgbV9zdGFydE9mQ29kZTsKLSAgICBDb21wYWN0SklUQ29kZU1hcDo6
RW5jb2RlciBtX2ppdENvZGVNYXBFbmNvZGVyOwogCiAgICAgc3RydWN0IFByb3BlcnR5QWNjZXNz
UmVjb3JkIHsKICAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoQ2FsbCBmdW5jdGlvbkNhbGws
IGludDE2X3QgZGVsdGFDaGVja0ltbVRvQ2FsbCwgaW50MTZfdCBkZWx0YUNhbGxUb1N0cnVjdENo
ZWNrLCBpbnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGludDE2X3QgZGVsdGFDYWxsVG9T
bG93Q2FzZSwgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3Qg
dmFsdWVHUFIsIGludDhfdCBzY3JhdGNoR1BSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDgg
QEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIEFTU0VSVChj
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJU
KGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29k
ZU1hcCgpKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1iZXJPZkRGR09TUkVudHJpZXMoKSk7
CiAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIHByaW50ZigiT1NSIGluICVwKCVw
KSBmcm9tIGJjIyV1XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0
ZWNvZGVJbmRleCk7CkBAIC02Niw2ICs2Nyw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVj
U3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9j
ay0+ZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICAK
KyAgICBBU1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsKICAg
ICAKICAgICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0byBwZXJmb3Jt
IE9TUiBlbnRyeS4gSXQgbWF5IGZpbmQKICAgICAvLyB0aGF0IGl0IGlzIHVuc2FmZSB0byBkbyBz
bywgZm9yIGFueSBudW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50ZWQKQEAgLTk3
LDcgKzEwMSw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRp
Y3Rpb25zLT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0
aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25z
LT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgICAgIGlmIChpIDwgZW50cnktPm1f
bGl2ZUFyZ3VtZW50cy5ib3VuZHMoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChpKQor
ICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3Vt
ZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGlj
dGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUsMTEgKzEx
MCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0IGFuIE9T
UiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRoZW4gd2Ug
c2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kp
IHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5yZWdp
c3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSkgewor
ICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuYm91bmRzKCkgJiYgZW50cnkt
Pm1fbGl2ZVZhcmlhYmxlcy5nZXQoaSkKKyAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxp
ZChnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25z
LT5nZXRQcmVkaWN0aW9uKGkpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAg
ICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMs
IGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2Ny
aXB0aW9uKCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihp
KSkpOwogI2VuZGlmCkBAIC0xMzksMzAgKzE0Miw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShF
eGVjU3RhdGUqIGV4ZWMsIEMKICAgICAKICAgICBleGVjLT5zZXRDb2RlQmxvY2soY29kZUJsb2Nr
KTsKICAgICAKLSAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG1hY2hp
bmUgY29kZSBhZGRyZXNzLiBUaGUgREZHIHN0b3JlcwotICAgIC8vICAgIHRoZSBtYWNoaW5lIGNv
ZGUgb2Zmc2V0cyBvZiBPU1IgdGFyZ2V0cyBpbiBhIENvbXBhY3RKSVRDb2RlTWFwLgotICAgIC8v
ICAgIERlY29kaW5nIGl0IGlzIG5vdCBzdXBlciBlZmZpY2llbnQsIGJ1dCB3ZSBleHBlY3QgdGhh
dCBPU1IgZW50cnkKLSAgICAvLyAgICBoYXBwZW5zIHN1ZmZpY2llbnRseSByYXJlbHksIGFuZCB0
aGF0IE9TUiBlbnRyeXBvaW50cyBhcmUgc3VmZmljaWVudGx5Ci0gICAgLy8gICAgZmV3LCB0aGF0
IHRoaXMgd29uJ3QgaHVydCB0aHJvdWdocHV0LiBOb3RlIHRoYXQgdGhlIG9ubHkgcmVhbAotICAg
IC8vICAgIHJlYXNvbiB3aHkgd2UgdXNlIGEgQ29tcGFjdEpJVENvZGVNYXAgaXMgdG8gYXZvaWQg
aGF2aW5nIHRvIGludHJvZHVjZQotICAgIC8vICAgIHlldCBhbm90aGVyIGRhdGEgc3RydWN0dXJl
IGZvciBtYXBwaW5nIGJldHdlZW4gYnl0ZWNvZGUgaW5kaWNlcyBhbmQKLSAgICAvLyAgICBtYWNo
aW5lIGNvZGUgb2Zmc2V0cy4KLSAgICAKLSAgICBDb21wYWN0SklUQ29kZU1hcDo6RGVjb2RlciBk
ZWNvZGVyKGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKLSAgICB1bnNpZ25lZCBtYWNoaW5lQ29k
ZU9mZnNldCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICB3aGls
ZSAoZGVjb2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSkgewotICAgICAgICB1bnNpZ25l
ZCBjdXJyZW50Qnl0ZWNvZGVJbmRleDsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudE1hY2hpbmVD
b2RlT2Zmc2V0OwotICAgICAgICBkZWNvZGVyLnJlYWQoY3VycmVudEJ5dGVjb2RlSW5kZXgsIGN1
cnJlbnRNYWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgICAgIGlmIChjdXJyZW50Qnl0ZWNvZGVJbmRl
eCA9PSBieXRlY29kZUluZGV4KSB7Ci0gICAgICAgICAgICBtYWNoaW5lQ29kZU9mZnNldCA9IGN1
cnJlbnRNYWNoaW5lQ29kZU9mZnNldDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIEFTU0VSVChtYWNoaW5lQ29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworICAgIC8vIDQpIEZpbmQgYW5kIHJldHVybiB0aGUg
ZGVzdGluYXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuCiAgICAgCi0gICAgdm9pZCogcmVzdWx0
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNv
ZGVCbG9jay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFjaGluZUNvZGVPZmZzZXQpOworICAg
IHZvaWQqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIGVudHJ5LT5tX21h
Y2hpbmVDb2RlT2Zmc2V0KTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAg
IHByaW50ZigiICAgIE9TUiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3MgJXAuXG4iLCBy
ZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgREZHT1NSRW50cnlfaAog
I2RlZmluZSBERkdPU1JFbnRyeV9oCiAKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CkBAIC0zNCw2ICszNiwxOCBAQCBjbGFz
cyBDb2RlQmxvY2s7CiBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQorc3Ry
dWN0IE9TUkVudHJ5RGF0YSB7CisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVu
c2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgQml0VmVjdG9yIG1fbGl2ZUFyZ3VtZW50
czsKKyAgICBCaXRWZWN0b3IgbV9saXZlVmFyaWFibGVzOworfTsKKworaW5saW5lIHVuc2lnbmVk
IGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEp
Cit7CisgICAgcmV0dXJuIG9zckVudHJ5RGF0YS0+bV9ieXRlY29kZUluZGV4OworfQorCiB2b2lk
KiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7CiAjZWxzZQogaW5saW5lIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gMDsgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3Nyw2ICs4NzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7
CisgICAgICAgICAgICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCisgICAgICAgICAgICBub25TcGVj
dWxhdGl2ZVZhbHVlVG9JbnQzMihub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAg
ICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lv
biA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNpbmNsdWRlICJKZXR0aXNvbmVk
Q29kZUJsb2Nrcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIGJvb2wgaXNQb2ludGVy
QWxpZ25lZCh2b2lkKiBwKQpAQCAtMzMsNiArMzUsMjcgQEAgaW5saW5lIGJvb2wgaXNQb2ludGVy
QWxpZ25lZCh2b2lkKiBwKQogICAgIHJldHVybiAhKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNo
YXIqKSAtIDEpKTsKIH0KIAorQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNv
bnN0IE1hcmtlZEJsb2NrU2V0KiBibG9ja3MsIEpldHRpc29uZWRDb2RlQmxvY2tzKiBjb2RlQmxv
Y2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQorICAgICwgbV9zaXplKDApCisgICAg
LCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQorICAgICwgbV9ibG9ja3MoYmxvY2tzKQorICAg
ICwgbV9jb2RlQmxvY2tzKGNvZGVCbG9ja3MpCit7CisgICAgaWYgKCFtX2NvZGVCbG9ja3MpIHsK
KyAgICAgICAgLy8gQ3JlYXRlIGEgZHVtbXkgSmV0dGlzb25lZENvZGVCbG9ja3Mgc3RydWN0dXJl
LCBzbyB0aGF0IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoKQorICAgICAgICAvLyBkb2Vzbid0IGhh
dmUgdG8gZG8gYW55IG51bGwgY2hlY2tzIG9uIG1fY29kZUJsb2Nrcy4KKyAgICAgICAgbV9teUNv
ZGVCbG9ja3MgPSBhZG9wdFB0cihuZXcgSmV0dGlzb25lZENvZGVCbG9ja3MoKSk7CisgICAgICAg
IG1fY29kZUJsb2NrcyA9IG1fbXlDb2RlQmxvY2tzLmdldCgpOworICAgIH0KK30KKworQ29uc2Vy
dmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCit7CisgICAgaWYgKG1fcm9vdHMgIT0g
bV9pbmxpbmVSb290cykKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZSht
X3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKK30KKwogdm9pZCBDb25zZXJ2
YXRpdmVSb290czo6Z3JvdygpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbV9jYXBhY2l0
eSA9PSBpbmxpbmVDYXBhY2l0eSA/IG5vbklubGluZUNhcGFjaXR5IDogbV9jYXBhY2l0eSAqIDI7
CkBAIC00Niw2ICs2OSw4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogCiBpbmxp
bmUgdm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBm
aWx0ZXIpCiB7CisgICAgbV9jb2RlQmxvY2tzLT5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJs
b2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRl
ci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAg
QVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxvY2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9v
dHMuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTIgQEAKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrczsK
IGNsYXNzIEhlYXA7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1YmxpYzoKLSAgICBD
b25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCopOworICAgIENvbnNlcnZhdGl2
ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiwgSmV0dGlzb25lZENvZGVCbG9ja3MqIGNvZGVC
bG9ja3MgPSAwKTsKICAgICB+Q29uc2VydmF0aXZlUm9vdHMoKTsKIAogICAgIHZvaWQgYWRkKHZv
aWQqIGJlZ2luLCB2b2lkKiBlbmQpOwpAQCAtNTYsMjMgKzU3LDExIEBAIHByaXZhdGU6CiAgICAg
c2l6ZV90IG1fc2l6ZTsKICAgICBzaXplX3QgbV9jYXBhY2l0eTsKICAgICBjb25zdCBNYXJrZWRC
bG9ja1NldCogbV9ibG9ja3M7CisgICAgSmV0dGlzb25lZENvZGVCbG9ja3MqIG1fY29kZUJsb2Nr
czsKKyAgICBPd25QdHI8SmV0dGlzb25lZENvZGVCbG9ja3M+IG1fbXlDb2RlQmxvY2tzOwogICAg
IEpTQ2VsbCogbV9pbmxpbmVSb290c1tpbmxpbmVDYXBhY2l0eV07CiB9OwogCi1pbmxpbmUgQ29u
c2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1hcmtlZEJsb2NrU2V0KiBi
bG9ja3MpCi0gICAgOiBtX3Jvb3RzKG1faW5saW5lUm9vdHMpCi0gICAgLCBtX3NpemUoMCkKLSAg
ICAsIG1fY2FwYWNpdHkoaW5saW5lQ2FwYWNpdHkpCi0gICAgLCBtX2Jsb2NrcyhibG9ja3MpCi17
Ci19Ci0KLWlubGluZSBDb25zZXJ2YXRpdmVSb290czo6fkNvbnNlcnZhdGl2ZVJvb3RzKCkKLXsK
LSAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQotICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkgKiBzaXplb2YoSlNDZWxsKikp
OwotfQotCiBpbmxpbmUgc2l6ZV90IENvbnNlcnZhdGl2ZVJvb3RzOjpzaXplKCkKIHsKICAgICBy
ZXR1cm4gbV9zaXplOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5NCw2ICszOTQsMTEgQEAgdm9pZCBIZWFwOjptYXJrUHJvdGVjdGVkT2Jq
ZWN0cyhIZWFwUm9vdAogICAgICAgICBoZWFwUm9vdFZpc2l0b3IudmlzaXQoJml0LT5maXJzdCk7
CiB9CiAKK3ZvaWQgSGVhcDo6amV0dGlzb25Db2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+
IGNvZGVCbG9jaykKK3sKKyAgICBtX2NvZGVCbG9ja3MuYWRkQ29kZUJsb2NrKGNvZGVCbG9jayk7
Cit9CisKIHZvaWQgSGVhcDo6cHVzaFRlbXBTb3J0VmVjdG9yKFZlY3RvcjxWYWx1ZVN0cmluZ1Bh
aXI+KiB0ZW1wVmVjdG9yKQogewogICAgIG1fdGVtcFNvcnRpbmdWZWN0b3JzLmFwcGVuZCh0ZW1w
VmVjdG9yKTsKQEAgLTQ1NiwxMCArNDYxLDEyIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKICAg
ICBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPSBDb2xsZWN0aW9uOwogCiAgICAgdm9pZCogZHVtbXk7
Ci0KKyAgICAKKyAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrcygpOworICAgIAogICAgIC8vIFdl
IGdhdGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNsZWFyaW5nIG1hcmsgYml0cyBiZWNh
dXNlIGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1c2VzIHRoZSBtYXJrIGJpdHMgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFsaWQuCi0gICAgQ29uc2VydmF0aXZl
Um9vdHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKKyAgICBD
b25zZXJ2YXRpdmVSb290cyBtYWNoaW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tz
KCksICZtX2NvZGVCbG9ja3MpOwogICAgIG1fbWFjaGluZVRocmVhZHMuZ2F0aGVyQ29uc2VydmF0
aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkpOwogCiAgICAgQ29uc2VydmF0aXZl
Um9vdHMgcmVnaXN0ZXJGaWxlUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCkpOwpAQCAtNDY5
LDcgKzQ3Niw3IEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKCkKIAogICAgIFNsb3RWaXNpdG9yJiB2
aXNpdG9yID0gbV9zbG90VmlzaXRvcjsKICAgICBIZWFwUm9vdFZpc2l0b3IgaGVhcFJvb3RWaXNp
dG9yKHZpc2l0b3IpOwotCisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQobWFjaGluZVRocmVhZFJv
b3RzKTsKICAgICB2aXNpdG9yLmRyYWluKCk7CiAKQEAgLTQ5Myw2ICs1MDAsOCBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cygpCiAKICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhlYXBSb290VmlzaXRv
cik7CiAgICAgdmlzaXRvci5kcmFpbigpOworICAgIAorICAgIG1fY29kZUJsb2Nrcy50cmFjZUNv
ZGVCbG9ja3ModmlzaXRvcik7CiAKICAgICAvLyBXZWFrIGhhbmRsZXMgbXVzdCBiZSBtYXJrZWQg
bGFzdCwgYmVjYXVzZSB0aGVpciBvd25lcnMgdXNlIHRoZSBzZXQgb2YKICAgICAvLyBvcGFxdWUg
cm9vdHMgdG8gZGV0ZXJtaW5lIHJlYWNoYWJpbGl0eS4KQEAgLTU4OCw2ICs1OTcsNyBAQCB2b2lk
IEhlYXA6OmNvbGxlY3QoU3dlZXBUb2dnbGUgc3dlZXBUb2dnCiAgICAgSkFWQVNDUklQVENPUkVf
R0NfTUFSS0VEKCk7CiAgICAgCiAgICAgcmVzZXRBbGxvY2F0b3IoKTsKKyAgICBtX2NvZGVCbG9j
a3MuZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CiAKICAgICBpZiAoc3dlZXBUb2dnbGUgPT0g
RG9Td2VlcCkgewogICAgICAgICBzd2VlcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJBbGxvY2F0aW9u
U3BhY2UuaCIKICNpbmNsdWRlICJIYW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2su
aCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJs
b2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFj
ZS5oIgpAQCAtOTgsNiArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHBy
b3RlY3QoSlNWYWx1ZSk7CiAgICAgICAgIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVl
IHdoZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KKyAgICAgICAgCisgICAgICAgIHZv
aWQgamV0dGlzb25Db2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayk7CiAK
ICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAgICAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0x
OTEsNiArMTk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xv
dFZpc2l0b3I7CiAgICAgICAgIEhhbmRsZUhlYXAgbV9oYW5kbGVIZWFwOwogICAgICAgICBIYW5k
bGVTdGFjayBtX2hhbmRsZVN0YWNrOworICAgICAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcyBtX2Nv
ZGVCbG9ja3M7CiAgICAgICAgIAogICAgICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVC
bG9ja3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK0pldHRpc29uZWRDb2RlQmxvY2tzOjpKZXR0aXNvbmVkQ29kZUJs
b2NrcygpIHsgfQorCitKZXR0aXNvbmVkQ29kZUJsb2Nrczo6fkpldHRpc29uZWRDb2RlQmxvY2tz
KCkKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1f
bWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5k
ID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGRlbGV0ZSBp
dGVyLT5maXJzdDsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6YWRkQ29kZUJsb2Nr
KFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKG1fbWFwLmZp
bmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21hcC5lbmQoKSk7CisgICAgCisgICAgbV9tYXAuYWRk
KGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNlKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJs
b2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRl
cmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQor
ICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxzZTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJs
b2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJsb2Nr
Kj4gdG9SZW1vdmU7CisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0
b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46
Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sq
LCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgIGlmICghaXRlci0+c2Vjb25kKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0
ZXItPmZpcnN0KTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRv
UmVtb3ZlLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fbWFwLnJlbW92ZSh0b1JlbW92ZVtpXSk7
CisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKKyAgICB9Cit9CisKK3ZvaWQgSmV0dGlzb25l
ZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7
CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5i
ZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1f
bWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3Ig
aXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5maXJzdC0+
dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlz
b25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpZm5kZWYgSmV0dGlzb25lZENvZGVCbG9j
a3NfaAorI2RlZmluZSBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCisKKyNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNz
IFNsb3RWaXNpdG9yOworCitjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrcyB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7IC8vIE9ubHkgbWFsbG9jJ2QgaW4gQ29uc2VydmF0aXZlUm9vdHMK
K3B1YmxpYzoKKyAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIAorICAgIH5KZXR0aXNv
bmVkQ29kZUJsb2NrcygpOworICAgIAorICAgIHZvaWQgYWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8
Q29kZUJsb2NrPik7CisgICAgCisgICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgdm9p
ZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIC8vIFdlIGhh
dmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJlY2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhh
c2hNYXAgYXMgbWFya2Vycy4KKyAgICAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICAv
LyBUaGlzIGNoZWNrcyBmb3IgYm90aCBvZiB0aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCisg
ICAgICAgIC8vIDAgKyAxID0gMQorICAgICAgICAvLyAtMSArIDEgPSAwCisgICAgICAgIGlmICh2
YWx1ZSArIDEgPD0gMSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRp
Y19jYXN0PENvZGVCbG9jayo+KGNhbmRpZGF0ZUNvZGVCbG9jaykpOworICAgICAgICBpZiAoaXRl
ciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaXRlci0+c2Vj
b25kID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvZGVCbG9j
a3MoKTsKKyAgICAKKyAgICB2b2lkIHRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworCitw
cml2YXRlOgorICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IHRvIHVzZSBhbiBPd25QdHI8Q29kZUJs
b2NrPiBoZXJlIGJ1dCB0aGF0IHdvdWxkCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBub3Qgd29y
ay4KKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+IG1fbWFwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTE0LDcgKzE5MTQsMjIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJv
bQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gc3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCk7CiAK
LSAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVkIG9wdGltaXplX2Zyb21f
bG9vcCB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2stPmV4ZWN1
dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29k
ZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7CisjZW5kaWYKKworICAgIGlmIChj
b2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQorICAgICAgICBwcmludGYoIkNvbnNpZGVyaW5nIGxvb3AgT1NSIGludG8gJXAo
JXApIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNz
Q291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50
ZXIoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hv
dWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NS
KQorICAgICAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVw
KSAoaW4gbG9vcCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7Cisj
ZW5kaWYKKyAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAgICBwcmludGYoIkRlbGF5aW5nIG9wdGltaXph
dGlvbiBmb3IgJXAgKGluIGxvb3ApIGJlY2F1c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5c
biIsIGNvZGVCbG9jayk7CkBAIC0xOTUyLDYgKzE5NjcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElP
Tih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjZW5kaWYKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGlt
aXplU29vbigpOworICAgICAgICBvcHRpbWl6ZWRDb2RlQmxvY2stPmNvdW50U3BlY3VsYXRpb25T
dWNjZXNzKCk7CiAgICAgICAgIFNUVUJfU0VUX1JFVFVSTl9BRERSRVNTKGFkZHJlc3MpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk2MCw2ICsxOTc2LDMwIEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBwcmludGYoIk9wdGltaXppbmcgJXAgZnJv
bSBsb29wIHN1Y2NlZWRlZCwgT1NSIGZhaWxlZC5cbiIsIGNvZGVCbG9jayk7CiAjZW5kaWYKIAor
ICAgIC8vIENvdW50IHRoZSBPU1IgZmFpbHVyZSBhcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUuIElm
IHRoaXMgaGFwcGVucyBhIGxvdCwgdGhlbgorICAgIC8vIHJlb3B0aW1pemUuCisgICAgb3B0aW1p
emVkQ29kZUJsb2NrLT5jb3VudFNwZWN1bGF0aW9uRmFpbHVyZSgpOworICAgIAorI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbmNvdW50ZXJlZCBsb29wIE9TUiBmYWls
dXJlIGludG8gJXAoJXApIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSk7CisjZW5kaWYKKworICAgIC8vIFdlIGFyZSBhIGxvdCBtb3JlIGNv
bnNlcnZhdGl2ZSBhYm91dCB0cmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIGFmdGVyIE9TUiBmYWls
dXJlIHRoYW4KKyAgICAvLyBiZWZvcmUgaXQuIElmIHdlIGVudGVyIHRoZSBvcHRpbWl6ZV9mcm9t
X2xvb3AgdHJpZ2dlciB3aXRoIGEgYnVja2V0IGZ1bGwgb2YgZmFpbAorICAgIC8vIGFscmVhZHks
IHRoZW4gd2UgcmVhbGx5IHdvdWxkIGxpa2UgdG8gcmVvcHRpbWl6ZSBpbW1lZGlhdGVseS4gQnV0
IHRoaXMgY2FzZSBjb3ZlcnMKKyAgICAvLyBzb21ldGhpbmcgZWxzZTogdGhlcmUgd2VyZW4ndCBt
YW55IChvciBhbnkpIHNwZWN1bGF0aW9uIGZhaWx1cmVzIGJlZm9yZSwgYnV0IHdlIGp1c3QKKyAg
ICAvLyBmYWlsZWQgdG8gZW50ZXIgdGhlIHNwZWN1bGF0aXZlIGNvZGUgYmVjYXVzZSBzb21lIHZh
cmlhYmxlIGhhZCB0aGUgd3JvbmcgdmFsdWUgb3IKKyAgICAvLyBiZWNhdXNlIHRoZSBPU1IgY29k
ZSBkZWNpZGVkIGZvciBhbnkgc3B1cmlvdXMgcmVhc29uIHRoYXQgaXQgZGlkIG5vdCB3YW50IHRv
IE9TUgorICAgIC8vIHJpZ2h0IG5vdy4gU28sIHdlIG9ubHkgdHJpZ2dlciByZW9wdGltaXphdGlv
biBvbmx5IHVwb24gdGhlIG1vcmUgY29uc2VydmF0aXZlIChub24tbG9vcCkKKyAgICAvLyByZW9w
dGltaXphdGlvbiB0cmlnZ2VyLgorICAgIGlmIChvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJl
b3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHBy
aW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3AgYWZ0ZXIg
T1NSIGZhaWwpLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOworI2Vu
ZGlmCisgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBPU1IgZmFpbGVkIHRoaXMgdGlt
ZSwgYnV0IGl0IG1pZ2h0IHN1Y2NlZWQgbmV4dCB0aW1lISBMZXQgdGhlIGNvZGUgcnVuIGEgYml0
CiAgICAgLy8gbG9uZ2VyIGFuZCB0aGVuIHRyeSBhZ2Fpbi4KICAgICBjb2RlQmxvY2stPm9wdGlt
aXplQWZ0ZXJXYXJtVXAoKTsKQEAgLTE5NzIsOCArMjAxMiwyMyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFj
a0ZyYW1lLmNhbGxGcmFtZTsKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCk7CiAgICAgCi0gICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFj
ZW1lbnQoKSkKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiRW50ZXJl
ZCBvcHRpbWl6ZV9mcm9tX3JldCB3aXRoIGV4ZWN1dGVDb3VudGVyID0gJWQsIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBj
b2RlQmxvY2stPmV4ZWN1dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSk7CisjZW5k
aWYKKworICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYoIlJldHVybmluZyBmcm9t
IG9sZCBKSVQgY2FsbCBmcmFtZSB3aXRoIG9wdGltaXplZCByZXBsYWNlbWVudCAlcCglcCksIHdp
dGggc3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRl
cigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7
CisjZW5kaWYKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVv
cHRpbWl6ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAg
IHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIHJldHVybiku
XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5kaWYKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7Cisg
ICAgICAgIH0KKwogICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIGlmICghY29kZUJs
b2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxOCBAQCBERkc6OkludHJpbnNpYyBO
YXRpdmVFeGVjdXRhYmxlOjppbnRyaW5zCiB9CiAjZW5kaWYKIAorLy8gVXRpbGl0eSBtZXRob2Qg
dXNlZCBmb3IgamV0dGlzb25pbmcgY29kZSBibG9ja3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
c3RhdGljIHZvaWQgamV0dGlzb25Db2RlQmxvY2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBP
d25QdHI8VD4mIGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBl
KCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpOworICAgIE93blB0cjxUPiBjb2RlQmxvY2tUb0pldHRpc29uID0gY29kZUJsb2Nr
LnJlbGVhc2UoKTsKKyAgICBjb2RlQmxvY2sgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFQ+KGNvZGVC
bG9ja1RvSmV0dGlzb24tPnJlbGVhc2VBbHRlcm5hdGl2ZSgpKTsKKyAgICBjb2RlQmxvY2tUb0pl
dHRpc29uLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgZ2xvYmFsRGF0YS5oZWFwLmpldHRp
c29uQ29kZUJsb2NrKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pl
dHRpc29uLnJlbGVhc2UoKSkpOworfQorCiBjb25zdCBDbGFzc0luZm8gU2NyaXB0RXhlY3V0YWJs
ZTo6c19pbmZvID0geyAiU2NyaXB0RXhlY3V0YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6c19pbmZv
LCAwLCAwIH07CiAKIGNvbnN0IENsYXNzSW5mbyBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0geyAi
RXZhbEV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCAwIH07CkBAIC0y
MTEsNiArMjIzLDEzIEBAIEpTT2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEK
ICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBFdmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6
ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9j
ayhnbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxvY2spOworICAgIG1faml0Q29kZUZvckNhbGwgPSBt
X2V2YWxDb2RlQmxvY2stPmdldEpJVENvZGUoKTsKKyAgICBBU1NFUlQoIW1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjayk7Cit9CisKIHZvaWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzLCAmc19pbmZvKTsKQEAgLTMzMCw2ICszNDksMTMgQEAgSlNPYmplY3QqIFByb2dyYW1F
eGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAgIHJldHVybiAwOwogfQogCit2b2lkIFByb2dyYW1F
eGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQoreworICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9j
ayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUQ29k
ZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwog
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5saW5rQ2FsbHMoKQogewogI2lmIEVOQUJMRShKSVQp
CkBAIC01MzMsNiArNTU5LDIwIEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBp
bGVGb3IKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAg
IGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAg
bV9qaXRDb2RlRm9yQ2FsbCA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUQ29kZSgpOworICAg
IG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0
SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7Cit9CisKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpq
ZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQoreworICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0KTsKKyAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC0+Z2V0SklUQ29kZSgpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygp
OworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2lu
Zm8pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAko
cmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw2ICszMjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0
dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIEV2YWxDb2RlQmxv
Y2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewpAQCAtMzkyLDYgKzM5NCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRp
bWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIFByb2dy
YW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAgICAgICAgewpAQCAtNDc1LDYgKzQ3
OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0
YXRlKiBjYWxsZWVBcmdzRXhlYyA9IDApOworICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNv
bk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNH
ZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAgICAgICAgewpAQCAtNDk4LDYgKzUwNCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRp
bWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAog
ICAgICAgICB7CkBAIC01MzgsNiArNTQ2LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAg
ICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5v
ZGUpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVk
Q29kZUZvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAor
ICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoZ2xvYmFsRGF0YSk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JD
b25zdHJ1Y3QoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEJpdFZlY3Rvcl9oCisjZGVmaW5lIEJpdFZlY3Rvcl9oCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNp
emVhYmxlIGJpdHZlY3RvciBjbGFzcy4gSW4gdGhlIGNvbW1vbiBjYXNlIGl0CisvLyBvY2N1cGll
cyBvbmUgd29yZCwgYnV0IGlmIG5lY2Vzc2FyeSwgaXQgd2lsbCBpbmZsYXRlIHRoaXMgb25lIHdv
cmQgdG8gcG9pbnQKKy8vIHRvIGEgc2luZ2xlIGNodW5rIG9mIG91dC1vZi1saW5lIGFsbG9jYXRl
ZCBzdG9yYWdlIHRvIHN0b3JlIGFuIGFyYml0cmFyeSBudW1iZXIKKy8vIG9mIGJpdHMuCisvLwor
Ly8gLSBUaGUgYml0dmVjdG9yIG5lZWRzIHRvIGJlIHJlc2l6ZWQgbWFudWFsbHkgKGp1c3QgY2Fs
bCBlbnN1cmVTaXplKCkpLgorLy8KKy8vIC0gVGhlIGJpdHZlY3RvciByZW1lbWJlcnMgdGhlIGJv
dW5kIG9mIGhvdyBtYW55IGJpdHMgY2FuIGJlIHN0b3JlZCwgYnV0IHRoaXMKKy8vICAgbWF5IGJl
IHNsaWdodGx5IGdyZWF0ZXIgKGJ5IGFzIG11Y2ggYXMgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBj
b25zdGFudCkKKy8vICAgdGhhbiB0aGUgbGFzdCBhcmd1bWVudCBwYXNzZWQgdG8gZW5zdXJlU2l6
ZSgpLgorLy8KKy8vIC0gQWNjZXNzZXMgQVNTRVJUIHRoYXQgeW91IGFyZSB3aXRoaW4gYm91bmRz
LgorLy8KKy8vIC0gQml0cyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gemVy
by4KKy8vCisvLyBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBCaXRWZWN0b3IgY2xhc3MgbWF5IG5v
dCBiZSB0aGUgZmFzdGVzdCBhcm91bmQsIHNpbmNlCisvLyBpdCBkb2VzIGNvbmRpdGlvbmFscyBv
biBldmVyeSBnZXQvc2V0L2NsZWFyLiBCdXQgaXQgaXMgZ3JlYXQgaWYgeW91IG5lZWQgdG8KKy8v
IGp1Z2dsZSBhIGxvdCBvZiB2YXJpYWJsZS1sZW5ndGggQml0VmVjdG9ycyBhbmQgeW91J3JlIHdv
cnJpZWQgYWJvdXQgd2FzdGluZworLy8gc3BhY2UuCisKK2NsYXNzIEJpdFZlY3RvciB7CitwdWJs
aWM6IAorICAgIEJpdFZlY3RvcigpCisgICAgICAgIDogbV9iaXRzT3JQb2ludGVyKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgQml0VmVjdG9yKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRz
T3JQb2ludGVyKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKQor
ICAgIHsKKyAgICAgICAgKCp0aGlzKSA9IG90aGVyOworICAgIH0KKyAgICAKKyAgICB+Qml0VmVj
dG9yKCkKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CisgICAg
fQorICAgIAorICAgIEJpdFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIp
CisgICAgeworICAgICAgICB1aW50cHRyX3QgbmV3Qml0c09yUG9pbnRlcjsKKyAgICAgICAgaWYg
KG90aGVyLmlzSW5saW5lKCkpCisgICAgICAgICAgICBuZXdCaXRzT3JQb2ludGVyID0gb3RoZXIu
bV9iaXRzT3JQb2ludGVyOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE91dE9mTGluZUJp
dHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuYm91bmRz
KCkpOworICAgICAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIu
Yml0cygpLCBvdGhlci5ib3VuZHMoKSA+PiAzKTsKKyAgICAgICAgICAgIG5ld0JpdHNPclBvaW50
ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obmV3T3V0T2ZMaW5lQml0cyk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFpc0lubGluZSgpKQorICAgICAgICAgICAgT3V0T2ZMaW5lQml0
czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBu
ZXdCaXRzT3JQb2ludGVyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgc2l6
ZV90IGJvdW5kcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9iaXRzT3JQb2ludGVyID4+
IG1heElubGluZUJpdHMoKSkKKyAgICAgICAgICAgIHJldHVybiBtYXhJbmxpbmVCaXRzKCk7Cisg
ICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRzKCktPm51bUJpdHMoKTsKKyAgICB9CisKKyAgICB2
b2lkIGVuc3VyZVNpemUoc2l6ZV90IG51bUJpdHMpCisgICAgeworICAgICAgICBpZiAobnVtQml0
cyA8PSBib3VuZHMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcmVzaXplT3V0T2ZM
aW5lKG51bUJpdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBMaWtlIGVuc3VyZVNpemUoKSwgYnV0
IHN1cHBvcnRzIHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBiaXR2ZWN0b3IuCisgICAgdm9pZCBy
ZXNpemUoc2l6ZV90IG51bUJpdHMpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChudW1CaXRzIDw9IG1heElu
bGluZUJpdHMoKSkgeworICAgICAgICAgICAgT3V0T2ZMaW5lQml0cyogbXlPdXRPZkxpbmVCaXRz
ID0gb3V0T2ZMaW5lQml0cygpOworICAgICAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKSB8ICpteU91dE9mTGluZUJp
dHMtPmJpdHMoKTsKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kobXlPdXRPZkxp
bmVCaXRzKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmVzaXplT3V0T2ZMaW5lKG51bUJpdHMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFy
KCkKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgbV9iaXRzT3JQ
b2ludGVyID0gc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ6ZXJvKG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBi
b3VuZHMoKSA+PiAzKTsKKyAgICB9CisKKyAgICBib29sIGdldChzaXplX3QgYml0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8IGJvdW5kcygpKTsKKyAgICAgICAgcmV0dXJuICEh
KGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRlcigpXSAmIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0KHNpemVfdCBiaXQpCisgICAgeworICAgICAgICBBU1NFUlQoYml0IDwgYm91bmRz
KCkpOworICAgICAgICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gfD0gKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKHNpemVfdCBiaXQpCisgICAgeworICAgICAgICBBU1NF
UlQoYml0IDwgYm91bmRzKCkpOworICAgICAgICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIo
KV0gJj0gfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRl
cigpIC0gMSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHNldChiaXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGVhcihiaXQpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVuc2ln
bmVkIG1heElubGluZUJpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHNJblBvaW50ZXIo
KSAtIDE7CisgICAgfQorICAgIAorICAgIGNsYXNzIE91dE9mTGluZUJpdHMgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7IH0K
KyAgICAgICAgc2l6ZV90IG51bVdvcmRzKCkgY29uc3QgeyByZXR1cm4gKG1fbnVtQml0cyArIGJp
dHNJblBvaW50ZXIoKSAtIDEpID4+IGJpdHNJblBvaW50ZXIoKTsgfQorICAgICAgICB1aW50cHRy
X3QqIGJpdHMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KHRoaXMgKyAx
KTsgfQorICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdCB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsgfQorICAgICAgICAKKyAg
ICAgICAgc3RhdGljIE91dE9mTGluZUJpdHMqIGNyZWF0ZShzaXplX3QgbnVtQml0cykKKyAgICAg
ICAgeworICAgICAgICAgICAgbnVtQml0cyA9IChudW1CaXRzICsgYml0c0luUG9pbnRlcigpIC0g
MSkgJiB+Yml0c0luUG9pbnRlcigpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoZmFzdE1hbGxv
YyhzaXplb2YoT3V0T2ZMaW5lQml0cykgKyAobnVtQml0cyA+PiBiaXRzSW5Qb2ludGVyKCkpKSkg
T3V0T2ZMaW5lQml0cyhudW1CaXRzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKQorICAgICAgICB7
CisgICAgICAgICAgICBmYXN0RnJlZShvdXRPZkxpbmVCaXRzKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgT3V0T2ZMaW5lQml0cyhzaXplX3QgbnVtQml0cykKKyAgICAgICAg
ICAgIDogbV9udW1CaXRzKG51bUJpdHMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc2l6ZV90IG1fbnVtQml0czsKKyAgICB9OworICAgIAorICAgIGJvb2wgaXNJbmxp
bmUoKSBjb25zdCB7IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPj4gbWF4SW5saW5lQml0cygpOyB9
CisgICAgCisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cygpIGNvbnN0IHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9p
bnRlcik7IH0KKyAgICBPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKCkgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQb2ludGVyKTsgfQorICAgIAor
ICAgIHZvaWQgcmVzaXplT3V0T2ZMaW5lKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG51bUJpdHMgPiBtYXhJbmxpbmVCaXRzKCkpOworICAgICAgICBPdXRPZkxpbmVCaXRz
KiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0T2ZMaW5lQml0czo6Y3JlYXRlKG51bUJpdHMpOworICAg
ICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBiaXRzKCksIHN0ZDo6bWluKGJv
dW5kcygpLCBudW1CaXRzKSA+PiAzKTsKKyAgICAgICAgaWYgKCFpc0lubGluZSgpKQorICAgICAg
ICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgICAgICBt
X2JpdHNPclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obmV3T3V0T2ZMaW5l
Qml0cyk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCogYml0cygpCisgICAgeworICAgICAg
ICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiAmbV9iaXRzT3JQb2ludGVyOwor
ICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAgfQorICAgIAorICAg
IGNvbnN0IHVpbnRwdHJfdCogYml0cygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxp
bmUoKSkKKyAgICAgICAgICAgIHJldHVybiAmbV9iaXRzT3JQb2ludGVyOworICAgICAgICByZXR1
cm4gb3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBt
X2JpdHNPclBvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpC
aXRWZWN0b3I7CisKKyNlbmRpZiAvLyBCaXRWZWN0b3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108102</attachid>
            <date>2011-09-20 19:45:14 -0700</date>
            <delta_ts>2011-09-20 19:55:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>recomp_patch_4.diff</filename>
            <type>text/plain</type>
            <size>62278</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAKKworICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6
OkV2YWxDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxv
Y2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
OjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxl
cjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6OmFk
ZCk6CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oOgorICAgICAgICAqIGhlYXAv
SGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmpldHRpc29uQ29kZUJsb2NrKToKKyAgICAg
ICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVjdCk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpT
Qzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5j
cHA6CisgICAgICAgIChKU0M6OmpldHRpc29uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZh
bEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OlByb2dy
YW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpGdW5j
dGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwpOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVj
dCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKToKKwogMjAxMS0wOS0yMCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgYWx3YXlz
IHNwZWN1bGF0ZXMgaW50ZWdlciBvbiBtb2R1bG8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2
ICs3NCw5IEBACiAJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTg0
MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLzsgfTsKIAkJMEZEODJFOTAx
NDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFs
dWVQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZEODJFRjUxNDIzMDc1QjAwMTc5Qzk0IC8qIERGR0lu
dHJpbnNpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgyRjJCMTQyNkNBNkQwMDE3
OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29u
ZWRDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi87IH07CisJ
CTBGRDgyRjRCMTQyODA2QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAv
KiBCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3ODMw
MDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
clBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsgfTsK
IAkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZBRkJB
MkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87IH07CkBAIC04MTMsNiArODE2
LDkgQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlZGljdGVkVHlwZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBW
YWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFs
dWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFRjMxNDIz
MDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdJbnRyaW5zaWMuaDsgcGF0aCA9IGRmZy9ERkdJbnRyaW5zaWMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRp
c29uZWRDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpldHRpc29uZWRDb2RlQmxvY2tzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0VmVjdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBP
U0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQx
MjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTYyMSw2ICsxNjI3LDggQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZB
REI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAg
Ki8sCisJCQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tz
LmggKi8sCiAJCQkJQTcwNDU2QUYxNDI3RkIxNTAwMzdEQTY4IC8qIEFsbG9jYXRpb25TcGFjZS5o
ICovLAogCQkJCUE3MDQ1NkFFMTQyN0ZCMDMwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuY3Bw
ICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVz
dGVyLmggKi8sCkBAIC0xNzk3LDYgKzE4MDUsNyBAQAogCQk2NTE2MkVGMTA4RTZBMjFDMDA3NTU2
Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8sCiAJCQkJQzIyQzUy
NDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8sCiAJCQkJMDZEMzU4QTAwREFBRDlDNDAwM0Ix
NzRFIC8qIG1hYyAqLywKIAkJCQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAqLywK
QEAgLTI0MjMsNiArMjQzMiw4IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFy
Z3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8q
IEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZF
RUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkY0QjE0Mjgw
NkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkYyQjE0
MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9pbnRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERGR09T
UkVudHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMwOTcsNiArMzEwOCw3IEBACiAJCQlpc2EgPSBQ
QlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJ
CQlmaWxlcyA9ICgKKwkJCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENv
ZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIwN0E1RjAwMTc5Qzk0
IC8qIFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYzRkYx
MDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU1
NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQyOCw3ICsxNDI4LDEwIEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJjZU9mZnNl
dCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFiKQogICAgICwgbV9hbHRlcm5hdGl2ZShhbHRl
cm5hdGl2ZSkKKyAgICAsIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigwKQorICAgICwgbV9z
cGVjdWxhdGl2ZUZhaWxDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRl
cigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogewogICAgIEFTU0VS
VChtX3NvdXJjZSk7CiAgICAgCkBAIC0xOTM1LDYgKzE5MzgsMjcgQEAgYm9vbCBGdW5jdGlvbkNv
ZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERgogICAgICAgICByZXR1cm4gREZHOjpjYW5Db21waWxl
RnVuY3Rpb25Gb3JDb25zdHJ1Y3QodGhpcyk7CiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1
bmN0aW9uRm9yQ2FsbCh0aGlzKTsKIH0KKwordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAh
PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQo
KSk7CisgICAgc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKK30KKwordm9pZCBFdmFsQ29k
ZUJsb2NrOjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJU
KGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMg
PT0gcmVwbGFjZW1lbnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKK30KKwor
dm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwor
ICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2Rl
Rm9yKGdsb2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2Rl
Rm9yQ2FsbCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKQEAgLTE5
NzQsOCArMTk5OCw4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAgICAg
cHJpbnRmKCJQcm9maWxlIGhvdG5lc3M6ICVsZiwgJWxmXG4iLCAoZG91YmxlKW51bWJlck9mTGl2
ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzLCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51
bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsKICNlbmRpZgogCi0gICAg
aWYgKChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPj0gMC43NQotICAgICAgICAmJiAoZG91YmxlKW51
bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAv
IG51bWJlck9mVmFsdWVQcm9maWxlcygpID49IDAuNSkKKyAgICBpZiAoKCFudW1iZXJPZk5vbkFy
Z3VtZW50VmFsdWVQcm9maWxlcyB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IDAuNzUpCisg
ICAgICAgICYmICghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNh
bXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJP
ZlZhbHVlUHJvZmlsZXMoKSA+PSAwLjUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAg
ICBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcisrOwpAQCAtMjAxNCw3ICsyMDM4LDEyIEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiAgICAgfQogICAgIGZwcmludGYoc3Rk
ZXJyLCAiU2xvd0Nhc2VQcm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1iZXJPZlNsb3dDYXNlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAgICAg
IFNsb3dDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAg
UmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gc2xvd0Nhc2VQcm9maWxlKGkpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwgIlNw
ZWNpYWxGYXN0Q2FzZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bWJlck9mU3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMoKTsgKytpKSB7Cisg
ICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUo
aSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQsIHByb2ZpbGUtPm1fY291bnRlcik7CiAgICAgfQogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTU1
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2luY2x1
ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNs
dWRlICJFdmFsQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRl
ICJKSVRDb2RlLmgiCkBAIC0zMzMsNiArMzM0LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB7CiAgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogYXBwZW5kREZHT1NSRW50cnlEYXRh
KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQorICAg
ICAgICB7CisgICAgICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSBlbnRyeTsKKyAgICAgICAgICAg
IGVudHJ5Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBlbnRy
eS5tX21hY2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgICAgICBt
X2RmZ09TUkVudHJ5LmFwcGVuZChlbnRyeSk7CisgICAgICAgICAgICByZXR1cm4gJm1fZGZnT1NS
RW50cnkubGFzdCgpOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mREZHT1NS
RW50cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZGZnT1NSRW50cnkuc2l6ZSgpOyB9CisgICAgICAg
IERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGEodW5zaWduZWQgaSkgeyByZXR1cm4g
Jm1fZGZnT1NSRW50cnlbaV07IH0KKyAgICAgICAgREZHOjpPU1JFbnRyeURhdGEqIGRmZ09TUkVu
dHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaDxERkc6Ok9TUkVudHJ5RGF0YSwgdW5z
aWduZWQsIERGRzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleD4obV9kZmdPU1JFbnRyeS5i
ZWdpbigpLCBtX2RmZ09TUkVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIH0K
ICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQpAQCAtMzYwLDkgKzM3NiwxMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0gY29k
ZVdpdGhBcml0eUNoZWNrOwogICAgICAgICB9CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUo
KSB7IHJldHVybiBtX2ppdENvZGU7IH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdl
dEpJVENvZGVXaXRoQXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNoZWNr
OyB9CiAgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIG1faml0
Q29kZS5qaXRUeXBlKCk7IH0KICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0
YWJsZU1lbW9yeSgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5KCk7
IH0KICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
LCBTY29wZUNoYWluTm9kZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uKEpT
R2xvYmFsRGF0YSYpID0gMDsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7CiAg
ICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQpAQCAtNjg1LDExICs3MDMsMzcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRyaWdnZXIgZmlsZXMuIEFsbCBDb2RlQmxv
Y2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKICAgICAgICAgLy8gYXMg
dGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgogICAgICAgICAK
KyAgICAgICAgLy8gV2hlbiB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9uIGZhaWx1cmVz
LCB3ZSB0cmlnZ2VyIGEKKyAgICAgICAgLy8gcmVvcHRpbWl6YXRpb24uIEJ1dCBlYWNoIHRpbWUs
IHdlIGluY3JlYXNlIHRoZSBvcHRpbWl6YXRpb24gdHJpZ2dlcgorICAgICAgICAvLyB0byBhdm9p
ZCB0aHJhc2hpbmcuCisgICAgICAgIHVuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIgPD0gMTgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY291bnRSZW9w
dGltaXphdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIrKzsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID4gMTgpCisgICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IDE4
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHBy
b3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZUFmdGVyV2FybVVw
KCkgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIC8vIG9wdGltaXplWFlaKCkgbWV0
aG9kcyBmcm9tIEpJVC1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgc3RhdGljIGludDMyX3QgY291
bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQzMl90IGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gLTEwMDA7CisgICAgICAgICAgICByZXR1cm4gLTEwMDAgPDwgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50MzJfdCBjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAtNTAwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpbnQzMl90KiBhZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigp
CkBAIC02OTcsMTIgKzc0MSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biAmbV9leGVjdXRlQ291bnRlcjsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKENvZGVCbG9jaywgbV9leGVjdXRlQ291bnRlcik7IH0KKworICAgICAgICBpbnQzMl90IGV4
ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlQ291bnRlcjsgfQorICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7IH0KKyAgICAgICAgCiAgICAgICAgIC8v
IENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJl
LiBUaGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24gdHJp
Z2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1
dGluZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24o
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAgICAg
ICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0
aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBwcmV2
ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC03MjYs
NiArNzc2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGVjdXRlQ291bnRl
ciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICAgICAgfQogICAg
ICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0cmln
Z2VyIHRvIGZpcmUgb25seSBhZnRlcgorICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgorICAg
ICAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9leGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2Fy
bVVwKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBjYXVz
ZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIHNvb24sIGJ1dAogICAgICAgICAvLyBu
b3QgbmVjZXNzYXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGltaXph
dGlvbgogICAgICAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1pemF0aW9uIG1lYW5z
IHRoYXQgYWxsIGNhbGxzIGFyZQpAQCAtNzQ2LDE4ICs4MDMsNzIgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXpl
U29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAwOwor
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IC0xMDAgPDwgcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHNwZWN1bGF0
aXZlIEpJVCB0cmFja3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhhdCB3ZSBjYW4KKyAgICAgICAg
Ly8gZGVjaWRlIHdoZW4gdG8gcmVvcHRpbWl6ZS4gSXQncyBpbnRlcmVzdGluZyB0byBub3RlIHRo
YXQgdGhlc2UKKyAgICAgICAgLy8gY291bnRlcnMgbWF5IG92ZXJmbG93IHdpdGhvdXQgYW55IHBy
b3RlY3Rpb24uIFRoZSBzdWNjZXNzCisgICAgICAgIC8vIGNvdW50ZXIgd2lsbCBvdmVyZmxvdyBi
ZWZvcmUgdGhlIGZhaWwgb25lIGRvZXMsIGJlY3Vhc2UgdGhlCisgICAgICAgIC8vIGZhaWwgb25l
IGlzIHVzZWQgYXMgYSB0cmlnZ2VyIHRvIHJlb3B0aW1pemUuIFNvIHRoZSB3b3JzdCBjYXNlCisg
ICAgICAgIC8vIGlzIHRoYXQgdGhlIHN1Y2Nlc3MgY291bnRlciBvdmVyZmxvd3MgYW5kIHdlIHJl
b3B0aW1pemUgd2l0aG91dAorICAgICAgICAvLyBuZWVkaW5nIHRvLiBCdXQgdGhpcyBpcyBoYXJt
bGVzcy4gSWYgYSBtZXRob2QgcmVhbGx5IGRpZAorICAgICAgICAvLyBleGVjdXRlIDJeMzIgdGlt
ZXMgdGhlbiBjb21waWxpbmcgaXQgYWdhaW4gcHJvYmFibHkgd29uJ3QgaHVydAorICAgICAgICAv
LyBhbnlvbmUuCisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25TdWNjZXNz
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKys7
CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgY291bnRTcGVjdWxhdGlvbkZhaWx1
cmUoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIrKzsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3Qgc3BlY3VsYXRpdmVTdWNjZXNz
Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsgfQor
ICAgICAgICB1aW50MzJfdCBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgY29uc3QgeyByZXR1cm4g
bV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOyB9CisgICAgICAgIAorICAgICAgICB1aW50MzJfdCog
YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpIHsgcmV0dXJuICZtX3NwZWN1bGF0
aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOyB9Cisg
ICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3BlY3VsYXRpdmVTdWNj
ZXNzQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcik7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJs
b2NrLCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIpOyB9CisgICAgICAgIAogICAgICAgICAvLyBU
aGUgYW1vdW50IGJ5IHdoaWNoIHRoZSBKSVQgd2lsbCBpbmNyZW1lbnQgbV9leGVjdXRlQ291bnRl
ci4KICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGV4ZWN1dGVDb3VudGVySW5jcmVtZW50Rm9yTG9v
cCgpIHsgcmV0dXJuIDE7IH0KICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGV4ZWN1dGVDb3VudGVy
SW5jcmVtZW50Rm9yUmV0dXJuKCkgeyByZXR1cm4gMTU7IH0KKworICAgICAgICAvLyBUaGUgc3Vj
Y2Vzcy9mYWlsdXJlIHJhdGlvIHdlIHdhbnQuCisgICAgICAgIHVuc2lnbmVkIGRlc2lyZWRTdWNj
ZXNzRmFpbFJhdGlvKCkgeyByZXR1cm4gNjsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIG51
bWJlciBvZiBmYWlsdXJlcyB0aGF0IHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIHJhdGlvLgorICAg
ICAgICB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpIHsgcmV0dXJuIDIwIDw8IGFs
dGVybmF0aXZlKCktPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7IH0KKyAgICAgICAgdW5z
aWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCkgeyByZXR1cm4gMSA8PCBhbHRl
cm5hdGl2ZSgpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIAorICAg
ICAgICBib29sIHNob3VsZFJlb3B0aW1pemVOb3coKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSAqIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIo
KSA+PSBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpID49IGxhcmdlRmFpbENvdW50VGhyZXNob2xkKCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGRlc2lyZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgPj0gc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZl
RmFpbENvdW50ZXIoKSA+PSBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEZvckxvb3AoKTsKKyAgICAg
ICAgfQogICAgICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVOb3coKTsKICNlbHNlCiAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemVO
b3coKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisgICAgICAgIAorICAgICAgICB2b2lkIHJl
b3B0aW1pemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQocmVwbGFjZW1lbnQoKSAhPSB0aGlzKTsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50
KCktPmpldHRpc29uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgY291bnRSZW9wdGltaXphdGlv
bigpOworICAgICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICB9CiAKICNp
ZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogICAgICAgICB2b2lkIGR1bXBWYWx1ZVBy
b2ZpbGVzKCk7CkBAIC04MjcsNiArOTM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2pp
dENvZGVNYXA7CisgICAgICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gbV9kZmdPU1JFbnRy
eTsKICNlbmRpZgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgU2VnbWVudGVk
VmVjdG9yPFZhbHVlUHJvZmlsZSwgOD4gbV92YWx1ZVByb2ZpbGVzOwpAQCAtODUxLDcgKzk2Mywx
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2VyPiBt
X3ByZWRpY3Rpb25zOwogCiAgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKKyAgICAg
ICAgdWludDMyX3QgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyOworICAgICAgICB1aW50MzJf
dCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7CiAgICAgICAgIHVpbnQ4X3QgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXI7CisgICAgICAgIHVpbnQ4X3QgbV9yZW9wdGltaXphdGlvblJldHJ5Q291
bnRlcjsKIAogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKQEAgLTkwOSw2ICsxMDI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRo
REZHKCk7CiAjZW5kaWYKQEAgLTkzNSw2ICsxMDUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRo
REZHKCk7CiAjZW5kaWYKQEAgLTk2Miw2ICsxMDc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYg
RU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNv
bXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRo
REZHKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsNyAr
NDkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKHByb2ZpbGUpOwogICAgICAgICBQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
KTsKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiRHluYW1p
YyBbJXUsICV1XSBwcmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBw
cmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICBwcmludGYoIkR5bmFtaWMg
W0AldSwgYmMjJXVdIHByZWRpY3Rpb246ICVzXG4iLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgs
IHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJu
IHByZWRpY3Rpb247CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0MDgs
OSBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgLy8gICAg
ICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NSIGVu
dHJ5IGlzCiAgICAgLy8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgogICAgIC8vCisg
ICAgLy8gICAgIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBkbyBu
b3QgcmVzdWx0IGluIHRoZSBjb2RlCisgICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90IGxv
b3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8vCiAg
ICAgLy8gICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUgY291
bnRlciB0bwogICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCku
IFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgogICAgIC8vICAgICAoYSkgYW5kIChi
KSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5pdHkg
Zm9yCkBAIC00MTUsMTEgKzQxOCw0MCBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRp
dmVXaXRoT1NSCiAgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMgZmV3
IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKICAgICAvLyAgICAgYmVjb21lIG5v
bi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1IgZW50
cnkKICAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4gdGhl
IG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5z
dXJpbmcgKGEpIGFuZCAoYikuIFRoaXMgaGV1cmlzdGljIG1heSBuZWVkIHRvIGJlCi0gICAgLy8g
ICAgIHJldGhvdWdodCBpbiB0aGUgZnV0dXJlLCBwYXJ0aWN1bGFybHkgaWYgd2Ugc3VwcG9ydCBy
ZW9wdGltaXppbmcgY29kZQotICAgIC8vICAgICB3aXRoIG5ldyB2YWx1ZSBwcm9maWxlcyBnYXRo
ZXJlZCBmcm9tIGNvZGUgdGhhdCBkaWQgT1NSIGV4aXQuCisgICAgLy8gICAgIGdvb2Qgam9iIG9m
IGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAoZCks
CisgICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNldCB0
aGUgZXhlY3V0ZSBjb3VudGVyLgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRoZSBu
dW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8vICAg
ICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3VjY2Vz
cyByYXRlKSwgYW5kIGlmCisgICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVub3Vn
aCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gICAgIGNvdW50
ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vICAgICBjb3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKGNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIGxvYWQzMihB
ZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWls
Q291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSwg
R1BSSW5mbzo6cmVnVDEpOworICAgIGFkZDMyKEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7Cisg
ICAgYWRkMzIoSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgc3RvcmUzMihHUFJJbmZv
OjpyZWdUMiwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1
bGF0aXZlRmFpbENvdW50ZXIoKSkpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFs
dGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgSnVtcCBmZXdGYWlscyA9
IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEltbTMyKGNvZGVCbG9jaygp
LT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7CisgICAgbXVsMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmRlc2lyZWRTdWNjZXNzRmFpbFJhdGlvKCkpLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6
cmVnVDIpOworICAgIAorICAgIEp1bXAgbG93RmFpbFJhdGUgPSBicmFuY2gzMihCZWxvd09yRXF1
YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgCi0gICAgc3RvcmUzMihJ
bW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9yT3B0aW1pemVB
ZnRlcldhcm1VcCgpKSwgY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmFkZHJlc3NPZkV4ZWN1
dGVDb3VudGVyKCkpOworICAgIC8vIFJlb3B0aW1pemUgYXMgc29vbiBhcyBwb3NzaWJsZS4KKyAg
ICBzdG9yZTMyKEltbTMyKENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52
b2NhdGlvbigpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkV4
ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIGRvbmVBZGp1c3RpbmcgPSBqdW1wKCk7CisgICAg
CisgICAgZmV3RmFpbHMubGluayh0aGlzKTsKKyAgICBsb3dGYWlsUmF0ZS5saW5rKHRoaXMpOwor
ICAgIAorICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIAorICAgIGRv
bmVBZGp1c3RpbmcubGluayh0aGlzKTsKICAgICAKICAgICAvLyAxMikgTG9hZCB0aGUgcmVzdWx0
IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgogICAgIApAQCAtNDgx
LDYgKzUxMyw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFbnRyeSgpCiAgICAgLy8gYm90
aCBub3JtYWwgcmV0dXJuIGNvZGUgYW5kIHdoZW4ganVtcGluZyB0byBhbiBleGNlcHRpb24gaGFu
ZGxlcikuCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJlZ1Qy
KTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIFJlZ2lzdGVy
RmlsZTo6UmV0dXJuUEMpOworICAgIAorICAgIGFkZFB0cihJbW0zMigxKSwgQWJzb2x1dGVBZGRy
ZXNzKGNvZGVCbG9jaygpLT5hZGRyZXNzT2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpKTsK
IH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUJvZHkoKQpAQCAtNDk4LDEwICs1MzIsNiBA
QCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgYm9vbCBjb21waWxlZFNwZWN1
bGF0aXZlID0gc3BlY3VsYXRpdmUuY29tcGlsZSgpOwogICAgIEFTU0VSVF9VTlVTRUQoY29tcGls
ZWRTcGVjdWxhdGl2ZSwgY29tcGlsZWRTcGVjdWxhdGl2ZSk7CiAKLSNpZiBFTkFCTEUoREZHX09T
Ul9FTlRSWSkKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChtX2ppdENvZGVNYXBFbmNv
ZGVyLmZpbmlzaCgpKTsKLSNlbmRpZgotICAgIAogICAgIGxpbmtPU1JFeGl0cyhzcGVjdWxhdGl2
ZSk7CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIG1fY2FsbHMgdmVjdG9yLCBjaGVja2luZyBm
b3IgZXhjZXB0aW9uIGNoZWNrcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDQ2IEBA
IHB1YmxpYzoKICAgICAKICAgICB2b2lkIG5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2lj
QmxvY2spCiAgICAgewotICAgICAgICBtX2ppdENvZGVNYXBFbmNvZGVyLmFwcGVuZChiYXNpY0Js
b2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVs
KCkpKTsKKyNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKKyAgICAgICAgT1NSRW50cnlEYXRhKiBl
bnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRl
Y29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBsYXN0TGl2ZUFyZ3VtZW50ID0gMDsKKyAgICAgICAg
dW5zaWduZWQgbGFzdExpdmVMb2NhbCA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgIGxhc3RMaXZlQXJndW1lbnQgPSBpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fscy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2NhbHNbaV0udmFs
dWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGxhc3RMaXZlTG9jYWwgPSBpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAobGFzdExpdmVBcmd1bWVudCkgeworICAgICAgICAg
ICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5yZXNpemUobGFzdExpdmVBcmd1bWVudCArIDEpOwor
ICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhcigpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlQXJndW1lbnQ7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZh
bHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50
cy5zZXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW50
cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgaWYgKGxhc3RM
aXZlTG9jYWwpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMucmVzaXplKGxh
c3RMaXZlTG9jYWwgKyAxKTsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xl
YXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
PSBsYXN0TGl2ZUxvY2FsOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5t
X2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5t
X2xpdmVWYXJpYWJsZXMuc2V0KGkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXIoKTsKKyNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShiYXNpY0Jsb2NrKTsKKyNlbmRpZgogICAgIH0KIAogcHJpdmF0ZToKQEAg
LTM1Myw3ICszOTIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIEpJVCBjb2RlIG1hcCBmb3Ig
T1NSIGVudHJ5cG9pbnRzLgogICAgIExhYmVsIG1fc3RhcnRPZkNvZGU7Ci0gICAgQ29tcGFjdEpJ
VENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2RlTWFwRW5jb2RlcjsKIAogICAgIHN0cnVjdCBQcm9w
ZXJ0eUFjY2Vzc1JlY29yZCB7CiAgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwgZnVu
Y3Rpb25DYWxsLCBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjaywgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90IGRl
bHRhQ2FsbFRvU2xvd0Nhc2UsIGludDE2X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFzZUdQ
UiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2Nr
LT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwot
ICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CisgICAgQVNTRVJUKCFjb2RlQmxv
Y2stPmppdENvZGVNYXAoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtYmVyT2ZERkdPU1JF
bnRyaWVzKCkpOwogCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICBwcmludGYoIk9T
UiBpbiAlcCglcCkgZnJvbSBiYyMldVxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFsdGVybmF0
aXZlKCksIGJ5dGVjb2RlSW5kZXgpOwpAQCAtNjYsNiArNjcsOSBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIE9TUkVudHJ5RGF0YSogZW50cnkg
PSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCk7CisgICAgCisgICAgQVNTRVJUKGVudHJ5LT5tX2J5dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJ
bmRleCk7CiAgICAgCiAgICAgLy8gVGhlIGNvZGUgYmVsb3cgY2hlY2tzIGlmIGl0IGlzIHNhZmUg
dG8gcGVyZm9ybSBPU1IgZW50cnkuIEl0IG1heSBmaW5kCiAgICAgLy8gdGhhdCBpdCBpcyB1bnNh
ZmUgdG8gZG8gc28sIGZvciBhbnkgbnVtYmVyIG9mIHJlYXNvbnMsIHdoaWNoIGFyZSBkb2N1bWVu
dGVkCkBAIC05Nyw3ICsxMDEsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBDCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLCBw
cmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSkgeworICAgICAgICBpZiAoaSA8
IGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuYm91bmRzKCkgJiYgZW50cnktPm1fbGl2ZUFyZ3VtZW50
cy5nZXQoaSkKKyAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBl
eGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24o
aSkpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50Zigi
ICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4i
LCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKICNlbmRpZgpAQCAt
MTA1LDExICsxMTAsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBD
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8ga25vdyBp
ZiBhdCBhbiBPU1IgZW50cnksIGEgdmFyaWFibGUgaXMgbGl2ZS4gSWYgaXQgaXNuJ3QKLSAgICAv
LyB0aGVuIHdlIHNob3VsZG4ndCB0cnkgdG8gdmVyaWZ5IGl0cyBwcmVkaWN0aW9uLgotICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJpYWJs
ZXMoKTsgKytpKSB7Ci0gICAgICAgIGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwg
ZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlv
bihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmJvdW5kcygp
ICYmIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJlZGlj
dGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBw
cmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxl
ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFs
dWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFBy
ZWRpY3Rpb24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2Nr
KGNvZGVCbG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5h
dGlvbiBtYWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0aGUg
bWFjaGluZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29kZU1h
cC4KLSAgICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQgd2Ug
ZXhwZWN0IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkgcmFy
ZWx5LCBhbmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8vICAg
IGZldywgdGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBvbmx5
IHJlYWwKLSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFwIGlz
IHRvIGF2b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBkYXRh
IHN0cnVjdHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0gICAg
Ly8gICAgbWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6
OkRlY29kZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWduZWQg
bWFjaGluZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7
Ci0gICAgd2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAgICAg
ICAgdW5zaWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJl
bnRNYWNoaW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRlY29k
ZUluZGV4LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVudEJ5
dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNvZGVP
ZmZzZXQgPSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFuZCBy
ZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAgIHZv
aWQqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBl
bnRyeS0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNz
ICVwLlxuIiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR09T
UkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rv
ci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiArMzYs
MTggQEAgY2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZH
X0pJVCkKK3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRl
eDsKKyAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBtX2xp
dmVBcmd1bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lubGlu
ZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3Ny
RW50cnlEYXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsK
K30KKwogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnko
RXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNo
aWxkMSgpKSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICAg
ICAgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNw
cAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVkZSAi
SmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29s
IGlzUG9pbnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDI3IEBAIGlubGluZSBib29s
IGlzUG9pbnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYg
KHNpemVvZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRp
dmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzLCBKZXR0aXNvbmVkQ29kZUJsb2Nr
cyogY29kZUJsb2NrcykKKyAgICA6IG1fcm9vdHMobV9pbmxpbmVSb290cykKKyAgICAsIG1fc2l6
ZSgwKQorICAgICwgbV9jYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKKyAgICAsIG1fYmxvY2tzKGJs
b2NrcykKKyAgICAsIG1fY29kZUJsb2Nrcyhjb2RlQmxvY2tzKQoreworICAgIGlmICghbV9jb2Rl
QmxvY2tzKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIGR1bW15IEpldHRpc29uZWRDb2RlQmxvY2tz
IHN0cnVjdHVyZSwgc28gdGhhdCBDb25zZXJ2YXRpdmVSb290czo6YWRkKCkKKyAgICAgICAgLy8g
ZG9lc24ndCBoYXZlIHRvIGRvIGFueSBudWxsIGNoZWNrcyBvbiBtX2NvZGVCbG9ja3MuCisgICAg
ICAgIG1fbXlDb2RlQmxvY2tzID0gYWRvcHRQdHIobmV3IEpldHRpc29uZWRDb2RlQmxvY2tzKCkp
OworICAgICAgICBtX2NvZGVCbG9ja3MgPSBtX215Q29kZUJsb2Nrcy5nZXQoKTsKKyAgICB9Cit9
CisKK0NvbnNlcnZhdGl2ZVJvb3RzOjp+Q29uc2VydmF0aXZlUm9vdHMoKQoreworICAgIGlmICht
X3Jvb3RzICE9IG1faW5saW5lUm9vdHMpCisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdEFu
ZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7Cit9CisKIHZv
aWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9
IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBub25JbmxpbmVDYXBhY2l0eSA6IG1fY2Fw
YWNpdHkgKiAyOwpAQCAtNDYsNiArNjksOCBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93
KCkKIAogaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyKQogeworICAgIG1fY29kZUJsb2Nrcy0+bWFyayhwKTsKKyAgICAKICAg
ICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKHApOwogICAg
IGlmIChmaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGNhbmRpZGF0ZSkpKSB7
CiAgICAgICAgIEFTU0VSVCghY2FuZGlkYXRlIHx8ICFtX2Jsb2Nrcy0+c2V0KCkuY29udGFpbnMo
Y2FuZGlkYXRlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNl
cnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDEy
IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDZWxsOworY2xhc3MgSmV0dGlzb25lZENv
ZGVCbG9ja3M7CiBjbGFzcyBIZWFwOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBwdWJs
aWM6Ci0gICAgQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgTWFya2VkQmxvY2tTZXQqKTsKKyAgICBD
b25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCosIEpldHRpc29uZWRDb2RlQmxv
Y2tzKiA9IDApOwogICAgIH5Db25zZXJ2YXRpdmVSb290cygpOwogCiAgICAgdm9pZCBhZGQodm9p
ZCogYmVnaW4sIHZvaWQqIGVuZCk7CkBAIC01NiwyMyArNTcsMTEgQEAgcHJpdmF0ZToKICAgICBz
aXplX3QgbV9zaXplOwogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIGNvbnN0IE1hcmtlZEJs
b2NrU2V0KiBtX2Jsb2NrczsKKyAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcyogbV9jb2RlQmxvY2tz
OworICAgIE93blB0cjxKZXR0aXNvbmVkQ29kZUJsb2Nrcz4gbV9teUNvZGVCbG9ja3M7CiAgICAg
SlNDZWxsKiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsKIH07CiAKLWlubGluZSBDb25z
ZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoY29uc3QgTWFya2VkQmxvY2tTZXQqIGJs
b2NrcykKLSAgICA6IG1fcm9vdHMobV9pbmxpbmVSb290cykKLSAgICAsIG1fc2l6ZSgwKQotICAg
ICwgbV9jYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYmxvY2tzKGJsb2NrcykKLXsK
LX0KLQotaW5saW5lIENvbnNlcnZhdGl2ZVJvb3RzOjp+Q29uc2VydmF0aXZlUm9vdHMoKQotewot
ICAgIGlmIChtX3Jvb3RzICE9IG1faW5saW5lUm9vdHMpCi0gICAgICAgIE9TQWxsb2NhdG9yOjpk
ZWNvbW1pdEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7
Ci19Ci0KIGlubGluZSBzaXplX3QgQ29uc2VydmF0aXZlUm9vdHM6OnNpemUoKQogewogICAgIHJl
dHVybiBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzk0LDYgKzM5NCwxMSBAQCB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRPYmpl
Y3RzKEhlYXBSb290CiAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmaXQtPmZpcnN0KTsK
IH0KIAordm9pZCBIZWFwOjpqZXR0aXNvbkNvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4g
Y29kZUJsb2NrKQoreworICAgIG1fY29kZUJsb2Nrcy5hZGRDb2RlQmxvY2soY29kZUJsb2NrKTsK
K30KKwogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0b3IoVmVjdG9yPFZhbHVlU3RyaW5nUGFp
cj4qIHRlbXBWZWN0b3IpCiB7CiAgICAgbV90ZW1wU29ydGluZ1ZlY3RvcnMuYXBwZW5kKHRlbXBW
ZWN0b3IpOwpAQCAtNDU2LDEwICs0NjEsMTIgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAg
IG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CiAKICAgICB2b2lkKiBkdW1teTsK
LQorICAgIAorICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAgCiAgICAgLy8gV2Ug
Z2F0aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1
c2UgY29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBk
ZXRlcm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KLSAgICBDb25zZXJ2YXRpdmVS
b290cyBtYWNoaW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCkpOworICAgIENv
bnNlcnZhdGl2ZVJvb3RzIG1hY2hpbmVUaHJlYWRSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3Mo
KSwgJm1fY29kZUJsb2Nrcyk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2YXRp
dmVSb290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7CiAKICAgICBDb25zZXJ2YXRpdmVS
b290cyByZWdpc3RlckZpbGVSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSk7CkBAIC00Njks
NyArNDc2LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogCiAgICAgU2xvdFZpc2l0b3ImIHZp
c2l0b3IgPSBtX3Nsb3RWaXNpdG9yOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0
b3IodmlzaXRvcik7Ci0KKyAgICAKICAgICB2aXNpdG9yLmFwcGVuZChtYWNoaW5lVGhyZWFkUm9v
dHMpOwogICAgIHZpc2l0b3IuZHJhaW4oKTsKIApAQCAtNDkzLDYgKzUwMCw4IEBAIHZvaWQgSGVh
cDo6bWFya1Jvb3RzKCkKIAogICAgIG1faGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNpdG9y
KTsKICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgCisgICAgbV9jb2RlQmxvY2tzLnRyYWNlQ29k
ZUJsb2Nrcyh2aXNpdG9yKTsKIAogICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBs
YXN0LCBiZWNhdXNlIHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgogICAgIC8vIG9wYXF1ZSBy
b290cyB0byBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LgpAQCAtNTg4LDYgKzU5Nyw3IEBAIHZvaWQg
SGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09SRV9H
Q19NQVJLRUQoKTsKICAgICAKICAgICByZXNldEFsbG9jYXRvcigpOworICAgIG1fY29kZUJsb2Nr
cy5kZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKIAogICAgIGlmIChzd2VlcFRvZ2dsZSA9PSBE
b1N3ZWVwKSB7CiAgICAgICAgIHN3ZWVwKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkFsbG9jYXRpb25T
cGFjZS5oIgogI2luY2x1ZGUgIkhhbmRsZUhlYXAuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFjay5o
IgorI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxv
Y2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUgIk1hcmtlZFNwYWNl
LmgiCkBAIC05OCw2ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgcHJv
dGVjdChKU1ZhbHVlKTsKICAgICAgICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRydWUg
d2hlbiB0aGUgcHJvdGVjdCBjb3VudCBkcm9wcyB0byAwLgorICAgICAgICAKKyAgICAgICAgdm9p
ZCBqZXR0aXNvbkNvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKTsKIAog
ICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBzaXplX3QgY2FwYWNpdHkoKTsKQEAgLTE5
MSw2ICsxOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU2xvdFZpc2l0b3IgbV9zbG90
VmlzaXRvcjsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhhbmRs
ZVN0YWNrIG1faGFuZGxlU3RhY2s7CisgICAgICAgIEpldHRpc29uZWRDb2RlQmxvY2tzIG1fY29k
ZUJsb2NrczsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0
aXNvbmVkQ29kZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworSmV0dGlzb25lZENvZGVCbG9ja3M6OkpldHRpc29uZWRDb2RlQmxv
Y2tzKCkgeyB9CisKK0pldHRpc29uZWRDb2RlQmxvY2tzOjp+SmV0dGlzb25lZENvZGVCbG9ja3Mo
KQoreworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9t
YXAuYmVnaW4oKTsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQg
PSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJh
dG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgZGVsZXRlIGl0
ZXItPmZpcnN0OworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxvY2so
UGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBBU1NFUlQobV9tYXAuZmlu
ZChjb2RlQmxvY2suZ2V0KCkpID09IG1fbWFwLmVuZCgpKTsKKyAgICAKKyAgICBtX21hcC5hZGQo
Y29kZUJsb2NrLmxlYWtQdHIoKSwgZmFsc2UpOworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxv
Y2tzOjpjbGVhck1hcmtzKCkKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29s
Pjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9j
ayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisg
ICAgICAgIGl0ZXItPnNlY29uZCA9IGZhbHNlOworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxv
Y2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sq
PiB0b1JlbW92ZTsKKyAgICAKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRv
ciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6
aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayos
IGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgaWYgKCFpdGVyLT5zZWNvbmQpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXRl
ci0+Zmlyc3QpOworICAgIH0KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9S
ZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV9tYXAucmVtb3ZlKHRvUmVtb3ZlW2ldKTsK
KyAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ldOworICAgIH0KK30KKwordm9pZCBKZXR0aXNvbmVk
Q29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sK
KyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJl
Z2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9t
YXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBp
dGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPmZpcnN0LT52
aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxv
Y2tzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNv
bmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDczIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBKZXR0aXNvbmVkQ29kZUJsb2Nr
c19oCisjZGVmaW5lIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3Mg
U2xvdFZpc2l0b3I7CisKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsgLy8gT25seSBtYWxsb2MnZCBpbiBDb25zZXJ2YXRpdmVSb290cwor
cHVibGljOgorICAgIEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgfkpldHRpc29u
ZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgdm9pZCBhZGRDb2RlQmxvY2soUGFzc093blB0cjxD
b2RlQmxvY2s+KTsKKyAgICAKKyAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAKKyAgICB2b2lk
IG1hcmsodm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gV2UgaGF2
ZSB0byBjaGVjayBmb3IgMCBhbmQgLTEgYmVjYXVzZSB0aG9zZSBhcmUgdXNlZCBieSB0aGUgSGFz
aE1hcCBhcyBtYXJrZXJzLgorICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY2FuZGlkYXRlQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFRoaXMgY2hlY2tzIGZvciBib3RoIG9mIHRob3NlIG5hc3R5IGNhc2VzIGluIG9uZSBnby4KKyAg
ICAgICAgLy8gMCArIDEgPSAxCisgICAgICAgIC8vIC0xICsgMSA9IDAKKyAgICAgICAgaWYgKHZh
bHVlICsgMSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGlj
X2Nhc3Q8Q29kZUJsb2NrKj4oY2FuZGlkYXRlQ29kZUJsb2NrKSk7CisgICAgICAgIGlmIChpdGVy
ID09IG1fbWFwLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpdGVyLT5zZWNv
bmQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29kZUJsb2Nr
cygpOworICAgIAorICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7CisKK3By
aXZhdGU6CisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgdG8gdXNlIGFuIE93blB0cjxDb2RlQmxv
Y2s+IGhlcmUgYnV0IHRoYXQgd291bGQKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3b3Jr
LgorICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MTQsNyArMTkxNCwyMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9t
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAot
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9s
b29wIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIg
PSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jay0+ZXhlY3V0
ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2Rl
QmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRpZgorCisgICAgaWYgKGNv
ZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiQ29uc2lkZXJpbmcgbG9vcCBPU1IgaW50byAlcCgl
cCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91
bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXAp
IChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNl
bmRpZgorICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0
aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxu
IiwgY29kZUJsb2NrKTsKQEAgLTE5NTIsNiArMTk2Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplX2Zyb20KICNlbmRpZgogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1p
emVTb29uKCk7CisgICAgICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvblN1
Y2Nlc3MoKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVzcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xOTYwLDYgKzE5NzYsMzAgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9t
IGxvb3Agc3VjY2VlZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKICNlbmRpZgogCisg
ICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYg
dGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCisgICAgLy8gcmVvcHRpbWl6ZS4KKyAgICBvcHRpbWl6
ZWRDb2RlQmxvY2stPmNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCk7CisgICAgCisjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVuY291bnRlcmVkIGxvb3AgT1NSIGZhaWx1
cmUgaW50byAlcCglcCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRp
dmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorCisgICAgLy8gV2UgYXJlIGEgbG90IG1vcmUgY29u
c2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZhaWx1
cmUgdGhhbgorICAgIC8vIGJlZm9yZSBpdC4gSWYgd2UgZW50ZXIgdGhlIG9wdGltaXplX2Zyb21f
bG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQgZnVsbCBvZiBmYWlsCisgICAgLy8gYWxyZWFkeSwg
dGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0byByZW9wdGltaXplIGltbWVkaWF0ZWx5LiBCdXQg
dGhpcyBjYXNlIGNvdmVycworICAgIC8vIHNvbWV0aGluZyBlbHNlOiB0aGVyZSB3ZXJlbid0IG1h
bnkgKG9yIGFueSkgc3BlY3VsYXRpb24gZmFpbHVyZXMgYmVmb3JlLCBidXQgd2UganVzdAorICAg
IC8vIGZhaWxlZCB0byBlbnRlciB0aGUgc3BlY3VsYXRpdmUgY29kZSBiZWNhdXNlIHNvbWUgdmFy
aWFibGUgaGFkIHRoZSB3cm9uZyB2YWx1ZSBvcgorICAgIC8vIGJlY2F1c2UgdGhlIE9TUiBjb2Rl
IGRlY2lkZWQgZm9yIGFueSBzcHVyaW91cyByZWFzb24gdGhhdCBpdCBkaWQgbm90IHdhbnQgdG8g
T1NSCisgICAgLy8gcmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9u
IG9ubHkgdXBvbiB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1sb29wKQorICAgIC8vIHJlb3B0
aW1pemF0aW9uIHRyaWdnZXIuCisgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVv
cHRpbWl6ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJp
bnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBP
U1IgZmFpbCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5k
aWYKKyAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIE9TUiBmYWlsZWQgdGhpcyB0aW1l
LCBidXQgaXQgbWlnaHQgc3VjY2VlZCBuZXh0IHRpbWUhIExldCB0aGUgY29kZSBydW4gYSBiaXQK
ICAgICAvLyBsb25nZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgogICAgIGNvZGVCbG9jay0+b3B0aW1p
emVBZnRlcldhcm1VcCgpOwpAQCAtMTk3Miw4ICsyMDEyLDIzIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKICAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKQorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVk
IG9wdGltaXplX2Zyb21fcmV0IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNv
ZGVCbG9jay0+ZXhlY3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRp
ZgorCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIGZyb20g
b2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0
aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9w
dGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAg
cHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gcmV0dXJuKS5c
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgaWYgKCFjb2RlQmxv
Y2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE4IEBAIERGRzo6SW50cmluc2ljIE5h
dGl2ZUV4ZWN1dGFibGU6OmludHJpbnMKIH0KICNlbmRpZgogCisvLyBVdGlsaXR5IG1ldGhvZCB1
c2VkIGZvciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE93
blB0cjxUPiYgY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUo
KSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CisgICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2su
cmVsZWFzZSgpOworICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJs
b2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgIGNvZGVCbG9ja1RvSmV0
dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICBnbG9iYWxEYXRhLmhlYXAuamV0dGlz
b25Db2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0
dGlzb24ucmVsZWFzZSgpKSk7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRhYmxl
OjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2luZm8s
IDAsIDAgfTsKIAogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJF
dmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAgfTsKQEAgLTIx
MSw2ICsyMjMsMTMgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQog
ICAgIHJldHVybiAwOwogfQogCit2b2lkIEV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXpl
ZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1f
ZXZhbENvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2Fs
bFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXMsICZzX2luZm8pOwpAQCAtMzMwLDYgKzM0OSwxMyBAQCBKU09iamVjdCogUHJvZ3JhbUV4
ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgUHJvZ3JhbUV4
ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2Nr
KTsKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRDb2Rl
KCk7CisgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQorCiB2
b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiB7CiAjaWYgRU5BQkxFKEpJVCkK
QEAgLTUzMyw2ICs1NTksMjAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGls
ZUZvcgogICAgIHJldHVybiAwOwogfQogCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlz
b25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAg
amV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBt
X2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlKCk7CisgICAg
bV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRK
SVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6Ompl
dHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LT5nZXRKSVRDb2RlKCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hl
Y2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7
Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5m
byk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0
aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgRXZhbENvZGVCbG9j
ayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zOTIsNiArMzk0LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9p
ZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgUHJvZ3Jh
bUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC00NzUsNiArNDc5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3Rh
dGUqIGNhbGxlZUFyZ3NFeGVjID0gMCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29u
T3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBpc0dl
bmVyYXRlZEZvckNhbGwoKSBjb25zdAogICAgICAgICB7CkBAIC00OTgsNiArNTA0LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGlt
aXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAK
KyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxE
YXRhJik7CiAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAg
ICAgICAgIHsKQEAgLTUzOCw2ICs1NDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9k
ZSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgCisg
ICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChnbG9iYWxEYXRhKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNv
bnN0cnVjdChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgQml0VmVjdG9yX2gKKyNkZWZpbmUgQml0VmVjdG9yX2gKKwor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBzcGFjZS1lZmZpY2llbnQsIHJlc2l6
ZWFibGUgYml0dmVjdG9yIGNsYXNzLiBJbiB0aGUgY29tbW9uIGNhc2UgaXQKKy8vIG9jY3VwaWVz
IG9uZSB3b3JkLCBidXQgaWYgbmVjZXNzYXJ5LCBpdCB3aWxsIGluZmxhdGUgdGhpcyBvbmUgd29y
ZCB0byBwb2ludAorLy8gdG8gYSBzaW5nbGUgY2h1bmsgb2Ygb3V0LW9mLWxpbmUgYWxsb2NhdGVk
IHN0b3JhZ2UgdG8gc3RvcmUgYW4gYXJiaXRyYXJ5IG51bWJlcgorLy8gb2YgYml0cy4KKy8vCisv
LyAtIFRoZSBiaXR2ZWN0b3IgbmVlZHMgdG8gYmUgcmVzaXplZCBtYW51YWxseSAoanVzdCBjYWxs
IGVuc3VyZVNpemUoKSkuCisvLworLy8gLSBUaGUgYml0dmVjdG9yIHJlbWVtYmVycyB0aGUgYm91
bmQgb2YgaG93IG1hbnkgYml0cyBjYW4gYmUgc3RvcmVkLCBidXQgdGhpcworLy8gICBtYXkgYmUg
c2xpZ2h0bHkgZ3JlYXRlciAoYnkgYXMgbXVjaCBhcyBzb21lIHBsYXRmb3JtLXNwZWNpZmljIGNv
bnN0YW50KQorLy8gICB0aGFuIHRoZSBsYXN0IGFyZ3VtZW50IHBhc3NlZCB0byBlbnN1cmVTaXpl
KCkuCisvLworLy8gLSBBY2Nlc3NlcyBBU1NFUlQgdGhhdCB5b3UgYXJlIHdpdGhpbiBib3VuZHMu
CisvLworLy8gLSBCaXRzIGFyZSBub3QgYXV0b21hdGljYWxseSBpbml0aWFsaXplZCB0byB6ZXJv
LgorLy8KKy8vIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIEJpdFZlY3RvciBjbGFzcyBtYXkgbm90
IGJlIHRoZSBmYXN0ZXN0IGFyb3VuZCwgc2luY2UKKy8vIGl0IGRvZXMgY29uZGl0aW9uYWxzIG9u
IGV2ZXJ5IGdldC9zZXQvY2xlYXIuIEJ1dCBpdCBpcyBncmVhdCBpZiB5b3UgbmVlZCB0bworLy8g
anVnZ2xlIGEgbG90IG9mIHZhcmlhYmxlLWxlbmd0aCBCaXRWZWN0b3JzIGFuZCB5b3UncmUgd29y
cmllZCBhYm91dCB3YXN0aW5nCisvLyBzcGFjZS4KKworY2xhc3MgQml0VmVjdG9yIHsKK3B1Ymxp
YzogCisgICAgQml0VmVjdG9yKCkKKyAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIoc3RhdGljX2Nh
c3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBCaXRWZWN0b3IoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2JpdHNP
clBvaW50ZXIoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpCisg
ICAgeworICAgICAgICAoKnRoaXMpID0gb3RoZXI7CisgICAgfQorICAgIAorICAgIH5CaXRWZWN0
b3IoKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKKyAgICB9
CisgICAgCisgICAgQml0VmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgQml0VmVjdG9yJiBvdGhlcikK
KyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBuZXdCaXRzT3JQb2ludGVyOworICAgICAgICBpZiAo
b3RoZXIuaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSBvdGhlci5t
X2JpdHNPclBvaW50ZXI7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgT3V0T2ZMaW5lQml0
cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShvdGhlci5ib3VuZHMo
KSk7CisgICAgICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdGhlci5i
aXRzKCksIG90aGVyLmJvdW5kcygpID4+IDMpOworICAgICAgICAgICAgbmV3Qml0c09yUG9pbnRl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWlzSW5saW5lKCkpCisgICAgICAgICAgICBPdXRPZkxpbmVCaXRz
OjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CisgICAgICAgIG1fYml0c09yUG9pbnRlciA9IG5l
d0JpdHNPclBvaW50ZXI7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBzaXpl
X3QgYm91bmRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2JpdHNPclBvaW50ZXIgPj4g
bWF4SW5saW5lQml0cygpKQorICAgICAgICAgICAgcmV0dXJuIG1heElubGluZUJpdHMoKTsKKyAg
ICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+bnVtQml0cygpOworICAgIH0KKworICAgIHZv
aWQgZW5zdXJlU2l6ZShzaXplX3QgbnVtQml0cykKKyAgICB7CisgICAgICAgIGlmIChudW1CaXRz
IDw9IGJvdW5kcygpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXNpemVPdXRPZkxp
bmUobnVtQml0cyk7CisgICAgfQorICAgIAorICAgIC8vIExpa2UgZW5zdXJlU2l6ZSgpLCBidXQg
c3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZlY3Rvci4KKyAgICB2b2lkIHJl
c2l6ZShzaXplX3QgbnVtQml0cykKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKG51bUJpdHMgPD0gbWF4SW5s
aW5lQml0cygpKSB7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzKiBteU91dE9mTGluZUJpdHMg
PSBvdXRPZkxpbmVCaXRzKCk7CisgICAgICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpIHwgKm15T3V0T2ZMaW5lQml0
cy0+Yml0cygpOworICAgICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShteU91dE9mTGlu
ZUJpdHMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXNpemVPdXRPZkxpbmUobnVtQml0cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICBtX2JpdHNPclBv
aW50ZXIgPSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgYnplcm8ob3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIGJv
dW5kcygpID4+IDMpOworICAgIH0KKworICAgIGJvb2wgZ2V0KHNpemVfdCBiaXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoYml0IDwgYm91bmRzKCkpOworICAgICAgICByZXR1cm4gISEo
Yml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXQoc2l6ZV90IGJpdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXQgPCBib3VuZHMo
KSk7CisgICAgICAgIGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRlcigpXSB8PSAoc3RhdGljX2Nh
c3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChiaXQgPCBib3VuZHMoKSk7CisgICAgICAgIGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRlcigp
XSAmPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVy
KCkgLSAxKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgYml0LCBib29sIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgc2V0KGJpdCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsZWFyKGJpdCk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgbWF4SW5saW5lQml0cygpCisgICAgeworICAgICAgICByZXR1cm4gYml0c0luUG9pbnRlcigp
IC0gMTsKKyAgICB9CisgICAgCisgICAgY2xhc3MgT3V0T2ZMaW5lQml0cyB7CisgICAgcHVibGlj
OgorICAgICAgICBzaXplX3QgbnVtQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQml0czsgfQor
ICAgICAgICBzaXplX3QgbnVtV29yZHMoKSBjb25zdCB7IHJldHVybiAobV9udW1CaXRzICsgYml0
c0luUG9pbnRlcigpIC0gMSkgPj4gYml0c0luUG9pbnRlcigpOyB9CisgICAgICAgIHVpbnRwdHJf
dCogYml0cygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4odGhpcyArIDEp
OyB9CisgICAgICAgIGNvbnN0IHVpbnRwdHJfdCogYml0cygpIGNvbnN0IHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4odGhpcyArIDEpOyB9CisgICAgICAgIAorICAg
ICAgICBzdGF0aWMgT3V0T2ZMaW5lQml0cyogY3JlYXRlKHNpemVfdCBudW1CaXRzKQorICAgICAg
ICB7CisgICAgICAgICAgICBudW1CaXRzID0gKG51bUJpdHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAx
KSAmIH5iaXRzSW5Qb2ludGVyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChmYXN0TWFsbG9j
KHNpemVvZihPdXRPZkxpbmVCaXRzKSArIChudW1CaXRzID4+IGJpdHNJblBvaW50ZXIoKSkpKSBP
dXRPZkxpbmVCaXRzKG51bUJpdHMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZhc3RGcmVlKG91dE9mTGluZUJpdHMpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBPdXRPZkxpbmVCaXRzKHNpemVfdCBudW1CaXRzKQorICAgICAgICAg
ICAgOiBtX251bUJpdHMobnVtQml0cykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBzaXplX3QgbV9udW1CaXRzOworICAgIH07CisgICAgCisgICAgYm9vbCBpc0lubGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0c09yUG9pbnRlciA+PiBtYXhJbmxpbmVCaXRzKCk7IH0K
KyAgICAKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKCkgY29uc3QgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQb2lu
dGVyKTsgfQorICAgIE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSB7IHJldHVybiByZWlu
dGVycHJldF9jYXN0PE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBvaW50ZXIpOyB9CisgICAgCisg
ICAgdm9pZCByZXNpemVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMpCisgICAgeworICAgICAgICBB
U1NFUlQobnVtQml0cyA+IG1heElubGluZUJpdHMoKSk7CisgICAgICAgIE91dE9mTGluZUJpdHMq
IG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUobnVtQml0cyk7CisgICAg
ICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIGJpdHMoKSwgc3RkOjptaW4oYm91
bmRzKCksIG51bUJpdHMpID4+IDMpOworICAgICAgICBpZiAoIWlzSW5saW5lKCkpCisgICAgICAg
ICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CisgICAgICAgIG1f
Yml0c09yUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihuZXdPdXRPZkxpbmVC
aXRzKTsKKyAgICB9CisgICAgCisgICAgdWludHB0cl90KiBiaXRzKCkKKyAgICB7CisgICAgICAg
IGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuICZtX2JpdHNPclBvaW50ZXI7Cisg
ICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICB9CisgICAgCisgICAg
Y29uc3QgdWludHB0cl90KiBiaXRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0lubGlu
ZSgpKQorICAgICAgICAgICAgcmV0dXJuICZtX2JpdHNPclBvaW50ZXI7CisgICAgICAgIHJldHVy
biBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICB9CisgICAgCisgICAgdWludHB0cl90IG1f
Yml0c09yUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkJp
dFZlY3RvcjsKKworI2VuZGlmIC8vIEJpdFZlY3Rvcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108103</attachid>
            <date>2011-09-20 19:55:34 -0700</date>
            <delta_ts>2011-09-20 20:17:26 -0700</delta_ts>
            <desc>the patch - fix more style</desc>
            <filename>recomp_patch_5.diff</filename>
            <type>text/plain</type>
            <size>62442</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFi
aWxpdHkgdG8gcmVvcHRpbWl6ZSBhIGNvZGUgYmxvY2sgaWYgc3BlY3VsYXRpb24KKyAgICAgICAg
ZmFpbHVyZXMgaGFwcGVuIGZyZXF1ZW50bHkuIDYlIHNwZWVkLXVwIG9uIEtyYWtlbiwgMSUgc2xv
dy1kb3duCisgICAgICAgIG9uIFY4LCBuZXV0cmFsIG9uIFN1blNwaWRlci4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2sp
OgorICAgICAgICAoSlNDOjpQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChK
U0M6OkV2YWxDb2RlQmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2Rl
QmxvY2s6OmpldHRpc29uKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAq
IGhlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVS
b290czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6Q29uc2VydmF0aXZlUm9vdHM6
OmFkZCk6CisgICAgICAgICogaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oOgorICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmpldHRpc29uQ29kZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29sbGVj
dCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
SmV0dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nr
czo6fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVC
bG9ja3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tz
OjpjbGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0
ZVVubWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tz
Ojp0cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3Mu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OmpldHRpc29uQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
RXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OlBy
b2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0
cnVjdCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1
bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKToKKwogMjAxMS0wOS0y
MCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBKSVQgYWx3
YXlzIHNwZWN1bGF0ZXMgaW50ZWdlciBvbiBtb2R1bG8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw2ICs3NCw5IEBACiAJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLzsgfTsKIAkJMEZEODJF
OTAxNDIwN0E1RjAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyog
VmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZEODJFRjUxNDIzMDc1QjAwMTc5Qzk0IC8qIERG
R0ludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJFRjMxNDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgyRjJCMTQyNkNBNkQw
MDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRp
c29uZWRDb2RlQmxvY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxv
Y2tzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi87IH07
CisJCTBGRDgyRjRCMTQyODA2QTEwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5
NCAvKiBCaXRWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3
ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9j
YXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsg
fTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZB
RkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87IH07CkBAIC04MTMsNiAr
ODE2LDkgQEAKIAkJMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUHJlZGljdGVkVHlwZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAv
KiBWYWx1ZVByb2ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFRjMx
NDIzMDczOTAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdJbnRyaW5zaWMuaDsgcGF0aCA9IGRmZy9ERkdJbnRyaW5zaWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpl
dHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpldHRpc29uZWRDb2RlQmxvY2tzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBC
aXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0VmVjdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAv
KiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9j
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTYyMSw2ICsxNjI3LDggQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAw
QUZBREI1IC8qIGhlYXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5j
cHAgKi8sCisJCQkJMEZEODJGMjkxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxv
Y2tzLmggKi8sCiAJCQkJQTcwNDU2QUYxNDI3RkIxNTAwMzdEQTY4IC8qIEFsbG9jYXRpb25TcGFj
ZS5oICovLAogCQkJCUE3MDQ1NkFFMTQyN0ZCMDMwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
Y3BwICovLAogCQkJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggKi8sCkBAIC0xNzk3LDYgKzE4MDUsNyBAQAogCQk2NTE2MkVGMTA4RTZBMjFDMDA3
NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8sCiAJCQkJQzIy
QzUyNDgxM0ZBRjZFRjAwQjdEQzBEIC8qIGR0b2EgKi8sCiAJCQkJMDZEMzU4QTAwREFBRDlDNDAw
M0IxNzRFIC8qIG1hYyAqLywKIAkJCQk4NjU2NTczRTExNUJFMzUyMDAyOTFGNDAgLyogdGV4dCAq
LywKQEAgLTI0MjMsNiArMjQzMiw4IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8q
IEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3
IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAw
MDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkY0QjE0
MjgwNkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkYy
QjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDgyRTg1MTQxRjNGRTMwMDE3OUM5NCAvKiBCb3VuZHNDaGVja2VkUG9p
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFNTcxNDFEQUYxMDAwMTc5Qzk0IC8qIERG
R09TUkVudHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTMwOTcsNiArMzEwOCw3IEBACiAJCQlpc2Eg
PSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7
CiAJCQlmaWxlcyA9ICgKKwkJCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25l
ZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFOTAxNDIwN0E1RjAwMTc5
Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkU4NjE0MUYz
RkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyOCw3ICsxNDI4LDEwIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc291cmNlT2Zmc2V0KHNvdXJjZU9m
ZnNldCkKICAgICAsIG1fc3ltYm9sVGFibGUoc3ltVGFiKQogICAgICwgbV9hbHRlcm5hdGl2ZShh
bHRlcm5hdGl2ZSkKKyAgICAsIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigwKQorICAgICwg
bV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKDApCiAgICAgLCBtX29wdGltaXphdGlvbkRlbGF5Q291
bnRlcigwKQorICAgICwgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigwKQogewogICAgIEFT
U0VSVChtX3NvdXJjZSk7CiAgICAgCkBAIC0xOTM1LDYgKzE5MzgsMjcgQEAgYm9vbCBGdW5jdGlv
bkNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERgogICAgICAgICByZXR1cm4gREZHOjpjYW5Db21w
aWxlRnVuY3Rpb25Gb3JDb25zdHJ1Y3QodGhpcyk7CiAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGls
ZUZ1bmN0aW9uRm9yQ2FsbCh0aGlzKTsKIH0KKwordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0
aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJUKGdldEpJVFR5cGUo
KSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1l
bnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKK30KKwordm9pZCBFdmFs
Q29kZUJsb2NrOjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNT
RVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRo
aXMgPT0gcmVwbGFjZW1lbnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihv
d25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxEYXRhKTsKK30K
Kwordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yKGdsb2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBD
b2RlRm9yQ2FsbCk7Cit9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKQEAg
LTE5NzQsOCArMTk5OCw4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiAg
ICAgcHJpbnRmKCJQcm9maWxlIGhvdG5lc3M6ICVsZiwgJWxmXG4iLCAoZG91YmxlKW51bWJlck9m
TGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVBy
b2ZpbGVzLCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6
Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpKTsKICNlbmRpZgogCi0g
ICAgaWYgKChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPj0gMC43NQotICAgICAgICAmJiAoZG91Ymxl
KW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgLyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0
cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygpID49IDAuNSkKKyAgICBpZiAoKCFudW1iZXJPZk5v
bkFyZ3VtZW50VmFsdWVQcm9maWxlcyB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50
VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IDAuNzUp
CisgICAgICAgICYmICghbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJP
ZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSA+PSAwLjUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAK
ICAgICBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcisrOwpAQCAtMjAxNCw3ICsyMDM4LDEyIEBA
IHZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiAgICAgfQogICAgIGZwcmludGYo
c3RkZXJyLCAiU2xvd0Nhc2VQcm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1iZXJPZlNsb3dDYXNlUHJvZmlsZXMoKTsgKytpKSB7Ci0gICAg
ICAgIFNsb3dDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAg
ICAgUmFyZUNhc2VQcm9maWxlKiBwcm9maWxlID0gc2xvd0Nhc2VQcm9maWxlKGkpOworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2Rl
T2Zmc2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOworICAgIH0KKyAgICBmcHJpbnRmKHN0ZGVyciwg
IlNwZWNpYWxGYXN0Q2FzZVByb2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG51bWJlck9mU3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMoKTsgKytpKSB7
CisgICAgICAgIFJhcmVDYXNlUHJvZmlsZSogcHJvZmlsZSA9IHNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGUoaSk7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgYmMgPSAlZDogJXVcbiIsIHByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQsIHByb2ZpbGUtPm1fY291bnRlcik7CiAgICAgfQogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
OTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAogI2lu
Y2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCisjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNp
bmNsdWRlICJFdmFsQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNs
dWRlICJKSVRDb2RlLmgiCkBAIC0zMzMsNiArMzM0LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogYXBwZW5kREZHT1NSRW50cnlE
YXRhKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQor
ICAgICAgICB7CisgICAgICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSBlbnRyeTsKKyAgICAgICAg
ICAgIGVudHJ5Lm1fYnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBl
bnRyeS5tX21hY2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgICAg
ICBtX2RmZ09TUkVudHJ5LmFwcGVuZChlbnRyeSk7CisgICAgICAgICAgICByZXR1cm4gJm1fZGZn
T1NSRW50cnkubGFzdCgpOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mREZH
T1NSRW50cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fZGZnT1NSRW50cnkuc2l6ZSgpOyB9CisgICAg
ICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGEodW5zaWduZWQgaSkgeyByZXR1
cm4gJm1fZGZnT1NSRW50cnlbaV07IH0KKyAgICAgICAgREZHOjpPU1JFbnRyeURhdGEqIGRmZ09T
UkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaDxERkc6Ok9TUkVudHJ5RGF0YSwg
dW5zaWduZWQsIERGRzo6Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleD4obV9kZmdPU1JFbnRy
eS5iZWdpbigpLCBtX2RmZ09TUkVudHJ5LnNpemUoKSwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAg
IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKElOVEVSUFJFVEVSKQpAQCAtMzYwLDkgKzM3NiwxMSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1faml0Q29kZVdpdGhBcml0eUNoZWNrID0g
Y29kZVdpdGhBcml0eUNoZWNrOwogICAgICAgICB9CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENv
ZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpIHsgcmV0dXJuIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrOyB9CiAgICAgICAgIEpJVENvZGU6OkpJVFR5cGUgZ2V0SklUVHlwZSgpIHsgcmV0dXJuIG1f
aml0Q29kZS5qaXRUeXBlKCk7IH0KICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhl
Y3V0YWJsZU1lbW9yeSgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5
KCk7IH0KICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSopID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpldHRpc29u
KEpTR2xvYmFsRGF0YSYpID0gMDsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCkgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKSA9IDA7
CiAgICAgICAgIGJvb2wgaGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKQpAQCAtNjg1LDExICs3MDMs
MzcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRyaWdnZXIgZmlsZXMuIEFsbCBDb2Rl
QmxvY2tzIHN0YXJ0IG91dCB3aXRoIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSwKICAgICAgICAgLy8g
YXMgdGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgQ29kZUJsb2NrIGNvbnN0cnVjdG9yLgogICAgICAg
ICAKKyAgICAgICAgLy8gV2hlbiB3ZSBvYnNlcnZlIGEgbG90IG9mIHNwZWN1bGF0aW9uIGZhaWx1
cmVzLCB3ZSB0cmlnZ2VyIGEKKyAgICAgICAgLy8gcmVvcHRpbWl6YXRpb24uIEJ1dCBlYWNoIHRp
bWUsIHdlIGluY3JlYXNlIHRoZSBvcHRpbWl6YXRpb24gdHJpZ2dlcgorICAgICAgICAvLyB0byBh
dm9pZCB0aHJhc2hpbmcuCisgICAgICAgIHVuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPD0gMTgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgY291bnRS
ZW9wdGltaXphdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIrKzsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3Vu
dGVyID4gMTgpCisgICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9
IDE4OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJl
IHByb3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIC8vIG9wdGltaXplWFlaKCkg
bWV0aG9kcyBmcm9tIEpJVC1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgc3RhdGljIGludDMyX3Qg
Y291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpbnQzMl90IGNv
dW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gLTEwMDA7CisgICAgICAgICAgICByZXR1cm4gLTEwMDAgPDwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaW50MzJfdCBj
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAtNTAwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQzMl90KiBhZGRyZXNzT2ZFeGVjdXRlQ291bnRl
cigpCkBAIC02OTcsMTIgKzc0MSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJl
dHVybiAmbV9leGVjdXRlQ291bnRlcjsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKENvZGVCbG9jaywgbV9leGVjdXRlQ291bnRlcik7IH0KKworICAgICAgICBpbnQzMl90
IGV4ZWN1dGVDb3VudGVyKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRlQ291bnRlcjsgfQorICAg
ICAgICAKKyAgICAgICAgdW5zaWduZWQgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXI7IH0KKyAgICAgICAgCiAgICAgICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSB0aGUgbmV4dCBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBm
aXJlLiBUaGlzIGlzCiAgICAgICAgIC8vIHJhcmVseSB3aXNlLCBzaW5jZSBvcHRpbWl6YXRpb24g
dHJpZ2dlcnMgYXJlIHR5cGljYWxseSBtb3JlCiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4
ZWN1dGluZyBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRp
b24oKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gMDsKKyAgICAg
ICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZv
Y2F0aW9uKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBw
cmV2ZW50IG9wdGltaXphdGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC03
MjYsNiArNzc2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgbV9leGVjdXRlQ291
bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICAgICAgfQog
ICAgICAgICAKKyAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZvcmNlIGFuIG9wdGltaXphdGlvbiB0
cmlnZ2VyIHRvIGZpcmUgb25seSBhZnRlcgorICAgICAgICAvLyBhIGxvdCBvZiB3YXJtLXVwLgor
ICAgICAgICB2b2lkIG9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9leGVjdXRlQ291bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25n
V2FybVVwKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBj
YXVzZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIHNvb24sIGJ1dAogICAgICAgICAv
LyBub3QgbmVjZXNzYXJpbHkgdGhlIG5leHQgb25lLiBUaGlzIG1ha2VzIHNlbnNlIGlmIG9wdGlt
aXphdGlvbgogICAgICAgICAvLyBzdWNjZWVkcy4gU3VjY2Vzc2Z1bHkgb3B0aW1pemF0aW9uIG1l
YW5zIHRoYXQgYWxsIGNhbGxzIGFyZQpAQCAtNzQ2LDE4ICs4MDMsNzIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGlt
aXplU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAw
OworICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IC0xMDAgPDwgcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhlIHNwZWN1
bGF0aXZlIEpJVCB0cmFja3MgaXRzIHN1Y2Nlc3MgcmF0ZSwgc28gdGhhdCB3ZSBjYW4KKyAgICAg
ICAgLy8gZGVjaWRlIHdoZW4gdG8gcmVvcHRpbWl6ZS4gSXQncyBpbnRlcmVzdGluZyB0byBub3Rl
IHRoYXQgdGhlc2UKKyAgICAgICAgLy8gY291bnRlcnMgbWF5IG92ZXJmbG93IHdpdGhvdXQgYW55
IHByb3RlY3Rpb24uIFRoZSBzdWNjZXNzCisgICAgICAgIC8vIGNvdW50ZXIgd2lsbCBvdmVyZmxv
dyBiZWZvcmUgdGhlIGZhaWwgb25lIGRvZXMsIGJlY3Vhc2UgdGhlCisgICAgICAgIC8vIGZhaWwg
b25lIGlzIHVzZWQgYXMgYSB0cmlnZ2VyIHRvIHJlb3B0aW1pemUuIFNvIHRoZSB3b3JzdCBjYXNl
CisgICAgICAgIC8vIGlzIHRoYXQgdGhlIHN1Y2Nlc3MgY291bnRlciBvdmVyZmxvd3MgYW5kIHdl
IHJlb3B0aW1pemUgd2l0aG91dAorICAgICAgICAvLyBuZWVkaW5nIHRvLiBCdXQgdGhpcyBpcyBo
YXJtbGVzcy4gSWYgYSBtZXRob2QgcmVhbGx5IGRpZAorICAgICAgICAvLyBleGVjdXRlIDJeMzIg
dGltZXMgdGhlbiBjb21waWxpbmcgaXQgYWdhaW4gcHJvYmFibHkgd29uJ3QgaHVydAorICAgICAg
ICAvLyBhbnlvbmUuCisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25TdWNj
ZXNzKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
Kys7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgY291bnRTcGVjdWxhdGlvbkZh
aWx1cmUoKQorICAgICAgICB7CisgICAgICAgICAgICBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIr
KzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3Qgc3BlY3VsYXRpdmVTdWNj
ZXNzQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsg
fQorICAgICAgICB1aW50MzJfdCBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgY29uc3QgeyByZXR1
cm4gbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOyB9CisgICAgICAgIAorICAgICAgICB1aW50MzJf
dCogYWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpIHsgcmV0dXJuICZtX3NwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlRmFpbENvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyOyB9
CisgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3BlY3VsYXRpdmVT
dWNjZXNzQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc3Bl
Y3VsYXRpdmVTdWNjZXNzQ291bnRlcik7IH0KKyAgICAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29k
ZUJsb2NrLCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXIpOyB9CisgICAgICAgIAogICAgICAgICAv
LyBUaGUgYW1vdW50IGJ5IHdoaWNoIHRoZSBKSVQgd2lsbCBpbmNyZW1lbnQgbV9leGVjdXRlQ291
bnRlci4KICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGV4ZWN1dGVDb3VudGVySW5jcmVtZW50Rm9y
TG9vcCgpIHsgcmV0dXJuIDE7IH0KICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGV4ZWN1dGVDb3Vu
dGVySW5jcmVtZW50Rm9yUmV0dXJuKCkgeyByZXR1cm4gMTU7IH0KKworICAgICAgICAvLyBUaGUg
c3VjY2Vzcy9mYWlsdXJlIHJhdGlvIHdlIHdhbnQuCisgICAgICAgIHVuc2lnbmVkIGRlc2lyZWRT
dWNjZXNzRmFpbFJhdGlvKCkgeyByZXR1cm4gNjsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhl
IG51bWJlciBvZiBmYWlsdXJlcyB0aGF0IHRyaWdnZXJzIHRoZSB1c2Ugb2YgdGhlIHJhdGlvLgor
ICAgICAgICB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpIHsgcmV0dXJuIDIwIDw8
IGFsdGVybmF0aXZlKCktPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7IH0KKyAgICAgICAg
dW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCkgeyByZXR1cm4gMSA8PCBh
bHRlcm5hdGl2ZSgpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIAor
ICAgICAgICBib29sIHNob3VsZFJlb3B0aW1pemVOb3coKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSAqIHNwZWN1bGF0aXZlRmFpbENvdW50
ZXIoKSA+PSBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291
bnRlcigpID49IGxhcmdlRmFpbENvdW50VGhyZXNob2xkKCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgc2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEZvckxvb3AoKTsKKyAg
ICAgICAgfQogICAgICAgICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIGJv
b2wgc2hvdWxkT3B0aW1pemVOb3coKTsKICNlbHNlCiAgICAgICAgIGJvb2wgc2hvdWxkT3B0aW1p
emVOb3coKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCisgICAgICAgIAorICAgICAgICB2b2lk
IHJlb3B0aW1pemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSAhPSB0aGlzKTsKKyAgICAgICAgICAgIHJlcGxhY2Vt
ZW50KCktPmpldHRpc29uKGdsb2JhbERhdGEpOworICAgICAgICAgICAgY291bnRSZW9wdGltaXph
dGlvbigpOworICAgICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOworICAgICAgICB9CiAK
ICNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogICAgICAgICB2b2lkIGR1bXBWYWx1
ZVByb2ZpbGVzKCk7CkBAIC04MjcsNiArOTM4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBt
X2ppdENvZGVNYXA7CisgICAgICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gbV9kZmdPU1JF
bnRyeTsKICNlbmRpZgogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgU2VnbWVu
dGVkVmVjdG9yPFZhbHVlUHJvZmlsZSwgOD4gbV92YWx1ZVByb2ZpbGVzOwpAQCAtODUxLDcgKzk2
MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgT3duUHRyPFByZWRpY3Rpb25UcmFja2Vy
PiBtX3ByZWRpY3Rpb25zOwogCiAgICAgICAgIGludDMyX3QgbV9leGVjdXRlQ291bnRlcjsKKyAg
ICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyOworICAgICAgICB1aW50
MzJfdCBtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7CiAgICAgICAgIHVpbnQ4X3QgbV9vcHRpbWl6
YXRpb25EZWxheUNvdW50ZXI7CisgICAgICAgIHVpbnQ4X3QgbV9yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcjsKIAogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKQEAgLTkwOSw2ICsxMDI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENv
ZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHKCk7CiAjZW5kaWYKQEAgLTkzNSw2ICsxMDUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENv
ZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHKCk7CiAjZW5kaWYKQEAgLTk2Miw2ICsxMDc5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
aWYgRU5BQkxFKEpJVCkKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uKEpTR2xvYmFsRGF0YSYpOwogICAgICAgICB2aXJ0dWFsIENv
ZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTIs
NyArNDkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKHByb2ZpbGUpOwogICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oKTsKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiRHlu
YW1pYyBbJXUsICV1XSBwcmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4
LCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICBwcmludGYoIkR5bmFt
aWMgW0AldSwgYmMjJXVdIHByZWRpY3Rpb246ICVzXG4iLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5k
ZXgsIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CiAjZW5kaWYKICAgICAgICAgcmV0
dXJuIHByZWRpY3Rpb247CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw2ICs0
MDgsOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgLy8g
ICAgICAgICBlbnRyeSwgc2luY2UgYm90aCBmb3JtcyBvZiBPU1IgYXJlIGV4cGVuc2l2ZS4gT1NS
IGVudHJ5IGlzCiAgICAgLy8gICAgICAgICBwYXJ0aWN1bGFybHkgZXhwZW5zaXZlLgogICAgIC8v
CisgICAgLy8gICAgIChkKSBGcmVxdWVudCBPU1IgZmFpbHVyZXMsIGV2ZW4gdGhvc2UgdGhhdCBk
byBub3QgcmVzdWx0IGluIHRoZSBjb2RlCisgICAgLy8gICAgICAgICBydW5uaW5nIGluIGEgaG90
IGxvb3AsIHJlc3VsdCBpbiByZWNvbXBpbGF0aW9uIGdldHRpbmcgdHJpZ2dlcmVkLgorICAgIC8v
CiAgICAgLy8gICAgIFRvIGVuc3VyZSAoYyksIHdlJ2QgbGlrZSB0byBzZXQgdGhlIGV4ZWN1dGUg
Y291bnRlciB0bwogICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVw
KCkuIFRoaXMgc2VlbXMgbGlrZSBpdCB3b3VsZCBlbmRhbmdlcgogICAgIC8vICAgICAoYSkgYW5k
IChiKSwgc2luY2UgdGhlbiBldmVyeSBPU1IgZXhpdCB3b3VsZCBkZWxheSB0aGUgb3Bwb3J0dW5p
dHkgZm9yCkBAIC00MTUsMTEgKzQxOCw0MCBAQCB2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3Vs
YXRpdmVXaXRoT1NSCiAgICAgLy8gICAgIGZyZXF1ZW50bHkgYW5kIHRoZSBmdW5jdGlvbiBoYXMg
ZmV3IGxvb3BzLCB0aGVuIHRoZSBjb3VudGVyIHdpbGwgbmV2ZXIKICAgICAvLyAgICAgYmVjb21l
IG5vbi1uZWdhdGl2ZSBhbmQgT1NSIGVudHJ5IHdpbGwgbmV2ZXIgYmUgdHJpZ2dlcmVkLiBPU1Ig
ZW50cnkKICAgICAvLyAgICAgd2lsbCBvbmx5IGhhcHBlbiBpZiBhIGxvb3AgZ2V0cyBob3QgaW4g
dGhlIG9sZCBKSVQsIHdoaWNoIGRvZXMgYSBwcmV0dHkKLSAgICAvLyAgICAgZ29vZCBqb2Igb2Yg
ZW5zdXJpbmcgKGEpIGFuZCAoYikuIFRoaXMgaGV1cmlzdGljIG1heSBuZWVkIHRvIGJlCi0gICAg
Ly8gICAgIHJldGhvdWdodCBpbiB0aGUgZnV0dXJlLCBwYXJ0aWN1bGFybHkgaWYgd2Ugc3VwcG9y
dCByZW9wdGltaXppbmcgY29kZQotICAgIC8vICAgICB3aXRoIG5ldyB2YWx1ZSBwcm9maWxlcyBn
YXRoZXJlZCBmcm9tIGNvZGUgdGhhdCBkaWQgT1NSIGV4aXQuCisgICAgLy8gICAgIGdvb2Qgam9i
IG9mIGVuc3VyaW5nIChhKSBhbmQgKGIpLiBCdXQgdGhhdCBkb2Vzbid0IHRha2UgY2FyZSBvZiAo
ZCksCisgICAgLy8gICAgIHNpbmNlIGVhY2ggc3BlY3VsYXRpb24gZmFpbHVyZSB3b3VsZCByZXNl
dCB0aGUgZXhlY3V0ZSBjb3VudGVyLgorICAgIC8vICAgICBTbyB3ZSBjaGVjayBoZXJlIGlmIHRo
ZSBudW1iZXIgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMgaXMgc2lnbmlmaWNhbnRseQorICAgIC8v
ICAgICBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHN1Y2Nlc3NlcyAod2Ugd2FudCA5MCUgc3Vj
Y2VzcyByYXRlKSwgYW5kIGlmCisgICAgLy8gICAgIHRoZXJlIGhhdmUgYmVlbiBhIGxhcmdlIGVu
b3VnaCBudW1iZXIgb2YgZmFpbHVyZXMuIElmIHNvLCB3ZSBzZXQgdGhlCisgICAgLy8gICAgIGNv
dW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bworICAgIC8vICAgICBj
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCisgICAgCisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIGxvYWQz
MihBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKEdQUklu
Zm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigp
KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIGFkZDMyKEltbTMyKDEpLCBHUFJJbmZvOjpyZWdUMik7
CisgICAgYWRkMzIoSW1tMzIoLTEpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgc3RvcmUzMihHUFJJ
bmZvOjpyZWdUMiwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNw
ZWN1bGF0aXZlRmFpbENvdW50ZXIoKSkpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDEsIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nl
c3NDb3VudGVyKCkpKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCkt
PmFsdGVybmF0aXZlKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgSnVtcCBmZXdGYWls
cyA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVnVDIsIEltbTMyKGNvZGVCbG9j
aygpLT5sYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpKSk7CisgICAgbXVsMzIoSW1tMzIoY29kZUJs
b2NrKCktPmRlc2lyZWRTdWNjZXNzRmFpbFJhdGlvKCkpLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5m
bzo6cmVnVDIpOworICAgIAorICAgIEp1bXAgbG93RmFpbFJhdGUgPSBicmFuY2gzMihCZWxvd09y
RXF1YWwsIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgCi0gICAgc3RvcmUz
MihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlcldhcm1VcCgpKSwgY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmFkZHJlc3NPZkV4
ZWN1dGVDb3VudGVyKCkpOworICAgIC8vIFJlb3B0aW1pemUgYXMgc29vbiBhcyBwb3NzaWJsZS4K
KyAgICBzdG9yZTMyKEltbTMyKENvZGVCbG9jazo6Y291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0
SW52b2NhdGlvbigpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRP
ZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIGRvbmVBZGp1c3RpbmcgPSBqdW1wKCk7Cisg
ICAgCisgICAgZmV3RmFpbHMubGluayh0aGlzKTsKKyAgICBsb3dGYWlsUmF0ZS5saW5rKHRoaXMp
OworICAgIAorICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmNv
dW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKCkpLCBBZGRyZXNzKEdQUkluZm86
OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkpOworICAgIAorICAg
IGRvbmVBZGp1c3RpbmcubGluayh0aGlzKTsKICAgICAKICAgICAvLyAxMikgTG9hZCB0aGUgcmVz
dWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgogICAgIApAQCAt
NDgxLDYgKzUxMyw4IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVFbnRyeSgpCiAgICAgLy8g
Ym90aCBub3JtYWwgcmV0dXJuIGNvZGUgYW5kIHdoZW4ganVtcGluZyB0byBhbiBleGNlcHRpb24g
aGFuZGxlcikuCiAgICAgcHJlc2VydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKEdQUkluZm86OnJl
Z1QyKTsKICAgICBlbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXIoR1BSSW5mbzo6cmVnVDIsIFJlZ2lz
dGVyRmlsZTo6UmV0dXJuUEMpOworICAgIAorICAgIGFkZFB0cihJbW0zMigxKSwgQWJzb2x1dGVB
ZGRyZXNzKGNvZGVCbG9jaygpLT5hZGRyZXNzT2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkp
KTsKIH0KIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUJvZHkoKQpAQCAtNDk4LDEwICs1MzIs
NiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgYm9vbCBjb21waWxlZFNw
ZWN1bGF0aXZlID0gc3BlY3VsYXRpdmUuY29tcGlsZSgpOwogICAgIEFTU0VSVF9VTlVTRUQoY29t
cGlsZWRTcGVjdWxhdGl2ZSwgY29tcGlsZWRTcGVjdWxhdGl2ZSk7CiAKLSNpZiBFTkFCTEUoREZH
X09TUl9FTlRSWSkKLSAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChtX2ppdENvZGVNYXBF
bmNvZGVyLmZpbmlzaCgpKTsKLSNlbmRpZgotICAgIAogICAgIGxpbmtPU1JFeGl0cyhzcGVjdWxh
dGl2ZSk7CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIG1fY2FsbHMgdmVjdG9yLCBjaGVja2lu
ZyBmb3IgZXhjZXB0aW9uIGNoZWNrcywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDQ2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIG5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJh
c2ljQmxvY2spCiAgICAgewotICAgICAgICBtX2ppdENvZGVNYXBFbmNvZGVyLmFwcGVuZChiYXNp
Y0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxh
YmVsKCkpKTsKKyNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKKyAgICAgICAgT1NSRW50cnlEYXRh
KiBlbnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5i
eXRlY29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7
CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBsYXN0TGl2ZUFyZ3VtZW50ID0gMDsKKyAgICAg
ICAgdW5zaWduZWQgbGFzdExpdmVMb2NhbCA9IDA7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIGxhc3RMaXZlQXJndW1lbnQgPSBpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fs
cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2NhbHNbaV0u
dmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGxhc3RMaXZlTG9jYWwgPSBpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobGFzdExpdmVBcmd1bWVudCkgeworICAgICAg
ICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5yZXNpemUobGFzdExpdmVBcmd1bWVudCArIDEp
OworICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlQXJndW1l
bnQ7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ld
LnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZUFyZ3Vt
ZW50cy5zZXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ZW50cnktPm1fbGl2ZUFyZ3VtZW50cy5jbGVhcigpOworICAgICAgICAKKyAgICAgICAgaWYgKGxh
c3RMaXZlTG9jYWwpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMucmVzaXpl
KGxhc3RMaXZlTG9jYWwgKyAxKTsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMu
Y2xlYXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8PSBsYXN0TGl2ZUxvY2FsOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9j
ay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5
LT5tX2xpdmVWYXJpYWJsZXMuc2V0KGkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuY2xlYXIoKTsKKyNlbHNlCisgICAg
ICAgIFVOVVNFRF9QQVJBTShiYXNpY0Jsb2NrKTsKKyNlbmRpZgogICAgIH0KIAogcHJpdmF0ZToK
QEAgLTM1Myw3ICszOTIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIC8vIEpJVCBjb2RlIG1hcCBm
b3IgT1NSIGVudHJ5cG9pbnRzLgogICAgIExhYmVsIG1fc3RhcnRPZkNvZGU7Ci0gICAgQ29tcGFj
dEpJVENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2RlTWFwRW5jb2RlcjsKIAogICAgIHN0cnVjdCBQ
cm9wZXJ0eUFjY2Vzc1JlY29yZCB7CiAgICAgICAgIFByb3BlcnR5QWNjZXNzUmVjb3JkKENhbGwg
ZnVuY3Rpb25DYWxsLCBpbnQxNl90IGRlbHRhQ2hlY2tJbW1Ub0NhbGwsIGludDE2X3QgZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjaywgaW50MTZfdCBkZWx0YUNhbGxUb0xvYWRPclN0b3JlLCBpbnQxNl90
IGRlbHRhQ2FsbFRvU2xvd0Nhc2UsIGludDE2X3QgZGVsdGFDYWxsVG9Eb25lLCBpbnQ4X3QgYmFz
ZUdQUiwgaW50OF90IHZhbHVlR1BSLCBpbnQ4X3Qgc2NyYXRjaEdQUikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OCw3ICs1OCw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsK
ICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwotICAgIEFTU0VSVChjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7CisgICAgQVNTRVJUKCFjb2Rl
QmxvY2stPmppdENvZGVNYXAoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+bnVtYmVyT2ZERkdP
U1JFbnRyaWVzKCkpOwogCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICBwcmludGYo
Ik9TUiBpbiAlcCglcCkgZnJvbSBiYyMldVxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCksIGJ5dGVjb2RlSW5kZXgpOwpAQCAtNjYsNiArNjcsOSBAQCB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIE9TUkVudHJ5RGF0YSogZW50
cnkgPSBjb2RlQmxvY2stPmRmZ09TUkVudHJ5RGF0YUZvckJ5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCk7CisgICAgCisgICAgQVNTRVJUKGVudHJ5LT5tX2J5dGVjb2RlSW5kZXggPT0gYnl0ZWNv
ZGVJbmRleCk7CiAgICAgCiAgICAgLy8gVGhlIGNvZGUgYmVsb3cgY2hlY2tzIGlmIGl0IGlzIHNh
ZmUgdG8gcGVyZm9ybSBPU1IgZW50cnkuIEl0IG1heSBmaW5kCiAgICAgLy8gdGhhdCBpdCBpcyB1
bnNhZmUgdG8gZG8gc28sIGZvciBhbnkgbnVtYmVyIG9mIHJlYXNvbnMsIHdoaWNoIGFyZSBkb2N1
bWVudGVkCkBAIC05Nyw3ICsxMDEsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRl
KiBleGVjLCBDCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7Ci0gICAgICAg
IGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEp
LCBwcmVkaWN0aW9ucy0+Z2V0QXJndW1lbnRQcmVkaWN0aW9uKGkpKSkgeworICAgICAgICBpZiAo
aSA8IGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuYm91bmRzKCkgJiYgZW50cnktPm1fbGl2ZUFyZ3Vt
ZW50cy5nZXQoaSkKKyAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRh
LCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rp
b24oaSkpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50
ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMu
XG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgcHJlZGljdGlvblRv
U3RyaW5nKHByZWRpY3Rpb25zLT5nZXRBcmd1bWVudFByZWRpY3Rpb24oaSkpKTsKICNlbmRpZgpA
QCAtMTA1LDExICsxMTAsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8ga25v
dyBpZiBhdCBhbiBPU1IgZW50cnksIGEgdmFyaWFibGUgaXMgbGl2ZS4gSWYgaXQgaXNuJ3QKLSAg
ICAvLyB0aGVuIHdlIHNob3VsZG4ndCB0cnkgdG8gdmVyaWZ5IGl0cyBwcmVkaWN0aW9uLgotICAg
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkaWN0aW9ucy0+bnVtYmVyT2ZWYXJp
YWJsZXMoKTsgKytpKSB7Ci0gICAgICAgIGlmICghcHJlZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0
YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9ucy0+Z2V0UHJlZGlj
dGlvbihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmJvdW5k
cygpICYmIGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJl
ZGljdGlvbklzVmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgp
LCBwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJP
U0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlh
YmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpz
VmFsdWUoKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdl
dFByZWRpY3Rpb24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJs
b2NrKGNvZGVCbG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0
aW5hdGlvbiBtYWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0
aGUgbWFjaGluZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29k
ZU1hcC4KLSAgICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQg
d2UgZXhwZWN0IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkg
cmFyZWx5LCBhbmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8v
ICAgIGZldywgdGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBv
bmx5IHJlYWwKLSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFw
IGlzIHRvIGF2b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBk
YXRhIHN0cnVjdHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0g
ICAgLy8gICAgbWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVN
YXA6OkRlY29kZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWdu
ZWQgbWFjaGluZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4
KCk7Ci0gICAgd2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAg
ICAgICAgdW5zaWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1
cnJlbnRNYWNoaW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRl
Y29kZUluZGV4LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVu
dEJ5dGVjb2RlSW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNv
ZGVPZmZzZXQgPSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFu
ZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAg
IHZvaWQqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2Rl
T2Zmc2V0KTsKKyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkg
KyBlbnRyeS0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRy
ZXNzICVwLlxuIiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERG
R09TUkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZl
Y3Rvci5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiAr
MzYsMTggQEAgY2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUo
REZHX0pJVCkKK3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBt
X2xpdmVBcmd1bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lu
bGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSog
b3NyRW50cnlEYXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRl
eDsKK30KKwogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2Rl
LmNoaWxkMSgpKSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAg
ICAgICAgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIG9wMSk7CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3Rz
LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25z
ZXJ2YXRpdmVSb290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVk
ZSAiSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBi
b29sIGlzUG9pbnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDI3IEBAIGlubGluZSBi
b29sIGlzUG9pbnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHAp
ICYgKHNpemVvZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2
YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzLCBKZXR0aXNvbmVkQ29kZUJs
b2NrcyogY29kZUJsb2NrcykKKyAgICA6IG1fcm9vdHMobV9pbmxpbmVSb290cykKKyAgICAsIG1f
c2l6ZSgwKQorICAgICwgbV9jYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKKyAgICAsIG1fYmxvY2tz
KGJsb2NrcykKKyAgICAsIG1fY29kZUJsb2Nrcyhjb2RlQmxvY2tzKQoreworICAgIGlmICghbV9j
b2RlQmxvY2tzKSB7CisgICAgICAgIC8vIENyZWF0ZSBhIGR1bW15IEpldHRpc29uZWRDb2RlQmxv
Y2tzIHN0cnVjdHVyZSwgc28gdGhhdCBDb25zZXJ2YXRpdmVSb290czo6YWRkKCkKKyAgICAgICAg
Ly8gZG9lc24ndCBoYXZlIHRvIGRvIGFueSBudWxsIGNoZWNrcyBvbiBtX2NvZGVCbG9ja3MuCisg
ICAgICAgIG1fbXlDb2RlQmxvY2tzID0gYWRvcHRQdHIobmV3IEpldHRpc29uZWRDb2RlQmxvY2tz
KCkpOworICAgICAgICBtX2NvZGVCbG9ja3MgPSBtX215Q29kZUJsb2Nrcy5nZXQoKTsKKyAgICB9
Cit9CisKK0NvbnNlcnZhdGl2ZVJvb3RzOjp+Q29uc2VydmF0aXZlUm9vdHMoKQoreworICAgIGlm
IChtX3Jvb3RzICE9IG1faW5saW5lUm9vdHMpCisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1p
dEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwqKSk7Cit9CisK
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogewogICAgIHNpemVfdCBuZXdDYXBhY2l0
eSA9IG1fY2FwYWNpdHkgPT0gaW5saW5lQ2FwYWNpdHkgPyBub25JbmxpbmVDYXBhY2l0eSA6IG1f
Y2FwYWNpdHkgKiAyOwpAQCAtNDYsNiArNjksOCBAQCB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpn
cm93KCkKIAogaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55
Qmxvb21GaWx0ZXIgZmlsdGVyKQogeworICAgIG1fY29kZUJsb2Nrcy0+bWFyayhwKTsKKyAgICAK
ICAgICBNYXJrZWRCbG9jayogY2FuZGlkYXRlID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKHApOwog
ICAgIGlmIChmaWx0ZXIucnVsZU91dChyZWludGVycHJldF9jYXN0PEJpdHM+KGNhbmRpZGF0ZSkp
KSB7CiAgICAgICAgIEFTU0VSVCghY2FuZGlkYXRlIHx8ICFtX2Jsb2Nrcy0+c2V0KCkuY29udGFp
bnMoY2FuZGlkYXRlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2
YXRpdmVSb290cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
bnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMz
LDEyIEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNDZWxsOworY2xhc3MgSmV0dGlzb25l
ZENvZGVCbG9ja3M7CiBjbGFzcyBIZWFwOwogCiBjbGFzcyBDb25zZXJ2YXRpdmVSb290cyB7CiBw
dWJsaWM6Ci0gICAgQ29uc2VydmF0aXZlUm9vdHMoY29uc3QgTWFya2VkQmxvY2tTZXQqKTsKKyAg
ICBDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCosIEpldHRpc29uZWRDb2Rl
QmxvY2tzKiA9IDApOwogICAgIH5Db25zZXJ2YXRpdmVSb290cygpOwogCiAgICAgdm9pZCBhZGQo
dm9pZCogYmVnaW4sIHZvaWQqIGVuZCk7CkBAIC01NiwyMyArNTcsMTEgQEAgcHJpdmF0ZToKICAg
ICBzaXplX3QgbV9zaXplOwogICAgIHNpemVfdCBtX2NhcGFjaXR5OwogICAgIGNvbnN0IE1hcmtl
ZEJsb2NrU2V0KiBtX2Jsb2NrczsKKyAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcyogbV9jb2RlQmxv
Y2tzOworICAgIE93blB0cjxKZXR0aXNvbmVkQ29kZUJsb2Nrcz4gbV9teUNvZGVCbG9ja3M7CiAg
ICAgSlNDZWxsKiBtX2lubGluZVJvb3RzW2lubGluZUNhcGFjaXR5XTsKIH07CiAKLWlubGluZSBD
b25zZXJ2YXRpdmVSb290czo6Q29uc2VydmF0aXZlUm9vdHMoY29uc3QgTWFya2VkQmxvY2tTZXQq
IGJsb2NrcykKLSAgICA6IG1fcm9vdHMobV9pbmxpbmVSb290cykKLSAgICAsIG1fc2l6ZSgwKQot
ICAgICwgbV9jYXBhY2l0eShpbmxpbmVDYXBhY2l0eSkKLSAgICAsIG1fYmxvY2tzKGJsb2NrcykK
LXsKLX0KLQotaW5saW5lIENvbnNlcnZhdGl2ZVJvb3RzOjp+Q29uc2VydmF0aXZlUm9vdHMoKQot
ewotICAgIGlmIChtX3Jvb3RzICE9IG1faW5saW5lUm9vdHMpCi0gICAgICAgIE9TQWxsb2NhdG9y
OjpkZWNvbW1pdEFuZFJlbGVhc2UobV9yb290cywgbV9jYXBhY2l0eSAqIHNpemVvZihKU0NlbGwq
KSk7Ci19Ci0KIGlubGluZSBzaXplX3QgQ29uc2VydmF0aXZlUm9vdHM6OnNpemUoKQogewogICAg
IHJldHVybiBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzk0LDYgKzM5NCwxMSBAQCB2b2lkIEhlYXA6Om1hcmtQcm90ZWN0ZWRP
YmplY3RzKEhlYXBSb290CiAgICAgICAgIGhlYXBSb290VmlzaXRvci52aXNpdCgmaXQtPmZpcnN0
KTsKIH0KIAordm9pZCBIZWFwOjpqZXR0aXNvbkNvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrKQoreworICAgIG1fY29kZUJsb2Nrcy5hZGRDb2RlQmxvY2soY29kZUJsb2Nr
KTsKK30KKwogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0b3IoVmVjdG9yPFZhbHVlU3RyaW5n
UGFpcj4qIHRlbXBWZWN0b3IpCiB7CiAgICAgbV90ZW1wU29ydGluZ1ZlY3RvcnMuYXBwZW5kKHRl
bXBWZWN0b3IpOwpAQCAtNDU2LDEwICs0NjEsMTIgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQog
ICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CiAKICAgICB2b2lkKiBkdW1t
eTsKLQorICAgIAorICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAgCiAgICAgLy8g
V2UgZ2F0aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJl
Y2F1c2UgY29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0
byBkZXRlcm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KLSAgICBDb25zZXJ2YXRp
dmVSb290cyBtYWNoaW5lVGhyZWFkUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCkpOworICAg
IENvbnNlcnZhdGl2ZVJvb3RzIG1hY2hpbmVUaHJlYWRSb290cygmbV9vYmplY3RTcGFjZS5ibG9j
a3MoKSwgJm1fY29kZUJsb2Nrcyk7CiAgICAgbV9tYWNoaW5lVGhyZWFkcy5nYXRoZXJDb25zZXJ2
YXRpdmVSb290cyhtYWNoaW5lVGhyZWFkUm9vdHMsICZkdW1teSk7CiAKICAgICBDb25zZXJ2YXRp
dmVSb290cyByZWdpc3RlckZpbGVSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSk7CkBAIC00
NjksNyArNDc2LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogCiAgICAgU2xvdFZpc2l0b3Im
IHZpc2l0b3IgPSBtX3Nsb3RWaXNpdG9yOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZp
c2l0b3IodmlzaXRvcik7Ci0KKyAgICAKICAgICB2aXNpdG9yLmFwcGVuZChtYWNoaW5lVGhyZWFk
Um9vdHMpOwogICAgIHZpc2l0b3IuZHJhaW4oKTsKIApAQCAtNDkzLDYgKzUwMCw4IEBAIHZvaWQg
SGVhcDo6bWFya1Jvb3RzKCkKIAogICAgIG1faGFuZGxlU3RhY2sudmlzaXQoaGVhcFJvb3RWaXNp
dG9yKTsKICAgICB2aXNpdG9yLmRyYWluKCk7CisgICAgCisgICAgbV9jb2RlQmxvY2tzLnRyYWNl
Q29kZUJsb2Nrcyh2aXNpdG9yKTsKIAogICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtl
ZCBsYXN0LCBiZWNhdXNlIHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgogICAgIC8vIG9wYXF1
ZSByb290cyB0byBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LgpAQCAtNTg4LDYgKzU5Nyw3IEBAIHZv
aWQgSGVhcDo6Y29sbGVjdChTd2VlcFRvZ2dsZSBzd2VlcFRvZ2cKICAgICBKQVZBU0NSSVBUQ09S
RV9HQ19NQVJLRUQoKTsKICAgICAKICAgICByZXNldEFsbG9jYXRvcigpOworICAgIG1fY29kZUJs
b2Nrcy5kZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKIAogICAgIGlmIChzd2VlcFRvZ2dsZSA9
PSBEb1N3ZWVwKSB7CiAgICAgICAgIHN3ZWVwKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkFsbG9jYXRp
b25TcGFjZS5oIgogI2luY2x1ZGUgIkhhbmRsZUhlYXAuaCIKICNpbmNsdWRlICJIYW5kbGVTdGFj
ay5oIgorI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCiAjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKICNpbmNsdWRlICJNYXJrZWRCbG9ja1NldC5oIgogI2luY2x1ZGUgIk1hcmtlZFNw
YWNlLmgiCkBAIC05OCw2ICs5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
cHJvdGVjdChKU1ZhbHVlKTsKICAgICAgICAgYm9vbCB1bnByb3RlY3QoSlNWYWx1ZSk7IC8vIFRy
dWUgd2hlbiB0aGUgcHJvdGVjdCBjb3VudCBkcm9wcyB0byAwLgorICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbkNvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOwogCiAgICAgICAg
IHNpemVfdCBzaXplKCk7CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpOwpAQCAtMTkxLDYgKzE5
NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9y
OwogICAgICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sg
bV9oYW5kbGVTdGFjazsKKyAgICAgICAgSmV0dGlzb25lZENvZGVCbG9ja3MgbV9jb2RlQmxvY2tz
OwogICAgICAgICAKICAgICAgICAgYm9vbCBtX2lzU2FmZVRvQ29sbGVjdDsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRD
b2RlQmxvY2tzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENvZGVCbG9ja3MoKSB7
IH0KKworSmV0dGlzb25lZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2NrcygpCit7Cisg
ICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdp
bigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFw
LmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRl
ciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBkZWxldGUgaXRlci0+Zmly
c3Q7Cit9CisKK3ZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmFkZENvZGVCbG9jayhQYXNzT3du
UHRyPENvZGVCbG9jaz4gY29kZUJsb2NrKQoreworICAgIEFTU0VSVChtX21hcC5maW5kKGNvZGVC
bG9jay5nZXQoKSkgPT0gbV9tYXAuZW5kKCkpOworICAgIAorICAgIG1fbWFwLmFkZChjb2RlQmxv
Y2subGVha1B0cigpLCBmYWxzZSk7Cit9CisKK3ZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmNs
ZWFyTWFya3MoKQoreworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJl
Z2luID0gbV9tYXAuYmVnaW4oKTsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBlbmQgPSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAg
aXRlci0+c2Vjb25kID0gZmFsc2U7Cit9CisKK3ZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmRl
bGV0ZVVubWFya2VkQ29kZUJsb2NrcygpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayo+IHRvUmVt
b3ZlOworICAgIAorICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2lu
ID0gbV9tYXAuYmVnaW4oKTsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRv
ciBlbmQgPSBtX21hcC5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46
Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBp
ZiAoIWl0ZXItPnNlY29uZCkKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdGVyLT5maXJz
dCk7CisgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5z
aXplKCk7ICsraSkgeworICAgICAgICBtX21hcC5yZW1vdmUodG9SZW1vdmVbaV0pOworICAgICAg
ICBkZWxldGUgdG9SZW1vdmVbaV07CisgICAgfQorfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxv
Y2tzOjp0cmFjZUNvZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsK
KyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQo
KTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBi
ZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+Zmlyc3QtPnZpc2l0QWdn
cmVnYXRlKHNsb3RWaXNpdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2Rl
QmxvY2tzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKyNk
ZWZpbmUgSmV0dGlzb25lZENvZGVCbG9ja3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jh
c2UuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTbG90Vmlz
aXRvcjsKKworY2xhc3MgSmV0dGlzb25lZENvZGVCbG9ja3MgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOyAvLyBPbmx5IG1hbGxvYydkIGluIENvbnNlcnZhdGl2ZVJvb3RzCitwdWJsaWM6
CisgICAgSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB+SmV0dGlzb25lZENvZGVC
bG9ja3MoKTsKKyAgICAKKyAgICB2b2lkIGFkZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9j
az4pOworICAgIAorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAgIAorICAgIHZvaWQgbWFyayh2
b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCisgICAgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGNo
ZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFz
IG1hcmtlcnMuCisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihjYW5kaWRhdGVDb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBj
aGVja3MgZm9yIGJvdGggb2YgdGhvc2UgbmFzdHkgY2FzZXMgaW4gb25lIGdvLgorICAgICAgICAv
LyAwICsgMSA9IDEKKyAgICAgICAgLy8gLTEgKyAxID0gMAorICAgICAgICBpZiAodmFsdWUgKyAx
IDw9IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPENv
ZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gbV9tYXAuZmluZChzdGF0aWNfY2FzdDxD
b2RlQmxvY2sqPihjYW5kaWRhdGVDb2RlQmxvY2spKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9t
YXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGl0ZXItPnNlY29uZCA9IHRy
dWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7Cisg
ICAgCisgICAgdm9pZCB0cmFjZUNvZGVCbG9ja3MoU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToK
KyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCB0byB1c2UgYW4gT3duUHRyPENvZGVCbG9jaz4gaGVy
ZSBidXQgdGhhdCB3b3VsZAorICAgIC8vIGFsbW9zdCBjZXJ0YWlubHkgbm90IHdvcmsuCisgICAg
SGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPiBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gSmV0dGlzb25lZENvZGVCbG9ja3NfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxNCw3ICsx
OTE0LDIyIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNrRnJhbWUuYXJnc1swXS5pbnQzMigpOwogCi0gICAgaWYg
KCFjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklU
X1ZFUkJPU0VfT1NSKQorICAgIHByaW50ZigiRW50ZXJlZCBvcHRpbWl6ZV9mcm9tX2xvb3Agd2l0
aCBleGVjdXRlQ291bnRlciA9ICVkLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICV1LCBv
cHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAldVxuIiwgY29kZUJsb2NrLT5leGVjdXRlQ291bnRl
cigpLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+
b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2Nr
LT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKKyAgICAgICAgcHJpbnRmKCJDb25zaWRlcmluZyBsb29wIE9TUiBpbnRvICVwKCVwKSB3aXRo
IHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIo
KSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOwor
I2VuZGlmCisgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0
aW1pemVGcm9tTG9vcE5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAg
ICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxv
b3ApLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOworI2VuZGlmCisg
ICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9y
ICVwIChpbiBsb29wKSBiZWNhdXNlIG9mIGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iLCBjb2Rl
QmxvY2spOwpAQCAtMTk1Miw2ICsxOTY3LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3B0aW1pemVfZnJvbQogI2VuZGlmCiAKICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24o
KTsKKyAgICAgICAgb3B0aW1pemVkQ29kZUJsb2NrLT5jb3VudFNwZWN1bGF0aW9uU3VjY2Vzcygp
OwogICAgICAgICBTVFVCX1NFVF9SRVRVUk5fQUREUkVTUyhhZGRyZXNzKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE5NjAsNiArMTk3NiwzMCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgcHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBz
dWNjZWVkZWQsIE9TUiBmYWlsZWQuXG4iLCBjb2RlQmxvY2spOwogI2VuZGlmCiAKKyAgICAvLyBD
b3VudCB0aGUgT1NSIGZhaWx1cmUgYXMgYSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhh
cHBlbnMgYSBsb3QsIHRoZW4KKyAgICAvLyByZW9wdGltaXplLgorICAgIG9wdGltaXplZENvZGVC
bG9jay0+Y291bnRTcGVjdWxhdGlvbkZhaWx1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQorICAgIHByaW50ZigiRW5jb3VudGVyZWQgbG9vcCBPU1IgZmFpbHVyZSBpbnRv
ICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3Vj
Y2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxD
b3VudGVyKCkpOworI2VuZGlmCisKKyAgICAvLyBXZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRp
dmUgYWJvdXQgdHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFu
CisgICAgLy8gYmVmb3JlIGl0LiBJZiB3ZSBlbnRlciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRy
aWdnZXIgd2l0aCBhIGJ1Y2tldCBmdWxsIG9mIGZhaWwKKyAgICAvLyBhbHJlYWR5LCB0aGVuIHdl
IHJlYWxseSB3b3VsZCBsaWtlIHRvIHJlb3B0aW1pemUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNh
c2UgY292ZXJzCisgICAgLy8gc29tZXRoaW5nIGVsc2U6IHRoZXJlIHdlcmVuJ3QgbWFueSAob3Ig
YW55KSBzcGVjdWxhdGlvbiBmYWlsdXJlcyBiZWZvcmUsIGJ1dCB3ZSBqdXN0CisgICAgLy8gZmFp
bGVkIHRvIGVudGVyIHRoZSBzcGVjdWxhdGl2ZSBjb2RlIGJlY2F1c2Ugc29tZSB2YXJpYWJsZSBo
YWQgdGhlIHdyb25nIHZhbHVlIG9yCisgICAgLy8gYmVjYXVzZSB0aGUgT1NSIGNvZGUgZGVjaWRl
ZCBmb3IgYW55IHNwdXJpb3VzIHJlYXNvbiB0aGF0IGl0IGRpZCBub3Qgd2FudCB0byBPU1IKKyAg
ICAvLyByaWdodCBub3cuIFNvLCB3ZSBvbmx5IHRyaWdnZXIgcmVvcHRpbWl6YXRpb24gb25seSB1
cG9uIHRoZSBtb3JlIGNvbnNlcnZhdGl2ZSAobm9uLWxvb3ApCisgICAgLy8gcmVvcHRpbWl6YXRp
b24gdHJpZ2dlci4KKyAgICBpZiAob3B0aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXpl
Tm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYoIlRy
aWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiBsb29wIGFmdGVyIE9TUiBmYWls
KS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAg
ICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBp
dCBtaWdodCBzdWNjZWVkIG5leHQgdGltZSEgTGV0IHRoZSBjb2RlIHJ1biBhIGJpdAogICAgIC8v
IGxvbmdlciBhbmQgdGhlbiB0cnkgYWdhaW4uCiAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVy
V2FybVVwKCk7CkBAIC0xOTcyLDggKzIwMTIsMjMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemVfZnJvbQogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5j
YWxsRnJhbWU7CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpOwogICAgIAotICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkp
CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1p
emVfZnJvbV9yZXQgd2l0aCBleGVjdXRlQ291bnRlciA9ICVkLCByZW9wdGltaXphdGlvblJldHJ5
Q291bnRlciA9ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIgPSAldVxuIiwgY29kZUJsb2Nr
LT5leGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
KCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKCkpOworI2VuZGlmCisKKyAg
ICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklU
IGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nl
c3MvZmFpbCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29k
ZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlm
CisgICAgICAgIGlmIChjb2RlQmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVO
b3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYo
IlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29k
ZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOworI2VuZGlmCisgICAgICAgICAgICBj
b2RlQmxvY2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICB9
CisKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+c2hv
dWxkT3B0aW1pemVOb3coKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24g
OTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTggQEAgREZHOjpJbnRyaW5zaWMgTmF0aXZlRXhl
Y3V0YWJsZTo6aW50cmlucwogfQogI2VuZGlmCiAKKy8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9y
IGpldHRpc29uaW5nIGNvZGUgYmxvY2tzLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyB2
b2lkIGpldHRpc29uQ29kZUJsb2NrKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPFQ+
JiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJ
VENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
KTsKKyAgICBPd25QdHI8VD4gY29kZUJsb2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNl
KCk7CisgICAgY29kZUJsb2NrID0gc3RhdGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pl
dHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRpdmUoKSk7CisgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+
dW5saW5rSW5jb21pbmdDYWxscygpOworICAgIGdsb2JhbERhdGEuaGVhcC5qZXR0aXNvbkNvZGVC
bG9jayhzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4oY29kZUJsb2NrVG9KZXR0aXNvbi5y
ZWxlYXNlKCkpKTsKK30KKwogY29uc3QgQ2xhc3NJbmZvIFNjcmlwdEV4ZWN1dGFibGU6OnNfaW5m
byA9IHsgIlNjcmlwdEV4ZWN1dGFibGUiLCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCB9
OwogCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVj
dXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCB9OwpAQCAtMjExLDYgKzIy
MywxMyBAQCBKU09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hCiAgICAgcmV0
dXJuIDA7CiB9CiAKK3ZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFs
RGF0YSwgbV9ldmFsQ29kZUJsb2NrKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9ldmFsQ29k
ZUJsb2NrLT5nZXRKSVRDb2RlKCk7CisgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2spOworfQorCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywg
JnNfaW5mbyk7CkBAIC0zMzAsNiArMzQ5LDEzIEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJs
ZTo6Y29tcGlsZUludGUKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBQcm9ncmFtRXhlY3V0YWJs
ZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX3Byb2dyYW1Db2RlQmxvY2spOworICAg
IG1faml0Q29kZUZvckNhbGwgPSBtX3Byb2dyYW1Db2RlQmxvY2stPmdldEpJVENvZGUoKTsKKyAg
ICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Cit9CisKIHZvaWQgUHJv
Z3JhbUV4ZWN1dGFibGU6OnVubGlua0NhbGxzKCkKIHsKICNpZiBFTkFCTEUoSklUKQpAQCAtNTMz
LDYgKzU1OSwyMCBAQCBKU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yCiAg
ICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGlt
aXplZENvZGVGb3JDYWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBqZXR0aXNv
bkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNhbGwpOworICAgIG1faml0Q29k
ZUZvckNhbGwgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVENvZGUoKTsKKyAgICBtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNhbGwtPmdldEpJVENvZGVX
aXRoQXJpdHlDaGVjaygpOworfQorCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAg
ICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7
CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0ID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmdl
dEpJVENvZGUoKTsKKyAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwog
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiB7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0
aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICBFdmFsQ29kZUJsb2NrJiBnZW5l
cmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsKQEAgLTM5Miw2ICszOTQsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCiAgICAgICAgIHsKQEAgLTQ3NSw2ICs0NzksOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSosIEV4ZWNTdGF0ZSogY2Fs
bGVlQXJnc0V4ZWMgPSAwKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmKTsKIAogICAgICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ2FsbCgpIGNvbnN0CiAgICAgICAgIHsKQEAgLTQ5OCw2ICs1MDQsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9y
Q29uc3RydWN0KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIAorICAgICAg
ICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmKTsK
IAogICAgICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKICAgICAgICAg
ewpAQCAtNTM4LDYgKzU0NiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVy
biBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlQ2hhaW5Ob2RlKTsKICAg
ICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3Io
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSAKKyAgICAgICAg
ICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKGdsb2JhbERhdGEpOworICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0
cnVjdCk7CisgICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0
KGdsb2JhbERhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBCaXRWZWN0b3JfaAorI2RlZmluZSBCaXRWZWN0b3JfaAorCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1l
c3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBhIHNwYWNlLWVmZmljaWVudCwgcmVzaXplYWJsZSBi
aXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2FzZSBpdAorLy8gb2NjdXBpZXMgb25lIHdv
cmQsIGJ1dCBpZiBuZWNlc3NhcnksIGl0IHdpbGwgaW5mbGF0ZSB0aGlzIG9uZSB3b3JkIHRvIHBv
aW50CisvLyB0byBhIHNpbmdsZSBjaHVuayBvZiBvdXQtb2YtbGluZSBhbGxvY2F0ZWQgc3RvcmFn
ZSB0byBzdG9yZSBhbiBhcmJpdHJhcnkgbnVtYmVyCisvLyBvZiBiaXRzLgorLy8KKy8vIC0gVGhl
IGJpdHZlY3RvciBuZWVkcyB0byBiZSByZXNpemVkIG1hbnVhbGx5IChqdXN0IGNhbGwgZW5zdXJl
U2l6ZSgpKS4KKy8vCisvLyAtIFRoZSBiaXR2ZWN0b3IgcmVtZW1iZXJzIHRoZSBib3VuZCBvZiBo
b3cgbWFueSBiaXRzIGNhbiBiZSBzdG9yZWQsIGJ1dCB0aGlzCisvLyAgIG1heSBiZSBzbGlnaHRs
eSBncmVhdGVyIChieSBhcyBtdWNoIGFzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29uc3RhbnQp
CisvLyAgIHRoYW4gdGhlIGxhc3QgYXJndW1lbnQgcGFzc2VkIHRvIGVuc3VyZVNpemUoKS4KKy8v
CisvLyAtIEFjY2Vzc2VzIEFTU0VSVCB0aGF0IHlvdSBhcmUgd2l0aGluIGJvdW5kcy4KKy8vCisv
LyAtIEJpdHMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVkIHRvIHplcm8uCisvLwor
Ly8gT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgQml0VmVjdG9yIGNsYXNzIG1heSBub3QgYmUgdGhl
IGZhc3Rlc3QgYXJvdW5kLCBzaW5jZQorLy8gaXQgZG9lcyBjb25kaXRpb25hbHMgb24gZXZlcnkg
Z2V0L3NldC9jbGVhci4gQnV0IGl0IGlzIGdyZWF0IGlmIHlvdSBuZWVkIHRvCisvLyBqdWdnbGUg
YSBsb3Qgb2YgdmFyaWFibGUtbGVuZ3RoIEJpdFZlY3RvcnMgYW5kIHlvdSdyZSB3b3JyaWVkIGFi
b3V0IHdhc3RpbmcKKy8vIHNwYWNlLgorCitjbGFzcyBCaXRWZWN0b3IgeworcHVibGljOiAKKyAg
ICBCaXRWZWN0b3IoKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcihzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJp
dFZlY3Rvcihjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0c09yUG9pbnRl
cihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkKKyAgICB7Cisg
ICAgICAgICgqdGhpcykgPSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgfkJpdFZlY3RvcigpCisg
ICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgIH0KKyAgICAK
KyAgICBCaXRWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsK
KyAgICAgICAgdWludHB0cl90IG5ld0JpdHNPclBvaW50ZXI7CisgICAgICAgIGlmIChvdGhlci5p
c0lubGluZSgpKQorICAgICAgICAgICAgbmV3Qml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09y
UG9pbnRlcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzKiBuZXdP
dXRPZkxpbmVCaXRzID0gT3V0T2ZMaW5lQml0czo6Y3JlYXRlKG90aGVyLmJvdW5kcygpKTsKKyAg
ICAgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIG90aGVyLmJpdHMoKSwg
b3RoZXIuYm91bmRzKCkgPj4gMyk7CisgICAgICAgICAgICBuZXdCaXRzT3JQb2ludGVyID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpOworICAgICAgICB9Cisg
ICAgICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ry
b3kob3V0T2ZMaW5lQml0cygpKTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbmV3Qml0c09y
UG9pbnRlcjsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIHNpemVfdCBib3Vu
ZHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYml0c09yUG9pbnRlciA+PiBtYXhJbmxp
bmVCaXRzKCkpCisgICAgICAgICAgICByZXR1cm4gbWF4SW5saW5lQml0cygpOworICAgICAgICBy
ZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5udW1CaXRzKCk7CisgICAgfQorCisgICAgdm9pZCBlbnN1
cmVTaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAgaWYgKG51bUJpdHMgPD0gYm91
bmRzKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlc2l6ZU91dE9mTGluZShudW1C
aXRzKTsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBlbnN1cmVTaXplKCksIGJ1dCBzdXBwb3J0
cyByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVjdG9yLgorICAgIHZvaWQgcmVzaXplKHNp
emVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAobnVtQml0cyA8PSBtYXhJbmxpbmVCaXRz
KCkpIHsKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHMqIG15T3V0T2ZMaW5lQml0cyA9IG91dE9m
TGluZUJpdHMoKTsKKyAgICAgICAgICAgIG1fYml0c09yUG9pbnRlciA9IChzdGF0aWNfY2FzdDx1
aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkgfCAqbXlPdXRPZkxpbmVCaXRzLT5iaXRz
KCk7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG15T3V0T2ZMaW5lQml0cyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc2l6
ZU91dE9mTGluZShudW1CaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAg
eworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIG1fYml0c09yUG9pbnRlciA9
IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBiemVybyhvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgYm91bmRzKCkg
Pj4gMyk7CisgICAgfQorCisgICAgYm9vbCBnZXQoc2l6ZV90IGJpdCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChiaXQgPCBib3VuZHMoKSk7CisgICAgICAgIHJldHVybiAhIShiaXRzKClb
Yml0ID4+IGJpdHNJblBvaW50ZXIoKV0gJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAo
Yml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNl
dChzaXplX3QgYml0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8IGJvdW5kcygpKTsKKyAg
ICAgICAgYml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldIHw9IChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjbGVhcihzaXplX3QgYml0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8
IGJvdW5kcygpKTsKKyAgICAgICAgYml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldICY9IH4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBiaXQsIGJvb2wgdmFsdWUpCisg
ICAgeworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBzZXQoYml0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2xlYXIoYml0KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBz
aXplb2Yodm9pZCopIDw8IDM7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhJ
bmxpbmVCaXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXRzSW5Qb2ludGVyKCkgLSAxOwor
ICAgIH0KKyAgICAKKyAgICBjbGFzcyBPdXRPZkxpbmVCaXRzIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaXRzOyB9CisgICAgICAg
IHNpemVfdCBudW1Xb3JkcygpIGNvbnN0IHsgcmV0dXJuIChtX251bUJpdHMgKyBiaXRzSW5Qb2lu
dGVyKCkgLSAxKSA+PiBiaXRzSW5Qb2ludGVyKCk7IH0KKyAgICAgICAgdWludHB0cl90KiBiaXRz
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KKyAg
ICAgICAgY29uc3QgdWludHB0cl90KiBiaXRzKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KKyAgICAgICAgCisgICAgICAgIHN0
YXRpYyBPdXRPZkxpbmVCaXRzKiBjcmVhdGUoc2l6ZV90IG51bUJpdHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG51bUJpdHMgPSAobnVtQml0cyArIGJpdHNJblBvaW50ZXIoKSAtIDEpICYgfmJp
dHNJblBvaW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGZhc3RNYWxsb2Moc2l6ZW9m
KE91dE9mTGluZUJpdHMpICsgKG51bUJpdHMgPj4gYml0c0luUG9pbnRlcigpKSkpIE91dE9mTGlu
ZUJpdHMobnVtQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cykKKyAgICAgICAgeworICAgICAg
ICAgICAgZmFzdEZyZWUob3V0T2ZMaW5lQml0cyk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIE91dE9mTGluZUJpdHMoc2l6ZV90IG51bUJpdHMpCisgICAgICAgICAgICA6IG1f
bnVtQml0cyhudW1CaXRzKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHNpemVfdCBtX251bUJpdHM7CisgICAgfTsKKyAgICAKKyAgICBib29sIGlzSW5saW5lKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRzT3JQb2ludGVyID4+IG1heElubGluZUJpdHMoKTsgfQorICAgIAor
ICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSBjb25zdCB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBvaW50ZXIpOyB9
CisgICAgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8T3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9pbnRlcik7IH0KKyAgICAKKyAgICB2b2lk
IHJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVChu
dW1CaXRzID4gbWF4SW5saW5lQml0cygpKTsKKyAgICAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0
T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShudW1CaXRzKTsKKyAgICAgICAgbWVt
Y3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgYml0cygpLCBzdGQ6Om1pbihib3VuZHMoKSwg
bnVtQml0cykgPj4gMyk7CisgICAgICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIE91
dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKKyAgICAgICAgbV9iaXRzT3JQ
b2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpOwor
ICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QqIGJpdHMoKQorICAgIHsKKyAgICAgICAgaWYgKGlz
SW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gJm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAg
cmV0dXJuIG91dE9mTGluZUJpdHMoKS0+Yml0cygpOworICAgIH0KKyAgICAKKyAgICBjb25zdCB1
aW50cHRyX3QqIGJpdHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisg
ICAgICAgICAgICByZXR1cm4gJm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIG91dE9m
TGluZUJpdHMoKS0+Yml0cygpOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QgbV9iaXRzT3JQ
b2ludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qml0VmVjdG9y
OworCisjZW5kaWYgLy8gQml0VmVjdG9yX2gK
</data>
<flag name="commit-queue"
          id="104985"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108104</attachid>
            <date>2011-09-20 20:17:26 -0700</date>
            <delta_ts>2011-09-20 21:20:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>recomp_patch_6.diff</filename>
            <type>text/plain</type>
            <size>67496</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAK
KzIwMTEtMDktMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFi
aWxpdHkgdG8gcmVvcHRpbWl6ZSBhIGNvZGUgYmxvY2sgaWYgc3BlY3VsYXRpb24KKyAgICAgICAg
ZmFpbHVyZXMgaGFwcGVuIGZyZXF1ZW50bHkuIDYlIHNwZWVkLXVwIG9uIEtyYWtlbiwgMSUgc2xv
dy1kb3duCisgICAgICAgIG9uIFY4LCBuZXV0cmFsIG9uIFN1blNwaWRlci4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQ
cm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6
OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmpldHRpc29uKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldFN0cm9uZ1ByZWRpY3Rpb24pOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpjb21waWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21w
aWxlQm9keSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAg
ICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Z2V0T1NSRW50cnlEYXRh
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5jcHA6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3Rz
OjpDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjp+
Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRk
KToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToK
KyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0pldHRpc29uZWRDb2RlQmxv
Y2tzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpKZXR0
aXNvbmVkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp+
SmV0dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nr
czo6YWRkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmNs
ZWFyTWFya3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6ZGVsZXRlVW5t
YXJrZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OnRy
YWNlQ29kZUJsb2Nrcyk6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6Om1hcmspOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpqZXR0
aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9w
dGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNv
bk9wdGltaXplZENvZGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxl
OjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvcik6CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6Qml0VmVjdG9yOjpCaXRWZWN0b3IpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6On5CaXRWZWN0b3IpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ym91bmRzKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjplbnN1cmVTaXplKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpyZXNpemUpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpnZXQp
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6bnVtQml0cyk6Cisg
ICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6bnVtV29yZHMpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmJpdHMpOgorICAgICAgICAoV1RGOjpC
aXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJ
bmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Om91dE9mTGluZUJpdHMpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZSk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBERkcgSklUIGFsd2F5cyBzcGVjdWxhdGVzIGludGVnZXIgb24gbW9kdWxv
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NTU5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvSGVh
cC5jcHAKICAgICBoZWFwL0hhbmRsZUhlYXAuY3BwCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAK
KyAgICBoZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAogICAgIGhlYXAvTWFjaGluZVN0YWNr
TWFya2VyLmNwcAogICAgIGhlYXAvTWFya2VkQmxvY2suY3BwCiAgICAgaGVhcC9NYXJrZWRTcGFj
ZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDggQEAgamF2YXNjcmlwdGNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pl
dHRpc29uZWRDb2RlQmxvY2tzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKQEAgLTQ2NCw2ICs0
NjYsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0Fzc2VydGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQVZMVHJlZS5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0JpdG1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb2NrU3RhY2suaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CbG9vbUZpbHRlci5oIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkocmV2aXNpb24gOTU1OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC03
Nyw2ICs3Nyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAgXAogICAg
IGhlYXAvSGFuZGxlU3RhY2suY3BwIFwKICAgICBoZWFwL0hlYXAuY3BwIFwKKyAgICBoZWFwL0pl
dHRpc29uZWRDb2RlQmxvY2tzLmNwcCBcCiAgICAgaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
IFwKICAgICBoZWFwL01hcmtTdGFjay5jcHAgXAogICAgIGhlYXAvTWFya2VkQmxvY2suY3BwIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTc0LDYgKzE5NzQsMTQgQEAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGhlYXBcSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxMb2NhbC5oIgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkocmV2aXNpb24gOTU1OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC02MzcsNiArNjM3LDEwIEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJ
PEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdFZlY3Rvci5oIgorCQkJPgorCQk8
L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxCaXRtYXAuaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDkgQEAKIAkJMEZE
ODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwICovOyB9OwogCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQg
LyogVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICov
OyB9OwogCQkwRkQ4MkVGNTE0MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5
MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29u
ZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYy
QzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5
Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLzsgfTsKKwkJMEZEODJGNEIxNDI4MDZB
MTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3
MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VD
MjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTgxMyw2ICs4MTYsOSBAQAogCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWx1ZVByb2ZpbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyog
REZHSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludHJp
bnNpYy5oOyBwYXRoID0gZGZnL0RGR0ludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmV0dGlzb25lZENvZGVC
bG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkYyOTE0MjZDQTVB
MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSmV0dGlzb25lZENvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
clBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2Nh
dG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFE
NEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjIxLDYgKzE2MjcsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGMjgxNDI2
Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLywKKwkJCQkwRkQ4MkYy
OTE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLywKIAkJCQlBNzA0
NTZBRjE0MjdGQjE1MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggKi8sCiAJCQkJQTcwNDU2
QUUxNDI3RkIwMzAwMzdEQTY4IC8qIEFsbG9jYXRpb25TcGFjZS5jcHAgKi8sCiAJCQkJMEYyNDJE
QTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLywKQEAgLTE3
OTcsNiArMTgwNSw3IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRjQ5MTQyODA2
OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RD
MEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAog
CQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLApAQCAtMjQyMyw2ICsyNDMy
LDggQEAKIAkJCQlCQzI1N0RFODBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRjRCMTQyODA2QTEwMDE3OUM5NCAvKiBC
aXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRjJCMTQyNkNBNkQwMDE3OUM5NCAv
KiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFRjUxNDIz
MDc1QjAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJF
ODUxNDFGM0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzA5Nyw2ICszMTA4LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTBGRDgyRjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVk
aWN0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDI4LDcgKzE0MjgsMTAgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogbwogICAgICwgbV9zb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1i
b2xUYWJsZShzeW1UYWIpCiAgICAgLCBtX2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQorICAgICwg
bV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKDApCisgICAgLCBtX3NwZWN1bGF0aXZlRmFpbENv
dW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAg
ICAKQEAgLTE5MzUsNiArMTkzOCwyNyBAQCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21w
aWxlV2l0aERGCiAgICAgICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0
cnVjdCh0aGlzKTsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDYWxsKHRo
aXMpOwogfQorCit2b2lkIFByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNf
Y2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRp
bWl6ZWRDb2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9
IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgp
KTsKKyAgICBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+
amV0dGlzb25PcHRpbWl6ZWRDb2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJU
KGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMg
PT0gcmVwbGFjZW1lbnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoZ2xvYmFsRGF0YSwg
bV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KICNl
bmRpZgogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQpAQCAtMTk3NCw4ICsxOTk4LDggQEAg
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBwcmludGYoIlByb2ZpbGUg
aG90bmVzczogJWxmLCAlbGZcbiIsIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIChkb3VibGUpbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8g
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpOwogI2VuZGlmCiAKLSAgICBpZiAoKGRvdWJsZSludW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcyA+PSAwLjc1Ci0gICAgICAgICYmIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Q
cm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgPj0gMC41KQorICAgIGlmICgoIW51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPj0gMC43NSkKKyAgICAgICAgJiYgKCFudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMg
LyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygp
ID49IDAuNSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKys7CkBAIC0yMDE0LDcgKzIwMzgsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBWYWx1ZVByb2ZpbGVzKCkKICAgICB9CiAgICAgZnByaW50ZihzdGRlcnIsICJTbG93Q2FzZVBy
b2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bWJlck9mU2xvd0Nhc2VQcm9maWxlcygpOyArK2kpIHsKLSAgICAgICAgU2xvd0Nhc2VQcm9maWxl
KiBwcm9maWxlID0gc2xvd0Nhc2VQcm9maWxlKGkpOworICAgICAgICBSYXJlQ2FzZVByb2ZpbGUq
IHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
ICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQsIHByb2ZpbGUtPm1f
Y291bnRlcik7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY2lhbEZhc3RDYXNlUHJv
ZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZTcGVjaWFsRmFzdENhc2VQcm9maWxlcygpOyArK2kpIHsKKyAgICAgICAgUmFyZUNhc2VQ
cm9maWxlKiBwcm9maWxlID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZShpKTsKICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCwgcHJvZmlsZS0+bV9jb3VudGVyKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2RlZmluZSBDb2RlQmxvY2tfaAogCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENv
ZGVNYXAuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2Fj
aGUuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKQEAg
LTMzMyw2ICszMzQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX2ppdENvZGVNYXAuZ2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IERGRzo6T1NSRW50cnlEYXRhKiBhcHBlbmRERkdPU1JFbnRyeURhdGEodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIERGRzo6T1NSRW50cnlEYXRhIGVudHJ5OworICAgICAgICAgICAgZW50cnkubV9ieXRlY29k
ZUluZGV4ID0gYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGVudHJ5Lm1fbWFjaGluZUNvZGVP
ZmZzZXQgPSBtYWNoaW5lQ29kZU9mZnNldDsKKyAgICAgICAgICAgIG1fZGZnT1NSRW50cnkuYXBw
ZW5kKGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiAmbV9kZmdPU1JFbnRyeS5sYXN0KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdPU1JFbnRyaWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9kZmdPU1JFbnRyeS5zaXplKCk7IH0KKyAgICAgICAgREZHOjpPU1JFbnRyeURh
dGEqIGRmZ09TUkVudHJ5RGF0YSh1bnNpZ25lZCBpKSB7IHJldHVybiAmbV9kZmdPU1JFbnRyeVtp
XTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNv
ZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYmluYXJ5U2VhcmNoPERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZHOjpnZXRP
U1JFbnRyeURhdGFCeXRlY29kZUluZGV4PihtX2RmZ09TUkVudHJ5LmJlZ2luKCksIG1fZGZnT1NS
RW50cnkuc2l6ZSgpLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgfQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoSU5URVJQUkVURVIpCkBAIC0zNjAsOSArMzc2LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7
CiAgICAgICAgIH0KICAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faml0
Q29kZTsgfQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0SklUQ29kZVdpdGhBcml0
eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KICAgICAgICAgSklU
Q29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsg
fQogICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyBy
ZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogICAgICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2Rl
KikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJikgPSAw
OwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsKICAgICAgICAgYm9vbCBoYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpCkBAIC02ODUsMTEgKzcwMywzNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gdHJpZ2dlciBmaWxlcy4gQWxsIENvZGVCbG9ja3Mgc3RhcnQgb3V0IHdp
dGggb3B0aW1pemVBZnRlcldhcm1VcCgpLAogICAgICAgICAvLyBhcyB0aGlzIGlzIGNhbGxlZCBm
cm9tIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuCiAgICAgICAgIAorICAgICAgICAvLyBXaGVu
IHdlIG9ic2VydmUgYSBsb3Qgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMsIHdlIHRyaWdnZXIgYQor
ICAgICAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2ggdGltZSwgd2UgaW5jcmVhc2UgdGhl
IG9wdGltaXphdGlvbiB0cmlnZ2VyCisgICAgICAgIC8vIHRvIGF2b2lkIHRocmFzaGluZy4KKyAg
ICAgICAgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA8PSAx
OCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9uKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcisrOworICAg
ICAgICAgICAgaWYgKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPiAxOCkKKyAgICAgICAg
ICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gMTg7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8gc3VwcG9y
dCBjYWxsaW5nCi0gICAgICAgIC8vIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSBmcm9tIEpJVC1nZW5l
cmF0ZWQgY29kZS4KKyAgICAgICAgLy8gb3B0aW1pemVYWVooKSBtZXRob2RzIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICBzdGF0aWMgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlcldhcm1VcCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAtMTAwMDsKKyAg
ICAgICAgICAgIHJldHVybiAtMTAwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIC01MDAw
IDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGludDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkKQEAgLTY5NywxMiArNzQx
LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICZtX2V4ZWN1dGVDb3Vu
dGVyOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2V4ZWN1dGVDb3VudGVyKTsgfQorCisgICAgICAgIGludDMyX3QgZXhlY3V0ZUNvdW50ZXIoKSBj
b25zdCB7IHJldHVybiBtX2V4ZWN1dGVDb3VudGVyOyB9CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcjsgfQorICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZv
cmNlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRoaXMgaXMKICAgICAg
ICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUgdHlwaWNh
bGx5IG1vcmUKICAgICAgICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0aW5nIGJhc2VsaW5lIGNv
ZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAwOworICAgICAgICAgICAgbV9leGVjdXRlQ291
bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHByZXZlbnQgb3B0aW1pemF0aW9u
IGZyb20gaGFwcGVuaW5nIGFnYWluLiBOb3RlIHRoYXQKQEAgLTcyNiw2ICs3NzYsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAv
LyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBvbmx5
IGFmdGVyCisgICAgICAgIC8vIGEgbG90IG9mIHdhcm0tdXAuCisgICAgICAgIHZvaWQgb3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3Vu
dGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlv
biB0cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CiAgICAgICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0
aGUgbmV4dCBvbmUuIFRoaXMgbWFrZXMgc2Vuc2UgaWYgb3B0aW1pemF0aW9uCiAgICAgICAgIC8v
IHN1Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMg
YXJlCkBAIC03NDYsMTggKzgwMyw3MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gaW4g
dGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICAgICAg
ewotICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IC0xMDA7CisgICAgICAgICAgICBtX2V4
ZWN1dGVDb3VudGVyID0gLTEwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3BlY3VsYXRpdmUgSklUIHRyYWNrcyBp
dHMgc3VjY2VzcyByYXRlLCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAvLyBkZWNpZGUgd2hlbiB0
byByZW9wdGltaXplLiBJdCdzIGludGVyZXN0aW5nIHRvIG5vdGUgdGhhdCB0aGVzZQorICAgICAg
ICAvLyBjb3VudGVycyBtYXkgb3ZlcmZsb3cgd2l0aG91dCBhbnkgcHJvdGVjdGlvbi4gVGhlIHN1
Y2Nlc3MKKyAgICAgICAgLy8gY291bnRlciB3aWxsIG92ZXJmbG93IGJlZm9yZSB0aGUgZmFpbCBv
bmUgZG9lcywgYmVjdWFzZSB0aGUKKyAgICAgICAgLy8gZmFpbCBvbmUgaXMgdXNlZCBhcyBhIHRy
aWdnZXIgdG8gcmVvcHRpbWl6ZS4gU28gdGhlIHdvcnN0IGNhc2UKKyAgICAgICAgLy8gaXMgdGhh
dCB0aGUgc3VjY2VzcyBjb3VudGVyIG92ZXJmbG93cyBhbmQgd2UgcmVvcHRpbWl6ZSB3aXRob3V0
CisgICAgICAgIC8vIG5lZWRpbmcgdG8uIEJ1dCB0aGlzIGlzIGhhcm1sZXNzLiBJZiBhIG1ldGhv
ZCByZWFsbHkgZGlkCisgICAgICAgIC8vIGV4ZWN1dGUgMl4zMiB0aW1lcyB0aGVuIGNvbXBpbGlu
ZyBpdCBhZ2FpbiBwcm9iYWJseSB3b24ndCBodXJ0CisgICAgICAgIC8vIGFueW9uZS4KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgY291bnRTcGVjdWxhdGlvblN1Y2Nlc3MoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIrKzsKICAgICAgICAgfQogICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uRmFpbHVyZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcisrOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB1aW50MzJfdCBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyOyB9CisgICAgICAgIHVpbnQzMl90
IHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGF0aXZlRmFp
bENvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRl
cjsgfQorICAgICAgICB1aW50MzJfdCogYWRkcmVzc09mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigp
IHsgcmV0dXJuICZtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3BlY3VsYXRpdmVGYWls
Q291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc3BlY3VsYXRp
dmVGYWlsQ291bnRlcik7IH0KKyAgICAgICAgCiAgICAgICAgIC8vIFRoZSBhbW91bnQgYnkgd2hp
Y2ggdGhlIEpJVCB3aWxsIGluY3JlbWVudCBtX2V4ZWN1dGVDb3VudGVyLgogICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkgeyByZXR1cm4gMTsg
fQogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1
cm4oKSB7IHJldHVybiAxNTsgfQorCisgICAgICAgIC8vIFRoZSBzdWNjZXNzL2ZhaWx1cmUgcmF0
aW8gd2Ugd2FudC4KKyAgICAgICAgdW5zaWduZWQgZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSB7
IHJldHVybiA2OyB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGZhaWx1cmVz
IHRoYXQgdHJpZ2dlcnMgdGhlIHVzZSBvZiB0aGUgcmF0aW8uCisgICAgICAgIHVuc2lnbmVkIGxh
cmdlRmFpbENvdW50VGhyZXNob2xkKCkgeyByZXR1cm4gMjAgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICB1bnNpZ25lZCBsYXJnZUZhaWxD
b3VudFRocmVzaG9sZEZvckxvb3AoKSB7IHJldHVybiAxIDw8IGFsdGVybmF0aXZlKCktPnJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgc2hvdWxk
UmVvcHRpbWl6ZU5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49IHNwZWN1bGF0aXZl
U3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gbGFyZ2VGYWls
Q291bnRUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSAqIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBz
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IGxhcmdlRmFpbENvdW50VGhyZXNob2xkRm9yTG9vcCgpOworICAgICAgICB9CiAgICAgICAgIAog
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5v
dygpOwogI2Vsc2UKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVvcHRpbWl6ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNl
bWVudCgpICE9IHRoaXMpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+amV0dGlzb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgICAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgICAg
ICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShWRVJCT1NF
X1ZBTFVFX1BST0ZJTEUpCiAgICAgICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsZXMoKTsKQEAgLTgy
Nyw2ICs5MzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklU
KQogICAgICAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKKyAgICAg
ICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBtX2RmZ09TUkVudHJ5OwogI2VuZGlmCiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC04NTEsNyArOTYzLDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7CiAK
ICAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOworICAgICAgICB1aW50MzJfdCBtX3Nw
ZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsKICAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsK
KyAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogCiAgICAgICAg
IHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtOTA5LDYgKzEwMjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpA
QCAtOTM1LDYgKzEwNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpA
QCAtOTYyLDYgKzEwNzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Miw3ICs0OTIsNyBAQCBwcml2YXRl
OgogICAgICAgICBBU1NFUlQocHJvZmlsZSk7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiA9IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJEeW5hbWljIFsldSwgJXVdIHByZWRp
Y3Rpb246ICVzXG4iLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgsIHByZWRpY3Rpb25Ub1N0cmlu
ZyhwcmVkaWN0aW9uKSk7CisgICAgICAgIHByaW50ZigiRHluYW1pYyBbQCV1LCBiYyMldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw5IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAvLyAgICAgICAgIGVudHJ5LCBzaW5j
ZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKICAgICAvLyAg
ICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCiAgICAgLy8KKyAgICAvLyAgICAgKGQpIEZy
ZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhl
IGNvZGUKKyAgICAvLyAgICAgICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJl
Y29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCisgICAgLy8KICAgICAvLyAgICAgVG8gZW5z
dXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCiAgICAgLy8g
ICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtl
IGl0IHdvdWxkIGVuZGFuZ2VyCiAgICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2
ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKQEAgLTQxNSwxMSAr
NDE4LDQwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAv
LyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhl
IGNvdW50ZXIgd2lsbCBuZXZlcgogICAgIC8vICAgICBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBP
U1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQogICAgIC8vICAgICB3
aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2gg
ZG9lcyBhIHByZXR0eQotICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChi
KS4gVGhpcyBoZXVyaXN0aWMgbWF5IG5lZWQgdG8gYmUKLSAgICAvLyAgICAgcmV0aG91Z2h0IGlu
IHRoZSBmdXR1cmUsIHBhcnRpY3VsYXJseSBpZiB3ZSBzdXBwb3J0IHJlb3B0aW1pemluZyBjb2Rl
Ci0gICAgLy8gICAgIHdpdGggbmV3IHZhbHVlIHByb2ZpbGVzIGdhdGhlcmVkIGZyb20gY29kZSB0
aGF0IGRpZCBPU1IgZXhpdC4KKyAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFu
ZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAvLyAgICAgc2lu
Y2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50
ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxh
dGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gICAgIGxhcmdlciB0aGFuIHRo
ZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYK
KyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWls
dXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndp
c2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2Nr
KCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7
CisgICAgYWRkMzIoSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBhZGQzMihJbW0zMigt
MSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCBBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKSk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOworICAg
IAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBKdW1wIGZld0ZhaWxzID0gYnJhbmNoMzIoQmVsb3dP
ckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgSW1tMzIoY29kZUJsb2NrKCktPmxhcmdlRmFpbENvdW50
VGhyZXNob2xkKCkpKTsKKyAgICBtdWwzMihJbW0zMihjb2RlQmxvY2soKS0+ZGVzaXJlZFN1Y2Nl
c3NGYWlsUmF0aW8oKSksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisg
ICAgSnVtcCBsb3dGYWlsUmF0ZSA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVn
VDIsIEdQUkluZm86OnJlZ1QxKTsKICAgICAKLSAgICBzdG9yZTMyKEltbTMyKGNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLCBj
b2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+YWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKSk7Cisg
ICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIHN0b3JlMzIoSW1tMzIo
Q29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkpLCBBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkp
OworICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBmZXdGYWlscy5s
aW5rKHRoaXMpOworICAgIGxvd0ZhaWxSYXRlLmxpbmsodGhpcyk7CisgICAgCisgICAgc3RvcmUz
MihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKSksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgCisgICAgZG9uZUFkanVzdGluZy5saW5r
KHRoaXMpOwogICAgIAogICAgIC8vIDEyKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0
ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCkBAIC00ODEsNiArNTEzLDggQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKICAgICAvLyBib3RoIG5vcm1hbCByZXR1cm4g
Y29kZSBhbmQgd2hlbiBqdW1waW5nIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyKS4KICAgICBwcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDIpOwogICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMiwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7
CisgICAgCisgICAgYWRkUHRyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoY29kZUJsb2NrKCkt
PmFkZHJlc3NPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwogfQogCiB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlQm9keSgpCkBAIC00OTgsMTAgKzUzMiw2IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVCb2R5KCkKICAgICBib29sIGNvbXBpbGVkU3BlY3VsYXRpdmUgPSBzcGVjdWxh
dGl2ZS5jb21waWxlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChjb21waWxlZFNwZWN1bGF0aXZlLCBj
b21waWxlZFNwZWN1bGF0aXZlKTsKIAotI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQotICAgIG1f
Y29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29kZXIuZmluaXNoKCkpOwot
I2VuZGlmCi0gICAgCiAgICAgbGlua09TUkV4aXRzKHNwZWN1bGF0aXZlKTsKIAogICAgIC8vIEl0
ZXJhdGUgb3ZlciB0aGUgbV9jYWxscyB2ZWN0b3IsIGNoZWNraW5nIGZvciBleGNlcHRpb24gY2hl
Y2tzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
cmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNDYgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaykKICAgICB7Ci0g
ICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdp
biwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworI2lmIEVOQUJM
RShERkdfT1NSX0VOVFJZKQorICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2Nr
KCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZl
cmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGxhc3RMaXZlQXJndW1lbnQgPSAwOworICAgICAgICB1bnNpZ25lZCBsYXN0TGl2
ZUxvY2FsID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoYmFz
aWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAg
bGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCisg
ICAgICAgICAgICAgICAgbGFzdExpdmVMb2NhbCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChsYXN0TGl2ZUFyZ3VtZW50KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZl
QXJndW1lbnRzLnJlc2l6ZShsYXN0TGl2ZUFyZ3VtZW50ICsgMSk7CisgICAgICAgICAgICBlbnRy
eS0+bV9saXZlQXJndW1lbnRzLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVBcmd1bWVudDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLnNldChpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1l
bnRzLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBpZiAobGFzdExpdmVMb2NhbCkgeworICAg
ICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5yZXNpemUobGFzdExpdmVMb2NhbCArIDEp
OworICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlTG9jYWw7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVl
ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5z
ZXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW50cnkt
Pm1fbGl2ZVZhcmlhYmxlcy5jbGVhcigpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGJh
c2ljQmxvY2spOworI2VuZGlmCiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzUzLDcgKzM5Miw2IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgLy8gSklUIGNvZGUgbWFwIGZvciBPU1IgZW50cnlwb2ludHMu
CiAgICAgTGFiZWwgbV9zdGFydE9mQ29kZTsKLSAgICBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
ciBtX2ppdENvZGVNYXBFbmNvZGVyOwogCiAgICAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3Jk
IHsKICAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoQ2FsbCBmdW5jdGlvbkNhbGwsIGludDE2
X3QgZGVsdGFDaGVja0ltbVRvQ2FsbCwgaW50MTZfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBp
bnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2Fz
ZSwgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVH
UFIsIGludDhfdCBzY3JhdGNoR1BSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDggQEAgdm9p
ZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKGNvZGVC
bG9jay0+aml0Q29kZU1hcCgpKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgp
KTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1iZXJPZkRGR09TUkVudHJpZXMoKSk7CiAKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIHByaW50ZigiT1NSIGluICVwKCVwKSBmcm9t
IGJjIyV1XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0ZWNvZGVJ
bmRleCk7CkBAIC02Niw2ICs2Nyw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUq
IGV4ZWMsIEMKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCk7CisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+ZGZn
T1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBB
U1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsKICAgICAKICAg
ICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0byBwZXJmb3JtIE9TUiBl
bnRyeS4gSXQgbWF5IGZpbmQKICAgICAvLyB0aGF0IGl0IGlzIHVuc2FmZSB0byBkbyBzbywgZm9y
IGFueSBudW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50ZWQKQEAgLTk3LDcgKzEw
MSw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRpY3Rpb25z
LT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNW
YWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRB
cmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZUFy
Z3VtZW50cy5ib3VuZHMoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChpKQorICAgICAg
ICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkg
LSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBi
ZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPmFyZ3Vt
ZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMt
PmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUsMTEgKzExMCw5IEBA
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0IGFuIE9TUiBlbnRy
eSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRoZW4gd2Ugc2hvdWxk
bid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMo
KVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSkgeworICAgICAg
ICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuYm91bmRzKCkgJiYgZW50cnktPm1fbGl2
ZVZhcmlhYmxlcy5nZXQoaSkKKyAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxpZChnbG9i
YWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQ
cmVkaWN0aW9uKGkpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAg
ICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVj
dGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9u
KCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpOwog
I2VuZGlmCkBAIC0xMzksMzAgKzE0Miw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3Rh
dGUqIGV4ZWMsIEMKICAgICAKICAgICBleGVjLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsKICAg
ICAKLSAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29k
ZSBhZGRyZXNzLiBUaGUgREZHIHN0b3JlcwotICAgIC8vICAgIHRoZSBtYWNoaW5lIGNvZGUgb2Zm
c2V0cyBvZiBPU1IgdGFyZ2V0cyBpbiBhIENvbXBhY3RKSVRDb2RlTWFwLgotICAgIC8vICAgIERl
Y29kaW5nIGl0IGlzIG5vdCBzdXBlciBlZmZpY2llbnQsIGJ1dCB3ZSBleHBlY3QgdGhhdCBPU1Ig
ZW50cnkKLSAgICAvLyAgICBoYXBwZW5zIHN1ZmZpY2llbnRseSByYXJlbHksIGFuZCB0aGF0IE9T
UiBlbnRyeXBvaW50cyBhcmUgc3VmZmljaWVudGx5Ci0gICAgLy8gICAgZmV3LCB0aGF0IHRoaXMg
d29uJ3QgaHVydCB0aHJvdWdocHV0LiBOb3RlIHRoYXQgdGhlIG9ubHkgcmVhbAotICAgIC8vICAg
IHJlYXNvbiB3aHkgd2UgdXNlIGEgQ29tcGFjdEpJVENvZGVNYXAgaXMgdG8gYXZvaWQgaGF2aW5n
IHRvIGludHJvZHVjZQotICAgIC8vICAgIHlldCBhbm90aGVyIGRhdGEgc3RydWN0dXJlIGZvciBt
YXBwaW5nIGJldHdlZW4gYnl0ZWNvZGUgaW5kaWNlcyBhbmQKLSAgICAvLyAgICBtYWNoaW5lIGNv
ZGUgb2Zmc2V0cy4KLSAgICAKLSAgICBDb21wYWN0SklUQ29kZU1hcDo6RGVjb2RlciBkZWNvZGVy
KGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKLSAgICB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNl
dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICB3aGlsZSAoZGVj
b2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSkgewotICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50Qnl0ZWNvZGVJbmRleDsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudE1hY2hpbmVDb2RlT2Zm
c2V0OwotICAgICAgICBkZWNvZGVyLnJlYWQoY3VycmVudEJ5dGVjb2RlSW5kZXgsIGN1cnJlbnRN
YWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgICAgIGlmIChjdXJyZW50Qnl0ZWNvZGVJbmRleCA9PSBi
eXRlY29kZUluZGV4KSB7Ci0gICAgICAgICAgICBtYWNoaW5lQ29kZU9mZnNldCA9IGN1cnJlbnRN
YWNoaW5lQ29kZU9mZnNldDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIEFTU0VSVChtYWNoaW5lQ29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIC8vIDQpIEZpbmQgYW5kIHJldHVybiB0aGUgZGVzdGlu
YXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuCiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9j
ay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFjaGluZUNvZGVPZmZzZXQpOworICAgIHZvaWQq
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIGVudHJ5LT5tX21hY2hpbmVD
b2RlT2Zmc2V0KTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIHByaW50
ZigiICAgIE9TUiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3MgJXAuXG4iLCByZXN1bHQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24g
OTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgREZHT1NSRW50cnlfaAogI2RlZmlu
ZSBERkdPU1JFbnRyeV9oCiAKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CkBAIC0zNCw2ICszNiwxOCBAQCBjbGFzcyBDb2Rl
QmxvY2s7CiBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQorc3RydWN0IE9T
UkVudHJ5RGF0YSB7CisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVuc2lnbmVk
IG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgQml0VmVjdG9yIG1fbGl2ZUFyZ3VtZW50czsKKyAg
ICBCaXRWZWN0b3IgbV9saXZlVmFyaWFibGVzOworfTsKKworaW5saW5lIHVuc2lnbmVkIGdldE9T
UkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCit7Cisg
ICAgcmV0dXJuIG9zckVudHJ5RGF0YS0+bV9ieXRlY29kZUluZGV4OworfQorCiB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CiAjZWxzZQogaW5saW5lIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2Rl
QmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gMDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3Nyw2ICs4NzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCisgICAg
ICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAg
ICAgICAgICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCisgICAgICAgICAgICBub25TcGVjdWxhdGl2
ZVZhbHVlVG9JbnQzMihub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAg
bV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiA5NTU5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJs
b2Nrcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIGJvb2wgaXNQb2ludGVyQWxpZ25l
ZCh2b2lkKiBwKQpAQCAtMzMsNiArMzUsMjcgQEAgaW5saW5lIGJvb2wgaXNQb2ludGVyQWxpZ25l
ZCh2b2lkKiBwKQogICAgIHJldHVybiAhKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNoYXIqKSAt
IDEpKTsKIH0KIAorQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1h
cmtlZEJsb2NrU2V0KiBibG9ja3MsIEpldHRpc29uZWRDb2RlQmxvY2tzKiBjb2RlQmxvY2tzKQor
ICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2Nh
cGFjaXR5KGlubGluZUNhcGFjaXR5KQorICAgICwgbV9ibG9ja3MoYmxvY2tzKQorICAgICwgbV9j
b2RlQmxvY2tzKGNvZGVCbG9ja3MpCit7CisgICAgaWYgKCFtX2NvZGVCbG9ja3MpIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgZHVtbXkgSmV0dGlzb25lZENvZGVCbG9ja3Mgc3RydWN0dXJlLCBzbyB0
aGF0IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoKQorICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdG8g
ZG8gYW55IG51bGwgY2hlY2tzIG9uIG1fY29kZUJsb2Nrcy4KKyAgICAgICAgbV9teUNvZGVCbG9j
a3MgPSBhZG9wdFB0cihuZXcgSmV0dGlzb25lZENvZGVCbG9ja3MoKSk7CisgICAgICAgIG1fY29k
ZUJsb2NrcyA9IG1fbXlDb2RlQmxvY2tzLmdldCgpOworICAgIH0KK30KKworQ29uc2VydmF0aXZl
Um9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCit7CisgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxp
bmVSb290cykKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3Rz
LCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKK30KKwogdm9pZCBDb25zZXJ2YXRpdmVS
b290czo6Z3JvdygpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbV9jYXBhY2l0eSA9PSBp
bmxpbmVDYXBhY2l0eSA/IG5vbklubGluZUNhcGFjaXR5IDogbV9jYXBhY2l0eSAqIDI7CkBAIC00
Niw2ICs2OSw4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogCiBpbmxpbmUgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIp
CiB7CisgICAgbV9jb2RlQmxvY2tzLT5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBj
YW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxl
T3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJU
KCFjYW5kaWRhdGUgfHwgIW1fYmxvY2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAko
cmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTIgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrczsKIGNsYXNz
IEhlYXA7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1YmxpYzoKLSAgICBDb25zZXJ2
YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCopOworICAgIENvbnNlcnZhdGl2ZVJvb3Rz
KGNvbnN0IE1hcmtlZEJsb2NrU2V0KiwgSmV0dGlzb25lZENvZGVCbG9ja3MqID0gMCk7CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKQEAgLTU2LDIzICs1NywxMSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiAg
ICAgc2l6ZV90IG1fY2FwYWNpdHk7CiAgICAgY29uc3QgTWFya2VkQmxvY2tTZXQqIG1fYmxvY2tz
OworICAgIEpldHRpc29uZWRDb2RlQmxvY2tzKiBtX2NvZGVCbG9ja3M7CisgICAgT3duUHRyPEpl
dHRpc29uZWRDb2RlQmxvY2tzPiBtX215Q29kZUJsb2NrczsKICAgICBKU0NlbGwqIG1faW5saW5l
Um9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotaW5saW5lIENvbnNlcnZhdGl2ZVJvb3RzOjpD
b25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQotICAgIDogbV9y
b290cyhtX2lubGluZVJvb3RzKQotICAgICwgbV9zaXplKDApCi0gICAgLCBtX2NhcGFjaXR5KGlu
bGluZUNhcGFjaXR5KQotICAgICwgbV9ibG9ja3MoYmxvY2tzKQotewotfQotCi1pbmxpbmUgQ29u
c2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCi17Ci0gICAgaWYgKG1fcm9vdHMg
IT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFz
ZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKLX0KLQogaW5saW5lIHNp
emVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiB7CiAgICAgcmV0dXJuIG1fc2l6ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQs
NiArMzk0LDExIEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3QKICAg
ICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOwogfQogCit2b2lkIEhlYXA6
OmpldHRpc29uQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7Cisg
ICAgbV9jb2RlQmxvY2tzLmFkZENvZGVCbG9jayhjb2RlQmxvY2spOworfQorCiB2b2lkIEhlYXA6
OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikK
IHsKICAgICBtX3RlbXBTb3J0aW5nVmVjdG9ycy5hcHBlbmQodGVtcFZlY3Rvcik7CkBAIC00NTYs
MTAgKzQ2MSwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgbV9vcGVyYXRpb25JblBy
b2dyZXNzID0gQ29sbGVjdGlvbjsKIAogICAgIHZvaWQqIGR1bW15OwotCisgICAgCisgICAgbV9j
b2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICAKICAgICAvLyBXZSBnYXRoZXIgY29uc2VydmF0
aXZlIHJvb3RzIGJlZm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRpdmUK
ICAgICAvLyBnYXRoZXJpbmcgdXNlcyB0aGUgbWFyayBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVy
IGEgcmVmZXJlbmNlIGlzIHZhbGlkLgotICAgIENvbnNlcnZhdGl2ZVJvb3RzIG1hY2hpbmVUaHJl
YWRSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSk7CisgICAgQ29uc2VydmF0aXZlUm9vdHMg
bWFjaGluZVRocmVhZFJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9jb2RlQmxvY2tz
KTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKG1hY2hpbmVU
aHJlYWRSb290cywgJmR1bW15KTsKIAogICAgIENvbnNlcnZhdGl2ZVJvb3RzIHJlZ2lzdGVyRmls
ZVJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKQEAgLTQ2OSw3ICs0NzYsNyBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cygpCiAKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZp
c2l0b3I7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKLQor
ICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKG1hY2hpbmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRv
ci5kcmFpbigpOwogCkBAIC00OTMsNiArNTAwLDggQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQog
CiAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFwUm9vdFZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
ZHJhaW4oKTsKKyAgICAKKyAgICBtX2NvZGVCbG9ja3MudHJhY2VDb2RlQmxvY2tzKHZpc2l0b3Ip
OwogCiAgICAgLy8gV2VhayBoYW5kbGVzIG11c3QgYmUgbWFya2VkIGxhc3QsIGJlY2F1c2UgdGhl
aXIgb3duZXJzIHVzZSB0aGUgc2V0IG9mCiAgICAgLy8gb3BhcXVlIHJvb3RzIHRvIGRldGVybWlu
ZSByZWFjaGFiaWxpdHkuCkBAIC01ODgsNiArNTk3LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3
ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwogICAg
IAogICAgIHJlc2V0QWxsb2NhdG9yKCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2Vk
Q29kZUJsb2NrcygpOwogCiAgICAgaWYgKHN3ZWVwVG9nZ2xlID09IERvU3dlZXApIHsKICAgICAg
ICAgc3dlZXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDk1
NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQWxsb2NhdGlvblNwYWNlLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlSGVhcC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCisjaW5jbHVkZSAiSmV0
dGlzb25lZENvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKQEAgLTk4LDYgKzk5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwog
ICAgICAgICBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0
IGNvdW50IGRyb3BzIHRvIDAuCisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAg
ICAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0xOTEsNiArMTk0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CiAgICAgICAgIEhhbmRsZUhl
YXAgbV9oYW5kbGVIZWFwOwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOworICAg
ICAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcyBtX2NvZGVCbG9ja3M7CiAgICAgICAgIAogICAgICAg
ICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxv
Y2tzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0pldHRpc29u
ZWRDb2RlQmxvY2tzOjpKZXR0aXNvbmVkQ29kZUJsb2NrcygpIHsgfQorCitKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6fkpldHRpc29uZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9j
ayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxD
b2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChI
YXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCisgICAgICAgIGRlbGV0ZSBpdGVyLT5maXJzdDsKK30KKwordm9pZCBKZXR0
aXNvbmVkQ29kZUJsb2Nrczo6YWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2Rl
QmxvY2spCit7CisgICAgQVNTRVJUKG1fbWFwLmZpbmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21h
cC5lbmQoKSk7CisgICAgCisgICAgbV9tYXAuYWRkKGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNl
KTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAg
SGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigp
OworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVu
ZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9
IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxz
ZTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxv
Y2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJsb2NrKj4gdG9SZW1vdmU7CisgICAgCisgICAgSGFz
aE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOwor
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgp
OworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJl
Z2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmICghaXRlci0+c2Vjb25kKQor
ICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisgICAgCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIG1fbWFwLnJlbW92ZSh0b1JlbW92ZVtpXSk7CisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtp
XTsKKyAgICB9Cit9CisKK3ZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2Nr
cyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBi
b29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJs
b2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1h
cDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsg
KytpdGVyKQorICAgICAgICBpdGVyLT5maXJzdC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3Ip
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICov
CisKKyNpZm5kZWYgSmV0dGlzb25lZENvZGVCbG9ja3NfaAorI2RlZmluZSBKZXR0aXNvbmVkQ29k
ZUJsb2Nrc19oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFzcyBKZXR0
aXNvbmVkQ29kZUJsb2NrcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7IC8vIE9ubHkg
bWFsbG9jJ2QgaW4gQ29uc2VydmF0aXZlUm9vdHMKK3B1YmxpYzoKKyAgICBKZXR0aXNvbmVkQ29k
ZUJsb2NrcygpOworICAgIAorICAgIH5KZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAgIAorICAg
IHZvaWQgYWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgCisgICAgdm9p
ZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVC
bG9jaykKKyAgICB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5kIC0xIGJl
Y2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KKyAgICAgICAg
dWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRpZGF0ZUNv
ZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgYm90aCBvZiB0
aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCisgICAgICAgIC8vIDAgKyAxID0gMQorICAgICAg
ICAvLyAtMSArIDEgPSAwCisgICAgICAgIGlmICh2YWx1ZSArIDEgPD0gMSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGNhbmRpZGF0
ZUNvZGVCbG9jaykpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaXRlci0+c2Vjb25kID0gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB2b2lkIHRyYWNl
Q29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIC8vIEl0IHdvdWxkIGJl
IGdyZWF0IHRvIHVzZSBhbiBPd25QdHI8Q29kZUJsb2NrPiBoZXJlIGJ1dCB0aGF0IHdvdWxkCisg
ICAgLy8gYWxtb3N0IGNlcnRhaW5seSBub3Qgd29yay4KKyAgICBIYXNoTWFwPENvZGVCbG9jayos
IGJvb2w+IG1fbWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKZXR0
aXNvbmVkQ29kZUJsb2Nrc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTE0LDcgKzE5MTQsMjIgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0g
c3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCk7CiAKLSAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3B0
aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAg
cHJpbnRmKCJFbnRlcmVkIG9wdGltaXplX2Zyb21fbG9vcCB3aXRoIGV4ZWN1dGVDb3VudGVyID0g
JWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gJXUsIG9wdGltaXphdGlvbkRlbGF5Q291
bnRlciA9ICV1XG4iLCBjb2RlQmxvY2stPmV4ZWN1dGVDb3VudGVyKCksIGNvZGVCbG9jay0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRpbWl6YXRpb25EZWxheUNv
dW50ZXIoKSk7CisjZW5kaWYKKworICAgIGlmIChjb2RlQmxvY2stPmhhc09wdGltaXplZFJlcGxh
Y2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYo
IkNvbnNpZGVyaW5nIGxvb3AgT1NSIGludG8gJXAoJXApIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1
LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisjZW5kaWYKKyAgICAgICAgaWYg
KGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6ZUZyb21Mb29wTm93KCkp
IHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRmKCJUcmln
Z2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCkuXG4iLCBjb2RlQmxvY2ss
IGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWNvZGVCbG9jay0+c2hv
dWxkT3B0aW1pemVOb3coKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAg
ICAgICBwcmludGYoIkRlbGF5aW5nIG9wdGltaXphdGlvbiBmb3IgJXAgKGluIGxvb3ApIGJlY2F1
c2Ugb2YgaW5zdWZmaWNpZW50IHByb2ZpbGluZy5cbiIsIGNvZGVCbG9jayk7CkBAIC0xOTUyLDYg
KzE5NjcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAjZW5k
aWYKIAogICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOworICAgICAgICBvcHRpbWl6
ZWRDb2RlQmxvY2stPmNvdW50U3BlY3VsYXRpb25TdWNjZXNzKCk7CiAgICAgICAgIFNUVUJfU0VU
X1JFVFVSTl9BRERSRVNTKGFkZHJlc3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk2
MCw2ICsxOTc2LDMwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20K
ICAgICBwcmludGYoIk9wdGltaXppbmcgJXAgZnJvbSBsb29wIHN1Y2NlZWRlZCwgT1NSIGZhaWxl
ZC5cbiIsIGNvZGVCbG9jayk7CiAjZW5kaWYKIAorICAgIC8vIENvdW50IHRoZSBPU1IgZmFpbHVy
ZSBhcyBhIHNwZWN1bGF0aW9uIGZhaWx1cmUuIElmIHRoaXMgaGFwcGVucyBhIGxvdCwgdGhlbgor
ICAgIC8vIHJlb3B0aW1pemUuCisgICAgb3B0aW1pemVkQ29kZUJsb2NrLT5jb3VudFNwZWN1bGF0
aW9uRmFpbHVyZSgpOworICAgIAorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJp
bnRmKCJFbmNvdW50ZXJlZCBsb29wIE9TUiBmYWlsdXJlIGludG8gJXAoJXApIHdpdGggc3VjY2Vz
cy9mYWlsICV1LyV1LlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisjZW5kaWYK
KworICAgIC8vIFdlIGFyZSBhIGxvdCBtb3JlIGNvbnNlcnZhdGl2ZSBhYm91dCB0cmlnZ2VyaW5n
IHJlb3B0aW1pemF0aW9uIGFmdGVyIE9TUiBmYWlsdXJlIHRoYW4KKyAgICAvLyBiZWZvcmUgaXQu
IElmIHdlIGVudGVyIHRoZSBvcHRpbWl6ZV9mcm9tX2xvb3AgdHJpZ2dlciB3aXRoIGEgYnVja2V0
IGZ1bGwgb2YgZmFpbAorICAgIC8vIGFscmVhZHksIHRoZW4gd2UgcmVhbGx5IHdvdWxkIGxpa2Ug
dG8gcmVvcHRpbWl6ZSBpbW1lZGlhdGVseS4gQnV0IHRoaXMgY2FzZSBjb3ZlcnMKKyAgICAvLyBz
b21ldGhpbmcgZWxzZTogdGhlcmUgd2VyZW4ndCBtYW55IChvciBhbnkpIHNwZWN1bGF0aW9uIGZh
aWx1cmVzIGJlZm9yZSwgYnV0IHdlIGp1c3QKKyAgICAvLyBmYWlsZWQgdG8gZW50ZXIgdGhlIHNw
ZWN1bGF0aXZlIGNvZGUgYmVjYXVzZSBzb21lIHZhcmlhYmxlIGhhZCB0aGUgd3JvbmcgdmFsdWUg
b3IKKyAgICAvLyBiZWNhdXNlIHRoZSBPU1IgY29kZSBkZWNpZGVkIGZvciBhbnkgc3B1cmlvdXMg
cmVhc29uIHRoYXQgaXQgZGlkIG5vdCB3YW50IHRvIE9TUgorICAgIC8vIHJpZ2h0IG5vdy4gU28s
IHdlIG9ubHkgdHJpZ2dlciByZW9wdGltaXphdGlvbiBvbmx5IHVwb24gdGhlIG1vcmUgY29uc2Vy
dmF0aXZlIChub24tbG9vcCkKKyAgICAvLyByZW9wdGltaXphdGlvbiB0cmlnZ2VyLgorICAgIGlm
IChvcHRpbWl6ZWRDb2RlQmxvY2stPnNob3VsZFJlb3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXph
dGlvbiBvZiAlcCglcCkgKGluIGxvb3AgYWZ0ZXIgT1NSIGZhaWwpLlxuIiwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOworI2VuZGlmCisgICAgICAgIGNvZGVCbG9jay0+cmVv
cHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKICAgICAvLyBPU1IgZmFpbGVkIHRoaXMgdGltZSwgYnV0IGl0IG1pZ2h0IHN1Y2NlZWQgbmV4
dCB0aW1lISBMZXQgdGhlIGNvZGUgcnVuIGEgYml0CiAgICAgLy8gbG9uZ2VyIGFuZCB0aGVuIHRy
eSBhZ2Fpbi4KICAgICBjb2RlQmxvY2stPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKQEAgLTE5NzIs
OCArMjAxMiwyMyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgCi0gICAgaWYg
KGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkKKyNpZiBFTkFCTEUoSklUX1ZF
UkJPU0VfT1NSKQorICAgIHByaW50ZigiRW50ZXJlZCBvcHRpbWl6ZV9mcm9tX3JldCB3aXRoIGV4
ZWN1dGVDb3VudGVyID0gJWQsIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gJXUsIG9wdGlt
aXphdGlvbkRlbGF5Q291bnRlciA9ICV1XG4iLCBjb2RlQmxvY2stPmV4ZWN1dGVDb3VudGVyKCks
IGNvZGVCbG9jay0+cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSwgY29kZUJsb2NrLT5vcHRp
bWl6YXRpb25EZWxheUNvdW50ZXIoKSk7CisjZW5kaWYKKworICAgIGlmIChjb2RlQmxvY2stPmhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQor
ICAgICAgICBwcmludGYoIlJldHVybmluZyBmcm9tIG9sZCBKSVQgY2FsbCBmcmFtZSB3aXRoIG9w
dGltaXplZCByZXBsYWNlbWVudCAlcCglcCksIHdpdGggc3VjY2Vzcy9mYWlsICV1LyV1LlxuIiwg
Y29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksIGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKS0+c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCktPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSk7CisjZW5kaWYKKyAgICAgICAgaWYgKGNvZGVC
bG9jay0+cmVwbGFjZW1lbnQoKS0+c2hvdWxkUmVvcHRpbWl6ZU5vdygpKSB7CisjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmluZyByZW9wdGlt
aXphdGlvbiBvZiAlcCglcCkgKGluIHJldHVybikuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+
cmVwbGFjZW1lbnQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6
ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgIH0KKwogICAgICAgICByZXR1cm47
CisgICAgfQogICAgIAogICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
NCw2ICs4NCwxOCBAQCBERkc6OkludHJpbnNpYyBOYXRpdmVFeGVjdXRhYmxlOjppbnRyaW5zCiB9
CiAjZW5kaWYKIAorLy8gVXRpbGl0eSBtZXRob2QgdXNlZCBmb3IgamV0dGlzb25pbmcgY29kZSBi
bG9ja3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgamV0dGlzb25Db2RlQmxv
Y2soSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBPd25QdHI8VD4mIGNvZGVCbG9jaykKK3sKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5nZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOworICAgIE93blB0cjxUPiBj
b2RlQmxvY2tUb0pldHRpc29uID0gY29kZUJsb2NrLnJlbGVhc2UoKTsKKyAgICBjb2RlQmxvY2sg
PSBzdGF0aWNfcG9pbnRlcl9jYXN0PFQ+KGNvZGVCbG9ja1RvSmV0dGlzb24tPnJlbGVhc2VBbHRl
cm5hdGl2ZSgpKTsKKyAgICBjb2RlQmxvY2tUb0pldHRpc29uLT51bmxpbmtJbmNvbWluZ0NhbGxz
KCk7CisgICAgZ2xvYmFsRGF0YS5oZWFwLmpldHRpc29uQ29kZUJsb2NrKHN0YXRpY19wb2ludGVy
X2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOworfQorCiBj
b25zdCBDbGFzc0luZm8gU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvID0geyAiU2NyaXB0RXhlY3V0
YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCAwIH07CiAKIGNvbnN0IENsYXNzSW5m
byBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRXZhbEV4ZWN1dGFibGUiLCAmU2NyaXB0RXhl
Y3V0YWJsZTo6c19pbmZvLCAwLCAwIH07CkBAIC0yMTEsNiArMjIzLDEzIEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBF
dmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxv
Y2spOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2V2YWxDb2RlQmxvY2stPmdldEpJVENvZGUo
KTsKKyAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Cit9CisKIHZv
aWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKQEAgLTMzMCw2
ICszNDksMTMgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAg
IHJldHVybiAwOwogfQogCit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXpl
ZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5s
aW5rQ2FsbHMoKQogewogI2lmIEVOQUJMRShKSVQpCkBAIC01MzMsNiArNTU5LDIwIEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICByZXR1cm4gMDsKIH0KIAor
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERh
dGEsIG1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fY29kZUJs
b2NrRm9yQ2FsbC0+Z2V0SklUQ29kZSgpOworICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjayA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7Cit9
CisKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBtX2ppdENvZGVGb3JD
b25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZSgpOworICAgIG1f
aml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
Nyw2ICszMjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIEV2YWxDb2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAg
ICAgICAgewpAQCAtMzkyLDYgKzM5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpT
R2xvYmFsRGF0YSYpOwogCiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVj
b2RlKCkKICAgICAgICAgewpAQCAtNDc1LDYgKzQ3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyA9IDApOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xv
YmFsRGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAg
ICAgICAgewpAQCAtNDk4LDYgKzUwNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRp
bWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNH
ZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAogICAgICAgICB7CkBAIC01MzgsNiArNTQ2LDE2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRG
b3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgICAgICB9CiAgICAgICAgIAor
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAorICAgICAgICAgICAgICAgIGpldHRpc29uT3B0
aW1pemVkQ29kZUZvckNhbGwoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAg
ICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Qml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRW
ZWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVj
dG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEJpdFZl
Y3Rvcl9oCisjZGVmaW5lIEJpdFZlY3Rvcl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBU
aGlzIGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNpemVhYmxlIGJpdHZlY3RvciBjbGFzcy4gSW4g
dGhlIGNvbW1vbiBjYXNlIGl0CisvLyBvY2N1cGllcyBvbmUgd29yZCwgYnV0IGlmIG5lY2Vzc2Fy
eSwgaXQgd2lsbCBpbmZsYXRlIHRoaXMgb25lIHdvcmQgdG8gcG9pbnQKKy8vIHRvIGEgc2luZ2xl
IGNodW5rIG9mIG91dC1vZi1saW5lIGFsbG9jYXRlZCBzdG9yYWdlIHRvIHN0b3JlIGFuIGFyYml0
cmFyeSBudW1iZXIKKy8vIG9mIGJpdHMuCisvLworLy8gLSBUaGUgYml0dmVjdG9yIG5lZWRzIHRv
IGJlIHJlc2l6ZWQgbWFudWFsbHkgKGp1c3QgY2FsbCBlbnN1cmVTaXplKCkpLgorLy8KKy8vIC0g
VGhlIGJpdHZlY3RvciByZW1lbWJlcnMgdGhlIGJvdW5kIG9mIGhvdyBtYW55IGJpdHMgY2FuIGJl
IHN0b3JlZCwgYnV0IHRoaXMKKy8vICAgbWF5IGJlIHNsaWdodGx5IGdyZWF0ZXIgKGJ5IGFzIG11
Y2ggYXMgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zdGFudCkKKy8vICAgdGhhbiB0aGUgbGFz
dCBhcmd1bWVudCBwYXNzZWQgdG8gZW5zdXJlU2l6ZSgpLgorLy8KKy8vIC0gQWNjZXNzZXMgQVNT
RVJUIHRoYXQgeW91IGFyZSB3aXRoaW4gYm91bmRzLgorLy8KKy8vIC0gQml0cyBhcmUgbm90IGF1
dG9tYXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4KKy8vCisvLyBPbiB0aGUgb3RoZXIgaGFu
ZCwgdGhpcyBCaXRWZWN0b3IgY2xhc3MgbWF5IG5vdCBiZSB0aGUgZmFzdGVzdCBhcm91bmQsIHNp
bmNlCisvLyBpdCBkb2VzIGNvbmRpdGlvbmFscyBvbiBldmVyeSBnZXQvc2V0L2NsZWFyLiBCdXQg
aXQgaXMgZ3JlYXQgaWYgeW91IG5lZWQgdG8KKy8vIGp1Z2dsZSBhIGxvdCBvZiB2YXJpYWJsZS1s
ZW5ndGggQml0VmVjdG9ycyBhbmQgeW91J3JlIHdvcnJpZWQgYWJvdXQgd2FzdGluZworLy8gc3Bh
Y2UuCisKK2NsYXNzIEJpdFZlY3RvciB7CitwdWJsaWM6IAorICAgIEJpdFZlY3RvcigpCisgICAg
ICAgIDogbV9iaXRzT3JQb2ludGVyKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5s
aW5lQml0cygpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yKGNvbnN0IEJpdFZl
Y3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRzT3JQb2ludGVyKHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKQorICAgIHsKKyAgICAgICAgKCp0aGlzKSA9IG90
aGVyOworICAgIH0KKyAgICAKKyAgICB+Qml0VmVjdG9yKCkKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBPdXRPZkxpbmVCaXRzOjpk
ZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CisgICAgfQorICAgIAorICAgIEJpdFZlY3RvciYgb3Bl
cmF0b3I9KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICB1aW50cHRyX3Qg
bmV3Qml0c09yUG9pbnRlcjsKKyAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpCisgICAgICAg
ICAgICBuZXdCaXRzT3JQb2ludGVyID0gb3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRP
ZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuYm91bmRzKCkpOworICAgICAgICAgICAgbWVtY3B5KG5l
d091dE9mTGluZUJpdHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBvdGhlci5ib3VuZHMoKSA+PiAz
KTsKKyAgICAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obmV3T3V0T2ZMaW5lQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0lubGlu
ZSgpKQorICAgICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkp
OworICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBuZXdCaXRzT3JQb2ludGVyOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgc2l6ZV90IGJvdW5kcygpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9iaXRzT3JQb2ludGVyID4+IG1heElubGluZUJpdHMoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtYXhJbmxpbmVCaXRzKCk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRz
KCktPm51bUJpdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNpemUoc2l6ZV90IG51bUJp
dHMpCisgICAgeworICAgICAgICBpZiAobnVtQml0cyA8PSBib3VuZHMoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgcmVzaXplT3V0T2ZMaW5lKG51bUJpdHMpOworICAgIH0KKyAgICAK
KyAgICAvLyBMaWtlIGVuc3VyZVNpemUoKSwgYnV0IHN1cHBvcnRzIHJlZHVjaW5nIHRoZSBzaXpl
IG9mIHRoZSBiaXR2ZWN0b3IuCisgICAgdm9pZCByZXNpemUoc2l6ZV90IG51bUJpdHMpCisgICAg
eworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIGlmIChudW1CaXRzIDw9IG1heElubGluZUJpdHMoKSkgeworICAgICAgICAgICAg
T3V0T2ZMaW5lQml0cyogbXlPdXRPZkxpbmVCaXRzID0gb3V0T2ZMaW5lQml0cygpOworICAgICAg
ICAgICAgbV9iaXRzT3JQb2ludGVyID0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4
SW5saW5lQml0cygpKSB8ICpteU91dE9mTGluZUJpdHMtPmJpdHMoKTsKKyAgICAgICAgICAgIE91
dE9mTGluZUJpdHM6OmRlc3Ryb3kobXlPdXRPZkxpbmVCaXRzKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzaXplT3V0T2ZMaW5lKG51bUJpdHMp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlmIChpc0lu
bGluZSgpKQorICAgICAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gc3RhdGljX2Nhc3Q8dWludHB0
cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ6
ZXJvKG91dE9mTGluZUJpdHMoKS0+Yml0cygpLCBib3VuZHMoKSA+PiAzKTsKKyAgICB9CisKKyAg
ICBib29sIGdldChzaXplX3QgYml0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8
IGJvdW5kcygpKTsKKyAgICAgICAgcmV0dXJuICEhKGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRl
cigpXSAmIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRl
cigpIC0gMSkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBiaXQpCisgICAg
eworICAgICAgICBBU1NFUlQoYml0IDwgYm91bmRzKCkpOworICAgICAgICBiaXRzKClbYml0ID4+
IGJpdHNJblBvaW50ZXIoKV0gfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAm
IChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKHNp
emVfdCBiaXQpCisgICAgeworICAgICAgICBBU1NFUlQoYml0IDwgYm91bmRzKCkpOworICAgICAg
ICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gJj0gfihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSkKKyAgICAgICAgICAgIHNldChiaXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
bGVhcihiaXQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGJp
dHNJblBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIG1heElubGluZUJpdHMoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJpdHNJblBvaW50ZXIoKSAtIDE7CisgICAgfQorICAgIAorICAgIGNs
YXNzIE91dE9mTGluZUJpdHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgc2l6ZV90IG51bUJpdHMo
KSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7IH0KKyAgICAgICAgc2l6ZV90IG51bVdvcmRzKCkg
Y29uc3QgeyByZXR1cm4gKG1fbnVtQml0cyArIGJpdHNJblBvaW50ZXIoKSAtIDEpID4+IGJpdHNJ
blBvaW50ZXIoKTsgfQorICAgICAgICB1aW50cHRyX3QqIGJpdHMoKSB7IHJldHVybiByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsgfQorICAgICAgICBjb25zdCB1aW50cHRy
X3QqIGJpdHMoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnRwdHJf
dCo+KHRoaXMgKyAxKTsgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIE91dE9mTGluZUJpdHMq
IGNyZWF0ZShzaXplX3QgbnVtQml0cykKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQml0cyA9
IChudW1CaXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgJiB+Yml0c0luUG9pbnRlcigpOworICAg
ICAgICAgICAgcmV0dXJuIG5ldyAoZmFzdE1hbGxvYyhzaXplb2YoT3V0T2ZMaW5lQml0cykgKyAo
bnVtQml0cyA+PiBiaXRzSW5Qb2ludGVyKCkpKSkgT3V0T2ZMaW5lQml0cyhudW1CaXRzKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShPdXRPZkxpbmVC
aXRzKiBvdXRPZkxpbmVCaXRzKQorICAgICAgICB7CisgICAgICAgICAgICBmYXN0RnJlZShvdXRP
ZkxpbmVCaXRzKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgT3V0T2ZMaW5l
Qml0cyhzaXplX3QgbnVtQml0cykKKyAgICAgICAgICAgIDogbV9udW1CaXRzKG51bUJpdHMpCisg
ICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2l6ZV90IG1fbnVtQml0czsK
KyAgICB9OworICAgIAorICAgIGJvb2wgaXNJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2JpdHNP
clBvaW50ZXIgPj4gbWF4SW5saW5lQml0cygpOyB9CisgICAgCisgICAgY29uc3QgT3V0T2ZMaW5l
Qml0cyogb3V0T2ZMaW5lQml0cygpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgT3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9pbnRlcik7IH0KKyAgICBPdXRPZkxpbmVCaXRz
KiBvdXRPZkxpbmVCaXRzKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxPdXRPZkxpbmVCaXRz
Kj4obV9iaXRzT3JQb2ludGVyKTsgfQorICAgIAorICAgIHZvaWQgcmVzaXplT3V0T2ZMaW5lKHNp
emVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG51bUJpdHMgPiBtYXhJbmxpbmVC
aXRzKCkpOworICAgICAgICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0T2ZM
aW5lQml0czo6Y3JlYXRlKG51bUJpdHMpOworICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0
cy0+Yml0cygpLCBiaXRzKCksIHN0ZDo6bWluKGJvdW5kcygpLCBudW1CaXRzKSA+PiAzKTsKKyAg
ICAgICAgaWYgKCFpc0lubGluZSgpKQorICAgICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJv
eShvdXRPZkxpbmVCaXRzKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obmV3T3V0T2ZMaW5lQml0cyk7CisgICAgfQorICAgIAorICAgIHVp
bnRwdHJfdCogYml0cygpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAg
ICAgIHJldHVybiAmbV9iaXRzT3JQb2ludGVyOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0
cygpLT5iaXRzKCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IHVpbnRwdHJfdCogYml0cygpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiAm
bV9iaXRzT3JQb2ludGVyOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7
CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBtX2JpdHNPclBvaW50ZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpCaXRWZWN0b3I7CisKKyNlbmRpZiAvLyBCaXRW
ZWN0b3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108106</attachid>
            <date>2011-09-20 21:20:38 -0700</date>
            <delta_ts>2011-09-21 00:16:17 -0700</delta_ts>
            <desc>the patch - fix license</desc>
            <filename>recomp_patch_7.diff</filename>
            <type>text/plain</type>
            <size>68292</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAK
KzIwMTEtMDktMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHN1cHBvcnQgY29udGludW91cyBvcHRpbWl6YXRpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzI5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgdGhlIGFi
aWxpdHkgdG8gcmVvcHRpbWl6ZSBhIGNvZGUgYmxvY2sgaWYgc3BlY3VsYXRpb24KKyAgICAgICAg
ZmFpbHVyZXMgaGFwcGVuIGZyZXF1ZW50bHkuIDYlIHNwZWVkLXVwIG9uIEtyYWtlbiwgMSUgc2xv
dy1kb3duCisgICAgICAgIG9uIFY4LCBuZXV0cmFsIG9uIFN1blNwaWRlci4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjcHJvai9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpQ
cm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQmxvY2s6
OmpldHRpc29uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmpldHRpc29uKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdyk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldFN0cm9uZ1ByZWRpY3Rpb24pOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpjb21waWxlRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21w
aWxlQm9keSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAg
ICogZGZnL0RGR09TUkVudHJ5Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Z2V0T1NSRW50cnlEYXRh
Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogaGVh
cC9Db25zZXJ2YXRpdmVSb290cy5jcHA6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3Rz
OjpDb25zZXJ2YXRpdmVSb290cyk6CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjp+
Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6YWRk
KToKKyAgICAgICAgKiBoZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmg6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAg
ICAoSlNDOjpIZWFwOjptYXJrUm9vdHMpOgorICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0KToK
KyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0pldHRpc29uZWRDb2RlQmxv
Y2tzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpKZXR0
aXNvbmVkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp+
SmV0dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nr
czo6YWRkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmNs
ZWFyTWFya3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6ZGVsZXRlVW5t
YXJrZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OnRy
YWNlQ29kZUJsb2Nrcyk6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6Om1hcmspOgorICAgICAg
ICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9O
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpqZXR0
aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9w
dGltaXplZENvZGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25P
cHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNv
bk9wdGltaXplZENvZGVGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxl
OjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QpOgorICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29u
T3B0aW1pemVkQ29kZUZvcik6CisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6Qml0VmVjdG9yOjpCaXRWZWN0b3IpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6On5CaXRWZWN0b3IpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Om9wZXJhdG9yPSk6Cisg
ICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ym91bmRzKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjplbnN1cmVTaXplKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpyZXNpemUpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmNsZWFyKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpnZXQp
OgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6bnVtQml0cyk6Cisg
ICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6bnVtV29yZHMpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmJpdHMpOgorICAgICAgICAoV1RGOjpC
aXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJ
bmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Om91dE9mTGluZUJpdHMpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGluZSk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBERkcgSklUIGFsd2F5cyBzcGVjdWxhdGVzIGludGVnZXIgb24gbW9kdWxv
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NTU5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksNyBAQCBTRVQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGhlYXAvSGVh
cC5jcHAKICAgICBoZWFwL0hhbmRsZUhlYXAuY3BwCiAgICAgaGVhcC9IYW5kbGVTdGFjay5jcHAK
KyAgICBoZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAogICAgIGhlYXAvTWFjaGluZVN0YWNr
TWFya2VyLmNwcAogICAgIGhlYXAvTWFya2VkQmxvY2suY3BwCiAgICAgaGVhcC9NYXJrZWRTcGFj
ZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDggQEAgamF2YXNjcmlwdGNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IYW5kbGVIZWFwLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pl
dHRpc29uZWRDb2RlQmxvY2tzLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZp
c2l0b3IuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlU3RhY2suY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5oIFwKQEAgLTQ2NCw2ICs0
NjYsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0Fzc2VydGlvbnMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BdG9taWNz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQVZMVHJlZS5oIFwKKwlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0JpdG1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb2NrU3RhY2suaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CbG9vbUZpbHRlci5oIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwkocmV2aXNpb24gOTU1OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC03
Nyw2ICs3Nyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAgXAogICAg
IGhlYXAvSGFuZGxlU3RhY2suY3BwIFwKICAgICBoZWFwL0hlYXAuY3BwIFwKKyAgICBoZWFwL0pl
dHRpc29uZWRDb2RlQmxvY2tzLmNwcCBcCiAgICAgaGVhcC9NYWNoaW5lU3RhY2tNYXJrZXIuY3Bw
IFwKICAgICBoZWFwL01hcmtTdGFjay5jcHAgXAogICAgIGhlYXAvTWFya2VkQmxvY2suY3BwIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTc0LDYgKzE5NzQsMTQgQEAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9
Ii4uXC4uXGhlYXBcSmV0dGlzb25lZENvZGVCbG9ja3MuaCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5caGVhcFxMb2NhbC5oIgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDwvRmlsZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkocmV2aXNpb24gOTU1OTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC02MzcsNiArNjM3LDEwIEBACiAJCQk+CiAJCTwvRmlsZT4KIAkJ
PEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdFZlY3Rvci5oIgorCQkJPgorCQk8
L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxCaXRtYXAuaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDkgQEAKIAkJMEZE
ODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuY3BwICovOyB9OwogCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQg
LyogVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICov
OyB9OwogCQkwRkQ4MkVGNTE0MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkVGMzE0MjMwNzM5
MDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29u
ZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYy
QzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5
Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLzsgfTsKKwkJMEZEODJGNEIxNDI4MDZB
MTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3
MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxs
b2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlF
MTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VD
MjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTgxMyw2ICs4MTYsOSBAQAogCQkwRkQ4MkU4
NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQcmVkaWN0ZWRUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYWx1ZVByb2ZpbGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkVGMzE0MjMwNzM5MDAxNzlDOTQgLyog
REZHSW50cmluc2ljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0ludHJp
bnNpYy5oOyBwYXRoID0gZGZnL0RGR0ludHJpbnNpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkQ4MkYyODE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3Mu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSmV0dGlzb25lZENvZGVC
bG9ja3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkYyOTE0MjZDQTVB
MDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSmV0dGlzb25lZENvZGVCbG9ja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZEODJGNDkxNDI4MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCaXRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
clBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2Nh
dG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFE
NEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjIxLDYgKzE2MjcsOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGMjgxNDI2
Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAqLywKKwkJCQkwRkQ4MkYy
OTE0MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLywKIAkJCQlBNzA0
NTZBRjE0MjdGQjE1MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggKi8sCiAJCQkJQTcwNDU2
QUUxNDI3RkIwMzAwMzdEQTY4IC8qIEFsbG9jYXRpb25TcGFjZS5jcHAgKi8sCiAJCQkJMEYyNDJE
QTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLywKQEAgLTE3
OTcsNiArMTgwNSw3IEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRjQ5MTQyODA2
OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLywKIAkJCQlDMjJDNTI0ODEzRkFGNkVGMDBCN0RD
MEQgLyogZHRvYSAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAog
CQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLApAQCAtMjQyMyw2ICsyNDMy
LDggQEAKIAkJCQlCQzI1N0RFODBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRjRCMTQyODA2QTEwMDE3OUM5NCAvKiBC
aXRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRjJCMTQyNkNBNkQwMDE3OUM5NCAv
KiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFRjUxNDIz
MDc1QjAwMTc5Qzk0IC8qIERGR0ludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJF
ODUxNDFGM0ZFMzAwMTc5Qzk0IC8qIEJvdW5kc0NoZWNrZWRQb2ludGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzA5Nyw2ICszMTA4LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJ
CTBGRDgyRjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4MkU5MDE0MjA3QTVGMDAxNzlDOTQgLyogVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBQcmVk
aWN0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5
NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDI4LDcgKzE0MjgsMTAgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogbwogICAgICwgbV9zb3VyY2VPZmZzZXQoc291cmNlT2Zmc2V0KQogICAgICwgbV9zeW1i
b2xUYWJsZShzeW1UYWIpCiAgICAgLCBtX2FsdGVybmF0aXZlKGFsdGVybmF0aXZlKQorICAgICwg
bV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKDApCisgICAgLCBtX3NwZWN1bGF0aXZlRmFpbENv
dW50ZXIoMCkKICAgICAsIG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyKDApCisgICAgLCBtX3Jl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKDApCiB7CiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAg
ICAKQEAgLTE5MzUsNiArMTkzOCwyNyBAQCBib29sIEZ1bmN0aW9uQ29kZUJsb2NrOjpjYW5Db21w
aWxlV2l0aERGCiAgICAgICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNvbnN0
cnVjdCh0aGlzKTsKICAgICByZXR1cm4gREZHOjpjYW5Db21waWxlRnVuY3Rpb25Gb3JDYWxsKHRo
aXMpOwogfQorCit2b2lkIFByb2dyYW1Db2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNf
Y2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRp
bWl6ZWRDb2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NFUlQoZ2V0SklUVHlwZSgpICE9
IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgp
KTsKKyAgICBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+
amV0dGlzb25PcHRpbWl6ZWRDb2RlKGdsb2JhbERhdGEpOworfQorCit2b2lkIEZ1bmN0aW9uQ29k
ZUJsb2NrOjpqZXR0aXNvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgQVNTRVJU
KGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKHRoaXMg
PT0gcmVwbGFjZW1lbnQoKSk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoZ2xvYmFsRGF0YSwg
bV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKK30KICNl
bmRpZgogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQpAQCAtMTk3NCw4ICsxOTk4LDggQEAg
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKICAgICBwcmludGYoIlByb2ZpbGUg
aG90bmVzczogJWxmLCAlbGZcbiIsIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1
ZVByb2ZpbGVzIC8gbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIChkb3VibGUpbnVt
YmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8g
bnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkpOwogI2VuZGlmCiAKLSAgICBpZiAoKGRvdWJsZSludW1i
ZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcyA+PSAwLjc1Ci0gICAgICAgICYmIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Q
cm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVBy
b2ZpbGVzKCkgPj0gMC41KQorICAgIGlmICgoIW51bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2Zp
bGVzIHx8IChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVt
YmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgPj0gMC43NSkKKyAgICAgICAgJiYgKCFudW1i
ZXJPZlZhbHVlUHJvZmlsZXMoKSB8fCAoZG91YmxlKW51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMg
LyBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyAvIG51bWJlck9mVmFsdWVQcm9maWxlcygp
ID49IDAuNSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIG1fb3B0aW1pemF0aW9u
RGVsYXlDb3VudGVyKys7CkBAIC0yMDE0LDcgKzIwMzgsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBWYWx1ZVByb2ZpbGVzKCkKICAgICB9CiAgICAgZnByaW50ZihzdGRlcnIsICJTbG93Q2FzZVBy
b2ZpbGUgZm9yICVwOlxuIiwgdGhpcyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bWJlck9mU2xvd0Nhc2VQcm9maWxlcygpOyArK2kpIHsKLSAgICAgICAgU2xvd0Nhc2VQcm9maWxl
KiBwcm9maWxlID0gc2xvd0Nhc2VQcm9maWxlKGkpOworICAgICAgICBSYXJlQ2FzZVByb2ZpbGUq
IHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
ICAgYmMgPSAlZDogJXVcbiIsIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQsIHByb2ZpbGUtPm1f
Y291bnRlcik7CisgICAgfQorICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY2lhbEZhc3RDYXNlUHJv
ZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
YmVyT2ZTcGVjaWFsRmFzdENhc2VQcm9maWxlcygpOyArK2kpIHsKKyAgICAgICAgUmFyZUNhc2VQ
cm9maWxlKiBwcm9maWxlID0gc3BlY2lhbEZhc3RDYXNlUHJvZmlsZShpKTsKICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNl
dCwgcHJvZmlsZS0+bV9jb3VudGVyKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NiArMzEsNyBAQAogI2RlZmluZSBDb2RlQmxvY2tfaAogCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENv
ZGVNYXAuaCIKKyNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2Fj
aGUuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKQEAg
LTMzMyw2ICszMzQsMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IHJldHVybiBtX2ppdENvZGVNYXAuZ2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IERGRzo6T1NSRW50cnlEYXRhKiBhcHBlbmRERkdPU1JFbnRyeURhdGEodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIERGRzo6T1NSRW50cnlEYXRhIGVudHJ5OworICAgICAgICAgICAgZW50cnkubV9ieXRlY29k
ZUluZGV4ID0gYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGVudHJ5Lm1fbWFjaGluZUNvZGVP
ZmZzZXQgPSBtYWNoaW5lQ29kZU9mZnNldDsKKyAgICAgICAgICAgIG1fZGZnT1NSRW50cnkuYXBw
ZW5kKGVudHJ5KTsKKyAgICAgICAgICAgIHJldHVybiAmbV9kZmdPU1JFbnRyeS5sYXN0KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZERkdPU1JFbnRyaWVzKCkgY29uc3Qg
eyByZXR1cm4gbV9kZmdPU1JFbnRyeS5zaXplKCk7IH0KKyAgICAgICAgREZHOjpPU1JFbnRyeURh
dGEqIGRmZ09TUkVudHJ5RGF0YSh1bnNpZ25lZCBpKSB7IHJldHVybiAmbV9kZmdPU1JFbnRyeVtp
XTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5RGF0YSogZGZnT1NSRW50cnlEYXRhRm9yQnl0ZWNv
ZGVJbmRleCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYmluYXJ5U2VhcmNoPERGRzo6T1NSRW50cnlEYXRhLCB1bnNpZ25lZCwgREZHOjpnZXRP
U1JFbnRyeURhdGFCeXRlY29kZUluZGV4PihtX2RmZ09TUkVudHJ5LmJlZ2luKCksIG1fZGZnT1NS
RW50cnkuc2l6ZSgpLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgfQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoSU5URVJQUkVURVIpCkBAIC0zNjAsOSArMzc2LDExIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBjb2RlV2l0aEFyaXR5Q2hlY2s7
CiAgICAgICAgIH0KICAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faml0
Q29kZTsgfQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0SklUQ29kZVdpdGhBcml0
eUNoZWNrKCkgeyByZXR1cm4gbV9qaXRDb2RlV2l0aEFyaXR5Q2hlY2s7IH0KICAgICAgICAgSklU
Q29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsg
fQogICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyBy
ZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogICAgICAgICB2aXJ0
dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2Rl
KikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJikgPSAw
OwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsKICAgICAgICAgYm9vbCBoYXNP
cHRpbWl6ZWRSZXBsYWNlbWVudCgpCkBAIC02ODUsMTEgKzcwMywzNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gdHJpZ2dlciBmaWxlcy4gQWxsIENvZGVCbG9ja3Mgc3RhcnQgb3V0IHdp
dGggb3B0aW1pemVBZnRlcldhcm1VcCgpLAogICAgICAgICAvLyBhcyB0aGlzIGlzIGNhbGxlZCBm
cm9tIHRoZSBDb2RlQmxvY2sgY29uc3RydWN0b3IuCiAgICAgICAgIAorICAgICAgICAvLyBXaGVu
IHdlIG9ic2VydmUgYSBsb3Qgb2Ygc3BlY3VsYXRpb24gZmFpbHVyZXMsIHdlIHRyaWdnZXIgYQor
ICAgICAgICAvLyByZW9wdGltaXphdGlvbi4gQnV0IGVhY2ggdGltZSwgd2UgaW5jcmVhc2UgdGhl
IG9wdGltaXphdGlvbiB0cmlnZ2VyCisgICAgICAgIC8vIHRvIGF2b2lkIHRocmFzaGluZy4KKyAg
ICAgICAgdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA8PSAx
OCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBjb3VudFJlb3B0aW1pemF0aW9uKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcisrOworICAg
ICAgICAgICAgaWYgKG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPiAxOCkKKyAgICAgICAg
ICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyID0gMTg7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgdG8gc3VwcG9y
dCBjYWxsaW5nCi0gICAgICAgIC8vIG9wdGltaXplQWZ0ZXJXYXJtVXAoKSBmcm9tIEpJVC1nZW5l
cmF0ZWQgY29kZS4KKyAgICAgICAgLy8gb3B0aW1pemVYWVooKSBtZXRob2RzIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICBzdGF0aWMgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZU5leHRJbnZvY2F0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlcldhcm1VcCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAtMTAwMDsKKyAg
ICAgICAgICAgIHJldHVybiAtMTAwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIC01MDAw
IDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGludDMyX3QqIGFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkKQEAgLTY5NywxMiArNzQx
LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuICZtX2V4ZWN1dGVDb3Vu
dGVyOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mRXhlY3V0ZUNvdW50ZXIoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBt
X2V4ZWN1dGVDb3VudGVyKTsgfQorCisgICAgICAgIGludDMyX3QgZXhlY3V0ZUNvdW50ZXIoKSBj
b25zdCB7IHJldHVybiBtX2V4ZWN1dGVDb3VudGVyOyB9CisgICAgICAgIAorICAgICAgICB1bnNp
Z25lZCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX29wdGltaXph
dGlvbkRlbGF5Q291bnRlcjsgfQorICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGZv
cmNlIHRoZSBuZXh0IG9wdGltaXphdGlvbiB0cmlnZ2VyIHRvIGZpcmUuIFRoaXMgaXMKICAgICAg
ICAgLy8gcmFyZWx5IHdpc2UsIHNpbmNlIG9wdGltaXphdGlvbiB0cmlnZ2VycyBhcmUgdHlwaWNh
bGx5IG1vcmUKICAgICAgICAgLy8gZXhwZW5zaXZlIHRoYW4gZXhlY3V0aW5nIGJhc2VsaW5lIGNv
ZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVOZXh0SW52b2NhdGlvbigpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAwOworICAgICAgICAgICAgbV9leGVjdXRlQ291
bnRlciA9IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKTsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIHByZXZlbnQgb3B0aW1pemF0aW9u
IGZyb20gaGFwcGVuaW5nIGFnYWluLiBOb3RlIHRoYXQKQEAgLTcyNiw2ICs3NzYsMTMgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVl
Rm9yT3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICAv
LyBDYWxsIHRoaXMgdG8gZm9yY2UgYW4gb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZSBvbmx5
IGFmdGVyCisgICAgICAgIC8vIGEgbG90IG9mIHdhcm0tdXAuCisgICAgICAgIHZvaWQgb3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3Vu
dGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAoKTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGlzIHRvIGNhdXNlIGFuIG9wdGltaXphdGlv
biB0cmlnZ2VyIHRvIGZpcmUgc29vbiwgYnV0CiAgICAgICAgIC8vIG5vdCBuZWNlc3NhcmlseSB0
aGUgbmV4dCBvbmUuIFRoaXMgbWFrZXMgc2Vuc2UgaWYgb3B0aW1pemF0aW9uCiAgICAgICAgIC8v
IHN1Y2NlZWRzLiBTdWNjZXNzZnVseSBvcHRpbWl6YXRpb24gbWVhbnMgdGhhdCBhbGwgY2FsbHMg
YXJlCkBAIC03NDYsMTggKzgwMyw3MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gaW4g
dGhlIGJhc2VsaW5lIGNvZGUuCiAgICAgICAgIHZvaWQgb3B0aW1pemVTb29uKCkKICAgICAgICAg
ewotICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IC0xMDA7CisgICAgICAgICAgICBtX2V4
ZWN1dGVDb3VudGVyID0gLTEwMCA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3BlY3VsYXRpdmUgSklUIHRyYWNrcyBp
dHMgc3VjY2VzcyByYXRlLCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAvLyBkZWNpZGUgd2hlbiB0
byByZW9wdGltaXplLiBJdCdzIGludGVyZXN0aW5nIHRvIG5vdGUgdGhhdCB0aGVzZQorICAgICAg
ICAvLyBjb3VudGVycyBtYXkgb3ZlcmZsb3cgd2l0aG91dCBhbnkgcHJvdGVjdGlvbi4gVGhlIHN1
Y2Nlc3MKKyAgICAgICAgLy8gY291bnRlciB3aWxsIG92ZXJmbG93IGJlZm9yZSB0aGUgZmFpbCBv
bmUgZG9lcywgYmVjdWFzZSB0aGUKKyAgICAgICAgLy8gZmFpbCBvbmUgaXMgdXNlZCBhcyBhIHRy
aWdnZXIgdG8gcmVvcHRpbWl6ZS4gU28gdGhlIHdvcnN0IGNhc2UKKyAgICAgICAgLy8gaXMgdGhh
dCB0aGUgc3VjY2VzcyBjb3VudGVyIG92ZXJmbG93cyBhbmQgd2UgcmVvcHRpbWl6ZSB3aXRob3V0
CisgICAgICAgIC8vIG5lZWRpbmcgdG8uIEJ1dCB0aGlzIGlzIGhhcm1sZXNzLiBJZiBhIG1ldGhv
ZCByZWFsbHkgZGlkCisgICAgICAgIC8vIGV4ZWN1dGUgMl4zMiB0aW1lcyB0aGVuIGNvbXBpbGlu
ZyBpdCBhZ2FpbiBwcm9iYWJseSB3b24ndCBodXJ0CisgICAgICAgIC8vIGFueW9uZS4KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgY291bnRTcGVjdWxhdGlvblN1Y2Nlc3MoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIrKzsKICAgICAgICAgfQogICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uRmFpbHVyZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcisrOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB1aW50MzJfdCBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyOyB9CisgICAgICAgIHVpbnQzMl90
IHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSBjb25zdCB7IHJldHVybiBtX3NwZWN1bGF0aXZlRmFp
bENvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRl
cjsgfQorICAgICAgICB1aW50MzJfdCogYWRkcmVzc09mU3BlY3VsYXRpdmVGYWlsQ291bnRlcigp
IHsgcmV0dXJuICZtX3NwZWN1bGF0aXZlRmFpbENvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKTsgfQorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3BlY3VsYXRpdmVGYWls
Q291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fc3BlY3VsYXRp
dmVGYWlsQ291bnRlcik7IH0KKyAgICAgICAgCiAgICAgICAgIC8vIFRoZSBhbW91bnQgYnkgd2hp
Y2ggdGhlIEpJVCB3aWxsIGluY3JlbWVudCBtX2V4ZWN1dGVDb3VudGVyLgogICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkgeyByZXR1cm4gMTsg
fQogICAgICAgICBzdGF0aWMgdW5zaWduZWQgZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JSZXR1
cm4oKSB7IHJldHVybiAxNTsgfQorCisgICAgICAgIC8vIFRoZSBzdWNjZXNzL2ZhaWx1cmUgcmF0
aW8gd2Ugd2FudC4KKyAgICAgICAgdW5zaWduZWQgZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSB7
IHJldHVybiA2OyB9CisgICAgICAgIAorICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIGZhaWx1cmVz
IHRoYXQgdHJpZ2dlcnMgdGhlIHVzZSBvZiB0aGUgcmF0aW8uCisgICAgICAgIHVuc2lnbmVkIGxh
cmdlRmFpbENvdW50VGhyZXNob2xkKCkgeyByZXR1cm4gMjAgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICB1bnNpZ25lZCBsYXJnZUZhaWxD
b3VudFRocmVzaG9sZEZvckxvb3AoKSB7IHJldHVybiAxIDw8IGFsdGVybmF0aXZlKCktPnJlb3B0
aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgc2hvdWxk
UmVvcHRpbWl6ZU5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49IHNwZWN1bGF0aXZl
U3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gbGFyZ2VGYWls
Q291bnRUaHJlc2hvbGQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ZGVzaXJlZFN1Y2Nlc3NGYWlsUmF0aW8oKSAqIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBz
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IGxhcmdlRmFpbENvdW50VGhyZXNob2xkRm9yTG9vcCgpOworICAgICAgICB9CiAgICAgICAgIAog
I2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5v
dygpOwogI2Vsc2UKICAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVvcHRpbWl6ZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNl
bWVudCgpICE9IHRoaXMpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+amV0dGlzb24oZ2xv
YmFsRGF0YSk7CisgICAgICAgICAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CisgICAgICAgICAg
ICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CisgICAgICAgIH0KIAogI2lmIEVOQUJMRShWRVJCT1NF
X1ZBTFVFX1BST0ZJTEUpCiAgICAgICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsZXMoKTsKQEAgLTgy
Nyw2ICs5MzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2lmIEVOQUJMRShERkdfSklU
KQogICAgICAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1faml0Q29kZU1hcDsKKyAgICAg
ICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBtX2RmZ09TUkVudHJ5OwogI2VuZGlmCiAjaWYg
RU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9m
aWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkBAIC04NTEsNyArOTYzLDEwIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBPd25QdHI8UHJlZGljdGlvblRyYWNrZXI+IG1fcHJlZGljdGlvbnM7CiAK
ICAgICAgICAgaW50MzJfdCBtX2V4ZWN1dGVDb3VudGVyOworICAgICAgICB1aW50MzJfdCBtX3Nw
ZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsKICAgICAgICAgdWludDhfdCBtX29wdGltaXphdGlvbkRlbGF5Q291bnRlcjsK
KyAgICAgICAgdWludDhfdCBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwogCiAgICAgICAg
IHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpA
QCAtOTA5LDYgKzEwMjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpA
QCAtOTM1LDYgKzEwNTEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpA
QCAtOTYyLDYgKzEwNzksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlz
b24oSlNHbG9iYWxEYXRhJik7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Miw3ICs0OTIsNyBAQCBwcml2YXRl
OgogICAgICAgICBBU1NFUlQocHJvZmlsZSk7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiA9IHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2lmIEVOQUJMRShE
RkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJEeW5hbWljIFsldSwgJXVdIHByZWRp
Y3Rpb246ICVzXG4iLCBub2RlSW5kZXgsIGJ5dGVjb2RlSW5kZXgsIHByZWRpY3Rpb25Ub1N0cmlu
ZyhwcmVkaWN0aW9uKSk7CisgICAgICAgIHByaW50ZigiRHluYW1pYyBbQCV1LCBiYyMldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDYgKzQwOCw5IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAvLyAgICAgICAgIGVudHJ5LCBzaW5j
ZSBib3RoIGZvcm1zIG9mIE9TUiBhcmUgZXhwZW5zaXZlLiBPU1IgZW50cnkgaXMKICAgICAvLyAg
ICAgICAgIHBhcnRpY3VsYXJseSBleHBlbnNpdmUuCiAgICAgLy8KKyAgICAvLyAgICAgKGQpIEZy
ZXF1ZW50IE9TUiBmYWlsdXJlcywgZXZlbiB0aG9zZSB0aGF0IGRvIG5vdCByZXN1bHQgaW4gdGhl
IGNvZGUKKyAgICAvLyAgICAgICAgIHJ1bm5pbmcgaW4gYSBob3QgbG9vcCwgcmVzdWx0IGluIHJl
Y29tcGlsYXRpb24gZ2V0dGluZyB0cmlnZ2VyZWQuCisgICAgLy8KICAgICAvLyAgICAgVG8gZW5z
dXJlIChjKSwgd2UnZCBsaWtlIHRvIHNldCB0aGUgZXhlY3V0ZSBjb3VudGVyIHRvCiAgICAgLy8g
ICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4gVGhpcyBzZWVtcyBsaWtl
IGl0IHdvdWxkIGVuZGFuZ2VyCiAgICAgLy8gICAgIChhKSBhbmQgKGIpLCBzaW5jZSB0aGVuIGV2
ZXJ5IE9TUiBleGl0IHdvdWxkIGRlbGF5IHRoZSBvcHBvcnR1bml0eSBmb3IKQEAgLTQxNSwxMSAr
NDE4LDQwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IKICAgICAv
LyAgICAgZnJlcXVlbnRseSBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBmZXcgbG9vcHMsIHRoZW4gdGhl
IGNvdW50ZXIgd2lsbCBuZXZlcgogICAgIC8vICAgICBiZWNvbWUgbm9uLW5lZ2F0aXZlIGFuZCBP
U1IgZW50cnkgd2lsbCBuZXZlciBiZSB0cmlnZ2VyZWQuIE9TUiBlbnRyeQogICAgIC8vICAgICB3
aWxsIG9ubHkgaGFwcGVuIGlmIGEgbG9vcCBnZXRzIGhvdCBpbiB0aGUgb2xkIEpJVCwgd2hpY2gg
ZG9lcyBhIHByZXR0eQotICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkgYW5kIChi
KS4gVGhpcyBoZXVyaXN0aWMgbWF5IG5lZWQgdG8gYmUKLSAgICAvLyAgICAgcmV0aG91Z2h0IGlu
IHRoZSBmdXR1cmUsIHBhcnRpY3VsYXJseSBpZiB3ZSBzdXBwb3J0IHJlb3B0aW1pemluZyBjb2Rl
Ci0gICAgLy8gICAgIHdpdGggbmV3IHZhbHVlIHByb2ZpbGVzIGdhdGhlcmVkIGZyb20gY29kZSB0
aGF0IGRpZCBPU1IgZXhpdC4KKyAgICAvLyAgICAgZ29vZCBqb2Igb2YgZW5zdXJpbmcgKGEpIGFu
ZCAoYikuIEJ1dCB0aGF0IGRvZXNuJ3QgdGFrZSBjYXJlIG9mIChkKSwKKyAgICAvLyAgICAgc2lu
Y2UgZWFjaCBzcGVjdWxhdGlvbiBmYWlsdXJlIHdvdWxkIHJlc2V0IHRoZSBleGVjdXRlIGNvdW50
ZXIuCisgICAgLy8gICAgIFNvIHdlIGNoZWNrIGhlcmUgaWYgdGhlIG51bWJlciBvZiBzcGVjdWxh
dGlvbiBmYWlsdXJlcyBpcyBzaWduaWZpY2FudGx5CisgICAgLy8gICAgIGxhcmdlciB0aGFuIHRo
ZSBudW1iZXIgb2Ygc3VjY2Vzc2VzICh3ZSB3YW50IDkwJSBzdWNjZXNzIHJhdGUpLCBhbmQgaWYK
KyAgICAvLyAgICAgdGhlcmUgaGF2ZSBiZWVuIGEgbGFyZ2UgZW5vdWdoIG51bWJlciBvZiBmYWls
dXJlcy4gSWYgc28sIHdlIHNldCB0aGUKKyAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndp
c2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCisgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKS4KKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29kZUJsb2Nr
KCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgCisgICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6
cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJ
bmZvOjpyZWdUMik7CisgICAgbG9hZDMyKEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9j
azo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMSk7
CisgICAgYWRkMzIoSW1tMzIoMSksIEdQUkluZm86OnJlZ1QyKTsKKyAgICBhZGQzMihJbW0zMigt
MSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QyLCBBZGRyZXNz
KEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKSk7CisgICAgc3RvcmUzMihHUFJJbmZvOjpyZWdUMSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdU
MCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOworICAg
IAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIEdQ
UkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBKdW1wIGZld0ZhaWxzID0gYnJhbmNoMzIoQmVsb3dP
ckVxdWFsLCBHUFJJbmZvOjpyZWdUMiwgSW1tMzIoY29kZUJsb2NrKCktPmxhcmdlRmFpbENvdW50
VGhyZXNob2xkKCkpKTsKKyAgICBtdWwzMihJbW0zMihjb2RlQmxvY2soKS0+ZGVzaXJlZFN1Y2Nl
c3NGYWlsUmF0aW8oKSksIEdQUkluZm86OnJlZ1QyLCBHUFJJbmZvOjpyZWdUMik7CisgICAgCisg
ICAgSnVtcCBsb3dGYWlsUmF0ZSA9IGJyYW5jaDMyKEJlbG93T3JFcXVhbCwgR1BSSW5mbzo6cmVn
VDIsIEdQUkluZm86OnJlZ1QxKTsKICAgICAKLSAgICBzdG9yZTMyKEltbTMyKGNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkpLCBj
b2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+YWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKSk7Cisg
ICAgLy8gUmVvcHRpbWl6ZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIHN0b3JlMzIoSW1tMzIo
Q29kZUJsb2NrOjpjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkpLCBBZGRy
ZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mRXhlY3V0ZUNvdW50ZXIoKSkp
OworICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKKyAgICAKKyAgICBmZXdGYWlscy5s
aW5rKHRoaXMpOworICAgIGxvd0ZhaWxSYXRlLmxpbmsodGhpcyk7CisgICAgCisgICAgc3RvcmUz
MihJbW0zMihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Y291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlckxvbmdXYXJtVXAoKSksIEFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6
b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigpKSk7CisgICAgCisgICAgZG9uZUFkanVzdGluZy5saW5r
KHRoaXMpOwogICAgIAogICAgIC8vIDEyKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0
ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCkBAIC00ODEsNiArNTEzLDggQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKICAgICAvLyBib3RoIG5vcm1hbCByZXR1cm4g
Y29kZSBhbmQgd2hlbiBqdW1waW5nIHRvIGFuIGV4Y2VwdGlvbiBoYW5kbGVyKS4KICAgICBwcmVz
ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoR1BSSW5mbzo6cmVnVDIpOwogICAgIGVtaXRQdXRU
b0NhbGxGcmFtZUhlYWRlcihHUFJJbmZvOjpyZWdUMiwgUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQyk7
CisgICAgCisgICAgYWRkUHRyKEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoY29kZUJsb2NrKCkt
PmFkZHJlc3NPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSkpOwogfQogCiB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlQm9keSgpCkBAIC00OTgsMTAgKzUzMiw2IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmNvbXBpbGVCb2R5KCkKICAgICBib29sIGNvbXBpbGVkU3BlY3VsYXRpdmUgPSBzcGVjdWxh
dGl2ZS5jb21waWxlKCk7CiAgICAgQVNTRVJUX1VOVVNFRChjb21waWxlZFNwZWN1bGF0aXZlLCBj
b21waWxlZFNwZWN1bGF0aXZlKTsKIAotI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQotICAgIG1f
Y29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29kZXIuZmluaXNoKCkpOwot
I2VuZGlmCi0gICAgCiAgICAgbGlua09TUkV4aXRzKHNwZWN1bGF0aXZlKTsKIAogICAgIC8vIEl0
ZXJhdGUgb3ZlciB0aGUgbV9jYWxscyB2ZWN0b3IsIGNoZWNraW5nIGZvciBleGNlcHRpb24gY2hl
Y2tzLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
cmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNDYgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaykKICAgICB7Ci0g
ICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdp
biwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworI2lmIEVOQUJM
RShERkdfT1NSX0VOVFJZKQorICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2Nr
KCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZl
cmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKKyAgICAgICAgCisgICAgICAg
IHVuc2lnbmVkIGxhc3RMaXZlQXJndW1lbnQgPSAwOworICAgICAgICB1bnNpZ25lZCBsYXN0TGl2
ZUxvY2FsID0gMDsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoYmFz
aWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAg
bGFzdExpdmVBcmd1bWVudCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2xvY2Fsc1tpXS52YWx1ZSAhPSBOb05vZGUpCisg
ICAgICAgICAgICAgICAgbGFzdExpdmVMb2NhbCA9IGk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChsYXN0TGl2ZUFyZ3VtZW50KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZl
QXJndW1lbnRzLnJlc2l6ZShsYXN0TGl2ZUFyZ3VtZW50ICsgMSk7CisgICAgICAgICAgICBlbnRy
eS0+bV9saXZlQXJndW1lbnRzLmNsZWFyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFzdExpdmVBcmd1bWVudDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9hcmd1bWVudHNbaV0udmFsdWUgIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1lbnRzLnNldChpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbnRyeS0+bV9saXZlQXJndW1l
bnRzLmNsZWFyKCk7CisgICAgICAgIAorICAgICAgICBpZiAobGFzdExpdmVMb2NhbCkgeworICAg
ICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5yZXNpemUobGFzdExpdmVMb2NhbCArIDEp
OworICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5jbGVhcigpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9IGxhc3RMaXZlTG9jYWw7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVl
ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbGl2ZVZhcmlhYmxlcy5z
ZXQoaSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZW50cnkt
Pm1fbGl2ZVZhcmlhYmxlcy5jbGVhcigpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKGJh
c2ljQmxvY2spOworI2VuZGlmCiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzUzLDcgKzM5Miw2IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgLy8gSklUIGNvZGUgbWFwIGZvciBPU1IgZW50cnlwb2ludHMu
CiAgICAgTGFiZWwgbV9zdGFydE9mQ29kZTsKLSAgICBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
ciBtX2ppdENvZGVNYXBFbmNvZGVyOwogCiAgICAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3Jk
IHsKICAgICAgICAgUHJvcGVydHlBY2Nlc3NSZWNvcmQoQ2FsbCBmdW5jdGlvbkNhbGwsIGludDE2
X3QgZGVsdGFDaGVja0ltbVRvQ2FsbCwgaW50MTZfdCBkZWx0YUNhbGxUb1N0cnVjdENoZWNrLCBp
bnQxNl90IGRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUsIGludDE2X3QgZGVsdGFDYWxsVG9TbG93Q2Fz
ZSwgaW50MTZfdCBkZWx0YUNhbGxUb0RvbmUsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgdmFsdWVH
UFIsIGludDhfdCBzY3JhdGNoR1BSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDggQEAgdm9p
ZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIEFTU0VSVChjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgQVNTRVJUKGNvZGVC
bG9jay0+aml0Q29kZU1hcCgpKTsKKyAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZU1hcCgp
KTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5udW1iZXJPZkRGR09TUkVudHJpZXMoKSk7CiAKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIHByaW50ZigiT1NSIGluICVwKCVwKSBmcm9t
IGJjIyV1XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgYnl0ZWNvZGVJ
bmRleCk7CkBAIC02Niw2ICs2Nyw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUq
IGV4ZWMsIEMKICAgICAKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xv
YmFsRGF0YSgpOwogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBjb2RlQmxvY2st
PmFsdGVybmF0aXZlKCk7CisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jay0+ZGZn
T1NSRW50cnlEYXRhRm9yQnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBB
U1NFUlQoZW50cnktPm1fYnl0ZWNvZGVJbmRleCA9PSBieXRlY29kZUluZGV4KTsKICAgICAKICAg
ICAvLyBUaGUgY29kZSBiZWxvdyBjaGVja3MgaWYgaXQgaXMgc2FmZSB0byBwZXJmb3JtIE9TUiBl
bnRyeS4gSXQgbWF5IGZpbmQKICAgICAvLyB0aGF0IGl0IGlzIHVuc2FmZSB0byBkbyBzbywgZm9y
IGFueSBudW1iZXIgb2YgcmVhc29ucywgd2hpY2ggYXJlIGRvY3VtZW50ZWQKQEAgLTk3LDcgKzEw
MSw4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHByZWRpY3Rpb25z
LT5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNW
YWxpZChnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb25zLT5nZXRB
cmd1bWVudFByZWRpY3Rpb24oaSkpKSB7CisgICAgICAgIGlmIChpIDwgZW50cnktPm1fbGl2ZUFy
Z3VtZW50cy5ib3VuZHMoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdldChpKQorICAgICAg
ICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkg
LSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFC
TEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBi
ZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPmFyZ3Vt
ZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMt
PmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUsMTEgKzExMCw5IEBA
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0IGFuIE9TUiBlbnRy
eSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRoZW4gd2Ugc2hvdWxk
bid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygpOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMo
KVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkpKSkgeworICAgICAg
ICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuYm91bmRzKCkgJiYgZW50cnktPm1fbGl2
ZVZhcmlhYmxlcy5nZXQoaSkKKyAgICAgICAgICAgICYmICFwcmVkaWN0aW9uSXNWYWxpZChnbG9i
YWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQ
cmVkaWN0aW9uKGkpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAg
ICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVj
dGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9u
KCksIHByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpOwog
I2VuZGlmCkBAIC0xMzksMzAgKzE0Miw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3Rh
dGUqIGV4ZWMsIEMKICAgICAKICAgICBleGVjLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsKICAg
ICAKLSAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4gdGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29k
ZSBhZGRyZXNzLiBUaGUgREZHIHN0b3JlcwotICAgIC8vICAgIHRoZSBtYWNoaW5lIGNvZGUgb2Zm
c2V0cyBvZiBPU1IgdGFyZ2V0cyBpbiBhIENvbXBhY3RKSVRDb2RlTWFwLgotICAgIC8vICAgIERl
Y29kaW5nIGl0IGlzIG5vdCBzdXBlciBlZmZpY2llbnQsIGJ1dCB3ZSBleHBlY3QgdGhhdCBPU1Ig
ZW50cnkKLSAgICAvLyAgICBoYXBwZW5zIHN1ZmZpY2llbnRseSByYXJlbHksIGFuZCB0aGF0IE9T
UiBlbnRyeXBvaW50cyBhcmUgc3VmZmljaWVudGx5Ci0gICAgLy8gICAgZmV3LCB0aGF0IHRoaXMg
d29uJ3QgaHVydCB0aHJvdWdocHV0LiBOb3RlIHRoYXQgdGhlIG9ubHkgcmVhbAotICAgIC8vICAg
IHJlYXNvbiB3aHkgd2UgdXNlIGEgQ29tcGFjdEpJVENvZGVNYXAgaXMgdG8gYXZvaWQgaGF2aW5n
IHRvIGludHJvZHVjZQotICAgIC8vICAgIHlldCBhbm90aGVyIGRhdGEgc3RydWN0dXJlIGZvciBt
YXBwaW5nIGJldHdlZW4gYnl0ZWNvZGUgaW5kaWNlcyBhbmQKLSAgICAvLyAgICBtYWNoaW5lIGNv
ZGUgb2Zmc2V0cy4KLSAgICAKLSAgICBDb21wYWN0SklUQ29kZU1hcDo6RGVjb2RlciBkZWNvZGVy
KGNvZGVCbG9jay0+aml0Q29kZU1hcCgpKTsKLSAgICB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNl
dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKLSAgICB3aGlsZSAoZGVj
b2Rlci5udW1iZXJPZkVudHJpZXNSZW1haW5pbmcoKSkgewotICAgICAgICB1bnNpZ25lZCBjdXJy
ZW50Qnl0ZWNvZGVJbmRleDsKLSAgICAgICAgdW5zaWduZWQgY3VycmVudE1hY2hpbmVDb2RlT2Zm
c2V0OwotICAgICAgICBkZWNvZGVyLnJlYWQoY3VycmVudEJ5dGVjb2RlSW5kZXgsIGN1cnJlbnRN
YWNoaW5lQ29kZU9mZnNldCk7Ci0gICAgICAgIGlmIChjdXJyZW50Qnl0ZWNvZGVJbmRleCA9PSBi
eXRlY29kZUluZGV4KSB7Ci0gICAgICAgICAgICBtYWNoaW5lQ29kZU9mZnNldCA9IGN1cnJlbnRN
YWNoaW5lQ29kZU9mZnNldDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIEFTU0VSVChtYWNoaW5lQ29kZU9mZnNldCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOworICAgIC8vIDQpIEZpbmQgYW5kIHJldHVybiB0aGUgZGVzdGlu
YXRpb24gbWFjaGluZSBjb2RlIGFkZHJlc3MuCiAgICAgCi0gICAgdm9pZCogcmVzdWx0ID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9j
ay0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFjaGluZUNvZGVPZmZzZXQpOworICAgIHZvaWQq
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIGVudHJ5LT5tX21hY2hpbmVD
b2RlT2Zmc2V0KTsKICAgICAKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIHByaW50
ZigiICAgIE9TUiByZXR1cm5pbmcgbWFjaGluZSBjb2RlIGFkZHJlc3MgJXAuXG4iLCByZXN1bHQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24g
OTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgREZHT1NSRW50cnlfaAogI2RlZmlu
ZSBERkdPU1JFbnRyeV9oCiAKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisKIG5hbWVzcGFj
ZSBKU0MgewogCiBjbGFzcyBFeGVjU3RhdGU7CkBAIC0zNCw2ICszNiwxOCBAQCBjbGFzcyBDb2Rl
QmxvY2s7CiBuYW1lc3BhY2UgREZHIHsKIAogI2lmIEVOQUJMRShERkdfSklUKQorc3RydWN0IE9T
UkVudHJ5RGF0YSB7CisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVuc2lnbmVk
IG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgQml0VmVjdG9yIG1fbGl2ZUFyZ3VtZW50czsKKyAg
ICBCaXRWZWN0b3IgbV9saXZlVmFyaWFibGVzOworfTsKKworaW5saW5lIHVuc2lnbmVkIGdldE9T
UkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCit7Cisg
ICAgcmV0dXJuIG9zckVudHJ5RGF0YS0+bV9ieXRlY29kZUluZGV4OworfQorCiB2b2lkKiBwcmVw
YXJlT1NSRW50cnkoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7CiAjZWxzZQogaW5saW5lIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqLCBDb2Rl
QmxvY2sqLCB1bnNpZ25lZCkgeyByZXR1cm4gMDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3Nyw2ICs4NzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCisgICAg
ICAgIGlmIChzaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKG5vZGUuY2hpbGQxKCkpKSB7CisgICAg
ICAgICAgICAvLyBEbyBpdCB0aGUgc2FmZSB3YXkuCisgICAgICAgICAgICBub25TcGVjdWxhdGl2
ZVZhbHVlVG9JbnQzMihub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKICAgICAgICAg
bV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCShyZXZpc2lvbiA5NTU5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNvbnNlcnZhdGl2ZVJvb3RzLmgiCiAKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJs
b2Nrcy5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogaW5saW5lIGJvb2wgaXNQb2ludGVyQWxpZ25l
ZCh2b2lkKiBwKQpAQCAtMzMsNiArMzUsMjcgQEAgaW5saW5lIGJvb2wgaXNQb2ludGVyQWxpZ25l
ZCh2b2lkKiBwKQogICAgIHJldHVybiAhKChpbnRwdHJfdCkocCkgJiAoc2l6ZW9mKGNoYXIqKSAt
IDEpKTsKIH0KIAorQ29uc2VydmF0aXZlUm9vdHM6OkNvbnNlcnZhdGl2ZVJvb3RzKGNvbnN0IE1h
cmtlZEJsb2NrU2V0KiBibG9ja3MsIEpldHRpc29uZWRDb2RlQmxvY2tzKiBjb2RlQmxvY2tzKQor
ICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2Nh
cGFjaXR5KGlubGluZUNhcGFjaXR5KQorICAgICwgbV9ibG9ja3MoYmxvY2tzKQorICAgICwgbV9j
b2RlQmxvY2tzKGNvZGVCbG9ja3MpCit7CisgICAgaWYgKCFtX2NvZGVCbG9ja3MpIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGEgZHVtbXkgSmV0dGlzb25lZENvZGVCbG9ja3Mgc3RydWN0dXJlLCBzbyB0
aGF0IENvbnNlcnZhdGl2ZVJvb3RzOjphZGQoKQorICAgICAgICAvLyBkb2Vzbid0IGhhdmUgdG8g
ZG8gYW55IG51bGwgY2hlY2tzIG9uIG1fY29kZUJsb2Nrcy4KKyAgICAgICAgbV9teUNvZGVCbG9j
a3MgPSBhZG9wdFB0cihuZXcgSmV0dGlzb25lZENvZGVCbG9ja3MoKSk7CisgICAgICAgIG1fY29k
ZUJsb2NrcyA9IG1fbXlDb2RlQmxvY2tzLmdldCgpOworICAgIH0KK30KKworQ29uc2VydmF0aXZl
Um9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCit7CisgICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxp
bmVSb290cykKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3Rz
LCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKK30KKwogdm9pZCBDb25zZXJ2YXRpdmVS
b290czo6Z3JvdygpCiB7CiAgICAgc2l6ZV90IG5ld0NhcGFjaXR5ID0gbV9jYXBhY2l0eSA9PSBp
bmxpbmVDYXBhY2l0eSA/IG5vbklubGluZUNhcGFjaXR5IDogbV9jYXBhY2l0eSAqIDI7CkBAIC00
Niw2ICs2OSw4IEBAIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogCiBpbmxpbmUgdm9p
ZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIHAsIFRpbnlCbG9vbUZpbHRlciBmaWx0ZXIp
CiB7CisgICAgbV9jb2RlQmxvY2tzLT5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBj
YW5kaWRhdGUgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxl
T3V0KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJU
KCFjYW5kaWRhdGUgfHwgIW1fYmxvY2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuaAko
cmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRp
dmVSb290cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTIgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBKU0NlbGw7CitjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrczsKIGNsYXNz
IEhlYXA7CiAKIGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzIHsKIHB1YmxpYzoKLSAgICBDb25zZXJ2
YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCopOworICAgIENvbnNlcnZhdGl2ZVJvb3Rz
KGNvbnN0IE1hcmtlZEJsb2NrU2V0KiwgSmV0dGlzb25lZENvZGVCbG9ja3MqID0gMCk7CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKQEAgLTU2LDIzICs1NywxMSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiAg
ICAgc2l6ZV90IG1fY2FwYWNpdHk7CiAgICAgY29uc3QgTWFya2VkQmxvY2tTZXQqIG1fYmxvY2tz
OworICAgIEpldHRpc29uZWRDb2RlQmxvY2tzKiBtX2NvZGVCbG9ja3M7CisgICAgT3duUHRyPEpl
dHRpc29uZWRDb2RlQmxvY2tzPiBtX215Q29kZUJsb2NrczsKICAgICBKU0NlbGwqIG1faW5saW5l
Um9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotaW5saW5lIENvbnNlcnZhdGl2ZVJvb3RzOjpD
b25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQotICAgIDogbV9y
b290cyhtX2lubGluZVJvb3RzKQotICAgICwgbV9zaXplKDApCi0gICAgLCBtX2NhcGFjaXR5KGlu
bGluZUNhcGFjaXR5KQotICAgICwgbV9ibG9ja3MoYmxvY2tzKQotewotfQotCi1pbmxpbmUgQ29u
c2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygpCi17Ci0gICAgaWYgKG1fcm9vdHMg
IT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFz
ZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKLX0KLQogaW5saW5lIHNp
emVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiB7CiAgICAgcmV0dXJuIG1fc2l6ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQs
NiArMzk0LDExIEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3QKICAg
ICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmlyc3QpOwogfQogCit2b2lkIEhlYXA6
OmpldHRpc29uQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7Cisg
ICAgbV9jb2RlQmxvY2tzLmFkZENvZGVCbG9jayhjb2RlQmxvY2spOworfQorCiB2b2lkIEhlYXA6
OnB1c2hUZW1wU29ydFZlY3RvcihWZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikK
IHsKICAgICBtX3RlbXBTb3J0aW5nVmVjdG9ycy5hcHBlbmQodGVtcFZlY3Rvcik7CkBAIC00NTYs
MTAgKzQ2MSwxMiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAgICAgbV9vcGVyYXRpb25JblBy
b2dyZXNzID0gQ29sbGVjdGlvbjsKIAogICAgIHZvaWQqIGR1bW15OwotCisgICAgCisgICAgbV9j
b2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAgICAKICAgICAvLyBXZSBnYXRoZXIgY29uc2VydmF0
aXZlIHJvb3RzIGJlZm9yZSBjbGVhcmluZyBtYXJrIGJpdHMgYmVjYXVzZSBjb25zZXJ2YXRpdmUK
ICAgICAvLyBnYXRoZXJpbmcgdXNlcyB0aGUgbWFyayBiaXRzIHRvIGRldGVybWluZSB3aGV0aGVy
IGEgcmVmZXJlbmNlIGlzIHZhbGlkLgotICAgIENvbnNlcnZhdGl2ZVJvb3RzIG1hY2hpbmVUaHJl
YWRSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSk7CisgICAgQ29uc2VydmF0aXZlUm9vdHMg
bWFjaGluZVRocmVhZFJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpLCAmbV9jb2RlQmxvY2tz
KTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKG1hY2hpbmVU
aHJlYWRSb290cywgJmR1bW15KTsKIAogICAgIENvbnNlcnZhdGl2ZVJvb3RzIHJlZ2lzdGVyRmls
ZVJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKQEAgLTQ2OSw3ICs0NzYsNyBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cygpCiAKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZp
c2l0b3I7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKLQor
ICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKG1hY2hpbmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRv
ci5kcmFpbigpOwogCkBAIC00OTMsNiArNTAwLDggQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQog
CiAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFwUm9vdFZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
ZHJhaW4oKTsKKyAgICAKKyAgICBtX2NvZGVCbG9ja3MudHJhY2VDb2RlQmxvY2tzKHZpc2l0b3Ip
OwogCiAgICAgLy8gV2VhayBoYW5kbGVzIG11c3QgYmUgbWFya2VkIGxhc3QsIGJlY2F1c2UgdGhl
aXIgb3duZXJzIHVzZSB0aGUgc2V0IG9mCiAgICAgLy8gb3BhcXVlIHJvb3RzIHRvIGRldGVybWlu
ZSByZWFjaGFiaWxpdHkuCkBAIC01ODgsNiArNTk3LDcgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KFN3
ZWVwVG9nZ2xlIHN3ZWVwVG9nZwogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwogICAg
IAogICAgIHJlc2V0QWxsb2NhdG9yKCk7CisgICAgbV9jb2RlQmxvY2tzLmRlbGV0ZVVubWFya2Vk
Q29kZUJsb2NrcygpOwogCiAgICAgaWYgKHN3ZWVwVG9nZ2xlID09IERvU3dlZXApIHsKICAgICAg
ICAgc3dlZXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDk1
NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQWxsb2NhdGlvblNwYWNlLmgiCiAjaW5jbHVk
ZSAiSGFuZGxlSGVhcC5oIgogI2luY2x1ZGUgIkhhbmRsZVN0YWNrLmgiCisjaW5jbHVkZSAiSmV0
dGlzb25lZENvZGVCbG9ja3MuaCIKICNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgogI2luY2x1ZGUg
Ik1hcmtlZEJsb2NrU2V0LmgiCiAjaW5jbHVkZSAiTWFya2VkU3BhY2UuaCIKQEAgLTk4LDYgKzk5
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwcm90ZWN0KEpTVmFsdWUpOwog
ICAgICAgICBib29sIHVucHJvdGVjdChKU1ZhbHVlKTsgLy8gVHJ1ZSB3aGVuIHRoZSBwcm90ZWN0
IGNvdW50IGRyb3BzIHRvIDAuCisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CiAKICAgICAgICAgc2l6ZV90IHNpemUoKTsKICAg
ICAgICAgc2l6ZV90IGNhcGFjaXR5KCk7CkBAIC0xOTEsNiArMTk0LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFNsb3RWaXNpdG9yIG1fc2xvdFZpc2l0b3I7CiAgICAgICAgIEhhbmRsZUhl
YXAgbV9oYW5kbGVIZWFwOwogICAgICAgICBIYW5kbGVTdGFjayBtX2hhbmRsZVN0YWNrOworICAg
ICAgICBKZXR0aXNvbmVkQ29kZUJsb2NrcyBtX2NvZGVCbG9ja3M7CiAgICAgICAgIAogICAgICAg
ICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKZXR0aXNvbmVk
Q29kZUJsb2Nrcy5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZp
c2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitK
ZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENvZGVCbG9ja3MoKSB7IH0KKworSmV0dGlz
b25lZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2NrcygpCit7CisgICAgSGFzaE1hcDxD
b2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAg
IGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBp
dGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBkZWxldGUgaXRlci0+Zmlyc3Q7Cit9CisKK3Zv
aWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmFkZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrKQoreworICAgIEFTU0VSVChtX21hcC5maW5kKGNvZGVCbG9jay5nZXQoKSkg
PT0gbV9tYXAuZW5kKCkpOworICAgIAorICAgIG1fbWFwLmFkZChjb2RlQmxvY2subGVha1B0cigp
LCBmYWxzZSk7Cit9CisKK3ZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmNsZWFyTWFya3MoKQor
eworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAu
YmVnaW4oKTsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBt
X21hcC5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9y
IGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+c2Vjb25k
ID0gZmFsc2U7Cit9CisKK3ZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVubWFya2Vk
Q29kZUJsb2NrcygpCit7CisgICAgVmVjdG9yPENvZGVCbG9jayo+IHRvUmVtb3ZlOworICAgIAor
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVn
aW4oKTsKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21h
cC5lbmQoKTsKKyAgICBmb3IgKEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0
ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBpZiAoIWl0ZXItPnNl
Y29uZCkKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChpdGVyLT5maXJzdCk7CisgICAgfQor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b1JlbW92ZS5zaXplKCk7ICsraSkg
eworICAgICAgICBtX21hcC5yZW1vdmUodG9SZW1vdmVbaV0pOworICAgICAgICBkZWxldGUgdG9S
ZW1vdmVbaV07CisgICAgfQorfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjp0cmFjZUNv
ZGVCbG9ja3MoU2xvdFZpc2l0b3ImIHNsb3RWaXNpdG9yKQoreworICAgIEhhc2hNYXA8Q29kZUJs
b2NrKiwgYm9vbD46Oml0ZXJhdG9yIGJlZ2luID0gbV9tYXAuYmVnaW4oKTsKKyAgICBIYXNoTWFw
PENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQoKTsKKyAgICBmb3Ig
KEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGl0ZXIgPSBiZWdpbjsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+Zmlyc3QtPnZpc2l0QWdncmVnYXRlKHNsb3RW
aXNpdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCisjZGVmaW5l
IEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgU2xvdFZpc2l0b3I7
CisKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsgLy8gT25seSBtYWxsb2MnZCBpbiBDb25zZXJ2YXRpdmVSb290cworcHVibGljOgorICAg
IEpldHRpc29uZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgfkpldHRpc29uZWRDb2RlQmxvY2tz
KCk7CisgICAgCisgICAgdm9pZCBhZGRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+KTsK
KyAgICAKKyAgICB2b2lkIGNsZWFyTWFya3MoKTsKKyAgICAKKyAgICB2b2lkIG1hcmsodm9pZCog
Y2FuZGlkYXRlQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayBm
b3IgMCBhbmQgLTEgYmVjYXVzZSB0aG9zZSBhcmUgdXNlZCBieSB0aGUgSGFzaE1hcCBhcyBtYXJr
ZXJzLgorICAgICAgICB1aW50cHRyX3QgdmFsdWUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oY2FuZGlkYXRlQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgY2hlY2tz
IGZvciBib3RoIG9mIHRob3NlIG5hc3R5IGNhc2VzIGluIG9uZSBnby4KKyAgICAgICAgLy8gMCAr
IDEgPSAxCisgICAgICAgIC8vIC0xICsgMSA9IDAKKyAgICAgICAgaWYgKHZhbHVlICsgMSA8PSAx
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoc3RhdGljX2Nhc3Q8Q29kZUJs
b2NrKj4oY2FuZGlkYXRlQ29kZUJsb2NrKSk7CisgICAgICAgIGlmIChpdGVyID09IG1fbWFwLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpdGVyLT5zZWNvbmQgPSB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGRlbGV0ZVVubWFya2VkQ29kZUJsb2NrcygpOworICAgIAor
ICAgIHZvaWQgdHJhY2VDb2RlQmxvY2tzKFNsb3RWaXNpdG9yJik7CisKK3ByaXZhdGU6CisgICAg
Ly8gSXQgd291bGQgYmUgZ3JlYXQgdG8gdXNlIGFuIE93blB0cjxDb2RlQmxvY2s+IGhlcmUgYnV0
IHRoYXQgd291bGQKKyAgICAvLyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3b3JrLgorICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgYm9vbD4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MTQsNyArMTkxNCwy
MiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAotICAgIGlmICghY29k
ZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJC
T1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9sb29wIHdpdGggZXhl
Y3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jay0+ZXhlY3V0ZUNvdW50ZXIoKSwg
Y29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGlt
aXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRpZgorCisgICAgaWYgKGNvZGVCbG9jay0+aGFz
T3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisg
ICAgICAgIHByaW50ZigiQ29uc2lkZXJpbmcgbG9vcCBPU1IgaW50byAlcCglcCkgd2l0aCBzdWNj
ZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwg
Y29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKKyNlbmRp
ZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXpl
RnJvbUxvb3BOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAg
ICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiBsb29wKS5c
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgh
Y29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKICAgICAgICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAlcCAo
aW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxuIiwgY29kZUJsb2Nr
KTsKQEAgLTE5NTIsNiArMTk2Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGlt
aXplX2Zyb20KICNlbmRpZgogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7Cisg
ICAgICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvblN1Y2Nlc3MoKTsKICAg
ICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xOTYwLDYgKzE5NzYsMzAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3B0aW1pemVfZnJvbQogICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9tIGxvb3Agc3VjY2Vl
ZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKICNlbmRpZgogCisgICAgLy8gQ291bnQg
dGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYgdGhpcyBoYXBwZW5z
IGEgbG90LCB0aGVuCisgICAgLy8gcmVvcHRpbWl6ZS4KKyAgICBvcHRpbWl6ZWRDb2RlQmxvY2st
PmNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCk7CisgICAgCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKKyAgICBwcmludGYoIkVuY291bnRlcmVkIGxvb3AgT1NSIGZhaWx1cmUgaW50byAlcCgl
cCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKTsKKyNlbmRpZgorCisgICAgLy8gV2UgYXJlIGEgbG90IG1vcmUgY29uc2VydmF0aXZlIGFi
b3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZhaWx1cmUgdGhhbgorICAg
IC8vIGJlZm9yZSBpdC4gSWYgd2UgZW50ZXIgdGhlIG9wdGltaXplX2Zyb21fbG9vcCB0cmlnZ2Vy
IHdpdGggYSBidWNrZXQgZnVsbCBvZiBmYWlsCisgICAgLy8gYWxyZWFkeSwgdGhlbiB3ZSByZWFs
bHkgd291bGQgbGlrZSB0byByZW9wdGltaXplIGltbWVkaWF0ZWx5LiBCdXQgdGhpcyBjYXNlIGNv
dmVycworICAgIC8vIHNvbWV0aGluZyBlbHNlOiB0aGVyZSB3ZXJlbid0IG1hbnkgKG9yIGFueSkg
c3BlY3VsYXRpb24gZmFpbHVyZXMgYmVmb3JlLCBidXQgd2UganVzdAorICAgIC8vIGZhaWxlZCB0
byBlbnRlciB0aGUgc3BlY3VsYXRpdmUgY29kZSBiZWNhdXNlIHNvbWUgdmFyaWFibGUgaGFkIHRo
ZSB3cm9uZyB2YWx1ZSBvcgorICAgIC8vIGJlY2F1c2UgdGhlIE9TUiBjb2RlIGRlY2lkZWQgZm9y
IGFueSBzcHVyaW91cyByZWFzb24gdGhhdCBpdCBkaWQgbm90IHdhbnQgdG8gT1NSCisgICAgLy8g
cmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9uIG9ubHkgdXBvbiB0
aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1sb29wKQorICAgIC8vIHJlb3B0aW1pemF0aW9uIHRy
aWdnZXIuCisgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5vdygp
KSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJUcmlnZ2Vy
aW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBPU1IgZmFpbCkuXG4i
LCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5kaWYKKyAgICAgICAg
Y29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIC8vIE9TUiBmYWlsZWQgdGhpcyB0aW1lLCBidXQgaXQgbWln
aHQgc3VjY2VlZCBuZXh0IHRpbWUhIExldCB0aGUgY29kZSBydW4gYSBiaXQKICAgICAvLyBsb25n
ZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgogICAgIGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1V
cCgpOwpAQCAtMTk3Miw4ICsyMDEyLDIzIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
dGltaXplX2Zyb20KICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZy
YW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVkIG9wdGltaXplX2Zy
b21fcmV0IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50
ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jay0+ZXhl
Y3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBj
b2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRpZgorCisgICAgaWYg
KGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxs
IGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2Zh
aWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9j
ay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorICAg
ICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXplTm93KCkp
IHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAgcHJpbnRmKCJUcmln
Z2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gcmV0dXJuKS5cbiIsIGNvZGVCbG9j
aywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgY29kZUJs
b2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgfQorCiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9w
dGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg0LDYgKzg0LDE4IEBAIERGRzo6SW50cmluc2ljIE5hdGl2ZUV4ZWN1dGFi
bGU6OmludHJpbnMKIH0KICNlbmRpZgogCisvLyBVdGlsaXR5IG1ldGhvZCB1c2VkIGZvciBqZXR0
aXNvbmluZyBjb2RlIGJsb2Nrcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBq
ZXR0aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE93blB0cjxUPiYgY29k
ZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2Rl
OjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7Cisg
ICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2sucmVsZWFzZSgpOwor
ICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJsb2NrVG9KZXR0aXNv
bi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgIGNvZGVCbG9ja1RvSmV0dGlzb24tPnVubGlu
a0luY29taW5nQ2FsbHMoKTsKKyAgICBnbG9iYWxEYXRhLmhlYXAuamV0dGlzb25Db2RlQmxvY2so
c3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFz
ZSgpKSk7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8gPSB7
ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2luZm8sIDAsIDAgfTsKIAog
Y29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJFdmFsRXhlY3V0YWJs
ZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAgfTsKQEAgLTIxMSw2ICsyMjMsMTMg
QEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogICAgIHJldHVybiAw
OwogfQogCit2b2lkIEV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERhdGEs
IG1fZXZhbENvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fZXZhbENvZGVCbG9j
ay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrKTsKK30KKwogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2lu
Zm8pOwpAQCAtMzMwLDYgKzM0OSwxMyBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNv
bXBpbGVJbnRlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6Ompl
dHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgamV0
dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBtX2pp
dENvZGVGb3JDYWxsID0gbV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CisgICAgQVNT
RVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQorCiB2b2lkIFByb2dyYW1F
eGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUzMyw2ICs1
NTksMjAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIHJl
dHVybiAwOwogfQogCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgamV0dGlzb25Db2Rl
QmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAgICBtX2ppdENvZGVGb3JD
YWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlKCk7CisgICAgbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2soKTsKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1p
emVkQ29kZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgamV0
dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAg
IG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRD
b2RlKCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBtX2NvZGVC
bG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7Cit9CisKIHZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNfaW5mbyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5NTU5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXpl
ZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgRXZhbENvZGVCbG9jayYgZ2VuZXJhdGVk
Qnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zOTIsNiArMzk0LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3Rh
dGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9w
dGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYg
Z2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC00NzUsNiArNDc5LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFy
Z3NFeGVjID0gMCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNh
bGwoKSBjb25zdAogICAgICAgICB7CkBAIC00OTgsNiArNTA0LDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNvbnN0
cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9p
ZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJik7CiAKICAg
ICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgICAgIHsKQEAg
LTUzOCw2ICs1NDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gY29t
cGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAg
IH0KICAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgCisgICAgICAgICAgICAg
ICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3Qp
OworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChnbG9i
YWxEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9v
bCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCaXRWZWN0
b3JfaAorI2RlZmluZSBCaXRWZWN0b3JfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhp
cyBpcyBhIHNwYWNlLWVmZmljaWVudCwgcmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRo
ZSBjb21tb24gY2FzZSBpdAorLy8gb2NjdXBpZXMgb25lIHdvcmQsIGJ1dCBpZiBuZWNlc3Nhcnks
IGl0IHdpbGwgaW5mbGF0ZSB0aGlzIG9uZSB3b3JkIHRvIHBvaW50CisvLyB0byBhIHNpbmdsZSBj
aHVuayBvZiBvdXQtb2YtbGluZSBhbGxvY2F0ZWQgc3RvcmFnZSB0byBzdG9yZSBhbiBhcmJpdHJh
cnkgbnVtYmVyCisvLyBvZiBiaXRzLgorLy8KKy8vIC0gVGhlIGJpdHZlY3RvciBuZWVkcyB0byBi
ZSByZXNpemVkIG1hbnVhbGx5IChqdXN0IGNhbGwgZW5zdXJlU2l6ZSgpKS4KKy8vCisvLyAtIFRo
ZSBiaXR2ZWN0b3IgcmVtZW1iZXJzIHRoZSBib3VuZCBvZiBob3cgbWFueSBiaXRzIGNhbiBiZSBz
dG9yZWQsIGJ1dCB0aGlzCisvLyAgIG1heSBiZSBzbGlnaHRseSBncmVhdGVyIChieSBhcyBtdWNo
IGFzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29uc3RhbnQpCisvLyAgIHRoYW4gdGhlIGxhc3Qg
YXJndW1lbnQgcGFzc2VkIHRvIGVuc3VyZVNpemUoKS4KKy8vCisvLyAtIEFjY2Vzc2VzIEFTU0VS
VCB0aGF0IHlvdSBhcmUgd2l0aGluIGJvdW5kcy4KKy8vCisvLyAtIEJpdHMgYXJlIG5vdCBhdXRv
bWF0aWNhbGx5IGluaXRpYWxpemVkIHRvIHplcm8uCisvLworLy8gT24gdGhlIG90aGVyIGhhbmQs
IHRoaXMgQml0VmVjdG9yIGNsYXNzIG1heSBub3QgYmUgdGhlIGZhc3Rlc3QgYXJvdW5kLCBzaW5j
ZQorLy8gaXQgZG9lcyBjb25kaXRpb25hbHMgb24gZXZlcnkgZ2V0L3NldC9jbGVhci4gQnV0IGl0
IGlzIGdyZWF0IGlmIHlvdSBuZWVkIHRvCisvLyBqdWdnbGUgYSBsb3Qgb2YgdmFyaWFibGUtbGVu
Z3RoIEJpdFZlY3RvcnMgYW5kIHlvdSdyZSB3b3JyaWVkIGFib3V0IHdhc3RpbmcKKy8vIHNwYWNl
LgorCitjbGFzcyBCaXRWZWN0b3IgeworcHVibGljOiAKKyAgICBCaXRWZWN0b3IoKQorICAgICAg
ICA6IG1fYml0c09yUG9pbnRlcihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGlu
ZUJpdHMoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJpdFZlY3Rvcihjb25zdCBCaXRWZWN0
b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkKKyAgICB7CisgICAgICAgICgqdGhpcykgPSBvdGhl
cjsKKyAgICB9CisgICAgCisgICAgfkJpdFZlY3RvcigpCisgICAgeworICAgICAgICBpZiAoaXNJ
bmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVz
dHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3ImIG9wZXJh
dG9yPShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IG5l
d0JpdHNPclBvaW50ZXI7CisgICAgICAgIGlmIChvdGhlci5pc0lubGluZSgpKQorICAgICAgICAg
ICAgbmV3Qml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0T2ZM
aW5lQml0czo6Y3JlYXRlKG90aGVyLmJvdW5kcygpKTsKKyAgICAgICAgICAgIG1lbWNweShuZXdP
dXRPZkxpbmVCaXRzLT5iaXRzKCksIG90aGVyLmJpdHMoKSwgb3RoZXIuYm91bmRzKCkgPj4gMyk7
CisgICAgICAgICAgICBuZXdCaXRzT3JQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG5ld091dE9mTGluZUJpdHMpOworICAgICAgICB9CisgICAgICAgIGlmICghaXNJbmxpbmUo
KSkKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsK
KyAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbmV3Qml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0
dXJuICp0aGlzOworICAgIH0KKworICAgIHNpemVfdCBib3VuZHMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fYml0c09yUG9pbnRlciA+PiBtYXhJbmxpbmVCaXRzKCkpCisgICAgICAgICAg
ICByZXR1cm4gbWF4SW5saW5lQml0cygpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygp
LT5udW1CaXRzKCk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1CaXRz
KQorICAgIHsKKyAgICAgICAgaWYgKG51bUJpdHMgPD0gYm91bmRzKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJlc2l6ZU91dE9mTGluZShudW1CaXRzKTsKKyAgICB9CisgICAgCisg
ICAgLy8gTGlrZSBlbnN1cmVTaXplKCksIGJ1dCBzdXBwb3J0cyByZWR1Y2luZyB0aGUgc2l6ZSBv
ZiB0aGUgYml0dmVjdG9yLgorICAgIHZvaWQgcmVzaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsK
KyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBpZiAobnVtQml0cyA8PSBtYXhJbmxpbmVCaXRzKCkpIHsKKyAgICAgICAgICAgIE91
dE9mTGluZUJpdHMqIG15T3V0T2ZMaW5lQml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICAgICAg
ICAgIG1fYml0c09yUG9pbnRlciA9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElu
bGluZUJpdHMoKSkgfCAqbXlPdXRPZkxpbmVCaXRzLT5iaXRzKCk7CisgICAgICAgICAgICBPdXRP
ZkxpbmVCaXRzOjpkZXN0cm95KG15T3V0T2ZMaW5lQml0cyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc2l6ZU91dE9mTGluZShudW1CaXRzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBpZiAoaXNJbmxp
bmUoKSkKKyAgICAgICAgICAgIG1fYml0c09yUG9pbnRlciA9IHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMSkgPDwgbWF4SW5saW5lQml0cygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiemVy
byhvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgYm91bmRzKCkgPj4gMyk7CisgICAgfQorCisgICAg
Ym9vbCBnZXQoc2l6ZV90IGJpdCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXQgPCBi
b3VuZHMoKSk7CisgICAgICAgIHJldHVybiAhIShiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIo
KV0gJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIo
KSAtIDEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgYml0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGJpdCA8IGJvdW5kcygpKTsKKyAgICAgICAgYml0cygpW2JpdCA+PiBi
aXRzSW5Qb2ludGVyKCldIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAo
Yml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihzaXpl
X3QgYml0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8IGJvdW5kcygpKTsKKyAgICAgICAg
Yml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldICY9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90
PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0KHNpemVfdCBiaXQsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICBzZXQoYml0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xl
YXIoYml0KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRz
SW5Qb2ludGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhJbmxpbmVCaXRzKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBiaXRzSW5Qb2ludGVyKCkgLSAxOworICAgIH0KKyAgICAKKyAgICBjbGFz
cyBPdXRPZkxpbmVCaXRzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHNpemVfdCBudW1CaXRzKCkg
Y29uc3QgeyByZXR1cm4gbV9udW1CaXRzOyB9CisgICAgICAgIHNpemVfdCBudW1Xb3JkcygpIGNv
bnN0IHsgcmV0dXJuIChtX251bUJpdHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAxKSA+PiBiaXRzSW5Q
b2ludGVyKCk7IH0KKyAgICAgICAgdWludHB0cl90KiBiaXRzKCkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KKyAgICAgICAgY29uc3QgdWludHB0cl90
KiBiaXRzKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRyX3Qq
Pih0aGlzICsgMSk7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBPdXRPZkxpbmVCaXRzKiBj
cmVhdGUoc2l6ZV90IG51bUJpdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIG51bUJpdHMgPSAo
bnVtQml0cyArIGJpdHNJblBvaW50ZXIoKSAtIDEpICYgfmJpdHNJblBvaW50ZXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgKGZhc3RNYWxsb2Moc2l6ZW9mKE91dE9mTGluZUJpdHMpICsgKG51
bUJpdHMgPj4gYml0c0luUG9pbnRlcigpKSkpIE91dE9mTGluZUJpdHMobnVtQml0cyk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koT3V0T2ZMaW5lQml0
cyogb3V0T2ZMaW5lQml0cykKKyAgICAgICAgeworICAgICAgICAgICAgZmFzdEZyZWUob3V0T2ZM
aW5lQml0cyk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIE91dE9mTGluZUJp
dHMoc2l6ZV90IG51bUJpdHMpCisgICAgICAgICAgICA6IG1fbnVtQml0cyhudW1CaXRzKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBtX251bUJpdHM7Cisg
ICAgfTsKKyAgICAKKyAgICBib29sIGlzSW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzT3JQ
b2ludGVyID4+IG1heElubGluZUJpdHMoKTsgfQorICAgIAorICAgIGNvbnN0IE91dE9mTGluZUJp
dHMqIG91dE9mTGluZUJpdHMoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0
IE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBvaW50ZXIpOyB9CisgICAgT3V0T2ZMaW5lQml0cyog
b3V0T2ZMaW5lQml0cygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8T3V0T2ZMaW5lQml0cyo+
KG1fYml0c09yUG9pbnRlcik7IH0KKyAgICAKKyAgICB2b2lkIHJlc2l6ZU91dE9mTGluZShzaXpl
X3QgbnVtQml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVChudW1CaXRzID4gbWF4SW5saW5lQml0
cygpKTsKKyAgICAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGlu
ZUJpdHM6OmNyZWF0ZShudW1CaXRzKTsKKyAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMt
PmJpdHMoKSwgYml0cygpLCBzdGQ6Om1pbihib3VuZHMoKSwgbnVtQml0cykgPj4gMyk7CisgICAg
ICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3ko
b3V0T2ZMaW5lQml0cygpKTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpOworICAgIH0KKyAgICAKKyAgICB1aW50
cHRyX3QqIGJpdHMoKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAg
ICByZXR1cm4gJm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMo
KS0+Yml0cygpOworICAgIH0KKyAgICAKKyAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gJm1f
Yml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+Yml0cygpOwor
ICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QgbV9iaXRzT3JQb2ludGVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qml0VmVjdG9yOworCisjZW5kaWYgLy8gQml0VmVj
dG9yX2gK
</data>
<flag name="review"
          id="104989"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108112</attachid>
            <date>2011-09-21 00:16:17 -0700</date>
            <delta_ts>2011-09-21 00:33:29 -0700</delta_ts>
            <desc>the patch - fix review</desc>
            <filename>recomp_patch_8.diff</filename>
            <type>text/plain</type>
            <size>71454</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAyIEBA
CisyMDExLTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBzdXBwb3J0IGNvbnRpbnVvdXMgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODMyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIHRoZSBh
YmlsaXR5IHRvIHJlb3B0aW1pemUgYSBjb2RlIGJsb2NrIGlmIHNwZWN1bGF0aW9uCisgICAgICAg
IGZhaWx1cmVzIGhhcHBlbiBmcmVxdWVudGx5LiA2JSBzcGVlZC11cCBvbiBLcmFrZW4sIDElIHNs
b3ctZG93bgorICAgICAgICBvbiBWOCwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTdHJvbmdQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09T
UkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAoSlNDOjpERkc6OmdldE9TUkVudHJ5RGF0
YUJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6RHVtbXlNYXJrSG9vazo6bWFyayk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcik6Cisg
ICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbik6CisgICAgICAg
IChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0
aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRKZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9S
ZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Qml0VmVjdG9yKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjp+Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0KToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ynl0ZUNvdW50KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjptYWtlSW5saW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6bnVtQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5l
Qml0czo6bnVtV29yZHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6
OmJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJbmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
Om91dE9mTGluZUJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGlu
ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIEhlYXAgY2xlYW51
cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNw
YWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsOCBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApAQCAtNDY0LDYg
KzQ2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0F0b21p
Y3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BVkxUcmVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tTdGFjay5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVIZWFwLmNwcCBcCiAg
ICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAgXAorICAgIGhlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgXAogICAgIGhlYXAvTWFya1N0YWNrLmNwcCBcCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE5NzQsNiArMTk3NCwxNCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmls
ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXExvY2FsLmgiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw2ICs2MzcsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgog
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQml0VmVjdG9yLmgiCisJCQk+CisJ
CTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdG1hcC5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQAogCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki87IH07CiAJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3
MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlz
b25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgy
RjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovOyB9OworCQkwRkQ4MkY0QjE0Mjgw
NkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3
RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyog
SlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNiw5IEBACiAJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAv
KiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50
cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI5MTQyNkNB
NUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MjEsNiArMTYyNyw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkYyODE0
MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovLAorCQkJCTBGRDgy
RjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovLAogCQkJCUE3
MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuaCAqLywKIAkJCQlBNzA0
NTZBRTE0MjdGQjAzMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKIAkJCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLApAQCAt
MTc5Nyw2ICsxODA1LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGNDkxNDI4
MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8s
CiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCkBAIC0yNDIzLDYgKzI0
MzIsOCBAQAogCQkJCUJDMjU3REU4MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8q
IEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0
IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkVGNTE0
MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDk3LDYgKzMxMDgsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJ
CQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjgsNyArMTQyOCwxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5
bWJvbFRhYmxlKHN5bVRhYikKICAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCisgICAg
LCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoMCkKKyAgICAsIG1fc3BlY3VsYXRpdmVGYWls
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIApAQCAtMTkzNSw2ICsxOTM4LDI3IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREYKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KHRoaXMpOwogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwo
dGhpcyk7CiB9CisKK3ZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25D
b2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcihnbG9iYWxEYXRh
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC0xOTc0LDggKzE5OTgsOCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgIHByaW50ZigiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSlu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMg
LyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzID49IDAuNzUKLSAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSA+PSAwLjUpCisgICAgaWYgKCghbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBu
dW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA+PSAwLjc1KQorICAgICAgICAmJiAoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgPj0gMC41KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIrKzsKQEAgLTIwMTQsNyArMjAzOCwxMiBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgIH0KICAgICBmcHJpbnRmKHN0ZGVyciwgIlNsb3dDYXNl
UHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZTbG93Q2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBTbG93Q2FzZVByb2Zp
bGUqIHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+
bV9jb3VudGVyKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTcGVjaWFsRmFzdENhc2VQ
cm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBSYXJlQ2Fz
ZVByb2ZpbGUqIHByb2ZpbGUgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJDb21wYWN0SklU
Q29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpA
QCAtMzMzLDYgKzMzNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIGFwcGVuZERGR09TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7CisgICAgICAgICAgICBlbnRyeS5tX2J5dGVj
b2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgICAgICAgICAgZW50cnkubV9tYWNoaW5lQ29k
ZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICAgICAgbV9kZmdPU1JFbnRyeS5h
cHBlbmQoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICZtX2RmZ09TUkVudHJ5Lmxhc3QoKTsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR09TUkVudHJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2RmZ09TUkVudHJ5LnNpemUoKTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5
RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2RmZ09TUkVudHJ5
W2ldOyB9CisgICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiaW5hcnlTZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6Omdl
dE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXg+KG1fZGZnT1NSRW50cnkuYmVnaW4oKSwgbV9kZmdP
U1JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTM2MCw5ICszNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgp
OyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7
IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAg
ICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY4NSwxMSArNzAzLDM3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQg
d2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCiAgICAgICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KICAgICAgICAgCisgICAgICAgIC8vIFdo
ZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBh
CisgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0
aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgor
ICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9
IDE4KTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Cisg
ICAgICAgICAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IDE4KQorICAgICAg
ICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAxODsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKLSAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhvZHMgZnJvbSBKSVQt
Z2VuZXJhdGVkIGNvZGUuCisgICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xMDAwOwor
ICAgICAgICAgICAgcmV0dXJuIC0xMDAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTUw
MDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKQpAQCAtNjk3LDEyICs3
NDEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gJm1fZXhlY3V0ZUNv
dW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZXhlY3V0ZUNvdW50ZXIpOyB9CisKKyAgICAgICAgaW50MzJfdCBleGVjdXRlQ291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOyB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
Zm9yY2UgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcwogICAg
ICAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBp
Y2FsbHkgbW9yZQogICAgICAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewot
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgICAgICBtX2V4ZWN1dGVD
b3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtNzI2LDYgKzc3NiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9u
bHkgYWZ0ZXIKKyAgICAgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNv
dW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0
aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KICAgICAgICAg
Ly8gc3VjY2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxs
cyBhcmUKQEAgLTc0NiwxOCArODAzLDcyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBp
biB0aGUgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKKyAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tz
IGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGVu
IHRvIHJlb3B0aW1pemUuIEl0J3MgaW50ZXJlc3RpbmcgdG8gbm90ZSB0aGF0IHRoZXNlCisgICAg
ICAgIC8vIGNvdW50ZXJzIG1heSBvdmVyZmxvdyB3aXRob3V0IGFueSBwcm90ZWN0aW9uLiBUaGUg
c3VjY2VzcworICAgICAgICAvLyBjb3VudGVyIHdpbGwgb3ZlcmZsb3cgYmVmb3JlIHRoZSBmYWls
IG9uZSBkb2VzLCBiZWN1YXNlIHRoZQorICAgICAgICAvLyBmYWlsIG9uZSBpcyB1c2VkIGFzIGEg
dHJpZ2dlciB0byByZW9wdGltaXplLiBTbyB0aGUgd29yc3QgY2FzZQorICAgICAgICAvLyBpcyB0
aGF0IHRoZSBzdWNjZXNzIGNvdW50ZXIgb3ZlcmZsb3dzIGFuZCB3ZSByZW9wdGltaXplIHdpdGhv
dXQKKyAgICAgICAgLy8gbmVlZGluZyB0by4gQnV0IHRoaXMgaXMgaGFybWxlc3MuIElmIGEgbWV0
aG9kIHJlYWxseSBkaWQKKyAgICAgICAgLy8gZXhlY3V0ZSAyXjMyIHRpbWVzIHRoZW4gY29tcGls
aW5nIGl0IGFnYWluIHByb2JhYmx5IHdvbid0IGh1cnQKKyAgICAgICAgLy8gYW55b25lLgorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcisrOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygp
IHsgcmV0dXJuIDY7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVy
ZXMgdGhhdCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KKyAgICAgICAgdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVuc2lnbmVkIGxhcmdlRmFp
bENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRT
dWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRp
dmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
Pj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAgICAgIH0KICAgICAgICAg
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIHNob3VsZE9wdGltaXpl
Tm93KCk7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50KCkgIT0gdGhpcyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAg
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKICAgICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygpOwpAQCAt
ODI3LDYgKzkzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworICAg
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fZGZnT1NSRW50cnk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTg1MSw3ICs5NjMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsK
IAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1f
c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKKyAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyOwogICAgICAgICB1aW50OF90IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
OworICAgICAgICB1aW50OF90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAKICAgICAg
ICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC05MDksNiArMTAyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05MzUsNiArMTA1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05NjIsNiArMTA3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChwcm9maWxlKTsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uID0gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgWyV1LCAldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFtAJXUsIGJjIyV1XSBw
cmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9uVG9T
dHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDkgQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIC8vICAgICAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwogICAgIC8v
ICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KICAgICAvLworICAgIC8vICAgICAoZCkg
RnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0
aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4g
cmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLwogICAgIC8vICAgICBUbyBl
bnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KICAgICAv
LyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKICAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4g
ZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgpAQCAtNDE1LDEx
ICs0MTgsNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAg
IC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0
aGUgY291bnRlciB3aWxsIG5ldmVyCiAgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CiAgICAgLy8gICAg
IHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGlj
aCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQg
KGIpLiBUaGlzIGhldXJpc3RpYyBtYXkgbmVlZCB0byBiZQotICAgIC8vICAgICByZXRob3VnaHQg
aW4gdGhlIGZ1dHVyZSwgcGFydGljdWxhcmx5IGlmIHdlIHN1cHBvcnQgcmVvcHRpbWl6aW5nIGNv
ZGUKLSAgICAvLyAgICAgd2l0aCBuZXcgdmFsdWUgcHJvZmlsZXMgZ2F0aGVyZWQgZnJvbSBjb2Rl
IHRoYXQgZGlkIE9TUiBleGl0LgorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkg
YW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8vICAgICBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KKyAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICAgbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgorICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vICAgICBjb3VudGVyIHRvIDA7IG90aGVy
d2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLgorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGFkZDMyKEltbTMy
KC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Cisg
ICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxv
d09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSks
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKTsK
KyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgc3RvcmUzMihJbW0z
MihDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKSksIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOworICAgIAorICAgIGZld0ZhaWxz
LmxpbmsodGhpcyk7CisgICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9y
ZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAKKyAgICBkb25lQWRqdXN0aW5nLmxp
bmsodGhpcyk7CiAgICAgCiAgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBi
eXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKQEAgLTQ4MSw2ICs1MTMsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFsIHJldHVy
biBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgogICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJldHVyblBD
KTsKKyAgICAKKyAgICBhZGRQdHIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhjb2RlQmxvY2so
KS0+YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7CiB9CiAKIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKQEAgLTQ5OCwxMCArNTMyLDYgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2ZSA9IHNwZWN1
bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3BlY3VsYXRpdmUs
IGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0jaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCi0gICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
Ci0jZW5kaWYKLSAgICAKICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogCiAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGV4Y2VwdGlvbiBj
aGVja3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw0NiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQogICAgIHsK
LSAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYmFzaWNCbG9jay5ieXRlY29kZUJl
Z2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjaWYgRU5B
QkxFKERGR19PU1JfRU5UUlkpCisgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxv
Y2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlm
ZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxhc3RM
aXZlTG9jYWwgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1lbnQgKyAxKTsKKyAgICAgICAgICAgIGVu
dHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUFyZ3VtZW50OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2V0KGkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVB
cmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUxvY2Fs
KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxv
Y2FsICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFz
dExpdmVMb2NhbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2Nh
bHNbaV0udmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZl
VmFyaWFibGVzLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7CisjZWxzZQorICAgICAgICBV
TlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CisjZW5kaWYKICAgICB9CiAKIHByaXZhdGU6CkBAIC0z
NTMsNyArMzkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9T
UiBlbnRyeXBvaW50cy4KICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOwotICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0
aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIs
IGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVCghY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPm51bWJlck9mREZHT1NSRW50
cmllcygpKTsKIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJPU1Ig
aW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLCBieXRlY29kZUluZGV4KTsKQEAgLTY2LDYgKzY3LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIAorICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5k
ZXgpOwogICAgIAogICAgIC8vIFRoZSBjb2RlIGJlbG93IGNoZWNrcyBpZiBpdCBpcyBzYWZlIHRv
IHBlcmZvcm0gT1NSIGVudHJ5LiBJdCBtYXkgZmluZAogICAgIC8vIHRoYXQgaXQgaXMgdW5zYWZl
IHRvIGRvIHNvLCBmb3IgYW55IG51bWJlciBvZiByZWFzb25zLCB3aGljaCBhcmUgZG9jdW1lbnRl
ZApAQCAtOTcsNyArMTAxLDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgcHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAo
IXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJl
ZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBl
bnRyeS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdl
dChpKQorICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUs
MTEgKzExMCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0
IGFuIE9TUiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVj
LT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkp
KSkgeworICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQog
ICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlz
ICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5k
ZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rp
b24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBt
YWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0aGUgbWFjaGlu
ZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29kZU1hcC4KLSAg
ICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQgd2UgZXhwZWN0
IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkgcmFyZWx5LCBh
bmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8vICAgIGZldywg
dGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBvbmx5IHJlYWwK
LSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFwIGlzIHRvIGF2
b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBkYXRhIHN0cnVj
dHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0gICAgLy8gICAg
bWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29k
ZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWduZWQgbWFjaGlu
ZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAg
d2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAgICAgICAgdW5z
aWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRNYWNo
aW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRlY29kZUluZGV4
LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVudEJ5dGVjb2Rl
SW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNvZGVPZmZzZXQg
PSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4g
dGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2RlT2Zmc2V0KTsK
KyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBlbnRyeS0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
ICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNzICVwLlxu
IiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5
X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiArMzYsMTggQEAg
Y2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
K3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1
bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lubGluZSB1bnNp
Z25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlE
YXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKK30KKwog
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICAgICAgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVkZSAiSmV0dGlz
b25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDIwIEBAIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYgKHNpemVv
ZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290
cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJv
b3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQor
ICAgICwgbV9ibG9ja3MoYmxvY2tzKQoreworfQorCitDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKK3sKKyAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQorICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOworfQorCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFjaXR5
ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKQEAgLTQ0LDggKzYwLDE2IEBA
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsK
IH0KIAotaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyKQorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgoraW5s
aW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRp
bnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKKyAgICBtYXJrSG9v
ay5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9j
azo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxv
Y2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKQEAgLTcwLDcgKzk0LDggQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKgogICAgIG1fcm9vdHNbbV9zaXplKytd
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+
Cit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7
CiAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihiZWdpbikpIDwgMHgxMDAwMDAwKTsKQEAgLTc5LDcgKzEwNCwxOCBAQCB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8g
c2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxs
b2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihiZWdpbik7
IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAgICAgICAgYWRkKCppdCwg
ZmlsdGVyKTsKKyAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29r
KTsKK30KKwordm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQpCit7CisgICAgRHVtbXlNYXJrSG9vayBkdW1teU1hcmtIb29rOworICAgIGdlbmVyaWNBZGRT
cGFuKGJlZ2luLCBlbmQsIGR1bW15TWFya0hvb2spOworfQorCit2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpl
dHRpc29uZWRDb2RlQmxvY2tzKQoreworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGpl
dHRpc29uZWRDb2RlQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTQ2VsbDsKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29k
ZUJsb2NrcyYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMo
KTsKQEAgLTQ5LDcgKzUxLDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBp
bmxpbmVDYXBhY2l0eSA9IDEyODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNh
cGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKICAgICAKLSAgICB2b2lkIGFkZCh2b2lk
KiwgVGlueUJsb29tRmlsdGVyKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAg
ICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29r
JiBtYXJrSG9vayk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAgICB2b2lk
IGdlbmVyaWNBZGRTcGFuKHZvaWQqLCB2b2lkKiBlbmQsIE1hcmtIb29rJiBtYXJrSG9vayk7Cisg
ICAgCiAgICAgdm9pZCBncm93KCk7CiAKICAgICBKU0NlbGwqKiBtX3Jvb3RzOwpAQCAtNTksMjAg
KzY2LDYgQEAgcHJpdmF0ZToKICAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNp
dHldOwogfTsKIAotaW5saW5lIENvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290cyhj
b25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQotICAgIDogbV9yb290cyhtX2lubGluZVJvb3Rz
KQotICAgICwgbV9zaXplKDApCi0gICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAg
ICwgbV9ibG9ja3MoYmxvY2tzKQotewotfQotCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6On5D
b25zZXJ2YXRpdmVSb290cygpCi17Ci0gICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykK
LSAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFj
aXR5ICogc2l6ZW9mKEpTQ2VsbCopKTsKLX0KLQogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVS
b290czo6c2l6ZSgpCiB7CiAgICAgcmV0dXJuIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDExIEBAIHZvaWQg
SGVhcDo6bWFya1Byb3RlY3RlZE9iamVjdHMoSGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNp
dG9yLnZpc2l0KCZpdC0+Zmlyc3QpOwogfQogCit2b2lkIEhlYXA6OmFkZEpldHRpc29uQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgbV9qZXR0aXNvbmVk
Q29kZUJsb2Nrcy5hZGRDb2RlQmxvY2soY29kZUJsb2NrKTsKK30KKwogdm9pZCBIZWFwOjpwdXNo
VGVtcFNvcnRWZWN0b3IoVmVjdG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCiB7CiAg
ICAgbV90ZW1wU29ydGluZ1ZlY3RvcnMuYXBwZW5kKHRlbXBWZWN0b3IpOwpAQCAtNDU2LDIwICs0
NjEsMjIgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVz
cyA9IENvbGxlY3Rpb247CiAKICAgICB2b2lkKiBkdW1teTsKLQorICAgIAogICAgIC8vIFdlIGdh
dGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNsZWFyaW5nIG1hcmsgYml0cyBiZWNhdXNl
IGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1c2VzIHRoZSBtYXJrIGJpdHMgdG8gZGV0
ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFsaWQuCiAgICAgQ29uc2VydmF0aXZlUm9v
dHMgbWFjaGluZVRocmVhZFJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKICAgICBtX21h
Y2hpbmVUaHJlYWRzLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKG1hY2hpbmVUaHJlYWRSb290cywg
JmR1bW15KTsKIAogICAgIENvbnNlcnZhdGl2ZVJvb3RzIHJlZ2lzdGVyRmlsZVJvb3RzKCZtX29i
amVjdFNwYWNlLmJsb2NrcygpKTsKLSAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRp
dmVSb290cyhyZWdpc3RlckZpbGVSb290cyk7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5j
bGVhck1hcmtzKCk7CisgICAgcmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
cmVnaXN0ZXJGaWxlUm9vdHMsIG1famV0dGlzb25lZENvZGVCbG9ja3MpOworICAgIG1famV0dGlz
b25lZENvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CiAKICAgICBjbGVhck1h
cmtzKCk7CiAKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAg
SGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKLQorICAgIAogICAgIHZp
c2l0b3IuYXBwZW5kKG1hY2hpbmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRvci5kcmFpbigpOwog
CkBAIC00OTMsNiArNTAwLDggQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogCiAgICAgbV9oYW5k
bGVTdGFjay52aXNpdChoZWFwUm9vdFZpc2l0b3IpOwogICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAg
ICAKKyAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLnRyYWNlQ29kZUJsb2Nrcyh2aXNpdG9yKTsK
IAogICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNlIHRoZWly
IG93bmVycyB1c2UgdGhlIHNldCBvZgogICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRlcm1pbmUg
cmVhY2hhYmlsaXR5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
OTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJBbGxvY2F0aW9uU3BhY2UuaCIKICNpbmNs
dWRlICJIYW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKKyNpbmNsdWRlICJK
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVk
ZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgpAQCAtOTgsNiAr
OTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7
CiAgICAgICAgIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3Rl
Y3QgY291bnQgZHJvcHMgdG8gMC4KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSmV0dGlzb25D
b2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+KTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSgp
OwogICAgICAgICBzaXplX3QgY2FwYWNpdHkoKTsKQEAgLTE5MSw2ICsxOTQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgU2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKICAgICAgICAgSGFu
ZGxlSGVhcCBtX2hhbmRsZUhlYXA7CiAgICAgICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7
CisgICAgICAgIEpldHRpc29uZWRDb2RlQmxvY2tzIG1famV0dGlzb25lZENvZGVCbG9ja3M7CiAg
ICAgICAgIAogICAgICAgICBib29sIG1faXNTYWZlVG9Db2xsZWN0OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVC
bG9ja3MuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENvZGVCbG9ja3Mo
KSB7IH0KKworSmV0dGlzb25lZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2NrcygpCit7
CisgICAgV1RGOjpkZWxldGVBbGxLZXlzKG1fbWFwKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6YWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7
CisgICAgQVNTRVJUKG1fbWFwLmZpbmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21hcC5lbmQoKSk7
CisgICAgCisgICAgbV9tYXAuYWRkKGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNlKTsKK30KKwor
dm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaE1hcDxD
b2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhh
c2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAg
IGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBp
dGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxzZTsKK30KKwor
dm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCkKK3sK
KyAgICBWZWN0b3I8Q29kZUJsb2NrKj4gdG9SZW1vdmU7CisgICAgCisgICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hN
YXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZv
ciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGlmICghaXRlci0+c2Vjb25kKQorICAgICAgICAg
ICAgdG9SZW1vdmUuYXBwZW5kKGl0ZXItPmZpcnN0KTsKKyAgICB9CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fbWFw
LnJlbW92ZSh0b1JlbW92ZVtpXSk7CisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKKyAgICB9
Cit9CisKK3ZvaWQgSmV0dGlzb25lZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2NrcyhTbG90Vmlz
aXRvciYgc2xvdFZpc2l0b3IpCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRl
cmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQor
ICAgICAgICBpdGVyLT5maXJzdC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEpldHRpc29uZWRDb2RlQmxvY2tzX2gKKyNkZWZpbmUgSmV0dGlzb25lZENvZGVC
bG9ja3NfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgSmV0dGlz
b25lZENvZGVCbG9ja3MgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyAvLyBPbmx5IG1h
bGxvYydkIGluIENvbnNlcnZhdGl2ZVJvb3RzCitwdWJsaWM6CisgICAgSmV0dGlzb25lZENvZGVC
bG9ja3MoKTsKKyAgICAKKyAgICB+SmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB2
b2lkIGFkZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOworICAgIAorICAgIHZvaWQg
Y2xlYXJNYXJrcygpOworICAgIAorICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxv
Y2spCisgICAgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNh
dXNlIHRob3NlIGFyZSB1c2VkIGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCisgICAgICAgIHVp
bnRwdHJfdCB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVDb2Rl
QmxvY2spOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2YgdGhv
c2UgbmFzdHkgY2FzZXMgaW4gb25lIGdvLgorICAgICAgICAvLyAwICsgMSA9IDEKKyAgICAgICAg
Ly8gLTEgKyAxID0gMAorICAgICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVD
b2RlQmxvY2spKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGl0ZXItPnNlY29uZCA9IHRydWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgdm9pZCB0cmFjZUNv
ZGVCbG9ja3MoU2xvdFZpc2l0b3ImKTsKKworcHJpdmF0ZToKKyAgICAvLyBJdCB3b3VsZCBiZSBn
cmVhdCB0byB1c2UgYW4gT3duUHRyPENvZGVCbG9jaz4gaGVyZSBidXQgdGhhdCB3b3VsZAorICAg
IC8vIGFsbW9zdCBjZXJ0YWlubHkgbm90IHdvcmsuCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBi
b29sPiBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSmV0dGlz
b25lZENvZGVCbG9ja3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvUmVnaXN0ZXJGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNiArNTUsMTEgQEAgdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2
ZVJvbwogICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSk7CiB9CiAKK3Zv
aWQgUmVnaXN0ZXJGaWxlOjpnYXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290
cyYgY29uc2VydmF0aXZlUm9vdHMsIEpldHRpc29uZWRDb2RlQmxvY2tzJiBqZXR0aXNvbmVkQ29k
ZUJsb2NrcykKK3sKKyAgICBjb25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGpl
dHRpc29uZWRDb2RlQmxvY2tzKTsKK30KKwogdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNl
c3NDYXBhY2l0eSgpCiB7CiAgICAgcHRyZGlmZl90IGRlbHRhID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jl
c2VydmF0aW9uLmJhc2UoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVS
b290czsKKyAgICBjbGFzcyBKZXR0aXNvbmVkQ29kZUJsb2NrczsKIAogICAgIGNsYXNzIFJlZ2lz
dGVyRmlsZSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZ2lzdGVyRmlsZSk7CkBA
IC02NCw2ICs2NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7
CiAgICAgICAgIAogICAgICAgICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJik7CisgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2Vy
dmF0aXZlUm9vdHMmLCBKZXR0aXNvbmVkQ29kZUJsb2NrcyYpOwogCiAgICAgICAgIFJlZ2lzdGVy
KiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZh
dGlvbi5iYXNlKCkpOyB9CiAgICAgICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBt
X2VuZDsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlz
aW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5MTQsNyArMTkxNCwyMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUt
PmNvZGVCbG9jaygpOwogICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFy
Z3NbMF0uaW50MzIoKTsKIAotICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVy
ZWQgb3B0aW1pemVfZnJvbV9sb29wIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6
YXRpb25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIs
IGNvZGVCbG9jay0+ZXhlY3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJl
dHJ5Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNl
bmRpZgorCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgewor
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiQ29uc2lkZXJpbmcg
bG9vcCBPU1IgaW50byAlcCglcCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxv
Y2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5z
cGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3Bl
Y3VsYXRpdmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5y
ZXBsYWNlbWVudCgpLT5zaG91bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgeworI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRp
bWl6YXRpb24gb2YgJXAoJXApIChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5y
ZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXpl
KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5v
dygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50Zigi
RGVsYXlpbmcgb3B0aW1pemF0aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZp
Y2llbnQgcHJvZmlsaW5nLlxuIiwgY29kZUJsb2NrKTsKQEAgLTE5NTIsNiArMTk2Nyw3IEBAIERF
RklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNlbmRpZgogCiAgICAgICAg
IGNvZGVCbG9jay0+b3B0aW1pemVTb29uKCk7CisgICAgICAgIG9wdGltaXplZENvZGVCbG9jay0+
Y291bnRTcGVjdWxhdGlvblN1Y2Nlc3MoKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJF
U1MoYWRkcmVzcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xOTYwLDYgKzE5NzYsMzAg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIHByaW50Zigi
T3B0aW1pemluZyAlcCBmcm9tIGxvb3Agc3VjY2VlZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJs
b2NrKTsKICNlbmRpZgogCisgICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3Vs
YXRpb24gZmFpbHVyZS4gSWYgdGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCisgICAgLy8gcmVvcHRp
bWl6ZS4KKyAgICBvcHRpbWl6ZWRDb2RlQmxvY2stPmNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCk7
CisgICAgCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVuY291bnRl
cmVkIGxvb3AgT1NSIGZhaWx1cmUgaW50byAlcCglcCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUu
XG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFj
ZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorCisgICAgLy8gV2Ug
YXJlIGEgbG90IG1vcmUgY29uc2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRp
b24gYWZ0ZXIgT1NSIGZhaWx1cmUgdGhhbgorICAgIC8vIGJlZm9yZSBpdC4gSWYgd2UgZW50ZXIg
dGhlIG9wdGltaXplX2Zyb21fbG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQgZnVsbCBvZiBmYWls
CisgICAgLy8gYWxyZWFkeSwgdGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0byByZW9wdGltaXpl
IGltbWVkaWF0ZWx5LiBCdXQgdGhpcyBjYXNlIGNvdmVycworICAgIC8vIHNvbWV0aGluZyBlbHNl
OiB0aGVyZSB3ZXJlbid0IG1hbnkgKG9yIGFueSkgc3BlY3VsYXRpb24gZmFpbHVyZXMgYmVmb3Jl
LCBidXQgd2UganVzdAorICAgIC8vIGZhaWxlZCB0byBlbnRlciB0aGUgc3BlY3VsYXRpdmUgY29k
ZSBiZWNhdXNlIHNvbWUgdmFyaWFibGUgaGFkIHRoZSB3cm9uZyB2YWx1ZSBvcgorICAgIC8vIGJl
Y2F1c2UgdGhlIE9TUiBjb2RlIGRlY2lkZWQgZm9yIGFueSBzcHVyaW91cyByZWFzb24gdGhhdCBp
dCBkaWQgbm90IHdhbnQgdG8gT1NSCisgICAgLy8gcmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmln
Z2VyIHJlb3B0aW1pemF0aW9uIG9ubHkgdXBvbiB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1s
b29wKQorICAgIC8vIHJlb3B0aW1pemF0aW9uIHRyaWdnZXIuCisgICAgaWYgKG9wdGltaXplZENv
ZGVCbG9jay0+c2hvdWxkUmVvcHRpbWl6ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKKyAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVw
KSAoaW4gbG9vcCBhZnRlciBPU1IgZmFpbCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSk7CisjZW5kaWYKKyAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIE9T
UiBmYWlsZWQgdGhpcyB0aW1lLCBidXQgaXQgbWlnaHQgc3VjY2VlZCBuZXh0IHRpbWUhIExldCB0
aGUgY29kZSBydW4gYSBiaXQKICAgICAvLyBsb25nZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgogICAg
IGNvZGVCbG9jay0+b3B0aW1pemVBZnRlcldhcm1VcCgpOwpAQCAtMTk3Miw4ICsyMDEyLDIzIEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBDYWxsRnJhbWUq
IGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKICAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5o
YXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKQorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisg
ICAgcHJpbnRmKCJFbnRlcmVkIG9wdGltaXplX2Zyb21fcmV0IHdpdGggZXhlY3V0ZUNvdW50ZXIg
PSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlD
b3VudGVyID0gJXVcbiIsIGNvZGVCbG9jay0+ZXhlY3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5
Q291bnRlcigpKTsKKyNlbmRpZgorCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVw
bGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50
ZigiUmV0dXJuaW5nIGZyb20gb2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxh
Y2VtZW50ICVwKCVwKSwgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRp
dmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNl
bWVudCgpLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0Vf
T1NSKQorICAgICAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVw
KCVwKSAoaW4gcmV0dXJuKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
KTsKKyNlbmRpZgorICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAg
CiAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE4IEBA
IERGRzo6SW50cmluc2ljIE5hdGl2ZUV4ZWN1dGFibGU6OmludHJpbnMKIH0KICNlbmRpZgogCisv
LyBVdGlsaXR5IG1ldGhvZCB1c2VkIGZvciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVCbG9jayhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIE93blB0cjxUPiYgY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJU
KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CisgICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0
dGlzb24gPSBjb2RlQmxvY2sucmVsZWFzZSgpOworICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2lu
dGVyX2Nhc3Q8VD4oY29kZUJsb2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOwor
ICAgIGNvZGVCbG9ja1RvSmV0dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICBnbG9i
YWxEYXRhLmhlYXAuYWRkSmV0dGlzb25Db2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2Rl
QmxvY2s+KGNvZGVCbG9ja1RvSmV0dGlzb24ucmVsZWFzZSgpKSk7Cit9CisKIGNvbnN0IENsYXNz
SW5mbyBTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4
ZWN1dGFibGVCYXNlOjpzX2luZm8sIDAsIDAgfTsKIAogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVj
dXRhYmxlOjpzX2luZm8gPSB7ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpz
X2luZm8sIDAsIDAgfTsKQEAgLTIxMSw2ICsyMjMsMTMgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRh
YmxlOjpjb21waWxlSW50ZXJuYQogICAgIHJldHVybiAwOwogfQogCit2b2lkIEV2YWxFeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQorewor
ICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jayk7CisgICAg
bV9qaXRDb2RlRm9yQ2FsbCA9IG1fZXZhbENvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFT
U0VSVCghbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBFdmFsRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOwpAQCAtMzMwLDYgKzM0OSwxMyBA
QCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgcmV0dXJuIDA7
CiB9CiAKK3ZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0
YSwgbV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9wcm9ncmFt
Q29kZUJsb2NrLT5nZXRKSVRDb2RlKCk7CisgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2spOworfQorCiB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygp
CiB7CiAjaWYgRU5BQkxFKEpJVCkKQEAgLTUzMyw2ICs1NTksMjAgQEAgSlNPYmplY3QqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCit2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2tGb3JDYWxsKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxs
LT5nZXRKSVRDb2RlKCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9j
b2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwordm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9
IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5nZXRKSVRDb2RlKCk7CisgICAgbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklU
Q29kZVdpdGhBcml0eUNoZWNrKCk7Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpcywgJnNfaW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU09iamVj
dCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAK
ICAgICAgICAgRXZhbENvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBA
IC0zOTIsNiArMzk0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBK
U09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRh
Jik7CiAKICAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAg
ICAgICB7CkBAIC00NzUsNiArNDc5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgU2Nv
cGVDaGFpbk5vZGUqLCBFeGVjU3RhdGUqIGNhbGxlZUFyZ3NFeGVjID0gMCk7CisgICAgICAgIAor
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7
CiAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAogICAgICAgICB7CkBA
IC00OTgsNiArNTA0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBK
U09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVG
b3JDb25zdHJ1Y3QoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZv
ckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgICAgIHsKQEAgLTUzOCw2ICs1NDYsMTYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVj
dChleGVjLCBzY29wZUNoYWluTm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2lu
ZCA9PSBDb2RlRm9yQ2FsbCkgCisgICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2Rl
Rm9yQ2FsbChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09
IENvZGVGb3JDYWxsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCaXRWZWN0b3JfaAorI2RlZmluZSBCaXRWZWN0b3Jf
aAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBpcyBhIHNwYWNlLWVmZmljaWVudCwg
cmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBjb21tb24gY2FzZSBpdAorLy8gb2Nj
dXBpZXMgb25lIHdvcmQsIGJ1dCBpZiBuZWNlc3NhcnksIGl0IHdpbGwgaW5mbGF0ZSB0aGlzIG9u
ZSB3b3JkIHRvIHBvaW50CisvLyB0byBhIHNpbmdsZSBjaHVuayBvZiBvdXQtb2YtbGluZSBhbGxv
Y2F0ZWQgc3RvcmFnZSB0byBzdG9yZSBhbiBhcmJpdHJhcnkgbnVtYmVyCisvLyBvZiBiaXRzLgor
Ly8KKy8vIC0gVGhlIGJpdHZlY3RvciBuZWVkcyB0byBiZSByZXNpemVkIG1hbnVhbGx5IChqdXN0
IGNhbGwgZW5zdXJlU2l6ZSgpKS4KKy8vCisvLyAtIFRoZSBiaXR2ZWN0b3IgcmVtZW1iZXJzIHRo
ZSBib3VuZCBvZiBob3cgbWFueSBiaXRzIGNhbiBiZSBzdG9yZWQsIGJ1dCB0aGlzCisvLyAgIG1h
eSBiZSBzbGlnaHRseSBncmVhdGVyIChieSBhcyBtdWNoIGFzIHNvbWUgcGxhdGZvcm0tc3BlY2lm
aWMgY29uc3RhbnQpCisvLyAgIHRoYW4gdGhlIGxhc3QgYXJndW1lbnQgcGFzc2VkIHRvIGVuc3Vy
ZVNpemUoKS4KKy8vCisvLyAtIEFjY2Vzc2VzIEFTU0VSVCB0aGF0IHlvdSBhcmUgd2l0aGluIGJv
dW5kcy4KKy8vCisvLyAtIEJpdHMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGluaXRpYWxpemVkIHRv
IHplcm8uCisvLworLy8gT24gdGhlIG90aGVyIGhhbmQsIHRoaXMgQml0VmVjdG9yIGNsYXNzIG1h
eSBub3QgYmUgdGhlIGZhc3Rlc3QgYXJvdW5kLCBzaW5jZQorLy8gaXQgZG9lcyBjb25kaXRpb25h
bHMgb24gZXZlcnkgZ2V0L3NldC9jbGVhci4gQnV0IGl0IGlzIGdyZWF0IGlmIHlvdSBuZWVkIHRv
CisvLyBqdWdnbGUgYSBsb3Qgb2YgdmFyaWFibGUtbGVuZ3RoIEJpdFZlY3RvcnMgYW5kIHlvdSdy
ZSB3b3JyaWVkIGFib3V0IHdhc3RpbmcKKy8vIHNwYWNlLgorCitjbGFzcyBCaXRWZWN0b3Igewor
cHVibGljOiAKKyAgICBCaXRWZWN0b3IoKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcihtYWtl
SW5saW5lQml0cygwKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIEJpdFZlY3Rvcihjb25zdCBC
aXRWZWN0b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0c09yUG9pbnRlcihtYWtlSW5saW5lQml0
cygwKSkKKyAgICB7CisgICAgICAgICgqdGhpcykgPSBvdGhlcjsKKyAgICB9CisgICAgCisgICAg
fkJpdFZlY3RvcigpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkp
OworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBCaXRWZWN0b3Im
IG90aGVyKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IG5ld0JpdHNPclBvaW50ZXI7CisgICAg
ICAgIGlmIChvdGhlci5pc0lubGluZSgpKQorICAgICAgICAgICAgbmV3Qml0c09yUG9pbnRlciA9
IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBPdXRP
ZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0T2ZMaW5lQml0czo6Y3JlYXRlKG90aGVy
LnNpemUoKSk7CisgICAgICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBv
dGhlci5iaXRzKCksIGJ5dGVDb3VudChvdGhlci5zaXplKCkpKTsKKyAgICAgICAgICAgIG5ld0Jp
dHNPclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obmV3T3V0T2ZMaW5lQml0
cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0lubGluZSgpKQorICAgICAgICAgICAgT3V0
T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgICAgICBtX2JpdHNPclBv
aW50ZXIgPSBuZXdCaXRzT3JQb2ludGVyOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQor
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYml0c09yUG9p
bnRlciA+PiBtYXhJbmxpbmVCaXRzKCkpCisgICAgICAgICAgICByZXR1cm4gbWF4SW5saW5lQml0
cygpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5udW1CaXRzKCk7CisgICAgfQor
CisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAgaWYg
KG51bUJpdHMgPD0gc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXNpemVP
dXRPZkxpbmUobnVtQml0cyk7CisgICAgfQorICAgIAorICAgIC8vIExpa2UgZW5zdXJlU2l6ZSgp
LCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZlY3Rvci4KKyAgICB2
b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cykKKyAgICB7CisgICAgICAgIGlmIChpc0lubGluZSgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKG51bUJpdHMgPD0g
bWF4SW5saW5lQml0cygpKSB7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzKiBteU91dE9mTGlu
ZUJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBt
YWtlSW5saW5lQml0cygqbXlPdXRPZkxpbmVCaXRzLT5iaXRzKCkpOworICAgICAgICAgICAgT3V0
T2ZMaW5lQml0czo6ZGVzdHJveShteU91dE9mTGluZUJpdHMpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXNpemVPdXRPZkxpbmUobnVtQml0cyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJBbGwoKQorICAgIHsKKyAgICAgICAgaWYgKGlz
SW5saW5lKCkpCisgICAgICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBtYWtlSW5saW5lQml0cygw
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnplcm8ob3V0T2ZMaW5lQml0cygpLT5iaXRz
KCksIGJ5dGVDb3VudChzaXplKCkpKTsKKyAgICB9CisKKyAgICBib29sIGdldChzaXplX3QgYml0
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8IHNpemUoKSk7CisgICAgICAgIHJl
dHVybiAhIShiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gJiAoc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNldChzaXplX3QgYml0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8
IHNpemUoKSk7CisgICAgICAgIGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRlcigpXSB8PSAoc3Rh
dGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoc2l6ZV90IGJpdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChiaXQgPCBzaXplKCkpOworICAgICAgICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50
ZXIoKV0gJj0gfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9p
bnRlcigpIC0gMSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGJpdCwgYm9v
bCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIHNldChiaXQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGVhcihiaXQpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVu
c2lnbmVkIG1heElubGluZUJpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHNJblBvaW50
ZXIoKSAtIDE7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgZnVuY3Rpb24gcmVsaWVzIG9uIGJp
dENvdW50IGJlaW5nIGEgbXVsdGlwbGUgb2YgYml0c0luUG9pbnRlcigpCisgICAgc3RhdGljIHNp
emVfdCBieXRlQ291bnQoc2l6ZV90IGJpdENvdW50KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
Yml0Q291bnQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICAgICAgcmV0dXJuIGJpdENv
dW50ID4+IDM7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZUlubGluZUJp
dHModWludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBBU1NFUlQoIShiaXRzICYgKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKSkpOworICAgICAgICByZXR1
cm4gYml0cyB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSk7
CisgICAgfQorICAgIAorICAgIGNsYXNzIE91dE9mTGluZUJpdHMgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVybiBtX251bUJpdHM7IH0KKyAgICAg
ICAgc2l6ZV90IG51bVdvcmRzKCkgY29uc3QgeyByZXR1cm4gKG1fbnVtQml0cyArIGJpdHNJblBv
aW50ZXIoKSAtIDEpID4+IGJpdHNJblBvaW50ZXIoKTsgfQorICAgICAgICB1aW50cHRyX3QqIGJp
dHMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsgfQor
ICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdCB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsgfQorICAgICAgICAKKyAgICAgICAg
c3RhdGljIE91dE9mTGluZUJpdHMqIGNyZWF0ZShzaXplX3QgbnVtQml0cykKKyAgICAgICAgewor
ICAgICAgICAgICAgbnVtQml0cyA9IChudW1CaXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgJiB+
Yml0c0luUG9pbnRlcigpOworICAgICAgICAgICAgcmV0dXJuIG5ldyAoZmFzdE1hbGxvYyhzaXpl
b2YoT3V0T2ZMaW5lQml0cykgKyAobnVtQml0cyA+PiBiaXRzSW5Qb2ludGVyKCkpKSkgT3V0T2ZM
aW5lQml0cyhudW1CaXRzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKQorICAgICAgICB7CisgICAg
ICAgICAgICBmYXN0RnJlZShvdXRPZkxpbmVCaXRzKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgT3V0T2ZMaW5lQml0cyhzaXplX3QgbnVtQml0cykKKyAgICAgICAgICAgIDog
bV9udW1CaXRzKG51bUJpdHMpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgc2l6ZV90IG1fbnVtQml0czsKKyAgICB9OworICAgIAorICAgIGJvb2wgaXNJbmxpbmUoKSBj
b25zdCB7IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPj4gbWF4SW5saW5lQml0cygpOyB9CisgICAg
CisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cygpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9pbnRlcik7
IH0KKyAgICBPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKCkgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQb2ludGVyKTsgfQorICAgIAorICAgIHZv
aWQgcmVzaXplT3V0T2ZMaW5lKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG51bUJpdHMgPiBtYXhJbmxpbmVCaXRzKCkpOworICAgICAgICBPdXRPZkxpbmVCaXRzKiBuZXdP
dXRPZkxpbmVCaXRzID0gT3V0T2ZMaW5lQml0czo6Y3JlYXRlKG51bUJpdHMpOworICAgICAgICBt
ZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBiaXRzKCksIGJ5dGVDb3VudChzdGQ6Om1p
bihzaXplKCksIG51bUJpdHMpKSk7CisgICAgICAgIGlmICghaXNJbmxpbmUoKSkKKyAgICAgICAg
ICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKKyAgICAgICAgbV9i
aXRzT3JQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld091dE9mTGluZUJp
dHMpOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QqIGJpdHMoKQorICAgIHsKKyAgICAgICAg
aWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gJm1fYml0c09yUG9pbnRlcjsKKyAg
ICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+Yml0cygpOworICAgIH0KKyAgICAKKyAgICBj
b25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5l
KCkpCisgICAgICAgICAgICByZXR1cm4gJm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJu
IG91dE9mTGluZUJpdHMoKS0+Yml0cygpOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QgbV9i
aXRzT3JQb2ludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qml0
VmVjdG9yOworCisjZW5kaWYgLy8gQml0VmVjdG9yX2gK
</data>
<flag name="commit-queue"
          id="105001"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108113</attachid>
            <date>2011-09-21 00:33:29 -0700</date>
            <delta_ts>2011-09-21 00:49:07 -0700</delta_ts>
            <desc>the patch - fix style, attempt to fix GTK</desc>
            <filename>recomp_patch_9.diff</filename>
            <type>text/plain</type>
            <size>71467</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAyIEBA
CisyMDExLTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBzdXBwb3J0IGNvbnRpbnVvdXMgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODMyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIHRoZSBh
YmlsaXR5IHRvIHJlb3B0aW1pemUgYSBjb2RlIGJsb2NrIGlmIHNwZWN1bGF0aW9uCisgICAgICAg
IGZhaWx1cmVzIGhhcHBlbiBmcmVxdWVudGx5LiA2JSBzcGVlZC11cCBvbiBLcmFrZW4sIDElIHNs
b3ctZG93bgorICAgICAgICBvbiBWOCwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTdHJvbmdQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09T
UkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAoSlNDOjpERkc6OmdldE9TUkVudHJ5RGF0
YUJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6RHVtbXlNYXJrSG9vazo6bWFyayk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcik6Cisg
ICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbik6CisgICAgICAg
IChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0
aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRKZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9S
ZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Qml0VmVjdG9yKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjp+Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0KToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ynl0ZUNvdW50KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjptYWtlSW5saW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6bnVtQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5l
Qml0czo6bnVtV29yZHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6
OmJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJbmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
Om91dE9mTGluZUJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGlu
ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIEhlYXAgY2xlYW51
cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNw
YWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsOCBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApAQCAtNDY0LDYg
KzQ2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0F0b21p
Y3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BVkxUcmVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tTdGFjay5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVIZWFwLmNwcCBcCiAg
ICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAgXAorICAgIGhlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgXAogICAgIGhlYXAvTWFya1N0YWNrLmNwcCBcCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE5NzQsNiArMTk3NCwxNCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmls
ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXExvY2FsLmgiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw2ICs2MzcsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgog
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQml0VmVjdG9yLmgiCisJCQk+CisJ
CTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdG1hcC5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQAogCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki87IH07CiAJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3
MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlz
b25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgy
RjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovOyB9OworCQkwRkQ4MkY0QjE0Mjgw
NkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3
RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyog
SlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNiw5IEBACiAJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAv
KiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50
cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI5MTQyNkNB
NUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MjEsNiArMTYyNyw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkYyODE0
MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovLAorCQkJCTBGRDgy
RjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovLAogCQkJCUE3
MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuaCAqLywKIAkJCQlBNzA0
NTZBRTE0MjdGQjAzMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKIAkJCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLApAQCAt
MTc5Nyw2ICsxODA1LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGNDkxNDI4
MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8s
CiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCkBAIC0yNDIzLDYgKzI0
MzIsOCBAQAogCQkJCUJDMjU3REU4MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8q
IEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0
IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkVGNTE0
MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDk3LDYgKzMxMDgsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJ
CQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjgsNyArMTQyOCwxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5
bWJvbFRhYmxlKHN5bVRhYikKICAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCisgICAg
LCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoMCkKKyAgICAsIG1fc3BlY3VsYXRpdmVGYWls
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIApAQCAtMTkzNSw2ICsxOTM4LDI3IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREYKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KHRoaXMpOwogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwo
dGhpcyk7CiB9CisKK3ZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25D
b2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcihnbG9iYWxEYXRh
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC0xOTc0LDggKzE5OTgsOCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgIHByaW50ZigiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSlu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMg
LyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzID49IDAuNzUKLSAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSA+PSAwLjUpCisgICAgaWYgKCghbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBu
dW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA+PSAwLjc1KQorICAgICAgICAmJiAoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgPj0gMC41KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIrKzsKQEAgLTIwMTQsNyArMjAzOCwxMiBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgIH0KICAgICBmcHJpbnRmKHN0ZGVyciwgIlNsb3dDYXNl
UHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZTbG93Q2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBTbG93Q2FzZVByb2Zp
bGUqIHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+
bV9jb3VudGVyKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTcGVjaWFsRmFzdENhc2VQ
cm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBSYXJlQ2Fz
ZVByb2ZpbGUqIHByb2ZpbGUgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJDb21wYWN0SklU
Q29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpA
QCAtMzMzLDYgKzMzNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIGFwcGVuZERGR09TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7CisgICAgICAgICAgICBlbnRyeS5tX2J5dGVj
b2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgICAgICAgICAgZW50cnkubV9tYWNoaW5lQ29k
ZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICAgICAgbV9kZmdPU1JFbnRyeS5h
cHBlbmQoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICZtX2RmZ09TUkVudHJ5Lmxhc3QoKTsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR09TUkVudHJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2RmZ09TUkVudHJ5LnNpemUoKTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5
RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2RmZ09TUkVudHJ5
W2ldOyB9CisgICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiaW5hcnlTZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6Omdl
dE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXg+KG1fZGZnT1NSRW50cnkuYmVnaW4oKSwgbV9kZmdP
U1JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTM2MCw5ICszNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgp
OyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7
IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAg
ICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY4NSwxMSArNzAzLDM3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQg
d2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCiAgICAgICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KICAgICAgICAgCisgICAgICAgIC8vIFdo
ZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBh
CisgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0
aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgor
ICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9
IDE4KTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Cisg
ICAgICAgICAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IDE4KQorICAgICAg
ICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAxODsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKLSAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhvZHMgZnJvbSBKSVQt
Z2VuZXJhdGVkIGNvZGUuCisgICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xMDAwOwor
ICAgICAgICAgICAgcmV0dXJuIC0xMDAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTUw
MDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKQpAQCAtNjk3LDEyICs3
NDEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gJm1fZXhlY3V0ZUNv
dW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZXhlY3V0ZUNvdW50ZXIpOyB9CisKKyAgICAgICAgaW50MzJfdCBleGVjdXRlQ291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOyB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
Zm9yY2UgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcwogICAg
ICAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBp
Y2FsbHkgbW9yZQogICAgICAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewot
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgICAgICBtX2V4ZWN1dGVD
b3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtNzI2LDYgKzc3NiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9u
bHkgYWZ0ZXIKKyAgICAgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNv
dW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0
aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KICAgICAgICAg
Ly8gc3VjY2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxs
cyBhcmUKQEAgLTc0NiwxOCArODAzLDcyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBp
biB0aGUgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKKyAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tz
IGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGVu
IHRvIHJlb3B0aW1pemUuIEl0J3MgaW50ZXJlc3RpbmcgdG8gbm90ZSB0aGF0IHRoZXNlCisgICAg
ICAgIC8vIGNvdW50ZXJzIG1heSBvdmVyZmxvdyB3aXRob3V0IGFueSBwcm90ZWN0aW9uLiBUaGUg
c3VjY2VzcworICAgICAgICAvLyBjb3VudGVyIHdpbGwgb3ZlcmZsb3cgYmVmb3JlIHRoZSBmYWls
IG9uZSBkb2VzLCBiZWN1YXNlIHRoZQorICAgICAgICAvLyBmYWlsIG9uZSBpcyB1c2VkIGFzIGEg
dHJpZ2dlciB0byByZW9wdGltaXplLiBTbyB0aGUgd29yc3QgY2FzZQorICAgICAgICAvLyBpcyB0
aGF0IHRoZSBzdWNjZXNzIGNvdW50ZXIgb3ZlcmZsb3dzIGFuZCB3ZSByZW9wdGltaXplIHdpdGhv
dXQKKyAgICAgICAgLy8gbmVlZGluZyB0by4gQnV0IHRoaXMgaXMgaGFybWxlc3MuIElmIGEgbWV0
aG9kIHJlYWxseSBkaWQKKyAgICAgICAgLy8gZXhlY3V0ZSAyXjMyIHRpbWVzIHRoZW4gY29tcGls
aW5nIGl0IGFnYWluIHByb2JhYmx5IHdvbid0IGh1cnQKKyAgICAgICAgLy8gYW55b25lLgorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcisrOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygp
IHsgcmV0dXJuIDY7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVy
ZXMgdGhhdCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KKyAgICAgICAgdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVuc2lnbmVkIGxhcmdlRmFp
bENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRT
dWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRp
dmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
Pj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAgICAgIH0KICAgICAgICAg
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIHNob3VsZE9wdGltaXpl
Tm93KCk7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50KCkgIT0gdGhpcyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAg
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKICAgICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygpOwpAQCAt
ODI3LDYgKzkzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworICAg
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fZGZnT1NSRW50cnk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTg1MSw3ICs5NjMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsK
IAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1f
c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKKyAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyOwogICAgICAgICB1aW50OF90IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
OworICAgICAgICB1aW50OF90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAKICAgICAg
ICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC05MDksNiArMTAyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05MzUsNiArMTA1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05NjIsNiArMTA3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChwcm9maWxlKTsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uID0gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgWyV1LCAldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFtAJXUsIGJjIyV1XSBw
cmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9uVG9T
dHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDkgQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIC8vICAgICAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwogICAgIC8v
ICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KICAgICAvLworICAgIC8vICAgICAoZCkg
RnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0
aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4g
cmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLwogICAgIC8vICAgICBUbyBl
bnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KICAgICAv
LyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKICAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4g
ZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgpAQCAtNDE1LDEx
ICs0MTgsNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAg
IC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0
aGUgY291bnRlciB3aWxsIG5ldmVyCiAgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CiAgICAgLy8gICAg
IHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGlj
aCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQg
KGIpLiBUaGlzIGhldXJpc3RpYyBtYXkgbmVlZCB0byBiZQotICAgIC8vICAgICByZXRob3VnaHQg
aW4gdGhlIGZ1dHVyZSwgcGFydGljdWxhcmx5IGlmIHdlIHN1cHBvcnQgcmVvcHRpbWl6aW5nIGNv
ZGUKLSAgICAvLyAgICAgd2l0aCBuZXcgdmFsdWUgcHJvZmlsZXMgZ2F0aGVyZWQgZnJvbSBjb2Rl
IHRoYXQgZGlkIE9TUiBleGl0LgorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkg
YW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8vICAgICBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KKyAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICAgbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgorICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vICAgICBjb3VudGVyIHRvIDA7IG90aGVy
d2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLgorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGFkZDMyKEltbTMy
KC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Cisg
ICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxv
d09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSks
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKTsK
KyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgc3RvcmUzMihJbW0z
MihDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKSksIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOworICAgIAorICAgIGZld0ZhaWxz
LmxpbmsodGhpcyk7CisgICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9y
ZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAKKyAgICBkb25lQWRqdXN0aW5nLmxp
bmsodGhpcyk7CiAgICAgCiAgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBi
eXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKQEAgLTQ4MSw2ICs1MTMsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFsIHJldHVy
biBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgogICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJldHVyblBD
KTsKKyAgICAKKyAgICBhZGRQdHIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhjb2RlQmxvY2so
KS0+YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7CiB9CiAKIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKQEAgLTQ5OCwxMCArNTMyLDYgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2ZSA9IHNwZWN1
bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3BlY3VsYXRpdmUs
IGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0jaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCi0gICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
Ci0jZW5kaWYKLSAgICAKICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogCiAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGV4Y2VwdGlvbiBj
aGVja3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw0NiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQogICAgIHsK
LSAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYmFzaWNCbG9jay5ieXRlY29kZUJl
Z2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjaWYgRU5B
QkxFKERGR19PU1JfRU5UUlkpCisgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxv
Y2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlm
ZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxhc3RM
aXZlTG9jYWwgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1lbnQgKyAxKTsKKyAgICAgICAgICAgIGVu
dHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUFyZ3VtZW50OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2V0KGkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVB
cmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUxvY2Fs
KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxv
Y2FsICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFz
dExpdmVMb2NhbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2Nh
bHNbaV0udmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZl
VmFyaWFibGVzLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7CisjZWxzZQorICAgICAgICBV
TlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CisjZW5kaWYKICAgICB9CiAKIHByaXZhdGU6CkBAIC0z
NTMsNyArMzkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9T
UiBlbnRyeXBvaW50cy4KICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOwotICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0
aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIs
IGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVCghY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPm51bWJlck9mREZHT1NSRW50
cmllcygpKTsKIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJPU1Ig
aW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLCBieXRlY29kZUluZGV4KTsKQEAgLTY2LDYgKzY3LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIAorICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5k
ZXgpOwogICAgIAogICAgIC8vIFRoZSBjb2RlIGJlbG93IGNoZWNrcyBpZiBpdCBpcyBzYWZlIHRv
IHBlcmZvcm0gT1NSIGVudHJ5LiBJdCBtYXkgZmluZAogICAgIC8vIHRoYXQgaXQgaXMgdW5zYWZl
IHRvIGRvIHNvLCBmb3IgYW55IG51bWJlciBvZiByZWFzb25zLCB3aGljaCBhcmUgZG9jdW1lbnRl
ZApAQCAtOTcsNyArMTAxLDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgcHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAo
IXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJl
ZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBl
bnRyeS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdl
dChpKQorICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUs
MTEgKzExMCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0
IGFuIE9TUiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVj
LT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkp
KSkgeworICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQog
ICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlz
ICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5k
ZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rp
b24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBt
YWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0aGUgbWFjaGlu
ZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29kZU1hcC4KLSAg
ICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQgd2UgZXhwZWN0
IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkgcmFyZWx5LCBh
bmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8vICAgIGZldywg
dGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBvbmx5IHJlYWwK
LSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFwIGlzIHRvIGF2
b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBkYXRhIHN0cnVj
dHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0gICAgLy8gICAg
bWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29k
ZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWduZWQgbWFjaGlu
ZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAg
d2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAgICAgICAgdW5z
aWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRNYWNo
aW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRlY29kZUluZGV4
LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVudEJ5dGVjb2Rl
SW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNvZGVPZmZzZXQg
PSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4g
dGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2RlT2Zmc2V0KTsK
KyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBlbnRyeS0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
ICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNzICVwLlxu
IiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5
X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiArMzYsMTggQEAg
Y2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
K3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1
bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lubGluZSB1bnNp
Z25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlE
YXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKK30KKwog
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICAgICAgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVkZSAiSmV0dGlz
b25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDIwIEBAIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYgKHNpemVv
ZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290
cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJv
b3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQor
ICAgICwgbV9ibG9ja3MoYmxvY2tzKQoreworfQorCitDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKK3sKKyAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQorICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOworfQorCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFjaXR5
ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKQEAgLTQ0LDggKzYwLDE2IEBA
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsK
IH0KIAotaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyKQorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgoraW5s
aW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRp
bnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKKyAgICBtYXJrSG9v
ay5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9j
azo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxv
Y2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKQEAgLTcwLDcgKzk0LDggQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKgogICAgIG1fcm9vdHNbbV9zaXplKytd
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+
Cit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7
CiAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihiZWdpbikpIDwgMHgxMDAwMDAwKTsKQEAgLTc5LDcgKzEwNCwxOCBAQCB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8g
c2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxs
b2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihiZWdpbik7
IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAgICAgICAgYWRkKCppdCwg
ZmlsdGVyKTsKKyAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29r
KTsKK30KKwordm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQpCit7CisgICAgRHVtbXlNYXJrSG9vayBkdW1teU1hcmtIb29rOworICAgIGdlbmVyaWNBZGRT
cGFuKGJlZ2luLCBlbmQsIGR1bW15TWFya0hvb2spOworfQorCit2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpl
dHRpc29uZWRDb2RlQmxvY2tzKQoreworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGpl
dHRpc29uZWRDb2RlQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTQ2VsbDsKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29k
ZUJsb2NrcyYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMo
KTsKQEAgLTQ5LDcgKzUxLDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBp
bmxpbmVDYXBhY2l0eSA9IDEyODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNh
cGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKICAgICAKLSAgICB2b2lkIGFkZCh2b2lk
KiwgVGlueUJsb29tRmlsdGVyKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAg
ICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29r
Jik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAgICB2b2lkIGdlbmVyaWNB
ZGRTcGFuKHZvaWQqLCB2b2lkKiBlbmQsIE1hcmtIb29rJik7CisgICAgCiAgICAgdm9pZCBncm93
KCk7CiAKICAgICBKU0NlbGwqKiBtX3Jvb3RzOwpAQCAtNTksMjAgKzY2LDYgQEAgcHJpdmF0ZToK
ICAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotaW5saW5l
IENvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1Nl
dCogYmxvY2tzKQotICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQotICAgICwgbV9zaXplKDAp
Ci0gICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAgICwgbV9ibG9ja3MoYmxvY2tz
KQotewotfQotCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygp
Ci17Ci0gICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0
b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2Vs
bCopKTsKLX0KLQogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiB7CiAg
ICAgcmV0dXJuIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDExIEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3Rl
ZE9iamVjdHMoSGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmly
c3QpOwogfQogCit2b2lkIEhlYXA6OmFkZEpldHRpc29uQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5hZGRDb2Rl
QmxvY2soY29kZUJsb2NrKTsKK30KKwogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0b3IoVmVj
dG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCiB7CiAgICAgbV90ZW1wU29ydGluZ1Zl
Y3RvcnMuYXBwZW5kKHRlbXBWZWN0b3IpOwpAQCAtNDU2LDIwICs0NjEsMjIgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoKQogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CiAK
ICAgICB2b2lkKiBkdW1teTsKLQorICAgIAogICAgIC8vIFdlIGdhdGhlciBjb25zZXJ2YXRpdmUg
cm9vdHMgYmVmb3JlIGNsZWFyaW5nIG1hcmsgYml0cyBiZWNhdXNlIGNvbnNlcnZhdGl2ZQogICAg
IC8vIGdhdGhlcmluZyB1c2VzIHRoZSBtYXJrIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBy
ZWZlcmVuY2UgaXMgdmFsaWQuCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRocmVhZFJv
b3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKG1hY2hpbmVUaHJlYWRSb290cywgJmR1bW15KTsKIAogICAgIENv
bnNlcnZhdGl2ZVJvb3RzIHJlZ2lzdGVyRmlsZVJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2Nrcygp
KTsKLSAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZp
bGVSb290cyk7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAg
cmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMs
IG1famV0dGlzb25lZENvZGVCbG9ja3MpOworICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuZGVs
ZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CiAKICAgICBjbGVhck1hcmtzKCk7CiAKICAgICBTbG90
VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhl
YXBSb290VmlzaXRvcih2aXNpdG9yKTsKLQorICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKG1hY2hp
bmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRvci5kcmFpbigpOwogCkBAIC00OTMsNiArNTAwLDgg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogCiAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFw
Um9vdFZpc2l0b3IpOwogICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAKKyAgICBtX2pldHRpc29u
ZWRDb2RlQmxvY2tzLnRyYWNlQ29kZUJsb2Nrcyh2aXNpdG9yKTsKIAogICAgIC8vIFdlYWsgaGFu
ZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNlIHRoZWlyIG93bmVycyB1c2UgdGhlIHNl
dCBvZgogICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKICNpbmNsdWRlICJBbGxvY2F0aW9uU3BhY2UuaCIKICNpbmNsdWRlICJIYW5kbGVIZWFwLmgi
CiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQu
aCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgpAQCAtOTgsNiArOTksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7CiAgICAgICAgIGJvb2wgdW5w
cm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8g
MC4KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSmV0dGlzb25Db2RlQmxvY2soUGFzc093blB0
cjxDb2RlQmxvY2s+KTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBzaXplX3Qg
Y2FwYWNpdHkoKTsKQEAgLTE5MSw2ICsxOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
U2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhl
YXA7CiAgICAgICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CisgICAgICAgIEpldHRpc29u
ZWRDb2RlQmxvY2tzIG1famV0dGlzb25lZENvZGVCbG9ja3M7CiAgICAgICAgIAogICAgICAgICBi
b29sIG1faXNTYWZlVG9Db2xsZWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitKZXR0
aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENvZGVCbG9ja3MoKSB7IH0KKworSmV0dGlzb25l
ZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2NrcygpCit7CisgICAgV1RGOjpkZWxldGVB
bGxLZXlzKG1fbWFwKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6YWRkQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKG1fbWFw
LmZpbmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21hcC5lbmQoKSk7CisgICAgCisgICAgbV9tYXAu
YWRkKGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNlKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6
aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
Ym9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2Rl
QmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVy
KQorICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxzZTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJs
b2NrKj4gdG9SZW1vdmU7CisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRl
cmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgIGlmICghaXRlci0+c2Vjb25kKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5k
KGl0ZXItPmZpcnN0KTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRvUmVtb3ZlLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fbWFwLnJlbW92ZSh0b1JlbW92ZVtp
XSk7CisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKKyAgICB9Cit9CisKK3ZvaWQgSmV0dGlz
b25lZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21h
cC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9
IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0
b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5maXJz
dC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpldHRpc29u
ZWRDb2RlQmxvY2tzX2gKKyNkZWZpbmUgSmV0dGlzb25lZENvZGVCbG9ja3NfaAorCisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxv
Y2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgSmV0dGlzb25lZENvZGVCbG9ja3Mgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyAvLyBPbmx5IG1hbGxvYydkIGluIENvbnNlcnZh
dGl2ZVJvb3RzCitwdWJsaWM6CisgICAgSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAg
ICB+SmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB2b2lkIGFkZENvZGVCbG9jayhQ
YXNzT3duUHRyPENvZGVCbG9jaz4pOworICAgIAorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAg
IAorICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCisgICAgeworICAgICAg
ICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2Vk
IGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVDb2RlQmxvY2spOworICAgICAgICAK
KyAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2YgdGhvc2UgbmFzdHkgY2FzZXMgaW4g
b25lIGdvLgorICAgICAgICAvLyAwICsgMSA9IDEKKyAgICAgICAgLy8gLTEgKyAxID0gMAorICAg
ICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gbV9tYXAu
ZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVDb2RlQmxvY2spKTsKKyAgICAg
ICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGl0ZXItPnNlY29uZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlVW5tYXJr
ZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgdm9pZCB0cmFjZUNvZGVCbG9ja3MoU2xvdFZpc2l0
b3ImKTsKKworcHJpdmF0ZToKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCB0byB1c2UgYW4gT3du
UHRyPENvZGVCbG9jaz4gaGVyZSBidXQgdGhhdCB3b3VsZAorICAgIC8vIGFsbW9zdCBjZXJ0YWlu
bHkgbm90IHdvcmsuCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPiBtX21hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSmV0dGlzb25lZENvZGVCbG9ja3NfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0
ZXJGaWxlLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEg
QEAgdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvbwogICAgIGNvbnNlcnZh
dGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSk7CiB9CiAKK3ZvaWQgUmVnaXN0ZXJGaWxlOjpn
YXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9v
dHMsIEpldHRpc29uZWRDb2RlQmxvY2tzJiBqZXR0aXNvbmVkQ29kZUJsb2NrcykKK3sKKyAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGpldHRpc29uZWRDb2RlQmxvY2tz
KTsKK30KKwogdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCiB7CiAg
ICAgcHRyZGlmZl90IGRlbHRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fY29tbWl0
RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
RmlsZS5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKKyAgICBjbGFzcyBK
ZXR0aXNvbmVkQ29kZUJsb2NrczsKIAogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZSB7CiAgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZ2lzdGVyRmlsZSk7CkBAIC02NCw2ICs2NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CisgICAg
ICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKZXR0
aXNvbmVkQ29kZUJsb2NrcyYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9CiAg
ICAgICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MTQsNyArMTkxNCwyMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9t
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAot
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9s
b29wIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIg
PSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jay0+ZXhlY3V0
ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2Rl
QmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRpZgorCisgICAgaWYgKGNv
ZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiQ29uc2lkZXJpbmcgbG9vcCBPU1IgaW50byAlcCgl
cCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91
bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXAp
IChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNl
bmRpZgorICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0
aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxu
IiwgY29kZUJsb2NrKTsKQEAgLTE5NTIsNiArMTk2Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplX2Zyb20KICNlbmRpZgogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1p
emVTb29uKCk7CisgICAgICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvblN1
Y2Nlc3MoKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVzcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xOTYwLDYgKzE5NzYsMzAgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9t
IGxvb3Agc3VjY2VlZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKICNlbmRpZgogCisg
ICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYg
dGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCisgICAgLy8gcmVvcHRpbWl6ZS4KKyAgICBvcHRpbWl6
ZWRDb2RlQmxvY2stPmNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCk7CisgICAgCisjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVuY291bnRlcmVkIGxvb3AgT1NSIGZhaWx1
cmUgaW50byAlcCglcCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRp
dmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorCisgICAgLy8gV2UgYXJlIGEgbG90IG1vcmUgY29u
c2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZhaWx1
cmUgdGhhbgorICAgIC8vIGJlZm9yZSBpdC4gSWYgd2UgZW50ZXIgdGhlIG9wdGltaXplX2Zyb21f
bG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQgZnVsbCBvZiBmYWlsCisgICAgLy8gYWxyZWFkeSwg
dGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0byByZW9wdGltaXplIGltbWVkaWF0ZWx5LiBCdXQg
dGhpcyBjYXNlIGNvdmVycworICAgIC8vIHNvbWV0aGluZyBlbHNlOiB0aGVyZSB3ZXJlbid0IG1h
bnkgKG9yIGFueSkgc3BlY3VsYXRpb24gZmFpbHVyZXMgYmVmb3JlLCBidXQgd2UganVzdAorICAg
IC8vIGZhaWxlZCB0byBlbnRlciB0aGUgc3BlY3VsYXRpdmUgY29kZSBiZWNhdXNlIHNvbWUgdmFy
aWFibGUgaGFkIHRoZSB3cm9uZyB2YWx1ZSBvcgorICAgIC8vIGJlY2F1c2UgdGhlIE9TUiBjb2Rl
IGRlY2lkZWQgZm9yIGFueSBzcHVyaW91cyByZWFzb24gdGhhdCBpdCBkaWQgbm90IHdhbnQgdG8g
T1NSCisgICAgLy8gcmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9u
IG9ubHkgdXBvbiB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1sb29wKQorICAgIC8vIHJlb3B0
aW1pemF0aW9uIHRyaWdnZXIuCisgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVv
cHRpbWl6ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJp
bnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBP
U1IgZmFpbCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5k
aWYKKyAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIE9TUiBmYWlsZWQgdGhpcyB0aW1l
LCBidXQgaXQgbWlnaHQgc3VjY2VlZCBuZXh0IHRpbWUhIExldCB0aGUgY29kZSBydW4gYSBiaXQK
ICAgICAvLyBsb25nZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgogICAgIGNvZGVCbG9jay0+b3B0aW1p
emVBZnRlcldhcm1VcCgpOwpAQCAtMTk3Miw4ICsyMDEyLDIzIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKICAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKQorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVk
IG9wdGltaXplX2Zyb21fcmV0IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNv
ZGVCbG9jay0+ZXhlY3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRp
ZgorCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIGZyb20g
b2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0
aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9w
dGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAg
cHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gcmV0dXJuKS5c
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgaWYgKCFjb2RlQmxv
Y2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE4IEBAIERGRzo6SW50cmluc2ljIE5h
dGl2ZUV4ZWN1dGFibGU6OmludHJpbnMKIH0KICNlbmRpZgogCisvLyBVdGlsaXR5IG1ldGhvZCB1
c2VkIGZvciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE93
blB0cjxUPiYgY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUo
KSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CisgICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2su
cmVsZWFzZSgpOworICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJs
b2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgIGNvZGVCbG9ja1RvSmV0
dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICBnbG9iYWxEYXRhLmhlYXAuYWRkSmV0
dGlzb25Db2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1Rv
SmV0dGlzb24ucmVsZWFzZSgpKSk7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRh
YmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2lu
Zm8sIDAsIDAgfTsKIAogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7
ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAgfTsKQEAg
LTIxMSw2ICsyMjMsMTMgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJu
YQogICAgIHJldHVybiAwOwogfQogCit2b2lkIEV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGlt
aXplZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJs
b2NrKGdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fZXZhbENvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXMsICZzX2luZm8pOwpAQCAtMzMwLDYgKzM0OSwxMyBAQCBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJs
b2NrKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRD
b2RlKCk7CisgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQor
CiB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiB7CiAjaWYgRU5BQkxFKEpJ
VCkKQEAgLTUzMyw2ICs1NTksMjAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7Cisg
ICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlKCk7Cisg
ICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5n
ZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5nZXRKSVRDb2RlKCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNr
KCk7Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNf
aW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9pZCBq
ZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgRXZhbENvZGVC
bG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zOTIsNiArMzk0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC00NzUsNiAr
NDc5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjID0gMCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBp
c0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAogICAgICAgICB7CkBAIC00OTgsNiArNTA0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9i
YWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0
CiAgICAgICAgIHsKQEAgLTUzOCw2ICs1NDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWlu
Tm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkg
CisgICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChnbG9iYWxEYXRh
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZv
ckNvbnN0cnVjdChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCaXRWZWN0b3JfaAorI2RlZmluZSBCaXRWZWN0b3JfaAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaXMgYSBzcGFj
ZS1lZmZpY2llbnQsIHJlc2l6ZWFibGUgYml0dmVjdG9yIGNsYXNzLiBJbiB0aGUgY29tbW9uIGNh
c2UgaXQKKy8vIG9jY3VwaWVzIG9uZSB3b3JkLCBidXQgaWYgbmVjZXNzYXJ5LCBpdCB3aWxsIGlu
ZmxhdGUgdGhpcyBvbmUgd29yZCB0byBwb2ludAorLy8gdG8gYSBzaW5nbGUgY2h1bmsgb2Ygb3V0
LW9mLWxpbmUgYWxsb2NhdGVkIHN0b3JhZ2UgdG8gc3RvcmUgYW4gYXJiaXRyYXJ5IG51bWJlcgor
Ly8gb2YgYml0cy4KKy8vCisvLyAtIFRoZSBiaXR2ZWN0b3IgbmVlZHMgdG8gYmUgcmVzaXplZCBt
YW51YWxseSAoanVzdCBjYWxsIGVuc3VyZVNpemUoKSkuCisvLworLy8gLSBUaGUgYml0dmVjdG9y
IHJlbWVtYmVycyB0aGUgYm91bmQgb2YgaG93IG1hbnkgYml0cyBjYW4gYmUgc3RvcmVkLCBidXQg
dGhpcworLy8gICBtYXkgYmUgc2xpZ2h0bHkgZ3JlYXRlciAoYnkgYXMgbXVjaCBhcyBzb21lIHBs
YXRmb3JtLXNwZWNpZmljIGNvbnN0YW50KQorLy8gICB0aGFuIHRoZSBsYXN0IGFyZ3VtZW50IHBh
c3NlZCB0byBlbnN1cmVTaXplKCkuCisvLworLy8gLSBBY2Nlc3NlcyBBU1NFUlQgdGhhdCB5b3Ug
YXJlIHdpdGhpbiBib3VuZHMuCisvLworLy8gLSBCaXRzIGFyZSBub3QgYXV0b21hdGljYWxseSBp
bml0aWFsaXplZCB0byB6ZXJvLgorLy8KKy8vIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIEJpdFZl
Y3RvciBjbGFzcyBtYXkgbm90IGJlIHRoZSBmYXN0ZXN0IGFyb3VuZCwgc2luY2UKKy8vIGl0IGRv
ZXMgY29uZGl0aW9uYWxzIG9uIGV2ZXJ5IGdldC9zZXQvY2xlYXIuIEJ1dCBpdCBpcyBncmVhdCBp
ZiB5b3UgbmVlZCB0bworLy8ganVnZ2xlIGEgbG90IG9mIHZhcmlhYmxlLWxlbmd0aCBCaXRWZWN0
b3JzIGFuZCB5b3UncmUgd29ycmllZCBhYm91dCB3YXN0aW5nCisvLyBzcGFjZS4KKworY2xhc3Mg
Qml0VmVjdG9yIHsKK3B1YmxpYzogCisgICAgQml0VmVjdG9yKCkKKyAgICAgICAgOiBtX2JpdHNP
clBvaW50ZXIobWFrZUlubGluZUJpdHMoMCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBCaXRW
ZWN0b3IoY29uc3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICAgICAgOiBtX2JpdHNPclBvaW50ZXIo
bWFrZUlubGluZUJpdHMoMCkpCisgICAgeworICAgICAgICAoKnRoaXMpID0gb3RoZXI7CisgICAg
fQorICAgIAorICAgIH5CaXRWZWN0b3IoKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0
T2ZMaW5lQml0cygpKTsKKyAgICB9CisgICAgCisgICAgQml0VmVjdG9yJiBvcGVyYXRvcj0oY29u
c3QgQml0VmVjdG9yJiBvdGhlcikKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBuZXdCaXRzT3JQ
b2ludGVyOworICAgICAgICBpZiAob3RoZXIuaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIG5ld0Jp
dHNPclBvaW50ZXIgPSBvdGhlci5tX2JpdHNPclBvaW50ZXI7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgT3V0T2ZMaW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6
OmNyZWF0ZShvdGhlci5zaXplKCkpOworICAgICAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJp
dHMtPmJpdHMoKSwgb3RoZXIuYml0cygpLCBieXRlQ291bnQob3RoZXIuc2l6ZSgpKSk7CisgICAg
ICAgICAgICBuZXdCaXRzT3JQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5l
d091dE9mTGluZUJpdHMpOworICAgICAgICB9CisgICAgICAgIGlmICghaXNJbmxpbmUoKSkKKyAg
ICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5lQml0cygpKTsKKyAgICAg
ICAgbV9iaXRzT3JQb2ludGVyID0gbmV3Qml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuICp0
aGlzOworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX2JpdHNPclBvaW50ZXIgPj4gbWF4SW5saW5lQml0cygpKQorICAgICAgICAgICAgcmV0dXJu
IG1heElubGluZUJpdHMoKTsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+bnVtQml0
cygpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU2l6ZShzaXplX3QgbnVtQml0cykKKyAgICB7
CisgICAgICAgIGlmIChudW1CaXRzIDw9IHNpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmVzaXplT3V0T2ZMaW5lKG51bUJpdHMpOworICAgIH0KKyAgICAKKyAgICAvLyBMaWtl
IGVuc3VyZVNpemUoKSwgYnV0IHN1cHBvcnRzIHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBiaXR2
ZWN0b3IuCisgICAgdm9pZCByZXNpemUoc2l6ZV90IG51bUJpdHMpCisgICAgeworICAgICAgICBp
ZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlm
IChudW1CaXRzIDw9IG1heElubGluZUJpdHMoKSkgeworICAgICAgICAgICAgT3V0T2ZMaW5lQml0
cyogbXlPdXRPZkxpbmVCaXRzID0gb3V0T2ZMaW5lQml0cygpOworICAgICAgICAgICAgbV9iaXRz
T3JQb2ludGVyID0gbWFrZUlubGluZUJpdHMoKm15T3V0T2ZMaW5lQml0cy0+Yml0cygpKTsKKyAg
ICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kobXlPdXRPZkxpbmVCaXRzKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzaXplT3V0T2ZM
aW5lKG51bUJpdHMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyQWxsKCkKKyAgICB7Cisg
ICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gbWFr
ZUlubGluZUJpdHMoMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ6ZXJvKG91dE9mTGlu
ZUJpdHMoKS0+Yml0cygpLCBieXRlQ291bnQoc2l6ZSgpKSk7CisgICAgfQorCisgICAgYm9vbCBn
ZXQoc2l6ZV90IGJpdCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXQgPCBzaXplKCkp
OworICAgICAgICByZXR1cm4gISEoYml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldICYgKHN0
YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGJpdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChiaXQgPCBzaXplKCkpOworICAgICAgICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50
ZXIoKV0gfD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2lu
dGVyKCkgLSAxKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKHNpemVfdCBiaXQpCisg
ICAgeworICAgICAgICBBU1NFUlQoYml0IDwgc2l6ZSgpKTsKKyAgICAgICAgYml0cygpW2JpdCA+
PiBiaXRzSW5Qb2ludGVyKCldICY9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0
ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNp
emVfdCBiaXQsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpCisgICAgICAg
ICAgICBzZXQoYml0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xlYXIoYml0KTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhJbmxpbmVCaXRzKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXRzSW5Qb2ludGVyKCkgLSAxOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IHJlbGllcyBvbiBiaXRDb3VudCBiZWluZyBhIG11bHRpcGxlIG9mIGJpdHNJblBvaW50ZXIoKQor
ICAgIHN0YXRpYyBzaXplX3QgYnl0ZUNvdW50KHNpemVfdCBiaXRDb3VudCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghKGJpdENvdW50ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgICAg
IHJldHVybiBiaXRDb3VudCA+PiAzOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludHB0cl90
IG1ha2VJbmxpbmVCaXRzKHVpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEo
Yml0cyAmIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkpKTsK
KyAgICAgICAgcmV0dXJuIGJpdHMgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJ
bmxpbmVCaXRzKCkpOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBPdXRPZkxpbmVCaXRzIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1C
aXRzOyB9CisgICAgICAgIHNpemVfdCBudW1Xb3JkcygpIGNvbnN0IHsgcmV0dXJuIChtX251bUJp
dHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAxKSA+PiBiaXRzSW5Qb2ludGVyKCk7IH0KKyAgICAgICAg
dWludHB0cl90KiBiaXRzKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPih0
aGlzICsgMSk7IH0KKyAgICAgICAgY29uc3QgdWludHB0cl90KiBiaXRzKCkgY29uc3QgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KKyAgICAg
ICAgCisgICAgICAgIHN0YXRpYyBPdXRPZkxpbmVCaXRzKiBjcmVhdGUoc2l6ZV90IG51bUJpdHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG51bUJpdHMgPSAobnVtQml0cyArIGJpdHNJblBvaW50
ZXIoKSAtIDEpICYgfmJpdHNJblBvaW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGZh
c3RNYWxsb2Moc2l6ZW9mKE91dE9mTGluZUJpdHMpICsgKG51bUJpdHMgPj4gYml0c0luUG9pbnRl
cigpKSkpIE91dE9mTGluZUJpdHMobnVtQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cykKKyAg
ICAgICAgeworICAgICAgICAgICAgZmFzdEZyZWUob3V0T2ZMaW5lQml0cyk7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIE91dE9mTGluZUJpdHMoc2l6ZV90IG51bUJpdHMpCisg
ICAgICAgICAgICA6IG1fbnVtQml0cyhudW1CaXRzKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHNpemVfdCBtX251bUJpdHM7CisgICAgfTsKKyAgICAKKyAgICBib29s
IGlzSW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzT3JQb2ludGVyID4+IG1heElubGluZUJp
dHMoKTsgfQorICAgIAorICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSBj
b25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IE91dE9mTGluZUJpdHMqPihtX2Jp
dHNPclBvaW50ZXIpOyB9CisgICAgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cygpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8T3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9pbnRlcik7IH0K
KyAgICAKKyAgICB2b2lkIHJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChudW1CaXRzID4gbWF4SW5saW5lQml0cygpKTsKKyAgICAgICAgT3V0T2ZM
aW5lQml0cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShudW1CaXRz
KTsKKyAgICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgYml0cygpLCBieXRl
Q291bnQoc3RkOjptaW4oc2l6ZSgpLCBudW1CaXRzKSkpOworICAgICAgICBpZiAoIWlzSW5saW5l
KCkpCisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7
CisgICAgICAgIG1fYml0c09yUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihu
ZXdPdXRPZkxpbmVCaXRzKTsKKyAgICB9CisgICAgCisgICAgdWludHB0cl90KiBiaXRzKCkKKyAg
ICB7CisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuICZtX2JpdHNP
clBvaW50ZXI7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICB9
CisgICAgCisgICAgY29uc3QgdWludHB0cl90KiBiaXRzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuICZtX2JpdHNPclBvaW50ZXI7Cisg
ICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICB9CisgICAgCisgICAg
dWludHB0cl90IG1fYml0c09yUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OkJpdFZlY3RvcjsKKworI2VuZGlmIC8vIEJpdFZlY3Rvcl9oCg==
</data>
<flag name="commit-queue"
          id="105003"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108116</attachid>
            <date>2011-09-21 00:49:07 -0700</date>
            <delta_ts>2011-09-21 00:54:51 -0700</delta_ts>
            <desc>the patch - another GTK attempt</desc>
            <filename>recomp_patch_10.diff</filename>
            <type>text/plain</type>
            <size>71534</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAyIEBA
CisyMDExLTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBzdXBwb3J0IGNvbnRpbnVvdXMgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODMyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIHRoZSBh
YmlsaXR5IHRvIHJlb3B0aW1pemUgYSBjb2RlIGJsb2NrIGlmIHNwZWN1bGF0aW9uCisgICAgICAg
IGZhaWx1cmVzIGhhcHBlbiBmcmVxdWVudGx5LiA2JSBzcGVlZC11cCBvbiBLcmFrZW4sIDElIHNs
b3ctZG93bgorICAgICAgICBvbiBWOCwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTdHJvbmdQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09T
UkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAoSlNDOjpERkc6OmdldE9TUkVudHJ5RGF0
YUJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6RHVtbXlNYXJrSG9vazo6bWFyayk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcik6Cisg
ICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbik6CisgICAgICAg
IChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0
aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRKZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9S
ZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Qml0VmVjdG9yKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjp+Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0KToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ynl0ZUNvdW50KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjptYWtlSW5saW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6bnVtQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5l
Qml0czo6bnVtV29yZHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6
OmJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJbmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
Om91dE9mTGluZUJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGlu
ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIEhlYXAgY2xlYW51
cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNw
YWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsOCBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApAQCAtNDY0LDYg
KzQ2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0F0b21p
Y3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BVkxUcmVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tTdGFjay5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVIZWFwLmNwcCBcCiAg
ICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAgXAorICAgIGhlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgXAogICAgIGhlYXAvTWFya1N0YWNrLmNwcCBcCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE5NzQsNiArMTk3NCwxNCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmls
ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXExvY2FsLmgiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw2ICs2MzcsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgog
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQml0VmVjdG9yLmgiCisJCQk+CisJ
CTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdG1hcC5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQAogCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki87IH07CiAJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3
MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlz
b25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgy
RjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovOyB9OworCQkwRkQ4MkY0QjE0Mjgw
NkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3
RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyog
SlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNiw5IEBACiAJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAv
KiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50
cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI5MTQyNkNB
NUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MjEsNiArMTYyNyw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkYyODE0
MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovLAorCQkJCTBGRDgy
RjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovLAogCQkJCUE3
MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuaCAqLywKIAkJCQlBNzA0
NTZBRTE0MjdGQjAzMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKIAkJCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLApAQCAt
MTc5Nyw2ICsxODA1LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGNDkxNDI4
MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8s
CiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCkBAIC0yNDIzLDYgKzI0
MzIsOCBAQAogCQkJCUJDMjU3REU4MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8q
IEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0
IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkVGNTE0
MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDk3LDYgKzMxMDgsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJ
CQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjgsNyArMTQyOCwxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5
bWJvbFRhYmxlKHN5bVRhYikKICAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCisgICAg
LCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoMCkKKyAgICAsIG1fc3BlY3VsYXRpdmVGYWls
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIApAQCAtMTkzNSw2ICsxOTM4LDI3IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREYKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KHRoaXMpOwogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwo
dGhpcyk7CiB9CisKK3ZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25D
b2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcihnbG9iYWxEYXRh
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC0xOTc0LDggKzE5OTgsOCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgIHByaW50ZigiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSlu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMg
LyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzID49IDAuNzUKLSAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSA+PSAwLjUpCisgICAgaWYgKCghbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBu
dW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA+PSAwLjc1KQorICAgICAgICAmJiAoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgPj0gMC41KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIrKzsKQEAgLTIwMTQsNyArMjAzOCwxMiBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgIH0KICAgICBmcHJpbnRmKHN0ZGVyciwgIlNsb3dDYXNl
UHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZTbG93Q2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBTbG93Q2FzZVByb2Zp
bGUqIHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+
bV9jb3VudGVyKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTcGVjaWFsRmFzdENhc2VQ
cm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBSYXJlQ2Fz
ZVByb2ZpbGUqIHByb2ZpbGUgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJDb21wYWN0SklU
Q29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpA
QCAtMzMzLDYgKzMzNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIGFwcGVuZERGR09TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7CisgICAgICAgICAgICBlbnRyeS5tX2J5dGVj
b2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgICAgICAgICAgZW50cnkubV9tYWNoaW5lQ29k
ZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICAgICAgbV9kZmdPU1JFbnRyeS5h
cHBlbmQoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICZtX2RmZ09TUkVudHJ5Lmxhc3QoKTsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR09TUkVudHJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2RmZ09TUkVudHJ5LnNpemUoKTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5
RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2RmZ09TUkVudHJ5
W2ldOyB9CisgICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiaW5hcnlTZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6Omdl
dE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXg+KG1fZGZnT1NSRW50cnkuYmVnaW4oKSwgbV9kZmdP
U1JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTM2MCw5ICszNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgp
OyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7
IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAg
ICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY4NSwxMSArNzAzLDM3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQg
d2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCiAgICAgICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KICAgICAgICAgCisgICAgICAgIC8vIFdo
ZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBh
CisgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0
aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgor
ICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9
IDE4KTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Cisg
ICAgICAgICAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IDE4KQorICAgICAg
ICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAxODsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKLSAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhvZHMgZnJvbSBKSVQt
Z2VuZXJhdGVkIGNvZGUuCisgICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xMDAwOwor
ICAgICAgICAgICAgcmV0dXJuIC0xMDAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTUw
MDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKQpAQCAtNjk3LDEyICs3
NDEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gJm1fZXhlY3V0ZUNv
dW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZXhlY3V0ZUNvdW50ZXIpOyB9CisKKyAgICAgICAgaW50MzJfdCBleGVjdXRlQ291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOyB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
Zm9yY2UgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcwogICAg
ICAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBp
Y2FsbHkgbW9yZQogICAgICAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewot
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgICAgICBtX2V4ZWN1dGVD
b3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtNzI2LDYgKzc3NiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9u
bHkgYWZ0ZXIKKyAgICAgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNv
dW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0
aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KICAgICAgICAg
Ly8gc3VjY2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxs
cyBhcmUKQEAgLTc0NiwxOCArODAzLDcyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBp
biB0aGUgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKKyAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tz
IGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGVu
IHRvIHJlb3B0aW1pemUuIEl0J3MgaW50ZXJlc3RpbmcgdG8gbm90ZSB0aGF0IHRoZXNlCisgICAg
ICAgIC8vIGNvdW50ZXJzIG1heSBvdmVyZmxvdyB3aXRob3V0IGFueSBwcm90ZWN0aW9uLiBUaGUg
c3VjY2VzcworICAgICAgICAvLyBjb3VudGVyIHdpbGwgb3ZlcmZsb3cgYmVmb3JlIHRoZSBmYWls
IG9uZSBkb2VzLCBiZWN1YXNlIHRoZQorICAgICAgICAvLyBmYWlsIG9uZSBpcyB1c2VkIGFzIGEg
dHJpZ2dlciB0byByZW9wdGltaXplLiBTbyB0aGUgd29yc3QgY2FzZQorICAgICAgICAvLyBpcyB0
aGF0IHRoZSBzdWNjZXNzIGNvdW50ZXIgb3ZlcmZsb3dzIGFuZCB3ZSByZW9wdGltaXplIHdpdGhv
dXQKKyAgICAgICAgLy8gbmVlZGluZyB0by4gQnV0IHRoaXMgaXMgaGFybWxlc3MuIElmIGEgbWV0
aG9kIHJlYWxseSBkaWQKKyAgICAgICAgLy8gZXhlY3V0ZSAyXjMyIHRpbWVzIHRoZW4gY29tcGls
aW5nIGl0IGFnYWluIHByb2JhYmx5IHdvbid0IGh1cnQKKyAgICAgICAgLy8gYW55b25lLgorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcisrOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygp
IHsgcmV0dXJuIDY7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVy
ZXMgdGhhdCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KKyAgICAgICAgdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVuc2lnbmVkIGxhcmdlRmFp
bENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRT
dWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRp
dmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
Pj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAgICAgIH0KICAgICAgICAg
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIHNob3VsZE9wdGltaXpl
Tm93KCk7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50KCkgIT0gdGhpcyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAg
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKICAgICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygpOwpAQCAt
ODI3LDYgKzkzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworICAg
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fZGZnT1NSRW50cnk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTg1MSw3ICs5NjMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsK
IAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1f
c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKKyAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyOwogICAgICAgICB1aW50OF90IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
OworICAgICAgICB1aW50OF90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAKICAgICAg
ICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC05MDksNiArMTAyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05MzUsNiArMTA1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05NjIsNiArMTA3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChwcm9maWxlKTsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uID0gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgWyV1LCAldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFtAJXUsIGJjIyV1XSBw
cmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9uVG9T
dHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDkgQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIC8vICAgICAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwogICAgIC8v
ICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KICAgICAvLworICAgIC8vICAgICAoZCkg
RnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0
aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4g
cmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLwogICAgIC8vICAgICBUbyBl
bnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KICAgICAv
LyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKICAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4g
ZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgpAQCAtNDE1LDEx
ICs0MTgsNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAg
IC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0
aGUgY291bnRlciB3aWxsIG5ldmVyCiAgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CiAgICAgLy8gICAg
IHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGlj
aCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQg
KGIpLiBUaGlzIGhldXJpc3RpYyBtYXkgbmVlZCB0byBiZQotICAgIC8vICAgICByZXRob3VnaHQg
aW4gdGhlIGZ1dHVyZSwgcGFydGljdWxhcmx5IGlmIHdlIHN1cHBvcnQgcmVvcHRpbWl6aW5nIGNv
ZGUKLSAgICAvLyAgICAgd2l0aCBuZXcgdmFsdWUgcHJvZmlsZXMgZ2F0aGVyZWQgZnJvbSBjb2Rl
IHRoYXQgZGlkIE9TUiBleGl0LgorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkg
YW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8vICAgICBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KKyAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICAgbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgorICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vICAgICBjb3VudGVyIHRvIDA7IG90aGVy
d2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLgorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGFkZDMyKEltbTMy
KC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Cisg
ICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxv
d09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSks
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKTsK
KyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgc3RvcmUzMihJbW0z
MihDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKSksIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOworICAgIAorICAgIGZld0ZhaWxz
LmxpbmsodGhpcyk7CisgICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9y
ZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAKKyAgICBkb25lQWRqdXN0aW5nLmxp
bmsodGhpcyk7CiAgICAgCiAgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBi
eXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKQEAgLTQ4MSw2ICs1MTMsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFsIHJldHVy
biBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgogICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJldHVyblBD
KTsKKyAgICAKKyAgICBhZGRQdHIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhjb2RlQmxvY2so
KS0+YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7CiB9CiAKIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKQEAgLTQ5OCwxMCArNTMyLDYgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2ZSA9IHNwZWN1
bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3BlY3VsYXRpdmUs
IGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0jaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCi0gICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
Ci0jZW5kaWYKLSAgICAKICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogCiAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGV4Y2VwdGlvbiBj
aGVja3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw0NiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQogICAgIHsK
LSAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYmFzaWNCbG9jay5ieXRlY29kZUJl
Z2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjaWYgRU5B
QkxFKERGR19PU1JfRU5UUlkpCisgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxv
Y2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlm
ZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxhc3RM
aXZlTG9jYWwgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1lbnQgKyAxKTsKKyAgICAgICAgICAgIGVu
dHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUFyZ3VtZW50OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2V0KGkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVB
cmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUxvY2Fs
KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxv
Y2FsICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFz
dExpdmVMb2NhbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2Nh
bHNbaV0udmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZl
VmFyaWFibGVzLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7CisjZWxzZQorICAgICAgICBV
TlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CisjZW5kaWYKICAgICB9CiAKIHByaXZhdGU6CkBAIC0z
NTMsNyArMzkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9T
UiBlbnRyeXBvaW50cy4KICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOwotICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0
aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIs
IGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVCghY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPm51bWJlck9mREZHT1NSRW50
cmllcygpKTsKIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJPU1Ig
aW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLCBieXRlY29kZUluZGV4KTsKQEAgLTY2LDYgKzY3LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIAorICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5k
ZXgpOwogICAgIAogICAgIC8vIFRoZSBjb2RlIGJlbG93IGNoZWNrcyBpZiBpdCBpcyBzYWZlIHRv
IHBlcmZvcm0gT1NSIGVudHJ5LiBJdCBtYXkgZmluZAogICAgIC8vIHRoYXQgaXQgaXMgdW5zYWZl
IHRvIGRvIHNvLCBmb3IgYW55IG51bWJlciBvZiByZWFzb25zLCB3aGljaCBhcmUgZG9jdW1lbnRl
ZApAQCAtOTcsNyArMTAxLDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgcHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAo
IXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJl
ZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBl
bnRyeS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdl
dChpKQorICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUs
MTEgKzExMCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0
IGFuIE9TUiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVj
LT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkp
KSkgeworICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQog
ICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlz
ICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5k
ZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rp
b24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBt
YWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0aGUgbWFjaGlu
ZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29kZU1hcC4KLSAg
ICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQgd2UgZXhwZWN0
IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkgcmFyZWx5LCBh
bmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8vICAgIGZldywg
dGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBvbmx5IHJlYWwK
LSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFwIGlzIHRvIGF2
b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBkYXRhIHN0cnVj
dHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0gICAgLy8gICAg
bWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29k
ZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWduZWQgbWFjaGlu
ZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAg
d2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAgICAgICAgdW5z
aWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRNYWNo
aW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRlY29kZUluZGV4
LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVudEJ5dGVjb2Rl
SW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNvZGVPZmZzZXQg
PSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4g
dGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2RlT2Zmc2V0KTsK
KyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBlbnRyeS0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
ICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNzICVwLlxu
IiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5
X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiArMzYsMTggQEAg
Y2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
K3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1
bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lubGluZSB1bnNp
Z25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlE
YXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKK30KKwog
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICAgICAgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVkZSAiSmV0dGlz
b25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDIwIEBAIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYgKHNpemVv
ZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290
cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJv
b3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQor
ICAgICwgbV9ibG9ja3MoYmxvY2tzKQoreworfQorCitDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKK3sKKyAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQorICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOworfQorCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFjaXR5
ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKQEAgLTQ0LDggKzYwLDE2IEBA
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsK
IH0KIAotaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyKQorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgoraW5s
aW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRp
bnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKKyAgICBtYXJrSG9v
ay5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9j
azo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxv
Y2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKQEAgLTcwLDcgKzk0LDggQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKgogICAgIG1fcm9vdHNbbV9zaXplKytd
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+
Cit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7
CiAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihiZWdpbikpIDwgMHgxMDAwMDAwKTsKQEAgLTc5LDcgKzEwNCwxOCBAQCB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8g
c2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxs
b2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihiZWdpbik7
IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAgICAgICAgYWRkKCppdCwg
ZmlsdGVyKTsKKyAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29r
KTsKK30KKwordm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQpCit7CisgICAgRHVtbXlNYXJrSG9vayBkdW1teU1hcmtIb29rOworICAgIGdlbmVyaWNBZGRT
cGFuKGJlZ2luLCBlbmQsIGR1bW15TWFya0hvb2spOworfQorCit2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpl
dHRpc29uZWRDb2RlQmxvY2tzKQoreworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGpl
dHRpc29uZWRDb2RlQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTQ2VsbDsKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29k
ZUJsb2NrcyYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMo
KTsKQEAgLTQ5LDcgKzUxLDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBp
bmxpbmVDYXBhY2l0eSA9IDEyODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNh
cGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKICAgICAKLSAgICB2b2lkIGFkZCh2b2lk
KiwgVGlueUJsb29tRmlsdGVyKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAg
ICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29r
Jik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAgICB2b2lkIGdlbmVyaWNB
ZGRTcGFuKHZvaWQqLCB2b2lkKiBlbmQsIE1hcmtIb29rJik7CisgICAgCiAgICAgdm9pZCBncm93
KCk7CiAKICAgICBKU0NlbGwqKiBtX3Jvb3RzOwpAQCAtNTksMjAgKzY2LDYgQEAgcHJpdmF0ZToK
ICAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotaW5saW5l
IENvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1Nl
dCogYmxvY2tzKQotICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQotICAgICwgbV9zaXplKDAp
Ci0gICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAgICwgbV9ibG9ja3MoYmxvY2tz
KQotewotfQotCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygp
Ci17Ci0gICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0
b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2Vs
bCopKTsKLX0KLQogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiB7CiAg
ICAgcmV0dXJuIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDExIEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3Rl
ZE9iamVjdHMoSGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmly
c3QpOwogfQogCit2b2lkIEhlYXA6OmFkZEpldHRpc29uQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5hZGRDb2Rl
QmxvY2soY29kZUJsb2NrKTsKK30KKwogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0b3IoVmVj
dG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCiB7CiAgICAgbV90ZW1wU29ydGluZ1Zl
Y3RvcnMuYXBwZW5kKHRlbXBWZWN0b3IpOwpAQCAtNDU2LDIwICs0NjEsMjIgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoKQogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CiAK
ICAgICB2b2lkKiBkdW1teTsKLQorICAgIAogICAgIC8vIFdlIGdhdGhlciBjb25zZXJ2YXRpdmUg
cm9vdHMgYmVmb3JlIGNsZWFyaW5nIG1hcmsgYml0cyBiZWNhdXNlIGNvbnNlcnZhdGl2ZQogICAg
IC8vIGdhdGhlcmluZyB1c2VzIHRoZSBtYXJrIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBy
ZWZlcmVuY2UgaXMgdmFsaWQuCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRocmVhZFJv
b3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKG1hY2hpbmVUaHJlYWRSb290cywgJmR1bW15KTsKIAogICAgIENv
bnNlcnZhdGl2ZVJvb3RzIHJlZ2lzdGVyRmlsZVJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2Nrcygp
KTsKLSAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZp
bGVSb290cyk7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAg
cmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMs
IG1famV0dGlzb25lZENvZGVCbG9ja3MpOworICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuZGVs
ZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CiAKICAgICBjbGVhck1hcmtzKCk7CiAKICAgICBTbG90
VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhl
YXBSb290VmlzaXRvcih2aXNpdG9yKTsKLQorICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKG1hY2hp
bmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRvci5kcmFpbigpOwogCkBAIC00OTMsNiArNTAwLDgg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogCiAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFw
Um9vdFZpc2l0b3IpOwogICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAKKyAgICBtX2pldHRpc29u
ZWRDb2RlQmxvY2tzLnRyYWNlQ29kZUJsb2Nrcyh2aXNpdG9yKTsKIAogICAgIC8vIFdlYWsgaGFu
ZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNlIHRoZWlyIG93bmVycyB1c2UgdGhlIHNl
dCBvZgogICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKICNpbmNsdWRlICJBbGxvY2F0aW9uU3BhY2UuaCIKICNpbmNsdWRlICJIYW5kbGVIZWFwLmgi
CiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQu
aCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgpAQCAtOTgsNiArOTksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7CiAgICAgICAgIGJvb2wgdW5w
cm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8g
MC4KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSmV0dGlzb25Db2RlQmxvY2soUGFzc093blB0
cjxDb2RlQmxvY2s+KTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBzaXplX3Qg
Y2FwYWNpdHkoKTsKQEAgLTE5MSw2ICsxOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
U2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhl
YXA7CiAgICAgICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CisgICAgICAgIEpldHRpc29u
ZWRDb2RlQmxvY2tzIG1famV0dGlzb25lZENvZGVCbG9ja3M7CiAgICAgICAgIAogICAgICAgICBi
b29sIG1faXNTYWZlVG9Db2xsZWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitKZXR0
aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENvZGVCbG9ja3MoKSB7IH0KKworSmV0dGlzb25l
ZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2NrcygpCit7CisgICAgV1RGOjpkZWxldGVB
bGxLZXlzKG1fbWFwKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6YWRkQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKG1fbWFw
LmZpbmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21hcC5lbmQoKSk7CisgICAgCisgICAgbV9tYXAu
YWRkKGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNlKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6
aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
Ym9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2Rl
QmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVy
KQorICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxzZTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJs
b2NrKj4gdG9SZW1vdmU7CisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRl
cmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgIGlmICghaXRlci0+c2Vjb25kKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5k
KGl0ZXItPmZpcnN0KTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRvUmVtb3ZlLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fbWFwLnJlbW92ZSh0b1JlbW92ZVtp
XSk7CisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKKyAgICB9Cit9CisKK3ZvaWQgSmV0dGlz
b25lZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21h
cC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9
IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0
b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5maXJz
dC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpldHRpc29u
ZWRDb2RlQmxvY2tzX2gKKyNkZWZpbmUgSmV0dGlzb25lZENvZGVCbG9ja3NfaAorCisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxv
Y2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgSmV0dGlzb25lZENvZGVCbG9ja3Mgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyAvLyBPbmx5IG1hbGxvYydkIGluIENvbnNlcnZh
dGl2ZVJvb3RzCitwdWJsaWM6CisgICAgSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAg
ICB+SmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB2b2lkIGFkZENvZGVCbG9jayhQ
YXNzT3duUHRyPENvZGVCbG9jaz4pOworICAgIAorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAg
IAorICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCisgICAgeworICAgICAg
ICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2Vk
IGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVDb2RlQmxvY2spOworICAgICAgICAK
KyAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2YgdGhvc2UgbmFzdHkgY2FzZXMgaW4g
b25lIGdvLgorICAgICAgICAvLyAwICsgMSA9IDEKKyAgICAgICAgLy8gLTEgKyAxID0gMAorICAg
ICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gbV9tYXAu
ZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVDb2RlQmxvY2spKTsKKyAgICAg
ICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGl0ZXItPnNlY29uZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlVW5tYXJr
ZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgdm9pZCB0cmFjZUNvZGVCbG9ja3MoU2xvdFZpc2l0
b3ImKTsKKworcHJpdmF0ZToKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCB0byB1c2UgYW4gT3du
UHRyPENvZGVCbG9jaz4gaGVyZSBidXQgdGhhdCB3b3VsZAorICAgIC8vIGFsbW9zdCBjZXJ0YWlu
bHkgbm90IHdvcmsuCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPiBtX21hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSmV0dGlzb25lZENvZGVCbG9ja3NfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0
ZXJGaWxlLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEg
QEAgdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvbwogICAgIGNvbnNlcnZh
dGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSk7CiB9CiAKK3ZvaWQgUmVnaXN0ZXJGaWxlOjpn
YXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9v
dHMsIEpldHRpc29uZWRDb2RlQmxvY2tzJiBqZXR0aXNvbmVkQ29kZUJsb2NrcykKK3sKKyAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGpldHRpc29uZWRDb2RlQmxvY2tz
KTsKK30KKwogdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCiB7CiAg
ICAgcHRyZGlmZl90IGRlbHRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fY29tbWl0
RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
RmlsZS5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKKyAgICBjbGFzcyBK
ZXR0aXNvbmVkQ29kZUJsb2NrczsKIAogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZSB7CiAgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZ2lzdGVyRmlsZSk7CkBAIC02NCw2ICs2NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CisgICAg
ICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKZXR0
aXNvbmVkQ29kZUJsb2NrcyYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9CiAg
ICAgICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MTQsNyArMTkxNCwyMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9t
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAot
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9s
b29wIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIg
PSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jay0+ZXhlY3V0
ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2Rl
QmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRpZgorCisgICAgaWYgKGNv
ZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiQ29uc2lkZXJpbmcgbG9vcCBPU1IgaW50byAlcCgl
cCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91
bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXAp
IChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNl
bmRpZgorICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0
aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxu
IiwgY29kZUJsb2NrKTsKQEAgLTE5NTIsNiArMTk2Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplX2Zyb20KICNlbmRpZgogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1p
emVTb29uKCk7CisgICAgICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvblN1
Y2Nlc3MoKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVzcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xOTYwLDYgKzE5NzYsMzAgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9t
IGxvb3Agc3VjY2VlZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKICNlbmRpZgogCisg
ICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYg
dGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCisgICAgLy8gcmVvcHRpbWl6ZS4KKyAgICBvcHRpbWl6
ZWRDb2RlQmxvY2stPmNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCk7CisgICAgCisjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVuY291bnRlcmVkIGxvb3AgT1NSIGZhaWx1
cmUgaW50byAlcCglcCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRp
dmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorCisgICAgLy8gV2UgYXJlIGEgbG90IG1vcmUgY29u
c2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZhaWx1
cmUgdGhhbgorICAgIC8vIGJlZm9yZSBpdC4gSWYgd2UgZW50ZXIgdGhlIG9wdGltaXplX2Zyb21f
bG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQgZnVsbCBvZiBmYWlsCisgICAgLy8gYWxyZWFkeSwg
dGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0byByZW9wdGltaXplIGltbWVkaWF0ZWx5LiBCdXQg
dGhpcyBjYXNlIGNvdmVycworICAgIC8vIHNvbWV0aGluZyBlbHNlOiB0aGVyZSB3ZXJlbid0IG1h
bnkgKG9yIGFueSkgc3BlY3VsYXRpb24gZmFpbHVyZXMgYmVmb3JlLCBidXQgd2UganVzdAorICAg
IC8vIGZhaWxlZCB0byBlbnRlciB0aGUgc3BlY3VsYXRpdmUgY29kZSBiZWNhdXNlIHNvbWUgdmFy
aWFibGUgaGFkIHRoZSB3cm9uZyB2YWx1ZSBvcgorICAgIC8vIGJlY2F1c2UgdGhlIE9TUiBjb2Rl
IGRlY2lkZWQgZm9yIGFueSBzcHVyaW91cyByZWFzb24gdGhhdCBpdCBkaWQgbm90IHdhbnQgdG8g
T1NSCisgICAgLy8gcmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9u
IG9ubHkgdXBvbiB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1sb29wKQorICAgIC8vIHJlb3B0
aW1pemF0aW9uIHRyaWdnZXIuCisgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVv
cHRpbWl6ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJp
bnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBP
U1IgZmFpbCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5k
aWYKKyAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIE9TUiBmYWlsZWQgdGhpcyB0aW1l
LCBidXQgaXQgbWlnaHQgc3VjY2VlZCBuZXh0IHRpbWUhIExldCB0aGUgY29kZSBydW4gYSBiaXQK
ICAgICAvLyBsb25nZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgogICAgIGNvZGVCbG9jay0+b3B0aW1p
emVBZnRlcldhcm1VcCgpOwpAQCAtMTk3Miw4ICsyMDEyLDIzIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKICAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKQorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVk
IG9wdGltaXplX2Zyb21fcmV0IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNv
ZGVCbG9jay0+ZXhlY3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRp
ZgorCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIGZyb20g
b2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0
aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9w
dGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAg
cHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gcmV0dXJuKS5c
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgaWYgKCFjb2RlQmxv
Y2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE4IEBAIERGRzo6SW50cmluc2ljIE5h
dGl2ZUV4ZWN1dGFibGU6OmludHJpbnMKIH0KICNlbmRpZgogCisvLyBVdGlsaXR5IG1ldGhvZCB1
c2VkIGZvciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE93
blB0cjxUPiYgY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUo
KSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CisgICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2su
cmVsZWFzZSgpOworICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJs
b2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgIGNvZGVCbG9ja1RvSmV0
dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICBnbG9iYWxEYXRhLmhlYXAuYWRkSmV0
dGlzb25Db2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1Rv
SmV0dGlzb24ucmVsZWFzZSgpKSk7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRh
YmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2lu
Zm8sIDAsIDAgfTsKIAogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7
ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAgfTsKQEAg
LTIxMSw2ICsyMjMsMTMgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJu
YQogICAgIHJldHVybiAwOwogfQogCit2b2lkIEV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGlt
aXplZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJs
b2NrKGdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fZXZhbENvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXMsICZzX2luZm8pOwpAQCAtMzMwLDYgKzM0OSwxMyBAQCBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJs
b2NrKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRD
b2RlKCk7CisgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQor
CiB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiB7CiAjaWYgRU5BQkxFKEpJ
VCkKQEAgLTUzMyw2ICs1NTksMjAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7Cisg
ICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlKCk7Cisg
ICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5n
ZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5nZXRKSVRDb2RlKCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNr
KCk7Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNf
aW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9pZCBq
ZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgRXZhbENvZGVC
bG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zOTIsNiArMzk0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC00NzUsNiAr
NDc5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjID0gMCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBp
c0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAogICAgICAgICB7CkBAIC00OTgsNiArNTA0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9i
YWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0
CiAgICAgICAgIHsKQEAgLTUzOCw2ICs1NDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWlu
Tm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkg
CisgICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChnbG9iYWxEYXRh
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZv
ckNvbnN0cnVjdChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCaXRWZWN0b3JfaAorI2RlZmluZSBCaXRWZWN0b3JfaAorCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlz
IGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNpemVhYmxlIGJpdHZlY3RvciBjbGFzcy4gSW4gdGhl
IGNvbW1vbiBjYXNlIGl0CisvLyBvY2N1cGllcyBvbmUgd29yZCwgYnV0IGlmIG5lY2Vzc2FyeSwg
aXQgd2lsbCBpbmZsYXRlIHRoaXMgb25lIHdvcmQgdG8gcG9pbnQKKy8vIHRvIGEgc2luZ2xlIGNo
dW5rIG9mIG91dC1vZi1saW5lIGFsbG9jYXRlZCBzdG9yYWdlIHRvIHN0b3JlIGFuIGFyYml0cmFy
eSBudW1iZXIKKy8vIG9mIGJpdHMuCisvLworLy8gLSBUaGUgYml0dmVjdG9yIG5lZWRzIHRvIGJl
IHJlc2l6ZWQgbWFudWFsbHkgKGp1c3QgY2FsbCBlbnN1cmVTaXplKCkpLgorLy8KKy8vIC0gVGhl
IGJpdHZlY3RvciByZW1lbWJlcnMgdGhlIGJvdW5kIG9mIGhvdyBtYW55IGJpdHMgY2FuIGJlIHN0
b3JlZCwgYnV0IHRoaXMKKy8vICAgbWF5IGJlIHNsaWdodGx5IGdyZWF0ZXIgKGJ5IGFzIG11Y2gg
YXMgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zdGFudCkKKy8vICAgdGhhbiB0aGUgbGFzdCBh
cmd1bWVudCBwYXNzZWQgdG8gZW5zdXJlU2l6ZSgpLgorLy8KKy8vIC0gQWNjZXNzZXMgQVNTRVJU
IHRoYXQgeW91IGFyZSB3aXRoaW4gYm91bmRzLgorLy8KKy8vIC0gQml0cyBhcmUgbm90IGF1dG9t
YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4KKy8vCisvLyBPbiB0aGUgb3RoZXIgaGFuZCwg
dGhpcyBCaXRWZWN0b3IgY2xhc3MgbWF5IG5vdCBiZSB0aGUgZmFzdGVzdCBhcm91bmQsIHNpbmNl
CisvLyBpdCBkb2VzIGNvbmRpdGlvbmFscyBvbiBldmVyeSBnZXQvc2V0L2NsZWFyLiBCdXQgaXQg
aXMgZ3JlYXQgaWYgeW91IG5lZWQgdG8KKy8vIGp1Z2dsZSBhIGxvdCBvZiB2YXJpYWJsZS1sZW5n
dGggQml0VmVjdG9ycyBhbmQgeW91J3JlIHdvcnJpZWQgYWJvdXQgd2FzdGluZworLy8gc3BhY2Uu
CisKK2NsYXNzIEJpdFZlY3RvciB7CitwdWJsaWM6IAorICAgIEJpdFZlY3RvcigpCisgICAgICAg
IDogbV9iaXRzT3JQb2ludGVyKG1ha2VJbmxpbmVCaXRzKDApKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgQml0VmVjdG9yKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRz
T3JQb2ludGVyKG1ha2VJbmxpbmVCaXRzKDApKQorICAgIHsKKyAgICAgICAgKCp0aGlzKSA9IG90
aGVyOworICAgIH0KKyAgICAKKyAgICB+Qml0VmVjdG9yKCkKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBPdXRPZkxpbmVCaXRzOjpk
ZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CisgICAgfQorICAgIAorICAgIEJpdFZlY3RvciYgb3Bl
cmF0b3I9KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICB1aW50cHRyX3Qg
bmV3Qml0c09yUG9pbnRlcjsKKyAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpCisgICAgICAg
ICAgICBuZXdCaXRzT3JQb2ludGVyID0gb3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRP
ZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShuZXdP
dXRPZkxpbmVCaXRzLT5iaXRzKCksIG90aGVyLmJpdHMoKSwgYnl0ZUNvdW50KG90aGVyLnNpemUo
KSkpOworICAgICAgICAgICAgbmV3Qml0c09yUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzSW5s
aW5lKCkpCisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMo
KSk7CisgICAgICAgIG1fYml0c09yUG9pbnRlciA9IG5ld0JpdHNPclBvaW50ZXI7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9iaXRzT3JQb2ludGVyID4+IG1heElubGluZUJpdHMoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtYXhJbmxpbmVCaXRzKCk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRz
KCktPm51bUJpdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNpemUoc2l6ZV90IG51bUJp
dHMpCisgICAgeworICAgICAgICBpZiAobnVtQml0cyA8PSBzaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJlc2l6ZU91dE9mTGluZShudW1CaXRzKTsKKyAgICB9CisgICAgCisg
ICAgLy8gTGlrZSBlbnN1cmVTaXplKCksIGJ1dCBzdXBwb3J0cyByZWR1Y2luZyB0aGUgc2l6ZSBv
ZiB0aGUgYml0dmVjdG9yLgorICAgIHZvaWQgcmVzaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsK
KyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBpZiAobnVtQml0cyA8PSBtYXhJbmxpbmVCaXRzKCkpIHsKKyAgICAgICAgICAgIE91
dE9mTGluZUJpdHMqIG15T3V0T2ZMaW5lQml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICAgICAg
ICAgIG1fYml0c09yUG9pbnRlciA9IG1ha2VJbmxpbmVCaXRzKCpteU91dE9mTGluZUJpdHMtPmJp
dHMoKSk7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG15T3V0T2ZMaW5lQml0
cyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
c2l6ZU91dE9mTGluZShudW1CaXRzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhckFsbCgp
CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIG1fYml0c09yUG9p
bnRlciA9IG1ha2VJbmxpbmVCaXRzKDApOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiemVy
byhvdXRPZkxpbmVCaXRzKCktPmJpdHMoKSwgYnl0ZUNvdW50KHNpemUoKSkpOworICAgIH0KKwor
ICAgIGJvb2wgZ2V0KHNpemVfdCBiaXQpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoYml0
IDwgc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuICEhKGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRl
cigpXSAmIChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRl
cigpIC0gMSkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBiaXQpCisgICAg
eworICAgICAgICBBU1NFUlQoYml0IDwgc2l6ZSgpKTsKKyAgICAgICAgYml0cygpW2JpdCA+PiBi
aXRzSW5Qb2ludGVyKCldIHw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAo
Yml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihzaXpl
X3QgYml0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8IHNpemUoKSk7CisgICAgICAgIGJp
dHMoKVtiaXQgPj4gYml0c0luUG9pbnRlcigpXSAmPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldChzaXplX3QgYml0LCBib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
KQorICAgICAgICAgICAgc2V0KGJpdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsZWFy
KGJpdCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgYml0c0lu
UG9pbnRlcigpCisgICAgeworICAgICAgICByZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5saW5lQml0cygpCisgICAgeworICAg
ICAgICByZXR1cm4gYml0c0luUG9pbnRlcigpIC0gMTsKKyAgICB9CisgICAgCisgICAgLy8gVGhp
cyBmdW5jdGlvbiByZWxpZXMgb24gYml0Q291bnQgYmVpbmcgYSBtdWx0aXBsZSBvZiBiaXRzSW5Q
b2ludGVyKCkKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVDb3VudChzaXplX3QgYml0Q291bnQpCisg
ICAgeworICAgICAgICBBU1NFUlQoIShiaXRDb3VudCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkp
OworICAgICAgICByZXR1cm4gYml0Q291bnQgPj4gMzsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IHVpbnRwdHJfdCBtYWtlSW5saW5lQml0cyh1aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAg
IEFTU0VSVCghKGJpdHMgJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVC
aXRzKCkpKSk7CisgICAgICAgIHJldHVybiBiaXRzIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
MSkgPDwgbWF4SW5saW5lQml0cygpKTsKKyAgICB9CisgICAgCisgICAgY2xhc3MgT3V0T2ZMaW5l
Qml0cyB7CisgICAgcHVibGljOgorICAgICAgICBzaXplX3QgbnVtQml0cygpIGNvbnN0IHsgcmV0
dXJuIG1fbnVtQml0czsgfQorICAgICAgICBzaXplX3QgbnVtV29yZHMoKSBjb25zdCB7IHJldHVy
biAobV9udW1CaXRzICsgYml0c0luUG9pbnRlcigpIC0gMSkgPj4gYml0c0luUG9pbnRlcigpOyB9
CisgICAgICAgIHVpbnRwdHJfdCogYml0cygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Kj4odGhpcyArIDEpOyB9CisgICAgICAgIGNvbnN0IHVpbnRwdHJfdCogYml0cygpIGNv
bnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4odGhpcyArIDEp
OyB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgT3V0T2ZMaW5lQml0cyogY3JlYXRlKHNpemVf
dCBudW1CaXRzKQorICAgICAgICB7CisgICAgICAgICAgICBudW1CaXRzID0gKG51bUJpdHMgKyBi
aXRzSW5Qb2ludGVyKCkgLSAxKSAmIH5iaXRzSW5Qb2ludGVyKCk7CisgICAgICAgICAgICByZXR1
cm4gbmV3IChmYXN0TWFsbG9jKHNpemVvZihPdXRPZkxpbmVCaXRzKSArIChudW1CaXRzID4+IGJp
dHNJblBvaW50ZXIoKSkpKSBPdXRPZkxpbmVCaXRzKG51bUJpdHMpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KE91dE9mTGluZUJpdHMqIG91dE9mTGlu
ZUJpdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZhc3RGcmVlKG91dE9mTGluZUJpdHMpOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBPdXRPZkxpbmVCaXRzKHNpemVfdCBu
dW1CaXRzKQorICAgICAgICAgICAgOiBtX251bUJpdHMobnVtQml0cykKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzaXplX3QgbV9udW1CaXRzOworICAgIH07CisgICAg
CisgICAgYm9vbCBpc0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0c09yUG9pbnRlciA+PiBt
YXhJbmxpbmVCaXRzKCk7IH0KKyAgICAKKyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBvdXRPZkxp
bmVCaXRzKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBPdXRPZkxpbmVC
aXRzKj4obV9iaXRzT3JQb2ludGVyKTsgfQorICAgIE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJp
dHMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBv
aW50ZXIpOyB9CisgICAgCisgICAgdm9pZCByZXNpemVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMp
CisgICAgeworICAgICAgICBBU1NFUlQobnVtQml0cyA+IG1heElubGluZUJpdHMoKSk7CisgICAg
ICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVh
dGUobnVtQml0cyk7CisgICAgICAgIG1lbWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIGJp
dHMoKSwgYnl0ZUNvdW50KHN0ZDo6bWluKHNpemUoKSwgbnVtQml0cykpKTsKKyAgICAgICAgaWYg
KCFpc0lubGluZSgpKQorICAgICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxp
bmVCaXRzKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4obmV3T3V0T2ZMaW5lQml0cyk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCog
Yml0cygpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVy
biAmbV9iaXRzT3JQb2ludGVyOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5iaXRz
KCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IHVpbnRwdHJfdCogYml0cygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiAmbV9iaXRzT3JQ
b2ludGVyOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAgfQor
ICAgIAorICAgIHVpbnRwdHJfdCBtX2JpdHNPclBvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwordXNpbmcgV1RGOjpCaXRWZWN0b3I7CisKKyNlbmRpZiAvLyBCaXRWZWN0b3JfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108117</attachid>
            <date>2011-09-21 00:54:51 -0700</date>
            <delta_ts>2011-09-21 13:05:19 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>recomp_patch_11.diff</filename>
            <type>text/plain</type>
            <size>71532</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAyIEBA
CisyMDExLTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBzdXBwb3J0IGNvbnRpbnVvdXMgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODMyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIHRoZSBh
YmlsaXR5IHRvIHJlb3B0aW1pemUgYSBjb2RlIGJsb2NrIGlmIHNwZWN1bGF0aW9uCisgICAgICAg
IGZhaWx1cmVzIGhhcHBlbiBmcmVxdWVudGx5LiA2JSBzcGVlZC11cCBvbiBLcmFrZW4sIDElIHNs
b3ctZG93bgorICAgICAgICBvbiBWOCwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTdHJvbmdQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09T
UkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAoSlNDOjpERkc6OmdldE9TUkVudHJ5RGF0
YUJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6RHVtbXlNYXJrSG9vazo6bWFyayk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcik6Cisg
ICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbik6CisgICAgICAg
IChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0
aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRKZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9S
ZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Qml0VmVjdG9yKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjp+Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0KToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ynl0ZUNvdW50KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjptYWtlSW5saW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6bnVtQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5l
Qml0czo6bnVtV29yZHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6
OmJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJbmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
Om91dE9mTGluZUJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGlu
ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIEhlYXAgY2xlYW51
cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNw
YWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsOCBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApAQCAtNDY0LDYg
KzQ2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0F0b21p
Y3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BVkxUcmVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tTdGFjay5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVIZWFwLmNwcCBcCiAg
ICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAgXAorICAgIGhlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgXAogICAgIGhlYXAvTWFya1N0YWNrLmNwcCBcCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE5NzQsNiArMTk3NCwxNCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmls
ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXExvY2FsLmgiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw2ICs2MzcsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgog
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQml0VmVjdG9yLmgiCisJCQk+CisJ
CTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdG1hcC5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQAogCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki87IH07CiAJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3
MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlz
b25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgy
RjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovOyB9OworCQkwRkQ4MkY0QjE0Mjgw
NkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3
RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyog
SlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNiw5IEBACiAJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAv
KiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50
cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI5MTQyNkNB
NUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MjEsNiArMTYyNyw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkYyODE0
MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovLAorCQkJCTBGRDgy
RjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovLAogCQkJCUE3
MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuaCAqLywKIAkJCQlBNzA0
NTZBRTE0MjdGQjAzMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKIAkJCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLApAQCAt
MTc5Nyw2ICsxODA1LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGNDkxNDI4
MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8s
CiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCkBAIC0yNDIzLDYgKzI0
MzIsOCBAQAogCQkJCUJDMjU3REU4MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8q
IEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0
IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkVGNTE0
MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDk3LDYgKzMxMDgsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJ
CQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjgsNyArMTQyOCwxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5
bWJvbFRhYmxlKHN5bVRhYikKICAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCisgICAg
LCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoMCkKKyAgICAsIG1fc3BlY3VsYXRpdmVGYWls
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIApAQCAtMTkzNSw2ICsxOTM4LDI3IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREYKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KHRoaXMpOwogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwo
dGhpcyk7CiB9CisKK3ZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25D
b2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcihnbG9iYWxEYXRh
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC0xOTc0LDggKzE5OTgsOCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgIHByaW50ZigiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSlu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMg
LyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzID49IDAuNzUKLSAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSA+PSAwLjUpCisgICAgaWYgKCghbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBu
dW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA+PSAwLjc1KQorICAgICAgICAmJiAoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgPj0gMC41KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIrKzsKQEAgLTIwMTQsNyArMjAzOCwxMiBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgIH0KICAgICBmcHJpbnRmKHN0ZGVyciwgIlNsb3dDYXNl
UHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZTbG93Q2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBTbG93Q2FzZVByb2Zp
bGUqIHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+
bV9jb3VudGVyKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTcGVjaWFsRmFzdENhc2VQ
cm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBSYXJlQ2Fz
ZVByb2ZpbGUqIHByb2ZpbGUgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJDb21wYWN0SklU
Q29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpA
QCAtMzMzLDYgKzMzNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIGFwcGVuZERGR09TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7CisgICAgICAgICAgICBlbnRyeS5tX2J5dGVj
b2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgICAgICAgICAgZW50cnkubV9tYWNoaW5lQ29k
ZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICAgICAgbV9kZmdPU1JFbnRyeS5h
cHBlbmQoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICZtX2RmZ09TUkVudHJ5Lmxhc3QoKTsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR09TUkVudHJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2RmZ09TUkVudHJ5LnNpemUoKTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5
RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2RmZ09TUkVudHJ5
W2ldOyB9CisgICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiaW5hcnlTZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6Omdl
dE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXg+KG1fZGZnT1NSRW50cnkuYmVnaW4oKSwgbV9kZmdP
U1JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTM2MCw5ICszNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgp
OyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7
IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAg
ICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY4NSwxMSArNzAzLDM3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQg
d2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCiAgICAgICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KICAgICAgICAgCisgICAgICAgIC8vIFdo
ZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBh
CisgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0
aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgor
ICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9
IDE4KTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Cisg
ICAgICAgICAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IDE4KQorICAgICAg
ICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAxODsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKLSAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhvZHMgZnJvbSBKSVQt
Z2VuZXJhdGVkIGNvZGUuCisgICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xMDAwOwor
ICAgICAgICAgICAgcmV0dXJuIC0xMDAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTUw
MDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKQpAQCAtNjk3LDEyICs3
NDEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gJm1fZXhlY3V0ZUNv
dW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZXhlY3V0ZUNvdW50ZXIpOyB9CisKKyAgICAgICAgaW50MzJfdCBleGVjdXRlQ291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOyB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
Zm9yY2UgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcwogICAg
ICAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBp
Y2FsbHkgbW9yZQogICAgICAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewot
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgICAgICBtX2V4ZWN1dGVD
b3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtNzI2LDYgKzc3NiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9u
bHkgYWZ0ZXIKKyAgICAgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNv
dW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0
aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KICAgICAgICAg
Ly8gc3VjY2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxs
cyBhcmUKQEAgLTc0NiwxOCArODAzLDcyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBp
biB0aGUgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKKyAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tz
IGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGVu
IHRvIHJlb3B0aW1pemUuIEl0J3MgaW50ZXJlc3RpbmcgdG8gbm90ZSB0aGF0IHRoZXNlCisgICAg
ICAgIC8vIGNvdW50ZXJzIG1heSBvdmVyZmxvdyB3aXRob3V0IGFueSBwcm90ZWN0aW9uLiBUaGUg
c3VjY2VzcworICAgICAgICAvLyBjb3VudGVyIHdpbGwgb3ZlcmZsb3cgYmVmb3JlIHRoZSBmYWls
IG9uZSBkb2VzLCBiZWN1YXNlIHRoZQorICAgICAgICAvLyBmYWlsIG9uZSBpcyB1c2VkIGFzIGEg
dHJpZ2dlciB0byByZW9wdGltaXplLiBTbyB0aGUgd29yc3QgY2FzZQorICAgICAgICAvLyBpcyB0
aGF0IHRoZSBzdWNjZXNzIGNvdW50ZXIgb3ZlcmZsb3dzIGFuZCB3ZSByZW9wdGltaXplIHdpdGhv
dXQKKyAgICAgICAgLy8gbmVlZGluZyB0by4gQnV0IHRoaXMgaXMgaGFybWxlc3MuIElmIGEgbWV0
aG9kIHJlYWxseSBkaWQKKyAgICAgICAgLy8gZXhlY3V0ZSAyXjMyIHRpbWVzIHRoZW4gY29tcGls
aW5nIGl0IGFnYWluIHByb2JhYmx5IHdvbid0IGh1cnQKKyAgICAgICAgLy8gYW55b25lLgorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcisrOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygp
IHsgcmV0dXJuIDY7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVy
ZXMgdGhhdCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KKyAgICAgICAgdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVuc2lnbmVkIGxhcmdlRmFp
bENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRT
dWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRp
dmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
Pj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAgICAgIH0KICAgICAgICAg
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIHNob3VsZE9wdGltaXpl
Tm93KCk7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50KCkgIT0gdGhpcyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAg
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKICAgICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygpOwpAQCAt
ODI3LDYgKzkzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworICAg
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fZGZnT1NSRW50cnk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTg1MSw3ICs5NjMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsK
IAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1f
c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKKyAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyOwogICAgICAgICB1aW50OF90IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
OworICAgICAgICB1aW50OF90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAKICAgICAg
ICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC05MDksNiArMTAyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05MzUsNiArMTA1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05NjIsNiArMTA3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChwcm9maWxlKTsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uID0gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgWyV1LCAldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFtAJXUsIGJjIyV1XSBw
cmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9uVG9T
dHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDkgQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIC8vICAgICAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwogICAgIC8v
ICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KICAgICAvLworICAgIC8vICAgICAoZCkg
RnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0
aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4g
cmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLwogICAgIC8vICAgICBUbyBl
bnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KICAgICAv
LyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKICAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4g
ZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgpAQCAtNDE1LDEx
ICs0MTgsNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAg
IC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0
aGUgY291bnRlciB3aWxsIG5ldmVyCiAgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CiAgICAgLy8gICAg
IHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGlj
aCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQg
KGIpLiBUaGlzIGhldXJpc3RpYyBtYXkgbmVlZCB0byBiZQotICAgIC8vICAgICByZXRob3VnaHQg
aW4gdGhlIGZ1dHVyZSwgcGFydGljdWxhcmx5IGlmIHdlIHN1cHBvcnQgcmVvcHRpbWl6aW5nIGNv
ZGUKLSAgICAvLyAgICAgd2l0aCBuZXcgdmFsdWUgcHJvZmlsZXMgZ2F0aGVyZWQgZnJvbSBjb2Rl
IHRoYXQgZGlkIE9TUiBleGl0LgorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkg
YW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8vICAgICBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KKyAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICAgbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgorICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vICAgICBjb3VudGVyIHRvIDA7IG90aGVy
d2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLgorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGFkZDMyKEltbTMy
KC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Cisg
ICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxv
d09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSks
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKTsK
KyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgc3RvcmUzMihJbW0z
MihDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKSksIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOworICAgIAorICAgIGZld0ZhaWxz
LmxpbmsodGhpcyk7CisgICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9y
ZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAKKyAgICBkb25lQWRqdXN0aW5nLmxp
bmsodGhpcyk7CiAgICAgCiAgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBi
eXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKQEAgLTQ4MSw2ICs1MTMsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFsIHJldHVy
biBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgogICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJldHVyblBD
KTsKKyAgICAKKyAgICBhZGRQdHIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhjb2RlQmxvY2so
KS0+YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7CiB9CiAKIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKQEAgLTQ5OCwxMCArNTMyLDYgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2ZSA9IHNwZWN1
bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3BlY3VsYXRpdmUs
IGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0jaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCi0gICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
Ci0jZW5kaWYKLSAgICAKICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogCiAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGV4Y2VwdGlvbiBj
aGVja3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw0NiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQogICAgIHsK
LSAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYmFzaWNCbG9jay5ieXRlY29kZUJl
Z2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjaWYgRU5B
QkxFKERGR19PU1JfRU5UUlkpCisgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxv
Y2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlm
ZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxhc3RM
aXZlTG9jYWwgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1lbnQgKyAxKTsKKyAgICAgICAgICAgIGVu
dHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUFyZ3VtZW50OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2V0KGkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVB
cmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUxvY2Fs
KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxv
Y2FsICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFz
dExpdmVMb2NhbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2Nh
bHNbaV0udmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZl
VmFyaWFibGVzLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7CisjZWxzZQorICAgICAgICBV
TlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CisjZW5kaWYKICAgICB9CiAKIHByaXZhdGU6CkBAIC0z
NTMsNyArMzkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9T
UiBlbnRyeXBvaW50cy4KICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOwotICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0
aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIs
IGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVCghY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPm51bWJlck9mREZHT1NSRW50
cmllcygpKTsKIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJPU1Ig
aW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLCBieXRlY29kZUluZGV4KTsKQEAgLTY2LDYgKzY3LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIAorICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5k
ZXgpOwogICAgIAogICAgIC8vIFRoZSBjb2RlIGJlbG93IGNoZWNrcyBpZiBpdCBpcyBzYWZlIHRv
IHBlcmZvcm0gT1NSIGVudHJ5LiBJdCBtYXkgZmluZAogICAgIC8vIHRoYXQgaXQgaXMgdW5zYWZl
IHRvIGRvIHNvLCBmb3IgYW55IG51bWJlciBvZiByZWFzb25zLCB3aGljaCBhcmUgZG9jdW1lbnRl
ZApAQCAtOTcsNyArMTAxLDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgcHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAo
IXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJl
ZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBl
bnRyeS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdl
dChpKQorICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUs
MTEgKzExMCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0
IGFuIE9TUiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVj
LT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkp
KSkgeworICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQog
ICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlz
ICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5k
ZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rp
b24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBt
YWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0aGUgbWFjaGlu
ZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29kZU1hcC4KLSAg
ICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQgd2UgZXhwZWN0
IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkgcmFyZWx5LCBh
bmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8vICAgIGZldywg
dGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBvbmx5IHJlYWwK
LSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFwIGlzIHRvIGF2
b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBkYXRhIHN0cnVj
dHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0gICAgLy8gICAg
bWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29k
ZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWduZWQgbWFjaGlu
ZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAg
d2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAgICAgICAgdW5z
aWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRNYWNo
aW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRlY29kZUluZGV4
LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVudEJ5dGVjb2Rl
SW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNvZGVPZmZzZXQg
PSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4g
dGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2RlT2Zmc2V0KTsK
KyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBlbnRyeS0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
ICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNzICVwLlxu
IiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5
X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiArMzYsMTggQEAg
Y2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
K3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1
bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lubGluZSB1bnNp
Z25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlE
YXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKK30KKwog
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICAgICAgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVkZSAiSmV0dGlz
b25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDIwIEBAIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYgKHNpemVv
ZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290
cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJv
b3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQor
ICAgICwgbV9ibG9ja3MoYmxvY2tzKQoreworfQorCitDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKK3sKKyAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQorICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOworfQorCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFjaXR5
ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKQEAgLTQ0LDggKzYwLDE2IEBA
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsK
IH0KIAotaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyKQorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgoraW5s
aW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRp
bnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKKyAgICBtYXJrSG9v
ay5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9j
azo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxv
Y2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKQEAgLTcwLDcgKzk0LDggQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKgogICAgIG1fcm9vdHNbbV9zaXplKytd
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+
Cit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7
CiAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihiZWdpbikpIDwgMHgxMDAwMDAwKTsKQEAgLTc5LDcgKzEwNCwxOCBAQCB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8g
c2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxs
b2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihiZWdpbik7
IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAgICAgICAgYWRkKCppdCwg
ZmlsdGVyKTsKKyAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29r
KTsKK30KKwordm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQpCit7CisgICAgRHVtbXlNYXJrSG9vayBkdW1teU1hcmtIb29rOworICAgIGdlbmVyaWNBZGRT
cGFuKGJlZ2luLCBlbmQsIGR1bW15TWFya0hvb2spOworfQorCit2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpl
dHRpc29uZWRDb2RlQmxvY2tzKQoreworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGpl
dHRpc29uZWRDb2RlQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTQ2VsbDsKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29k
ZUJsb2NrcyYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMo
KTsKQEAgLTQ5LDcgKzUxLDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBp
bmxpbmVDYXBhY2l0eSA9IDEyODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNh
cGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKICAgICAKLSAgICB2b2lkIGFkZCh2b2lk
KiwgVGlueUJsb29tRmlsdGVyKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAg
ICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29r
Jik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAgICB2b2lkIGdlbmVyaWNB
ZGRTcGFuKHZvaWQqLCB2b2lkKiBlbmQsIE1hcmtIb29rJik7CisgICAgCiAgICAgdm9pZCBncm93
KCk7CiAKICAgICBKU0NlbGwqKiBtX3Jvb3RzOwpAQCAtNTksMjAgKzY2LDYgQEAgcHJpdmF0ZToK
ICAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotaW5saW5l
IENvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1Nl
dCogYmxvY2tzKQotICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQotICAgICwgbV9zaXplKDAp
Ci0gICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAgICwgbV9ibG9ja3MoYmxvY2tz
KQotewotfQotCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygp
Ci17Ci0gICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0
b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2Vs
bCopKTsKLX0KLQogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiB7CiAg
ICAgcmV0dXJuIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDExIEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3Rl
ZE9iamVjdHMoSGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmly
c3QpOwogfQogCit2b2lkIEhlYXA6OmFkZEpldHRpc29uQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5hZGRDb2Rl
QmxvY2soY29kZUJsb2NrKTsKK30KKwogdm9pZCBIZWFwOjpwdXNoVGVtcFNvcnRWZWN0b3IoVmVj
dG9yPFZhbHVlU3RyaW5nUGFpcj4qIHRlbXBWZWN0b3IpCiB7CiAgICAgbV90ZW1wU29ydGluZ1Zl
Y3RvcnMuYXBwZW5kKHRlbXBWZWN0b3IpOwpAQCAtNDU2LDIwICs0NjEsMjIgQEAgdm9pZCBIZWFw
OjptYXJrUm9vdHMoKQogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IENvbGxlY3Rpb247CiAK
ICAgICB2b2lkKiBkdW1teTsKLQorICAgIAogICAgIC8vIFdlIGdhdGhlciBjb25zZXJ2YXRpdmUg
cm9vdHMgYmVmb3JlIGNsZWFyaW5nIG1hcmsgYml0cyBiZWNhdXNlIGNvbnNlcnZhdGl2ZQogICAg
IC8vIGdhdGhlcmluZyB1c2VzIHRoZSBtYXJrIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBy
ZWZlcmVuY2UgaXMgdmFsaWQuCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgbWFjaGluZVRocmVhZFJv
b3RzKCZtX29iamVjdFNwYWNlLmJsb2NrcygpKTsKICAgICBtX21hY2hpbmVUaHJlYWRzLmdhdGhl
ckNvbnNlcnZhdGl2ZVJvb3RzKG1hY2hpbmVUaHJlYWRSb290cywgJmR1bW15KTsKIAogICAgIENv
bnNlcnZhdGl2ZVJvb3RzIHJlZ2lzdGVyRmlsZVJvb3RzKCZtX29iamVjdFNwYWNlLmJsb2Nrcygp
KTsKLSAgICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZp
bGVSb290cyk7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5jbGVhck1hcmtzKCk7CisgICAg
cmVnaXN0ZXJGaWxlKCkuZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMocmVnaXN0ZXJGaWxlUm9vdHMs
IG1famV0dGlzb25lZENvZGVCbG9ja3MpOworICAgIG1famV0dGlzb25lZENvZGVCbG9ja3MuZGVs
ZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCk7CiAKICAgICBjbGVhck1hcmtzKCk7CiAKICAgICBTbG90
VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhl
YXBSb290VmlzaXRvcih2aXNpdG9yKTsKLQorICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKG1hY2hp
bmVUaHJlYWRSb290cyk7CiAgICAgdmlzaXRvci5kcmFpbigpOwogCkBAIC00OTMsNiArNTAwLDgg
QEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoKQogCiAgICAgbV9oYW5kbGVTdGFjay52aXNpdChoZWFw
Um9vdFZpc2l0b3IpOwogICAgIHZpc2l0b3IuZHJhaW4oKTsKKyAgICAKKyAgICBtX2pldHRpc29u
ZWRDb2RlQmxvY2tzLnRyYWNlQ29kZUJsb2Nrcyh2aXNpdG9yKTsKIAogICAgIC8vIFdlYWsgaGFu
ZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNlIHRoZWlyIG93bmVycyB1c2UgdGhlIHNl
dCBvZgogICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRlcm1pbmUgcmVhY2hhYmlsaXR5LgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKICNpbmNsdWRlICJBbGxvY2F0aW9uU3BhY2UuaCIKICNpbmNsdWRlICJIYW5kbGVIZWFwLmgi
CiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAjaW5jbHVkZSAiTWFya2VkQmxvY2tTZXQu
aCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgpAQCAtOTgsNiArOTksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNWYWx1ZSk7CiAgICAgICAgIGJvb2wgdW5w
cm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhlIHByb3RlY3QgY291bnQgZHJvcHMgdG8g
MC4KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSmV0dGlzb25Db2RlQmxvY2soUGFzc093blB0
cjxDb2RlQmxvY2s+KTsKIAogICAgICAgICBzaXplX3Qgc2l6ZSgpOwogICAgICAgICBzaXplX3Qg
Y2FwYWNpdHkoKTsKQEAgLTE5MSw2ICsxOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
U2xvdFZpc2l0b3IgbV9zbG90VmlzaXRvcjsKICAgICAgICAgSGFuZGxlSGVhcCBtX2hhbmRsZUhl
YXA7CiAgICAgICAgIEhhbmRsZVN0YWNrIG1faGFuZGxlU3RhY2s7CisgICAgICAgIEpldHRpc29u
ZWRDb2RlQmxvY2tzIG1famV0dGlzb25lZENvZGVCbG9ja3M7CiAgICAgICAgIAogICAgICAgICBi
b29sIG1faXNTYWZlVG9Db2xsZWN0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0
b3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitKZXR0
aXNvbmVkQ29kZUJsb2Nrczo6SmV0dGlzb25lZENvZGVCbG9ja3MoKSB7IH0KKworSmV0dGlzb25l
ZENvZGVCbG9ja3M6On5KZXR0aXNvbmVkQ29kZUJsb2NrcygpCit7CisgICAgV1RGOjpkZWxldGVB
bGxLZXlzKG1fbWFwKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6YWRkQ29kZUJs
b2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit7CisgICAgQVNTRVJUKG1fbWFw
LmZpbmQoY29kZUJsb2NrLmdldCgpKSA9PSBtX21hcC5lbmQoKSk7CisgICAgCisgICAgbV9tYXAu
YWRkKGNvZGVCbG9jay5sZWFrUHRyKCksIGZhbHNlKTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6Y2xlYXJNYXJrcygpCit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6
aXRlcmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwg
Ym9vbD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2Rl
QmxvY2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVy
KQorICAgICAgICBpdGVyLT5zZWNvbmQgPSBmYWxzZTsKK30KKwordm9pZCBKZXR0aXNvbmVkQ29k
ZUJsb2Nrczo6ZGVsZXRlVW5tYXJrZWRDb2RlQmxvY2tzKCkKK3sKKyAgICBWZWN0b3I8Q29kZUJs
b2NrKj4gdG9SZW1vdmU7CisgICAgCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRl
cmF0b3IgYmVnaW4gPSBtX21hcC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGVuZCA9IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
CisgICAgICAgIGlmICghaXRlci0+c2Vjb25kKQorICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5k
KGl0ZXItPmZpcnN0KTsKKyAgICB9CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRvUmVtb3ZlLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fbWFwLnJlbW92ZSh0b1JlbW92ZVtp
XSk7CisgICAgICAgIGRlbGV0ZSB0b1JlbW92ZVtpXTsKKyAgICB9Cit9CisKK3ZvaWQgSmV0dGlz
b25lZENvZGVCbG9ja3M6OnRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYgc2xvdFZpc2l0b3Ip
Cit7CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgYmVnaW4gPSBtX21h
cC5iZWdpbigpOworICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9vbD46Oml0ZXJhdG9yIGVuZCA9
IG1fbWFwLmVuZCgpOworICAgIGZvciAoSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0
b3IgaXRlciA9IGJlZ2luOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5maXJz
dC0+dmlzaXRBZ2dyZWdhdGUoc2xvdFZpc2l0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0dGlzb25lZENvZGVCbG9ja3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSmV0
dGlzb25lZENvZGVCbG9ja3MuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpldHRpc29u
ZWRDb2RlQmxvY2tzX2gKKyNkZWZpbmUgSmV0dGlzb25lZENvZGVCbG9ja3NfaAorCisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxv
Y2s7CitjbGFzcyBTbG90VmlzaXRvcjsKKworY2xhc3MgSmV0dGlzb25lZENvZGVCbG9ja3Mgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOyAvLyBPbmx5IG1hbGxvYydkIGluIENvbnNlcnZh
dGl2ZVJvb3RzCitwdWJsaWM6CisgICAgSmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAg
ICB+SmV0dGlzb25lZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB2b2lkIGFkZENvZGVCbG9jayhQ
YXNzT3duUHRyPENvZGVCbG9jaz4pOworICAgIAorICAgIHZvaWQgY2xlYXJNYXJrcygpOworICAg
IAorICAgIHZvaWQgbWFyayh2b2lkKiBjYW5kaWRhdGVDb2RlQmxvY2spCisgICAgeworICAgICAg
ICAvLyBXZSBoYXZlIHRvIGNoZWNrIGZvciAwIGFuZCAtMSBiZWNhdXNlIHRob3NlIGFyZSB1c2Vk
IGJ5IHRoZSBIYXNoTWFwIGFzIG1hcmtlcnMuCisgICAgICAgIHVpbnRwdHJfdCB2YWx1ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYW5kaWRhdGVDb2RlQmxvY2spOworICAgICAgICAK
KyAgICAgICAgLy8gVGhpcyBjaGVja3MgZm9yIGJvdGggb2YgdGhvc2UgbmFzdHkgY2FzZXMgaW4g
b25lIGdvLgorICAgICAgICAvLyAwICsgMSA9IDEKKyAgICAgICAgLy8gLTEgKyAxID0gMAorICAg
ICAgICBpZiAodmFsdWUgKyAxIDw9IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gbV9tYXAu
ZmluZChzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihjYW5kaWRhdGVDb2RlQmxvY2spKTsKKyAgICAg
ICAgaWYgKGl0ZXIgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGl0ZXItPnNlY29uZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVsZXRlVW5tYXJr
ZWRDb2RlQmxvY2tzKCk7CisgICAgCisgICAgdm9pZCB0cmFjZUNvZGVCbG9ja3MoU2xvdFZpc2l0
b3ImKTsKKworcHJpdmF0ZToKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCB0byB1c2UgYW4gT3du
UHRyPENvZGVCbG9jaz4gaGVyZSBidXQgdGhhdCB3b3VsZAorICAgIC8vIGFsbW9zdCBjZXJ0YWlu
bHkgbm90IHdvcmsuCisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPiBtX21hcDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSmV0dGlzb25lZENvZGVCbG9ja3NfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0
ZXJGaWxlLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEg
QEAgdm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvbwogICAgIGNvbnNlcnZh
dGl2ZVJvb3RzLmFkZChiZWdpbigpLCBlbmQoKSk7CiB9CiAKK3ZvaWQgUmVnaXN0ZXJGaWxlOjpn
YXRoZXJDb25zZXJ2YXRpdmVSb290cyhDb25zZXJ2YXRpdmVSb290cyYgY29uc2VydmF0aXZlUm9v
dHMsIEpldHRpc29uZWRDb2RlQmxvY2tzJiBqZXR0aXNvbmVkQ29kZUJsb2NrcykKK3sKKyAgICBj
b25zZXJ2YXRpdmVSb290cy5hZGQoYmVnaW4oKSwgZW5kKCksIGpldHRpc29uZWRDb2RlQmxvY2tz
KTsKK30KKwogdm9pZCBSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCiB7CiAg
ICAgcHRyZGlmZl90IGRlbHRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fY29tbWl0
RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
RmlsZS5oCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlckZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKKyAgICBjbGFzcyBK
ZXR0aXNvbmVkQ29kZUJsb2NrczsKIAogICAgIGNsYXNzIFJlZ2lzdGVyRmlsZSB7CiAgICAgICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZ2lzdGVyRmlsZSk7CkBAIC02NCw2ICs2NSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB+UmVnaXN0ZXJGaWxlKCk7CiAgICAgICAgIAogICAgICAg
ICB2b2lkIGdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZhdGl2ZVJvb3RzJik7CisgICAg
ICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMoQ29uc2VydmF0aXZlUm9vdHMmLCBKZXR0
aXNvbmVkQ29kZUJsb2NrcyYpOwogCiAgICAgICAgIFJlZ2lzdGVyKiBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIHN0YXRpY19jYXN0PFJlZ2lzdGVyKj4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOyB9CiAg
ICAgICAgIFJlZ2lzdGVyKiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZDsgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
MTQsNyArMTkxNCwyMiBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9t
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKTsKIAot
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5B
QkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9s
b29wIHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIg
PSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNvZGVCbG9jay0+ZXhlY3V0
ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpLCBjb2Rl
QmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRpZgorCisgICAgaWYgKGNv
ZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lmIEVOQUJMRShKSVRfVkVS
Qk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiQ29uc2lkZXJpbmcgbG9vcCBPU1IgaW50byAlcCgl
cCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3ND
b3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRl
cigpKTsKKyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91
bGRSZW9wdGltaXplRnJvbUxvb3BOb3coKSkgeworI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
CisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXAp
IChpbiBsb29wKS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNl
bmRpZgorICAgICAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmICghY29kZUJsb2NrLT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiRGVsYXlpbmcgb3B0aW1pemF0
aW9uIGZvciAlcCAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJvZmlsaW5nLlxu
IiwgY29kZUJsb2NrKTsKQEAgLTE5NTIsNiArMTk2Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KHZvaWQsIG9wdGltaXplX2Zyb20KICNlbmRpZgogCiAgICAgICAgIGNvZGVCbG9jay0+b3B0aW1p
emVTb29uKCk7CisgICAgICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvblN1
Y2Nlc3MoKTsKICAgICAgICAgU1RVQl9TRVRfUkVUVVJOX0FERFJFU1MoYWRkcmVzcyk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xOTYwLDYgKzE5NzYsMzAgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIHByaW50ZigiT3B0aW1pemluZyAlcCBmcm9t
IGxvb3Agc3VjY2VlZGVkLCBPU1IgZmFpbGVkLlxuIiwgY29kZUJsb2NrKTsKICNlbmRpZgogCisg
ICAgLy8gQ291bnQgdGhlIE9TUiBmYWlsdXJlIGFzIGEgc3BlY3VsYXRpb24gZmFpbHVyZS4gSWYg
dGhpcyBoYXBwZW5zIGEgbG90LCB0aGVuCisgICAgLy8gcmVvcHRpbWl6ZS4KKyAgICBvcHRpbWl6
ZWRDb2RlQmxvY2stPmNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCk7CisgICAgCisjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKKyAgICBwcmludGYoIkVuY291bnRlcmVkIGxvb3AgT1NSIGZhaWx1
cmUgaW50byAlcCglcCkgd2l0aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxh
dGl2ZVN1Y2Nlc3NDb3VudGVyKCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRp
dmVGYWlsQ291bnRlcigpKTsKKyNlbmRpZgorCisgICAgLy8gV2UgYXJlIGEgbG90IG1vcmUgY29u
c2VydmF0aXZlIGFib3V0IHRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24gYWZ0ZXIgT1NSIGZhaWx1
cmUgdGhhbgorICAgIC8vIGJlZm9yZSBpdC4gSWYgd2UgZW50ZXIgdGhlIG9wdGltaXplX2Zyb21f
bG9vcCB0cmlnZ2VyIHdpdGggYSBidWNrZXQgZnVsbCBvZiBmYWlsCisgICAgLy8gYWxyZWFkeSwg
dGhlbiB3ZSByZWFsbHkgd291bGQgbGlrZSB0byByZW9wdGltaXplIGltbWVkaWF0ZWx5LiBCdXQg
dGhpcyBjYXNlIGNvdmVycworICAgIC8vIHNvbWV0aGluZyBlbHNlOiB0aGVyZSB3ZXJlbid0IG1h
bnkgKG9yIGFueSkgc3BlY3VsYXRpb24gZmFpbHVyZXMgYmVmb3JlLCBidXQgd2UganVzdAorICAg
IC8vIGZhaWxlZCB0byBlbnRlciB0aGUgc3BlY3VsYXRpdmUgY29kZSBiZWNhdXNlIHNvbWUgdmFy
aWFibGUgaGFkIHRoZSB3cm9uZyB2YWx1ZSBvcgorICAgIC8vIGJlY2F1c2UgdGhlIE9TUiBjb2Rl
IGRlY2lkZWQgZm9yIGFueSBzcHVyaW91cyByZWFzb24gdGhhdCBpdCBkaWQgbm90IHdhbnQgdG8g
T1NSCisgICAgLy8gcmlnaHQgbm93LiBTbywgd2Ugb25seSB0cmlnZ2VyIHJlb3B0aW1pemF0aW9u
IG9ubHkgdXBvbiB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgKG5vbi1sb29wKQorICAgIC8vIHJlb3B0
aW1pemF0aW9uIHRyaWdnZXIuCisgICAgaWYgKG9wdGltaXplZENvZGVCbG9jay0+c2hvdWxkUmVv
cHRpbWl6ZU5vdygpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJp
bnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBP
U1IgZmFpbCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CisjZW5k
aWYKKyAgICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIE9TUiBmYWlsZWQgdGhpcyB0aW1l
LCBidXQgaXQgbWlnaHQgc3VjY2VlZCBuZXh0IHRpbWUhIExldCB0aGUgY29kZSBydW4gYSBiaXQK
ICAgICAvLyBsb25nZXIgYW5kIHRoZW4gdHJ5IGFnYWluLgogICAgIGNvZGVCbG9jay0+b3B0aW1p
emVBZnRlcldhcm1VcCgpOwpAQCAtMTk3Miw4ICsyMDEyLDIzIEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNr
RnJhbWUuY2FsbEZyYW1lOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKTsKICAgICAKLSAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNl
bWVudCgpKQorI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgcHJpbnRmKCJFbnRlcmVk
IG9wdGltaXplX2Zyb21fcmV0IHdpdGggZXhlY3V0ZUNvdW50ZXIgPSAlZCwgcmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXIgPSAldSwgb3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID0gJXVcbiIsIGNv
ZGVCbG9jay0+ZXhlY3V0ZUNvdW50ZXIoKSwgY29kZUJsb2NrLT5yZW9wdGltaXphdGlvblJldHJ5
Q291bnRlcigpLCBjb2RlQmxvY2stPm9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpKTsKKyNlbmRp
ZgorCisgICAgaWYgKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSkgeworI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCisgICAgICAgIHByaW50ZigiUmV0dXJuaW5nIGZyb20g
b2xkIEpJVCBjYWxsIGZyYW1lIHdpdGggb3B0aW1pemVkIHJlcGxhY2VtZW50ICVwKCVwKSwgd2l0
aCBzdWNjZXNzL2ZhaWwgJXUvJXUuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1l
bnQoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3VudGVy
KCksIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpKTsK
KyNlbmRpZgorICAgICAgICBpZiAoY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5zaG91bGRSZW9w
dGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgICAgICAgICAg
cHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gcmV0dXJuKS5c
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAg
ICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgCiAgICAgaWYgKCFjb2RlQmxv
Y2stPnNob3VsZE9wdGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJl
dmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDE4IEBAIERGRzo6SW50cmluc2ljIE5h
dGl2ZUV4ZWN1dGFibGU6OmludHJpbnMKIH0KICNlbmRpZgogCisvLyBVdGlsaXR5IG1ldGhvZCB1
c2VkIGZvciBqZXR0aXNvbmluZyBjb2RlIGJsb2Nrcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dGF0aWMgdm9pZCBqZXR0aXNvbkNvZGVCbG9jayhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE93
blB0cjxUPiYgY29kZUJsb2NrKQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUo
KSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CisgICAgT3duUHRyPFQ+IGNvZGVCbG9ja1RvSmV0dGlzb24gPSBjb2RlQmxvY2su
cmVsZWFzZSgpOworICAgIGNvZGVCbG9jayA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8VD4oY29kZUJs
b2NrVG9KZXR0aXNvbi0+cmVsZWFzZUFsdGVybmF0aXZlKCkpOworICAgIGNvZGVCbG9ja1RvSmV0
dGlzb24tPnVubGlua0luY29taW5nQ2FsbHMoKTsKKyAgICBnbG9iYWxEYXRhLmhlYXAuYWRkSmV0
dGlzb25Db2RlQmxvY2soc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KGNvZGVCbG9ja1Rv
SmV0dGlzb24ucmVsZWFzZSgpKSk7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRh
YmxlOjpzX2luZm8gPSB7ICJTY3JpcHRFeGVjdXRhYmxlIiwgJkV4ZWN1dGFibGVCYXNlOjpzX2lu
Zm8sIDAsIDAgfTsKIAogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7
ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAgfTsKQEAg
LTIxMSw2ICsyMjMsMTMgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJu
YQogICAgIHJldHVybiAwOwogfQogCit2b2lkIEV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGlt
aXplZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJs
b2NrKGdsb2JhbERhdGEsIG1fZXZhbENvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fZXZhbENvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2RlRm9y
Q2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBFdmFsRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXMsICZzX2luZm8pOwpAQCAtMzMwLDYgKzM0OSwxMyBAQCBKU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgUHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9wcm9ncmFtQ29kZUJs
b2NrKTsKKyAgICBtX2ppdENvZGVGb3JDYWxsID0gbV9wcm9ncmFtQ29kZUJsb2NrLT5nZXRKSVRD
b2RlKCk7CisgICAgQVNTRVJUKCFtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2spOworfQor
CiB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp1bmxpbmtDYWxscygpCiB7CiAjaWYgRU5BQkxFKEpJ
VCkKQEAgLTUzMyw2ICs1NTksMjAgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29t
cGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCit7Cisg
ICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JDYWxsKTsKKyAg
ICBtX2ppdENvZGVGb3JDYWxsID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5nZXRKSVRDb2RlKCk7Cisg
ICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDYWxsLT5n
ZXRKSVRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEpCit7CisgICAgamV0dGlzb25Db2RlQmxvY2soZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpOworICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IG1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT5nZXRKSVRDb2RlKCk7CisgICAgbV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5
Q2hlY2sgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNr
KCk7Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogewogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpcywgJnNf
aW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNyw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXpl
ZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAgdm9pZCBq
ZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgRXZhbENvZGVC
bG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC0zOTIsNiArMzk0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAgICAKKyAgICAgICAg
dm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQogICAgICAgICB7CkBAIC00NzUsNiAr
NDc5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqLCBFeGVj
U3RhdGUqIGNhbGxlZUFyZ3NFeGVjID0gMCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNHbG9iYWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBp
c0dlbmVyYXRlZEZvckNhbGwoKSBjb25zdAogICAgICAgICB7CkBAIC00OTgsNiArNTA0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoSlNHbG9i
YWxEYXRhJik7CiAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0
CiAgICAgICAgIHsKQEAgLTUzOCw2ICs1NDYsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChleGVjLCBzY29wZUNoYWlu
Tm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkg
CisgICAgICAgICAgICAgICAgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChnbG9iYWxEYXRh
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChraW5kID09IENv
ZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZv
ckNvbnN0cnVjdChnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgYm9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCaXRWZWN0b3JfaAorI2RlZmluZSBCaXRWZWN0b3JfaAorCisjaW5jbHVkZSA8YWxn
b3JpdGhtPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBp
cyBhIHNwYWNlLWVmZmljaWVudCwgcmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIEluIHRoZSBj
b21tb24gY2FzZSBpdAorLy8gb2NjdXBpZXMgb25lIHdvcmQsIGJ1dCBpZiBuZWNlc3NhcnksIGl0
IHdpbGwgaW5mbGF0ZSB0aGlzIG9uZSB3b3JkIHRvIHBvaW50CisvLyB0byBhIHNpbmdsZSBjaHVu
ayBvZiBvdXQtb2YtbGluZSBhbGxvY2F0ZWQgc3RvcmFnZSB0byBzdG9yZSBhbiBhcmJpdHJhcnkg
bnVtYmVyCisvLyBvZiBiaXRzLgorLy8KKy8vIC0gVGhlIGJpdHZlY3RvciBuZWVkcyB0byBiZSBy
ZXNpemVkIG1hbnVhbGx5IChqdXN0IGNhbGwgZW5zdXJlU2l6ZSgpKS4KKy8vCisvLyAtIFRoZSBi
aXR2ZWN0b3IgcmVtZW1iZXJzIHRoZSBib3VuZCBvZiBob3cgbWFueSBiaXRzIGNhbiBiZSBzdG9y
ZWQsIGJ1dCB0aGlzCisvLyAgIG1heSBiZSBzbGlnaHRseSBncmVhdGVyIChieSBhcyBtdWNoIGFz
IHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29uc3RhbnQpCisvLyAgIHRoYW4gdGhlIGxhc3QgYXJn
dW1lbnQgcGFzc2VkIHRvIGVuc3VyZVNpemUoKS4KKy8vCisvLyAtIEFjY2Vzc2VzIEFTU0VSVCB0
aGF0IHlvdSBhcmUgd2l0aGluIGJvdW5kcy4KKy8vCisvLyAtIEJpdHMgYXJlIG5vdCBhdXRvbWF0
aWNhbGx5IGluaXRpYWxpemVkIHRvIHplcm8uCisvLworLy8gT24gdGhlIG90aGVyIGhhbmQsIHRo
aXMgQml0VmVjdG9yIGNsYXNzIG1heSBub3QgYmUgdGhlIGZhc3Rlc3QgYXJvdW5kLCBzaW5jZQor
Ly8gaXQgZG9lcyBjb25kaXRpb25hbHMgb24gZXZlcnkgZ2V0L3NldC9jbGVhci4gQnV0IGl0IGlz
IGdyZWF0IGlmIHlvdSBuZWVkIHRvCisvLyBqdWdnbGUgYSBsb3Qgb2YgdmFyaWFibGUtbGVuZ3Ro
IEJpdFZlY3RvcnMgYW5kIHlvdSdyZSB3b3JyaWVkIGFib3V0IHdhc3RpbmcKKy8vIHNwYWNlLgor
CitjbGFzcyBCaXRWZWN0b3IgeworcHVibGljOiAKKyAgICBCaXRWZWN0b3IoKQorICAgICAgICA6
IG1fYml0c09yUG9pbnRlcihtYWtlSW5saW5lQml0cygwKSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIEJpdFZlY3Rvcihjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgICAgICA6IG1fYml0c09y
UG9pbnRlcihtYWtlSW5saW5lQml0cygwKSkKKyAgICB7CisgICAgICAgICgqdGhpcykgPSBvdGhl
cjsKKyAgICB9CisgICAgCisgICAgfkJpdFZlY3RvcigpCisgICAgeworICAgICAgICBpZiAoaXNJ
bmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVz
dHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3ImIG9wZXJh
dG9yPShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IG5l
d0JpdHNPclBvaW50ZXI7CisgICAgICAgIGlmIChvdGhlci5pc0lubGluZSgpKQorICAgICAgICAg
ICAgbmV3Qml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0T2ZM
aW5lQml0czo6Y3JlYXRlKG90aGVyLnNpemUoKSk7CisgICAgICAgICAgICBtZW1jcHkobmV3T3V0
T2ZMaW5lQml0cy0+Yml0cygpLCBvdGhlci5iaXRzKCksIGJ5dGVDb3VudChvdGhlci5zaXplKCkp
KTsKKyAgICAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obmV3T3V0T2ZMaW5lQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0lubGlu
ZSgpKQorICAgICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkp
OworICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBuZXdCaXRzT3JQb2ludGVyOworICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fYml0c09yUG9pbnRlciA+PiBtYXhJbmxpbmVCaXRzKCkpCisgICAgICAgICAg
ICByZXR1cm4gbWF4SW5saW5lQml0cygpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygp
LT5udW1CaXRzKCk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1CaXRz
KQorICAgIHsKKyAgICAgICAgaWYgKG51bUJpdHMgPD0gc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICByZXNpemVPdXRPZkxpbmUobnVtQml0cyk7CisgICAgfQorICAgIAorICAg
IC8vIExpa2UgZW5zdXJlU2l6ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2Yg
dGhlIGJpdHZlY3Rvci4KKyAgICB2b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cykKKyAgICB7Cisg
ICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgaWYgKG51bUJpdHMgPD0gbWF4SW5saW5lQml0cygpKSB7CisgICAgICAgICAgICBPdXRP
ZkxpbmVCaXRzKiBteU91dE9mTGluZUJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgICAgICAg
ICBtX2JpdHNPclBvaW50ZXIgPSBtYWtlSW5saW5lQml0cygqbXlPdXRPZkxpbmVCaXRzLT5iaXRz
KCkpOworICAgICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShteU91dE9mTGluZUJpdHMp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXNp
emVPdXRPZkxpbmUobnVtQml0cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJBbGwoKQor
ICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICBtX2JpdHNPclBvaW50
ZXIgPSBtYWtlSW5saW5lQml0cygwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnplcm8o
b3V0T2ZMaW5lQml0cygpLT5iaXRzKCksIGJ5dGVDb3VudChzaXplKCkpKTsKKyAgICB9CisKKyAg
ICBib29sIGdldChzaXplX3QgYml0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGJpdCA8
IHNpemUoKSk7CisgICAgICAgIHJldHVybiAhIShiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIo
KV0gJiAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJpdHNJblBvaW50ZXIo
KSAtIDEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgYml0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGJpdCA8IHNpemUoKSk7CisgICAgICAgIGJpdHMoKVtiaXQgPj4gYml0
c0luUG9pbnRlcigpXSB8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJp
dHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoc2l6ZV90
IGJpdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXQgPCBzaXplKCkpOworICAgICAgICBiaXRz
KClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0gJj0gfihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
IDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXQoc2l6ZV90IGJpdCwgYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZSkK
KyAgICAgICAgICAgIHNldChiaXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGVhcihi
aXQpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBv
aW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHNpemVvZih2b2lkKikgPDwgMzsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIG1heElubGluZUJpdHMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJpdHNJblBvaW50ZXIoKSAtIDE7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMg
ZnVuY3Rpb24gcmVsaWVzIG9uIGJpdENvdW50IGJlaW5nIGEgbXVsdGlwbGUgb2YgYml0c0luUG9p
bnRlcigpCisgICAgc3RhdGljIHNpemVfdCBieXRlQ291bnQoc2l6ZV90IGJpdENvdW50KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCEoYml0Q291bnQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsK
KyAgICAgICAgcmV0dXJuIGJpdENvdW50ID4+IDM7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB1
aW50cHRyX3QgbWFrZUlubGluZUJpdHModWludHB0cl90IGJpdHMpCisgICAgeworICAgICAgICBB
U1NFUlQoIShiaXRzICYgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0
cygpKSkpOworICAgICAgICByZXR1cm4gYml0cyB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
IDw8IG1heElubGluZUJpdHMoKSk7CisgICAgfQorICAgIAorICAgIGNsYXNzIE91dE9mTGluZUJp
dHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgc2l6ZV90IG51bUJpdHMoKSBjb25zdCB7IHJldHVy
biBtX251bUJpdHM7IH0KKyAgICAgICAgc2l6ZV90IG51bVdvcmRzKCkgY29uc3QgeyByZXR1cm4g
KG1fbnVtQml0cyArIGJpdHNJblBvaW50ZXIoKSAtIDEpID4+IGJpdHNJblBvaW50ZXIoKTsgfQor
ICAgICAgICB1aW50cHRyX3QqIGJpdHMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdCo+KHRoaXMgKyAxKTsgfQorICAgICAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25z
dCB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnRwdHJfdCo+KHRoaXMgKyAxKTsg
fQorICAgICAgICAKKyAgICAgICAgc3RhdGljIE91dE9mTGluZUJpdHMqIGNyZWF0ZShzaXplX3Qg
bnVtQml0cykKKyAgICAgICAgeworICAgICAgICAgICAgbnVtQml0cyA9IChudW1CaXRzICsgYml0
c0luUG9pbnRlcigpIC0gMSkgJiB+Yml0c0luUG9pbnRlcigpOworICAgICAgICAgICAgcmV0dXJu
IG5ldyAoZmFzdE1hbGxvYyhzaXplb2YoT3V0T2ZMaW5lQml0cykgKyAobnVtQml0cyA+PiBiaXRz
SW5Qb2ludGVyKCkpKSkgT3V0T2ZMaW5lQml0cyhudW1CaXRzKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJveShPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVC
aXRzKQorICAgICAgICB7CisgICAgICAgICAgICBmYXN0RnJlZShvdXRPZkxpbmVCaXRzKTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgT3V0T2ZMaW5lQml0cyhzaXplX3QgbnVt
Qml0cykKKyAgICAgICAgICAgIDogbV9udW1CaXRzKG51bUJpdHMpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgc2l6ZV90IG1fbnVtQml0czsKKyAgICB9OworICAgIAor
ICAgIGJvb2wgaXNJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2JpdHNPclBvaW50ZXIgPj4gbWF4
SW5saW5lQml0cygpOyB9CisgICAgCisgICAgY29uc3QgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5l
Qml0cygpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgT3V0T2ZMaW5lQml0
cyo+KG1fYml0c09yUG9pbnRlcik7IH0KKyAgICBPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRz
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQb2lu
dGVyKTsgfQorICAgIAorICAgIHZvaWQgcmVzaXplT3V0T2ZMaW5lKHNpemVfdCBudW1CaXRzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG51bUJpdHMgPiBtYXhJbmxpbmVCaXRzKCkpOworICAgICAg
ICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0gT3V0T2ZMaW5lQml0czo6Y3JlYXRl
KG51bUJpdHMpOworICAgICAgICBtZW1jcHkobmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBiaXRz
KCksIGJ5dGVDb3VudChzdGQ6Om1pbihzaXplKCksIG51bUJpdHMpKSk7CisgICAgICAgIGlmICgh
aXNJbmxpbmUoKSkKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHM6OmRlc3Ryb3kob3V0T2ZMaW5l
Qml0cygpKTsKKyAgICAgICAgbV9iaXRzT3JQb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG5ld091dE9mTGluZUJpdHMpOworICAgIH0KKyAgICAKKyAgICB1aW50cHRyX3QqIGJp
dHMoKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4g
Jm1fYml0c09yUG9pbnRlcjsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+Yml0cygp
OworICAgIH0KKyAgICAKKyAgICBjb25zdCB1aW50cHRyX3QqIGJpdHMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gJm1fYml0c09yUG9p
bnRlcjsKKyAgICAgICAgcmV0dXJuIG91dE9mTGluZUJpdHMoKS0+Yml0cygpOworICAgIH0KKyAg
ICAKKyAgICB1aW50cHRyX3QgbV9iaXRzT3JQb2ludGVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKK3VzaW5nIFdURjo6Qml0VmVjdG9yOworCisjZW5kaWYgLy8gQml0VmVjdG9yX2gK
</data>
<flag name="review"
          id="105007"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108215</attachid>
            <date>2011-09-21 13:05:19 -0700</date>
            <delta_ts>2011-09-21 14:04:21 -0700</delta_ts>
            <desc>the patch - fix review, windows</desc>
            <filename>recomp_patch_12.diff</filename>
            <type>text/plain</type>
            <size>71567</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAyIEBA
CisyMDExLTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBzdXBwb3J0IGNvbnRpbnVvdXMgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODMyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIHRoZSBh
YmlsaXR5IHRvIHJlb3B0aW1pemUgYSBjb2RlIGJsb2NrIGlmIHNwZWN1bGF0aW9uCisgICAgICAg
IGZhaWx1cmVzIGhhcHBlbiBmcmVxdWVudGx5LiA2JSBzcGVlZC11cCBvbiBLcmFrZW4sIDElIHNs
b3ctZG93bgorICAgICAgICBvbiBWOCwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTdHJvbmdQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09T
UkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAoSlNDOjpERkc6OmdldE9TUkVudHJ5RGF0
YUJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6RHVtbXlNYXJrSG9vazo6bWFyayk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcik6Cisg
ICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbik6CisgICAgICAg
IChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0
aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRKZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9S
ZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Qml0VmVjdG9yKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjp+Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0KToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ynl0ZUNvdW50KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjptYWtlSW5saW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6bnVtQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5l
Qml0czo6bnVtV29yZHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6
OmJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJbmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
Om91dE9mTGluZUJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGlu
ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIEhlYXAgY2xlYW51
cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNw
YWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsOCBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApAQCAtNDY0LDYg
KzQ2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0F0b21p
Y3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BVkxUcmVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tTdGFjay5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVIZWFwLmNwcCBcCiAg
ICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAgXAorICAgIGhlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgXAogICAgIGhlYXAvTWFya1N0YWNrLmNwcCBcCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE5NzQsNiArMTk3NCwxNCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmls
ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXExvY2FsLmgiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw2ICs2MzcsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgog
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQml0VmVjdG9yLmgiCisJCQk+CisJ
CTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdG1hcC5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQAogCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki87IH07CiAJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3
MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlz
b25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgy
RjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovOyB9OworCQkwRkQ4MkY0QjE0Mjgw
NkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3
RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyog
SlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNiw5IEBACiAJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAv
KiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50
cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI5MTQyNkNB
NUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MjEsNiArMTYyNyw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkYyODE0
MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovLAorCQkJCTBGRDgy
RjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovLAogCQkJCUE3
MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuaCAqLywKIAkJCQlBNzA0
NTZBRTE0MjdGQjAzMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKIAkJCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLApAQCAt
MTc5Nyw2ICsxODA1LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGNDkxNDI4
MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8s
CiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCkBAIC0yNDIzLDYgKzI0
MzIsOCBAQAogCQkJCUJDMjU3REU4MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8q
IEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0
IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkVGNTE0
MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDk3LDYgKzMxMDgsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJ
CQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjgsNyArMTQyOCwxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5
bWJvbFRhYmxlKHN5bVRhYikKICAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCisgICAg
LCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoMCkKKyAgICAsIG1fc3BlY3VsYXRpdmVGYWls
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIApAQCAtMTkzNSw2ICsxOTM4LDI3IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREYKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KHRoaXMpOwogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwo
dGhpcyk7CiB9CisKK3ZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25D
b2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcihnbG9iYWxEYXRh
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC0xOTc0LDggKzE5OTgsOCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgIHByaW50ZigiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSlu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMg
LyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzID49IDAuNzUKLSAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSA+PSAwLjUpCisgICAgaWYgKCghbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBu
dW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA+PSAwLjc1KQorICAgICAgICAmJiAoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgPj0gMC41KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIrKzsKQEAgLTIwMTQsNyArMjAzOCwxMiBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgIH0KICAgICBmcHJpbnRmKHN0ZGVyciwgIlNsb3dDYXNl
UHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZTbG93Q2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBTbG93Q2FzZVByb2Zp
bGUqIHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+
bV9jb3VudGVyKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTcGVjaWFsRmFzdENhc2VQ
cm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBSYXJlQ2Fz
ZVByb2ZpbGUqIHByb2ZpbGUgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJDb21wYWN0SklU
Q29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpA
QCAtMzMzLDYgKzMzNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIGFwcGVuZERGR09TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7CisgICAgICAgICAgICBlbnRyeS5tX2J5dGVj
b2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgICAgICAgICAgZW50cnkubV9tYWNoaW5lQ29k
ZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICAgICAgbV9kZmdPU1JFbnRyeS5h
cHBlbmQoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICZtX2RmZ09TUkVudHJ5Lmxhc3QoKTsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR09TUkVudHJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2RmZ09TUkVudHJ5LnNpemUoKTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5
RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2RmZ09TUkVudHJ5
W2ldOyB9CisgICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiaW5hcnlTZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6Omdl
dE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXg+KG1fZGZnT1NSRW50cnkuYmVnaW4oKSwgbV9kZmdP
U1JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTM2MCw5ICszNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgp
OyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7
IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAg
ICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY4NSwxMSArNzAzLDM3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQg
d2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCiAgICAgICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KICAgICAgICAgCisgICAgICAgIC8vIFdo
ZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBh
CisgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0
aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgor
ICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9
IDE4KTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Cisg
ICAgICAgICAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IDE4KQorICAgICAg
ICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAxODsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKLSAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhvZHMgZnJvbSBKSVQt
Z2VuZXJhdGVkIGNvZGUuCisgICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xMDAwOwor
ICAgICAgICAgICAgcmV0dXJuIC0xMDAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTUw
MDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKQpAQCAtNjk3LDEyICs3
NDEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gJm1fZXhlY3V0ZUNv
dW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZXhlY3V0ZUNvdW50ZXIpOyB9CisKKyAgICAgICAgaW50MzJfdCBleGVjdXRlQ291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOyB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
Zm9yY2UgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcwogICAg
ICAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBp
Y2FsbHkgbW9yZQogICAgICAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewot
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgICAgICBtX2V4ZWN1dGVD
b3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtNzI2LDYgKzc3NiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9u
bHkgYWZ0ZXIKKyAgICAgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNv
dW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0
aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KICAgICAgICAg
Ly8gc3VjY2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxs
cyBhcmUKQEAgLTc0NiwxOCArODAzLDcyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBp
biB0aGUgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKKyAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tz
IGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGVu
IHRvIHJlb3B0aW1pemUuIEl0J3MgaW50ZXJlc3RpbmcgdG8gbm90ZSB0aGF0IHRoZXNlCisgICAg
ICAgIC8vIGNvdW50ZXJzIG1heSBvdmVyZmxvdyB3aXRob3V0IGFueSBwcm90ZWN0aW9uLiBUaGUg
c3VjY2VzcworICAgICAgICAvLyBjb3VudGVyIHdpbGwgb3ZlcmZsb3cgYmVmb3JlIHRoZSBmYWls
IG9uZSBkb2VzLCBiZWN1YXNlIHRoZQorICAgICAgICAvLyBmYWlsIG9uZSBpcyB1c2VkIGFzIGEg
dHJpZ2dlciB0byByZW9wdGltaXplLiBTbyB0aGUgd29yc3QgY2FzZQorICAgICAgICAvLyBpcyB0
aGF0IHRoZSBzdWNjZXNzIGNvdW50ZXIgb3ZlcmZsb3dzIGFuZCB3ZSByZW9wdGltaXplIHdpdGhv
dXQKKyAgICAgICAgLy8gbmVlZGluZyB0by4gQnV0IHRoaXMgaXMgaGFybWxlc3MuIElmIGEgbWV0
aG9kIHJlYWxseSBkaWQKKyAgICAgICAgLy8gZXhlY3V0ZSAyXjMyIHRpbWVzIHRoZW4gY29tcGls
aW5nIGl0IGFnYWluIHByb2JhYmx5IHdvbid0IGh1cnQKKyAgICAgICAgLy8gYW55b25lLgorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcisrOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygp
IHsgcmV0dXJuIDY7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVy
ZXMgdGhhdCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KKyAgICAgICAgdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVuc2lnbmVkIGxhcmdlRmFp
bENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRT
dWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRp
dmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
Pj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAgICAgIH0KICAgICAgICAg
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIHNob3VsZE9wdGltaXpl
Tm93KCk7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50KCkgIT0gdGhpcyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAg
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKICAgICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygpOwpAQCAt
ODI3LDYgKzkzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworICAg
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fZGZnT1NSRW50cnk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTg1MSw3ICs5NjMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsK
IAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1f
c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKKyAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyOwogICAgICAgICB1aW50OF90IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
OworICAgICAgICB1aW50OF90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAKICAgICAg
ICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC05MDksNiArMTAyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05MzUsNiArMTA1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05NjIsNiArMTA3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChwcm9maWxlKTsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uID0gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgWyV1LCAldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFtAJXUsIGJjIyV1XSBw
cmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9uVG9T
dHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDkgQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIC8vICAgICAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwogICAgIC8v
ICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KICAgICAvLworICAgIC8vICAgICAoZCkg
RnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0
aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4g
cmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLwogICAgIC8vICAgICBUbyBl
bnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KICAgICAv
LyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKICAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4g
ZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgpAQCAtNDE1LDEx
ICs0MTgsNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAg
IC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0
aGUgY291bnRlciB3aWxsIG5ldmVyCiAgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CiAgICAgLy8gICAg
IHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGlj
aCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQg
KGIpLiBUaGlzIGhldXJpc3RpYyBtYXkgbmVlZCB0byBiZQotICAgIC8vICAgICByZXRob3VnaHQg
aW4gdGhlIGZ1dHVyZSwgcGFydGljdWxhcmx5IGlmIHdlIHN1cHBvcnQgcmVvcHRpbWl6aW5nIGNv
ZGUKLSAgICAvLyAgICAgd2l0aCBuZXcgdmFsdWUgcHJvZmlsZXMgZ2F0aGVyZWQgZnJvbSBjb2Rl
IHRoYXQgZGlkIE9TUiBleGl0LgorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkg
YW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8vICAgICBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KKyAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICAgbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgorICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vICAgICBjb3VudGVyIHRvIDA7IG90aGVy
d2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLgorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGFkZDMyKEltbTMy
KC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Cisg
ICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxv
d09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSks
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKTsK
KyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgc3RvcmUzMihJbW0z
MihDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKSksIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOworICAgIAorICAgIGZld0ZhaWxz
LmxpbmsodGhpcyk7CisgICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9y
ZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAKKyAgICBkb25lQWRqdXN0aW5nLmxp
bmsodGhpcyk7CiAgICAgCiAgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBi
eXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKQEAgLTQ4MSw2ICs1MTMsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFsIHJldHVy
biBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgogICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJldHVyblBD
KTsKKyAgICAKKyAgICBhZGRQdHIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhjb2RlQmxvY2so
KS0+YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7CiB9CiAKIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKQEAgLTQ5OCwxMCArNTMyLDYgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2ZSA9IHNwZWN1
bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3BlY3VsYXRpdmUs
IGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0jaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCi0gICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
Ci0jZW5kaWYKLSAgICAKICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogCiAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGV4Y2VwdGlvbiBj
aGVja3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw0NiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQogICAgIHsK
LSAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYmFzaWNCbG9jay5ieXRlY29kZUJl
Z2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjaWYgRU5B
QkxFKERGR19PU1JfRU5UUlkpCisgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxv
Y2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlm
ZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxhc3RM
aXZlTG9jYWwgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1lbnQgKyAxKTsKKyAgICAgICAgICAgIGVu
dHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUFyZ3VtZW50OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2V0KGkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVB
cmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUxvY2Fs
KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxv
Y2FsICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFz
dExpdmVMb2NhbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2Nh
bHNbaV0udmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZl
VmFyaWFibGVzLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7CisjZWxzZQorICAgICAgICBV
TlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CisjZW5kaWYKICAgICB9CiAKIHByaXZhdGU6CkBAIC0z
NTMsNyArMzkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9T
UiBlbnRyeXBvaW50cy4KICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOwotICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0
aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIs
IGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVCghY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPm51bWJlck9mREZHT1NSRW50
cmllcygpKTsKIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJPU1Ig
aW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLCBieXRlY29kZUluZGV4KTsKQEAgLTY2LDYgKzY3LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIAorICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5k
ZXgpOwogICAgIAogICAgIC8vIFRoZSBjb2RlIGJlbG93IGNoZWNrcyBpZiBpdCBpcyBzYWZlIHRv
IHBlcmZvcm0gT1NSIGVudHJ5LiBJdCBtYXkgZmluZAogICAgIC8vIHRoYXQgaXQgaXMgdW5zYWZl
IHRvIGRvIHNvLCBmb3IgYW55IG51bWJlciBvZiByZWFzb25zLCB3aGljaCBhcmUgZG9jdW1lbnRl
ZApAQCAtOTcsNyArMTAxLDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgcHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAo
IXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJl
ZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBl
bnRyeS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdl
dChpKQorICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUs
MTEgKzExMCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0
IGFuIE9TUiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVj
LT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkp
KSkgeworICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQog
ICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlz
ICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5k
ZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rp
b24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBt
YWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0aGUgbWFjaGlu
ZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29kZU1hcC4KLSAg
ICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQgd2UgZXhwZWN0
IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkgcmFyZWx5LCBh
bmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8vICAgIGZldywg
dGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBvbmx5IHJlYWwK
LSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFwIGlzIHRvIGF2
b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBkYXRhIHN0cnVj
dHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0gICAgLy8gICAg
bWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29k
ZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWduZWQgbWFjaGlu
ZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAg
d2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAgICAgICAgdW5z
aWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRNYWNo
aW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRlY29kZUluZGV4
LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVudEJ5dGVjb2Rl
SW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNvZGVPZmZzZXQg
PSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4g
dGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2RlT2Zmc2V0KTsK
KyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBlbnRyeS0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
ICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNzICVwLlxu
IiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5
X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiArMzYsMTggQEAg
Y2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
K3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1
bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lubGluZSB1bnNp
Z25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlE
YXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKK30KKwog
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICAgICAgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVkZSAiSmV0dGlz
b25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDIwIEBAIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYgKHNpemVv
ZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290
cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJv
b3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQor
ICAgICwgbV9ibG9ja3MoYmxvY2tzKQoreworfQorCitDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKK3sKKyAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQorICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOworfQorCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFjaXR5
ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKQEAgLTQ0LDggKzYwLDE2IEBA
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsK
IH0KIAotaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyKQorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgoraW5s
aW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRp
bnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKKyAgICBtYXJrSG9v
ay5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9j
azo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxv
Y2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKQEAgLTcwLDcgKzk0LDggQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKgogICAgIG1fcm9vdHNbbV9zaXplKytd
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+
Cit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7
CiAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihiZWdpbikpIDwgMHgxMDAwMDAwKTsKQEAgLTc5LDcgKzEwNCwxOCBAQCB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8g
c2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxs
b2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihiZWdpbik7
IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAgICAgICAgYWRkKCppdCwg
ZmlsdGVyKTsKKyAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29r
KTsKK30KKwordm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQpCit7CisgICAgRHVtbXlNYXJrSG9vayBkdW1teU1hcmtIb29rOworICAgIGdlbmVyaWNBZGRT
cGFuKGJlZ2luLCBlbmQsIGR1bW15TWFya0hvb2spOworfQorCit2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpl
dHRpc29uZWRDb2RlQmxvY2tzKQoreworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGpl
dHRpc29uZWRDb2RlQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTQ2VsbDsKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29k
ZUJsb2NrcyYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMo
KTsKQEAgLTQ5LDcgKzUxLDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBp
bmxpbmVDYXBhY2l0eSA9IDEyODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNh
cGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKICAgICAKLSAgICB2b2lkIGFkZCh2b2lk
KiwgVGlueUJsb29tRmlsdGVyKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAg
ICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29r
Jik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAgICB2b2lkIGdlbmVyaWNB
ZGRTcGFuKHZvaWQqLCB2b2lkKiBlbmQsIE1hcmtIb29rJik7CisgICAgCiAgICAgdm9pZCBncm93
KCk7CiAKICAgICBKU0NlbGwqKiBtX3Jvb3RzOwpAQCAtNTksMjAgKzY2LDYgQEAgcHJpdmF0ZToK
ICAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotaW5saW5l
IENvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1Nl
dCogYmxvY2tzKQotICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQotICAgICwgbV9zaXplKDAp
Ci0gICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAgICwgbV9ibG9ja3MoYmxvY2tz
KQotewotfQotCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygp
Ci17Ci0gICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0
b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2Vs
bCopKTsKLX0KLQogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiB7CiAg
ICAgcmV0dXJuIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDExIEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3Rl
ZE9iamVjdHMoSGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmly
c3QpOwogfQogCit2b2lkIEhlYXA6OmFkZEpldHRpc29uZWRDb2RlQmxvY2soUGFzc093blB0cjxD
b2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmFkZENv
ZGVCbG9jayhjb2RlQmxvY2spOworfQorCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihW
ZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKIHsKICAgICBtX3RlbXBTb3J0aW5n
VmVjdG9ycy5hcHBlbmQodGVtcFZlY3Rvcik7CkBAIC00NTYsMjAgKzQ2MSwyMiBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cygpCiAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsK
IAogICAgIHZvaWQqIGR1bW15OwotCisgICAgCiAgICAgLy8gV2UgZ2F0aGVyIGNvbnNlcnZhdGl2
ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2UgY29uc2VydmF0aXZlCiAg
ICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRlcm1pbmUgd2hldGhlciBh
IHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBDb25zZXJ2YXRpdmVSb290cyBtYWNoaW5lVGhyZWFk
Um9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCkpOwogICAgIG1fbWFjaGluZVRocmVhZHMuZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkpOwogCiAgICAg
Q29uc2VydmF0aXZlUm9vdHMgcmVnaXN0ZXJGaWxlUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tz
KCkpOwotICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVy
RmlsZVJvb3RzKTsKKyAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAg
ICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290
cywgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5k
ZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKIAogICAgIGNsZWFyTWFya3MoKTsKIAogICAgIFNs
b3RWaXNpdG9yJiB2aXNpdG9yID0gbV9zbG90VmlzaXRvcjsKICAgICBIZWFwUm9vdFZpc2l0b3Ig
aGVhcFJvb3RWaXNpdG9yKHZpc2l0b3IpOwotCisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQobWFj
aGluZVRocmVhZFJvb3RzKTsKICAgICB2aXNpdG9yLmRyYWluKCk7CiAKQEAgLTQ5Myw2ICs1MDAs
OSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAKICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhl
YXBSb290VmlzaXRvcik7CiAgICAgdmlzaXRvci5kcmFpbigpOworICAgIAorICAgIG1famV0dGlz
b25lZENvZGVCbG9ja3MudHJhY2VDb2RlQmxvY2tzKHZpc2l0b3IpOworICAgIHZpc2l0b3IuZHJh
aW4oKTsKIAogICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNl
IHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgogICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRl
cm1pbmUgcmVhY2hhYmlsaXR5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJBbGxvY2F0aW9uU3BhY2UuaCIK
ICNpbmNsdWRlICJIYW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKKyNpbmNs
dWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgpAQCAt
OTgsNiArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNW
YWx1ZSk7CiAgICAgICAgIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhl
IHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSmV0
dGlzb25lZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOwogCiAgICAgICAgIHNpemVf
dCBzaXplKCk7CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpOwpAQCAtMTkxLDYgKzE5NCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOwogICAg
ICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5k
bGVTdGFjazsKKyAgICAgICAgSmV0dGlzb25lZENvZGVCbG9ja3MgbV9qZXR0aXNvbmVkQ29kZUJs
b2NrczsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNv
bmVkQ29kZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK0pldHRpc29uZWRDb2RlQmxvY2tzOjpKZXR0aXNvbmVkQ29k
ZUJsb2NrcygpIHsgfQorCitKZXR0aXNvbmVkQ29kZUJsb2Nrczo6fkpldHRpc29uZWRDb2RlQmxv
Y2tzKCkKK3sKKyAgICBXVEY6OmRlbGV0ZUFsbEtleXMobV9tYXApOworfQorCit2b2lkIEpldHRp
c29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQobV9tYXAuZmluZChjb2RlQmxvY2suZ2V0KCkpID09IG1fbWFw
LmVuZCgpKTsKKyAgICAKKyAgICBtX21hcC5hZGQoY29kZUJsb2NrLmxlYWtQdHIoKSwgZmFsc2Up
OworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjpjbGVhck1hcmtzKCkKK3sKKyAgICBI
YXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7
CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5k
KCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0g
YmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnNlY29uZCA9IGZhbHNl
OworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9j
a3MoKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sqPiB0b1JlbW92ZTsKKyAgICAKKyAgICBIYXNo
TWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7Cisg
ICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7
CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVn
aW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQpCisg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXRlci0+Zmlyc3QpOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgbV9tYXAucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ld
OworICAgIH0KK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tz
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJv
b2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFw
PENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCisgICAgICAgIGl0ZXItPmZpcnN0LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSmV0dGlzb25lZENvZGVCbG9ja3NfaAorI2RlZmluZSBKZXR0aXNv
bmVkQ29kZUJsb2Nrc19oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFz
cyBKZXR0aXNvbmVkQ29kZUJsb2NrcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7IC8v
IE9ubHkgbWFsbG9jJ2QgaW4gQ29uc2VydmF0aXZlUm9vdHMKK3B1YmxpYzoKKyAgICBKZXR0aXNv
bmVkQ29kZUJsb2NrcygpOworICAgIAorICAgIH5KZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAg
IAorICAgIHZvaWQgYWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgCisg
ICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0
ZUNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5k
IC0xIGJlY2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KKyAg
ICAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgYm90
aCBvZiB0aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCisgICAgICAgIC8vIDAgKyAxID0gMQor
ICAgICAgICAvLyAtMSArIDEgPSAwCisgICAgICAgIGlmICh2YWx1ZSArIDEgPD0gMSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGNh
bmRpZGF0ZUNvZGVCbG9jaykpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaXRlci0+c2Vjb25kID0gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB2b2lk
IHRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIC8vIEl0IHdv
dWxkIGJlIGdyZWF0IHRvIHVzZSBhbiBPd25QdHI8Q29kZUJsb2NrPiBoZXJlIGJ1dCB0aGF0IHdv
dWxkCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBub3Qgd29yay4KKyAgICBIYXNoTWFwPENvZGVC
bG9jayosIGJvb2w+IG1fbWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMSBAQCB2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29u
c2VydmF0aXZlUm9vCiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpKTsK
IH0KIAordm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpldHRp
c29uZWRDb2RlQmxvY2tzKQoreworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBl
bmQoKSwgamV0dGlzb25lZENvZGVCbG9ja3MpOworfQorCiB2b2lkIFJlZ2lzdGVyRmlsZTo6cmVs
ZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKIHsKICAgICBwdHJkaWZmX3QgZGVsdGEgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOworICAgIGNsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogCiAgICAgY2xh
c3MgUmVnaXN0ZXJGaWxlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVnaXN0ZXJG
aWxlKTsKQEAgLTY0LDYgKzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH5SZWdpc3Rl
ckZpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKKyAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290
cyhDb25zZXJ2YXRpdmVSb290cyYsIEpldHRpc29uZWRDb2RlQmxvY2tzJik7CiAKICAgICAgICAg
UmVnaXN0ZXIqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPiht
X3Jlc2VydmF0aW9uLmJhc2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxNCw3ICsxOTE0LDIyIEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNr
RnJhbWUuYXJnc1swXS5pbnQzMigpOwogCi0gICAgaWYgKCFjb2RlQmxvY2stPmhhc09wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50
ZigiRW50ZXJlZCBvcHRpbWl6ZV9mcm9tX2xvb3Agd2l0aCBleGVjdXRlQ291bnRlciA9ICVkLCBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIg
PSAldVxuIiwgY29kZUJsb2NrLT5leGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJDb25z
aWRlcmluZyBsb29wIE9TUiBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIs
IGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpKSB7Cisj
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmlu
ZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3ApLlxuIiwgY29kZUJsb2NrLCBjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCkpOworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJl
b3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9w
dGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAg
cHJpbnRmKCJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICVwIChpbiBsb29wKSBiZWNhdXNlIG9m
IGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iLCBjb2RlQmxvY2spOwpAQCAtMTk1Miw2ICsxOTY3
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2VuZGlmCiAK
ICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKKyAgICAgICAgb3B0aW1pemVkQ29k
ZUJsb2NrLT5jb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpOwogICAgICAgICBTVFVCX1NFVF9SRVRV
Uk5fQUREUkVTUyhhZGRyZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NjAsNiAr
MTk3NiwzMCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAg
cHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBzdWNjZWVkZWQsIE9TUiBmYWlsZWQuXG4i
LCBjb2RlQmxvY2spOwogI2VuZGlmCiAKKyAgICAvLyBDb3VudCB0aGUgT1NSIGZhaWx1cmUgYXMg
YSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhhcHBlbnMgYSBsb3QsIHRoZW4KKyAgICAv
LyByZW9wdGltaXplLgorICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvbkZh
aWx1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50Zigi
RW5jb3VudGVyZWQgbG9vcCBPU1IgZmFpbHVyZSBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFp
bCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisKKyAg
ICAvLyBXZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdHJpZ2dlcmluZyByZW9w
dGltaXphdGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCisgICAgLy8gYmVmb3JlIGl0LiBJZiB3
ZSBlbnRlciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdnZXIgd2l0aCBhIGJ1Y2tldCBmdWxs
IG9mIGZhaWwKKyAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJlYWxseSB3b3VsZCBsaWtlIHRvIHJl
b3B0aW1pemUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2UgY292ZXJzCisgICAgLy8gc29tZXRo
aW5nIGVsc2U6IHRoZXJlIHdlcmVuJ3QgbWFueSAob3IgYW55KSBzcGVjdWxhdGlvbiBmYWlsdXJl
cyBiZWZvcmUsIGJ1dCB3ZSBqdXN0CisgICAgLy8gZmFpbGVkIHRvIGVudGVyIHRoZSBzcGVjdWxh
dGl2ZSBjb2RlIGJlY2F1c2Ugc29tZSB2YXJpYWJsZSBoYWQgdGhlIHdyb25nIHZhbHVlIG9yCisg
ICAgLy8gYmVjYXVzZSB0aGUgT1NSIGNvZGUgZGVjaWRlZCBmb3IgYW55IHNwdXJpb3VzIHJlYXNv
biB0aGF0IGl0IGRpZCBub3Qgd2FudCB0byBPU1IKKyAgICAvLyByaWdodCBub3cuIFNvLCB3ZSBv
bmx5IHRyaWdnZXIgcmVvcHRpbWl6YXRpb24gb25seSB1cG9uIHRoZSBtb3JlIGNvbnNlcnZhdGl2
ZSAobm9uLWxvb3ApCisgICAgLy8gcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KKyAgICBpZiAob3B0
aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklU
X1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24g
b2YgJXAoJXApIChpbiBsb29wIGFmdGVyIE9TUiBmYWlsKS5cbiIsIGNvZGVCbG9jaywgY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1p
emUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5leHQgdGlt
ZSEgTGV0IHRoZSBjb2RlIHJ1biBhIGJpdAogICAgIC8vIGxvbmdlciBhbmQgdGhlbiB0cnkgYWdh
aW4uCiAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CkBAIC0xOTcyLDggKzIw
MTIsMjMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIAotICAgIGlmIChjb2Rl
QmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9yZXQgd2l0aCBleGVjdXRl
Q291bnRlciA9ICVkLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIgPSAldVxuIiwgY29kZUJsb2NrLT5leGVjdXRlQ291bnRlcigpLCBjb2Rl
QmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAg
ICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6
ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkt
PnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5z
cGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2RlQmxvY2st
PnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRp
b24gb2YgJXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCkpOworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewogI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsMTggQEAgREZHOjpJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmlucwogfQogI2Vu
ZGlmCiAKKy8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tz
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPFQ+JiBjb2RlQmxvY2spCit7CisgICAgQVNT
RVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBPd25QdHI8VD4gY29kZUJs
b2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgY29kZUJsb2NrID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRp
dmUoKSk7CisgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygpOwor
ICAgIGdsb2JhbERhdGEuaGVhcC5hZGRKZXR0aXNvbmVkQ29kZUJsb2NrKHN0YXRpY19wb2ludGVy
X2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOworfQorCiBj
b25zdCBDbGFzc0luZm8gU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvID0geyAiU2NyaXB0RXhlY3V0
YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCAwIH07CiAKIGNvbnN0IENsYXNzSW5m
byBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRXZhbEV4ZWN1dGFibGUiLCAmU2NyaXB0RXhl
Y3V0YWJsZTo6c19pbmZvLCAwLCAwIH07CkBAIC0yMTEsNiArMjIzLDEzIEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBF
dmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxv
Y2spOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2V2YWxDb2RlQmxvY2stPmdldEpJVENvZGUo
KTsKKyAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Cit9CisKIHZv
aWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKQEAgLTMzMCw2
ICszNDksMTMgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAg
IHJldHVybiAwOwogfQogCit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXpl
ZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5s
aW5rQ2FsbHMoKQogewogI2lmIEVOQUJMRShKSVQpCkBAIC01MzMsNiArNTU5LDIwIEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICByZXR1cm4gMDsKIH0KIAor
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERh
dGEsIG1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fY29kZUJs
b2NrRm9yQ2FsbC0+Z2V0SklUQ29kZSgpOworICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjayA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7Cit9
CisKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBtX2ppdENvZGVGb3JD
b25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZSgpOworICAgIG1f
aml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
Nyw2ICszMjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIEV2YWxDb2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAg
ICAgICAgewpAQCAtMzkyLDYgKzM5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpT
R2xvYmFsRGF0YSYpOwogCiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVj
b2RlKCkKICAgICAgICAgewpAQCAtNDc1LDYgKzQ3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyA9IDApOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xv
YmFsRGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAg
ICAgICAgewpAQCAtNDk4LDYgKzUwNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRp
bWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNH
ZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAogICAgICAgICB7CkBAIC01MzgsNiArNTQ2LDE2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRG
b3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgICAgICB9CiAgICAgICAgIAor
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAorICAgICAgICAgICAgICAgIGpldHRpc29uT3B0
aW1pemVkQ29kZUZvckNhbGwoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAg
ICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Qml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRW
ZWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVj
dG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQml0VmVjdG9yX2gKKyNkZWZpbmUg
Qml0VmVjdG9yX2gKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgSEFWRShTVFJJTkdTX0gpCisj
aW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlz
IGlzIGEgc3BhY2UtZWZmaWNpZW50LCByZXNpemVhYmxlIGJpdHZlY3RvciBjbGFzcy4gSW4gdGhl
IGNvbW1vbiBjYXNlIGl0CisvLyBvY2N1cGllcyBvbmUgd29yZCwgYnV0IGlmIG5lY2Vzc2FyeSwg
aXQgd2lsbCBpbmZsYXRlIHRoaXMgb25lIHdvcmQgdG8gcG9pbnQKKy8vIHRvIGEgc2luZ2xlIGNo
dW5rIG9mIG91dC1vZi1saW5lIGFsbG9jYXRlZCBzdG9yYWdlIHRvIHN0b3JlIGFuIGFyYml0cmFy
eSBudW1iZXIKKy8vIG9mIGJpdHMuCisvLworLy8gLSBUaGUgYml0dmVjdG9yIG5lZWRzIHRvIGJl
IHJlc2l6ZWQgbWFudWFsbHkgKGp1c3QgY2FsbCBlbnN1cmVTaXplKCkpLgorLy8KKy8vIC0gVGhl
IGJpdHZlY3RvciByZW1lbWJlcnMgdGhlIGJvdW5kIG9mIGhvdyBtYW55IGJpdHMgY2FuIGJlIHN0
b3JlZCwgYnV0IHRoaXMKKy8vICAgbWF5IGJlIHNsaWdodGx5IGdyZWF0ZXIgKGJ5IGFzIG11Y2gg
YXMgc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyBjb25zdGFudCkKKy8vICAgdGhhbiB0aGUgbGFzdCBh
cmd1bWVudCBwYXNzZWQgdG8gZW5zdXJlU2l6ZSgpLgorLy8KKy8vIC0gQWNjZXNzZXMgQVNTRVJU
IHRoYXQgeW91IGFyZSB3aXRoaW4gYm91bmRzLgorLy8KKy8vIC0gQml0cyBhcmUgbm90IGF1dG9t
YXRpY2FsbHkgaW5pdGlhbGl6ZWQgdG8gemVyby4KKy8vCisvLyBPbiB0aGUgb3RoZXIgaGFuZCwg
dGhpcyBCaXRWZWN0b3IgY2xhc3MgbWF5IG5vdCBiZSB0aGUgZmFzdGVzdCBhcm91bmQsIHNpbmNl
CisvLyBpdCBkb2VzIGNvbmRpdGlvbmFscyBvbiBldmVyeSBnZXQvc2V0L2NsZWFyLiBCdXQgaXQg
aXMgZ3JlYXQgaWYgeW91IG5lZWQgdG8KKy8vIGp1Z2dsZSBhIGxvdCBvZiB2YXJpYWJsZS1sZW5n
dGggQml0VmVjdG9ycyBhbmQgeW91J3JlIHdvcnJpZWQgYWJvdXQgd2FzdGluZworLy8gc3BhY2Uu
CisKK2NsYXNzIEJpdFZlY3RvciB7CitwdWJsaWM6IAorICAgIEJpdFZlY3RvcigpCisgICAgICAg
IDogbV9iaXRzT3JQb2ludGVyKG1ha2VJbmxpbmVCaXRzKDApKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgQml0VmVjdG9yKGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9iaXRz
T3JQb2ludGVyKG1ha2VJbmxpbmVCaXRzKDApKQorICAgIHsKKyAgICAgICAgKCp0aGlzKSA9IG90
aGVyOworICAgIH0KKyAgICAKKyAgICB+Qml0VmVjdG9yKCkKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBPdXRPZkxpbmVCaXRzOjpk
ZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CisgICAgfQorICAgIAorICAgIEJpdFZlY3RvciYgb3Bl
cmF0b3I9KGNvbnN0IEJpdFZlY3RvciYgb3RoZXIpCisgICAgeworICAgICAgICB1aW50cHRyX3Qg
bmV3Qml0c09yUG9pbnRlcjsKKyAgICAgICAgaWYgKG90aGVyLmlzSW5saW5lKCkpCisgICAgICAg
ICAgICBuZXdCaXRzT3JQb2ludGVyID0gb3RoZXIubV9iaXRzT3JQb2ludGVyOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHMqIG5ld091dE9mTGluZUJpdHMgPSBPdXRP
ZkxpbmVCaXRzOjpjcmVhdGUob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgIG1lbWNweShuZXdP
dXRPZkxpbmVCaXRzLT5iaXRzKCksIG90aGVyLmJpdHMoKSwgYnl0ZUNvdW50KG90aGVyLnNpemUo
KSkpOworICAgICAgICAgICAgbmV3Qml0c09yUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihuZXdPdXRPZkxpbmVCaXRzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzSW5s
aW5lKCkpCisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMo
KSk7CisgICAgICAgIG1fYml0c09yUG9pbnRlciA9IG5ld0JpdHNPclBvaW50ZXI7CisgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiBtYXhJbmxpbmVCaXRz
KCk7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRzKCktPm51bUJpdHMoKTsKKyAgICB9CisK
KyAgICB2b2lkIGVuc3VyZVNpemUoc2l6ZV90IG51bUJpdHMpCisgICAgeworICAgICAgICBpZiAo
bnVtQml0cyA8PSBzaXplKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlc2l6ZU91
dE9mTGluZShudW1CaXRzKTsKKyAgICB9CisgICAgCisgICAgLy8gTGlrZSBlbnN1cmVTaXplKCks
IGJ1dCBzdXBwb3J0cyByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVjdG9yLgorICAgIHZv
aWQgcmVzaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAobnVtQml0cyA8PSBt
YXhJbmxpbmVCaXRzKCkpIHsKKyAgICAgICAgICAgIE91dE9mTGluZUJpdHMqIG15T3V0T2ZMaW5l
Qml0cyA9IG91dE9mTGluZUJpdHMoKTsKKyAgICAgICAgICAgIG1fYml0c09yUG9pbnRlciA9IG1h
a2VJbmxpbmVCaXRzKCpteU91dE9mTGluZUJpdHMtPmJpdHMoKSk7CisgICAgICAgICAgICBPdXRP
ZkxpbmVCaXRzOjpkZXN0cm95KG15T3V0T2ZMaW5lQml0cyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc2l6ZU91dE9mTGluZShudW1CaXRzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhckFsbCgpCisgICAgeworICAgICAgICBpZiAoaXNJ
bmxpbmUoKSkKKyAgICAgICAgICAgIG1fYml0c09yUG9pbnRlciA9IG1ha2VJbmxpbmVCaXRzKDAp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBiemVybyhvdXRPZkxpbmVCaXRzKCktPmJpdHMo
KSwgYnl0ZUNvdW50KHNpemUoKSkpOworICAgIH0KKworICAgIGJvb2wgZ2V0KHNpemVfdCBiaXQp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoYml0IDwgc2l6ZSgpKTsKKyAgICAgICAgcmV0
dXJuICEhKGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRlcigpXSAmIChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0KHNpemVfdCBiaXQpCisgICAgeworICAgICAgICBBU1NFUlQoYml0IDwg
c2l6ZSgpKTsKKyAgICAgICAgYml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldIHw9IChzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IChiaXQgJiAoYml0c0luUG9pbnRlcigpIC0gMSkpKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcihzaXplX3QgYml0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGJpdCA8IHNpemUoKSk7CisgICAgICAgIGJpdHMoKVtiaXQgPj4gYml0c0luUG9pbnRl
cigpXSAmPSB+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2lu
dGVyKCkgLSAxKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChzaXplX3QgYml0LCBib29s
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgc2V0KGJpdCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsZWFyKGJpdCk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigpCisgICAgeworICAgICAg
ICByZXR1cm4gc2l6ZW9mKHZvaWQqKSA8PCAzOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdW5z
aWduZWQgbWF4SW5saW5lQml0cygpCisgICAgeworICAgICAgICByZXR1cm4gYml0c0luUG9pbnRl
cigpIC0gMTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiByZWxpZXMgb24gYml0
Q291bnQgYmVpbmcgYSBtdWx0aXBsZSBvZiBiaXRzSW5Qb2ludGVyKCkKKyAgICBzdGF0aWMgc2l6
ZV90IGJ5dGVDb3VudChzaXplX3QgYml0Q291bnQpCisgICAgeworICAgICAgICBBU1NFUlQoIShi
aXRDb3VudCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpOworICAgICAgICByZXR1cm4gYml0Q291
bnQgPj4gMzsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlSW5saW5lQml0
cyh1aW50cHRyX3QgYml0cykKKyAgICB7CisgICAgICAgIEFTU0VSVCghKGJpdHMgJiAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVCaXRzKCkpKSk7CisgICAgICAgIHJldHVy
biBiaXRzIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgbWF4SW5saW5lQml0cygpKTsK
KyAgICB9CisgICAgCisgICAgY2xhc3MgT3V0T2ZMaW5lQml0cyB7CisgICAgcHVibGljOgorICAg
ICAgICBzaXplX3QgbnVtQml0cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtQml0czsgfQorICAgICAg
ICBzaXplX3QgbnVtV29yZHMoKSBjb25zdCB7IHJldHVybiAobV9udW1CaXRzICsgYml0c0luUG9p
bnRlcigpIC0gMSkgPj4gYml0c0luUG9pbnRlcigpOyB9CisgICAgICAgIHVpbnRwdHJfdCogYml0
cygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4odGhpcyArIDEpOyB9Cisg
ICAgICAgIGNvbnN0IHVpbnRwdHJfdCogYml0cygpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludHB0cl90Kj4odGhpcyArIDEpOyB9CisgICAgICAgIAorICAgICAgICBz
dGF0aWMgT3V0T2ZMaW5lQml0cyogY3JlYXRlKHNpemVfdCBudW1CaXRzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBudW1CaXRzID0gKG51bUJpdHMgKyBiaXRzSW5Qb2ludGVyKCkgLSAxKSAmIH5i
aXRzSW5Qb2ludGVyKCk7CisgICAgICAgICAgICByZXR1cm4gbmV3IChmYXN0TWFsbG9jKHNpemVv
ZihPdXRPZkxpbmVCaXRzKSArIChudW1CaXRzID4+IGJpdHNJblBvaW50ZXIoKSkpKSBPdXRPZkxp
bmVCaXRzKG51bUJpdHMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGZhc3RGcmVlKG91dE9mTGluZUJpdHMpOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBPdXRPZkxpbmVCaXRzKHNpemVfdCBudW1CaXRzKQorICAgICAgICAgICAgOiBt
X251bUJpdHMobnVtQml0cykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBzaXplX3QgbV9udW1CaXRzOworICAgIH07CisgICAgCisgICAgYm9vbCBpc0lubGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYml0c09yUG9pbnRlciA+PiBtYXhJbmxpbmVCaXRzKCk7IH0KKyAgICAK
KyAgICBjb25zdCBPdXRPZkxpbmVCaXRzKiBvdXRPZkxpbmVCaXRzKCkgY29uc3QgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBPdXRPZkxpbmVCaXRzKj4obV9iaXRzT3JQb2ludGVyKTsg
fQorICAgIE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBvaW50ZXIpOyB9CisgICAgCisgICAgdm9p
ZCByZXNpemVPdXRPZkxpbmUoc2l6ZV90IG51bUJpdHMpCisgICAgeworICAgICAgICBBU1NFUlQo
bnVtQml0cyA+IG1heElubGluZUJpdHMoKSk7CisgICAgICAgIE91dE9mTGluZUJpdHMqIG5ld091
dE9mTGluZUJpdHMgPSBPdXRPZkxpbmVCaXRzOjpjcmVhdGUobnVtQml0cyk7CisgICAgICAgIG1l
bWNweShuZXdPdXRPZkxpbmVCaXRzLT5iaXRzKCksIGJpdHMoKSwgYnl0ZUNvdW50KHN0ZDo6bWlu
KHNpemUoKSwgbnVtQml0cykpKTsKKyAgICAgICAgaWYgKCFpc0lubGluZSgpKQorICAgICAgICAg
ICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgICAgICBtX2Jp
dHNPclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obmV3T3V0T2ZMaW5lQml0
cyk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCogYml0cygpCisgICAgeworICAgICAgICBp
ZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybiAmbV9iaXRzT3JQb2ludGVyOworICAg
ICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAgfQorICAgIAorICAgIGNv
bnN0IHVpbnRwdHJfdCogYml0cygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmUo
KSkKKyAgICAgICAgICAgIHJldHVybiAmbV9iaXRzT3JQb2ludGVyOworICAgICAgICByZXR1cm4g
b3V0T2ZMaW5lQml0cygpLT5iaXRzKCk7CisgICAgfQorICAgIAorICAgIHVpbnRwdHJfdCBtX2Jp
dHNPclBvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpCaXRW
ZWN0b3I7CisKKyNlbmRpZiAvLyBCaXRWZWN0b3JfaAo=
</data>
<flag name="review"
          id="105125"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108230</attachid>
            <date>2011-09-21 14:04:21 -0700</date>
            <delta_ts>2011-09-27 12:44:41 -0700</delta_ts>
            <desc>the patch - another attempt to fix Windows</desc>
            <filename>recomp_patch_13.diff</filename>
            <type>text/plain</type>
            <size>71518</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU2MDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAyIEBA
CisyMDExLTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBzdXBwb3J0IGNvbnRpbnVvdXMgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODMyOQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhZGRzIHRoZSBh
YmlsaXR5IHRvIHJlb3B0aW1pemUgYSBjb2RlIGJsb2NrIGlmIHNwZWN1bGF0aW9uCisgICAgICAg
IGZhaWx1cmVzIGhhcHBlbiBmcmVxdWVudGx5LiA2JSBzcGVlZC11cCBvbiBLcmFrZW4sIDElIHNs
b3ctZG93bgorICAgICAgICBvbiBWOCwgbmV1dHJhbCBvbiBTdW5TcGlkZXIuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnBybzoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5j
cHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
UHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpqZXR0aXNvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbik6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTdHJvbmdQcmVkaWN0aW9uKToKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21w
aWxlcjo6Y29tcGlsZUVudHJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlND
OjpERkc6OkpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09T
UkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlT1NSRW50cnkpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFbnRyeS5oOgorICAgICAgICAoSlNDOjpERkc6OmdldE9TUkVudHJ5RGF0
YUJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGhl
YXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290
czo6Q29uc2VydmF0aXZlUm9vdHMpOgorICAgICAgICAoSlNDOjpDb25zZXJ2YXRpdmVSb290czo6
fkNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKEpTQzo6RHVtbXlNYXJrSG9vazo6bWFyayk6
CisgICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkUG9pbnRlcik6Cisg
ICAgICAgIChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbik6CisgICAgICAg
IChKU0M6OkNvbnNlcnZhdGl2ZVJvb3RzOjphZGQpOgorICAgICAgICAqIGhlYXAvQ29uc2VydmF0
aXZlUm9vdHMuaDoKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFw
OjphZGRKZXR0aXNvbkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6
CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9KZXR0aXNvbmVkQ29kZUJs
b2Nrcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6SmV0
dGlzb25lZENvZGVCbG9ja3MpOgorICAgICAgICAoSlNDOjpKZXR0aXNvbmVkQ29kZUJsb2Nrczo6
fkpldHRpc29uZWRDb2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9j
a3M6OmFkZENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjpj
bGVhck1hcmtzKToKKyAgICAgICAgKEpTQzo6SmV0dGlzb25lZENvZGVCbG9ja3M6OmRlbGV0ZVVu
bWFya2VkQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjp0
cmFjZUNvZGVCbG9ja3MpOgorICAgICAgICAqIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkpldHRpc29uZWRDb2RlQmxvY2tzOjptYXJrKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3Rl
ckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9S
ZWdpc3RlckZpbGUuaDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6amV0dGlzb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpFdmFs
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKToKKyAgICAgICAgKEpTQzo6UHJvZ3Jh
bUV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0
aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3IpOgorICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Qml0VmVjdG9yKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjp+Qml0VmVjdG9yKToKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNpemUpOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OmVuc3VyZVNpemUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OnJlc2l6ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Y2xlYXJBbGwpOgorICAgICAg
ICAoV1RGOjpCaXRWZWN0b3I6OmdldCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0KToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rv
cjo6Yml0c0luUG9pbnRlcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6bWF4SW5saW5lQml0
cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Ynl0ZUNvdW50KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjptYWtlSW5saW5lQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0
T2ZMaW5lQml0czo6bnVtQml0cyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5l
Qml0czo6bnVtV29yZHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6
OmJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6Ok91dE9mTGluZUJpdHM6OmNyZWF0ZSk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6ZGVzdHJveSk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6T3V0T2ZMaW5lQml0czo6T3V0T2ZMaW5lQml0cyk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6aXNJbmxpbmUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6
Om91dE9mTGluZUJpdHMpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnJlc2l6ZU91dE9mTGlu
ZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6Yml0cyk6CisKIDIwMTEtMDktMjAgIEdlb2Zm
cmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21lIEhlYXAgY2xlYW51
cC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk1NTk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9I
ZWFwLmNwcAogICAgIGhlYXAvSGFuZGxlSGVhcC5jcHAKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAorICAgIGhlYXAvSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwCiAgICAgaGVhcC9NYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAKICAgICBoZWFwL01hcmtlZFNw
YWNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0J
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsOCBAQCBqYXZhc2NyaXB0Y29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlSGVhcC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hhbmRsZUhlYXAuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9K
ZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90
VmlzaXRvci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVTdGFjay5jcHAg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZVN0YWNrLmggXApAQCAtNDY0LDYg
KzQ2Niw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvQXNzZXJ0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0F0b21p
Y3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9BVkxUcmVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvQml0VmVjdG9yLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvQml0bWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQmxvY2tTdGFjay5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Jsb29tRmlsdGVyLmggXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lvbiA5NTU5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgaGVhcC9IYW5kbGVIZWFwLmNwcCBcCiAg
ICAgaGVhcC9IYW5kbGVTdGFjay5jcHAgXAogICAgIGhlYXAvSGVhcC5jcHAgXAorICAgIGhlYXAv
SmV0dGlzb25lZENvZGVCbG9ja3MuY3BwIFwKICAgICBoZWFwL01hY2hpbmVTdGFja01hcmtlci5j
cHAgXAogICAgIGhlYXAvTWFya1N0YWNrLmNwcCBcCiAgICAgaGVhcC9NYXJrZWRCbG9jay5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTE5NzQsNiArMTk3NCwxNCBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmls
ZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXEpldHRpc29uZWRDb2Rl
QmxvY2tzLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5cLi5caGVhcFxKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxoZWFwXExvY2FsLmgiCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvai9XVEYvV1RGLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTYzNyw2ICs2MzcsMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgog
CQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcQml0VmVjdG9yLmgiCisJCQk+CisJ
CTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXEJpdG1hcC5oIgog
CQkJPgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsOSBAQAogCQkw
RkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi87IH07CiAJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5
NCAvKiBWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFOEUxNDIwN0E1MTAwMTc5Qzk0IC8qIFZhbHVlUHJvZmlsZS5jcHAg
Ki87IH07CiAJCTBGRDgyRUY1MTQyMzA3NUIwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRUYzMTQyMzA3
MzkwMDE3OUM5NCAvKiBERkdJbnRyaW5zaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQ4MkYyQjE0MjZDQTZEMDAxNzlDOTQgLyogSmV0dGlz
b25lZENvZGVCbG9ja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDgy
RjJDMTQyNkNBNzQwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyODE0MjZDQTVBMDAx
NzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovOyB9OworCQkwRkQ4MkY0QjE0Mjgw
NkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2
NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3
RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyog
SlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODEzLDYgKzgxNiw5IEBACiAJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByZWRpY3RlZFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRUYzMTQyMzA3MzkwMDE3OUM5NCAv
KiBERkdJbnRyaW5zaWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSW50
cmluc2ljLmg7IHBhdGggPSBkZmcvREZHSW50cmluc2ljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29k
ZUJsb2Nrcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRjI5MTQyNkNB
NUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE2MjEsNiArMTYyNyw4IEBACiAJCTE0MkUzMTJBMTM0RkYwQTYwMEFGQURCNSAvKiBoZWFwICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkYyODE0
MjZDQTVBMDAxNzlDOTQgLyogSmV0dGlzb25lZENvZGVCbG9ja3MuY3BwICovLAorCQkJCTBGRDgy
RjI5MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovLAogCQkJCUE3
MDQ1NkFGMTQyN0ZCMTUwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2UuaCAqLywKIAkJCQlBNzA0
NTZBRTE0MjdGQjAzMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmNwcCAqLywKIAkJCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovLApAQCAt
MTc5Nyw2ICsxODA1LDcgQEAKIAkJNjUxNjJFRjEwOEU2QTIxQzAwNzU1NkNEIC8qIHd0ZiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZEODJGNDkxNDI4
MDY5MjAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8s
CiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCkBAIC0yNDIzLDYgKzI0
MzIsOCBAQAogCQkJCUJDMjU3REU4MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8q
IEJpdFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEODJGMkIxNDI2Q0E2RDAwMTc5Qzk0
IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkVGNTE0
MjMwNzVCMDAxNzlDOTQgLyogREZHSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
MkU4NTE0MUYzRkUzMDAxNzlDOTQgLyogQm91bmRzQ2hlY2tlZFBvaW50ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDk3LDYgKzMxMDgsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJ
CQkJMEZEODJGMkMxNDI2Q0E3NDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTkwMTQyMDdBNUYwMDE3OUM5NCAvKiBWYWx1ZVByb2Zp
bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFBy
ZWRpY3RlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYwODAwMTc5
Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk1NTk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MjgsNyArMTQyOCwxMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgLCBtX3NvdXJjZU9mZnNldChzb3VyY2VPZmZzZXQpCiAgICAgLCBtX3N5
bWJvbFRhYmxlKHN5bVRhYikKICAgICAsIG1fYWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpCisgICAg
LCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoMCkKKyAgICAsIG1fc3BlY3VsYXRpdmVGYWls
Q291bnRlcigwKQogICAgICwgbV9vcHRpbWl6YXRpb25EZWxheUNvdW50ZXIoMCkKKyAgICAsIG1f
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoMCkKIHsKICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIApAQCAtMTkzNSw2ICsxOTM4LDI3IEBAIGJvb2wgRnVuY3Rpb25Db2RlQmxvY2s6OmNhbkNv
bXBpbGVXaXRoREYKICAgICAgICAgcmV0dXJuIERGRzo6Y2FuQ29tcGlsZUZ1bmN0aW9uRm9yQ29u
c3RydWN0KHRoaXMpOwogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNhbGwo
dGhpcyk7CiB9CisKK3ZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFz
ZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOworICAgIHN0YXRp
Y19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9w
dGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
IT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50
KCkpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkp
LT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7Cit9CisKK3ZvaWQgRnVuY3Rpb25D
b2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3sKKyAgICBBU1NF
UlQoZ2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcihnbG9iYWxEYXRh
LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOworfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCkBAIC0xOTc0LDggKzE5OTgsOCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQogICAgIHByaW50ZigiUHJvZmls
ZSBob3RuZXNzOiAlbGYsICVsZlxuIiwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgLyBudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcywgKGRvdWJsZSlu
dW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMg
LyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSk7CiAjZW5kaWYKIAotICAgIGlmICgoZG91YmxlKW51
bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9mTm9uQXJndW1lbnRW
YWx1ZVByb2ZpbGVzID49IDAuNzUKLSAgICAgICAgJiYgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJ
blByb2ZpbGVzIC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKSA+PSAwLjUpCisgICAgaWYgKCghbnVtYmVyT2ZOb25Bcmd1bWVudFZhbHVlUHJv
ZmlsZXMgfHwgKGRvdWJsZSludW1iZXJPZkxpdmVOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMgLyBu
dW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA+PSAwLjc1KQorICAgICAgICAmJiAoIW51
bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxl
cyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgPj0gMC41KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgbV9vcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIrKzsKQEAgLTIwMTQsNyArMjAzOCwxMiBAQCB2b2lkIENvZGVCbG9jazo6
ZHVtcFZhbHVlUHJvZmlsZXMoKQogICAgIH0KICAgICBmcHJpbnRmKHN0ZGVyciwgIlNsb3dDYXNl
UHJvZmlsZSBmb3IgJXA6XG4iLCB0aGlzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtYmVyT2ZTbG93Q2FzZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBTbG93Q2FzZVByb2Zp
bGUqIHByb2ZpbGUgPSBzbG93Q2FzZVByb2ZpbGUoaSk7CisgICAgICAgIFJhcmVDYXNlUHJvZmls
ZSogcHJvZmlsZSA9IHNsb3dDYXNlUHJvZmlsZShpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICBiYyA9ICVkOiAldVxuIiwgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCwgcHJvZmlsZS0+
bV9jb3VudGVyKTsKKyAgICB9CisgICAgZnByaW50ZihzdGRlcnIsICJTcGVjaWFsRmFzdENhc2VQ
cm9maWxlIGZvciAlcDpcbiIsIHRoaXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1iZXJPZlNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzKCk7ICsraSkgeworICAgICAgICBSYXJlQ2Fz
ZVByb2ZpbGUqIHByb2ZpbGUgPSBzcGVjaWFsRmFzdENhc2VQcm9maWxlKGkpOwogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAgIGJjID0gJWQ6ICV1XG4iLCBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0LCBwcm9maWxlLT5tX2NvdW50ZXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjZGVmaW5lIENvZGVCbG9ja19oCiAKICNpbmNsdWRlICJDb21wYWN0SklU
Q29kZU1hcC5oIgorI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVD
YWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpA
QCAtMzMzLDYgKzMzNCwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgREZHOjpPU1JFbnRyeURhdGEqIGFwcGVuZERGR09TUkVudHJ5RGF0YSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgeworICAgICAg
ICAgICAgREZHOjpPU1JFbnRyeURhdGEgZW50cnk7CisgICAgICAgICAgICBlbnRyeS5tX2J5dGVj
b2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgICAgICAgICAgZW50cnkubV9tYWNoaW5lQ29k
ZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICAgICAgbV9kZmdPU1JFbnRyeS5h
cHBlbmQoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICZtX2RmZ09TUkVudHJ5Lmxhc3QoKTsK
KyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkRGR09TUkVudHJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2RmZ09TUkVudHJ5LnNpemUoKTsgfQorICAgICAgICBERkc6Ok9TUkVudHJ5
RGF0YSogZGZnT1NSRW50cnlEYXRhKHVuc2lnbmVkIGkpIHsgcmV0dXJuICZtX2RmZ09TUkVudHJ5
W2ldOyB9CisgICAgICAgIERGRzo6T1NSRW50cnlEYXRhKiBkZmdPU1JFbnRyeURhdGFGb3JCeXRl
Y29kZUluZGV4KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBiaW5hcnlTZWFyY2g8REZHOjpPU1JFbnRyeURhdGEsIHVuc2lnbmVkLCBERkc6Omdl
dE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXg+KG1fZGZnT1NSRW50cnkuYmVnaW4oKSwgbV9kZmdP
U1JFbnRyeS5zaXplKCksIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShJTlRFUlBSRVRFUikKQEAgLTM2MCw5ICszNzYsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBtX2ppdENvZGVXaXRoQXJpdHlDaGVjayA9IGNvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgfQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2soKSB7IHJldHVybiBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsgfQogICAgICAgICBK
SVRDb2RlOjpKSVRUeXBlIGdldEpJVFR5cGUoKSB7IHJldHVybiBtX2ppdENvZGUuaml0VHlwZSgp
OyB9CiAgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7
IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAgICAgICAgIHZp
cnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5v
ZGUqKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKSA9
IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAg
ICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhh
c09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTY4NSwxMSArNzAzLDM3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyB0cmlnZ2VyIGZpbGVzLiBBbGwgQ29kZUJsb2NrcyBzdGFydCBvdXQg
d2l0aCBvcHRpbWl6ZUFmdGVyV2FybVVwKCksCiAgICAgICAgIC8vIGFzIHRoaXMgaXMgY2FsbGVk
IGZyb20gdGhlIENvZGVCbG9jayBjb25zdHJ1Y3Rvci4KICAgICAgICAgCisgICAgICAgIC8vIFdo
ZW4gd2Ugb2JzZXJ2ZSBhIGxvdCBvZiBzcGVjdWxhdGlvbiBmYWlsdXJlcywgd2UgdHJpZ2dlciBh
CisgICAgICAgIC8vIHJlb3B0aW1pemF0aW9uLiBCdXQgZWFjaCB0aW1lLCB3ZSBpbmNyZWFzZSB0
aGUgb3B0aW1pemF0aW9uIHRyaWdnZXIKKyAgICAgICAgLy8gdG8gYXZvaWQgdGhyYXNoaW5nLgor
ICAgICAgICB1bnNpZ25lZCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyIDw9
IDE4KTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIGNvdW50UmVvcHRpbWl6YXRpb24oKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKys7Cisg
ICAgICAgICAgICBpZiAobV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA+IDE4KQorICAgICAg
ICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPSAxODsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBzdXBw
b3J0IGNhbGxpbmcKLSAgICAgICAgLy8gb3B0aW1pemVBZnRlcldhcm1VcCgpIGZyb20gSklULWdl
bmVyYXRlZCBjb2RlLgorICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhvZHMgZnJvbSBKSVQt
Z2VuZXJhdGVkIGNvZGUuCisgICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplTmV4dEludm9jYXRpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaW50MzJfdCBjb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIC0xMDAwOwor
ICAgICAgICAgICAgcmV0dXJuIC0xMDAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlckxvbmdXYXJtVXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gLTUw
MDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgaW50MzJfdCogYWRkcmVzc09mRXhlY3V0ZUNvdW50ZXIoKQpAQCAtNjk3LDEyICs3
NDEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gJm1fZXhlY3V0ZUNv
dW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZFeGVjdXRlQ291bnRlcigpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ss
IG1fZXhlY3V0ZUNvdW50ZXIpOyB9CisKKyAgICAgICAgaW50MzJfdCBleGVjdXRlQ291bnRlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0ZUNvdW50ZXI7IH0KKyAgICAgICAgCisgICAgICAgIHVu
c2lnbmVkIG9wdGltaXphdGlvbkRlbGF5Q291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fb3B0aW1p
emF0aW9uRGVsYXlDb3VudGVyOyB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8g
Zm9yY2UgdGhlIG5leHQgb3B0aW1pemF0aW9uIHRyaWdnZXIgdG8gZmlyZS4gVGhpcyBpcwogICAg
ICAgICAvLyByYXJlbHkgd2lzZSwgc2luY2Ugb3B0aW1pemF0aW9uIHRyaWdnZXJzIGFyZSB0eXBp
Y2FsbHkgbW9yZQogICAgICAgICAvLyBleHBlbnNpdmUgdGhhbiBleGVjdXRpbmcgYmFzZWxpbmUg
Y29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCkKICAgICAgICAgewot
ICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IDA7CisgICAgICAgICAgICBtX2V4ZWN1dGVD
b3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gcHJldmVudCBvcHRpbWl6YXRp
b24gZnJvbSBoYXBwZW5pbmcgYWdhaW4uIE5vdGUgdGhhdApAQCAtNzI2LDYgKzc3NiwxMyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBjb3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAg
IC8vIENhbGwgdGhpcyB0byBmb3JjZSBhbiBvcHRpbWl6YXRpb24gdHJpZ2dlciB0byBmaXJlIG9u
bHkgYWZ0ZXIKKyAgICAgICAgLy8gYSBsb3Qgb2Ygd2FybS11cC4KKyAgICAgICAgdm9pZCBvcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fZXhlY3V0ZUNv
dW50ZXIgPSBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICAvLyBDYWxsIHRoaXMgdG8gY2F1c2UgYW4gb3B0aW1pemF0
aW9uIHRyaWdnZXIgdG8gZmlyZSBzb29uLCBidXQKICAgICAgICAgLy8gbm90IG5lY2Vzc2FyaWx5
IHRoZSBuZXh0IG9uZS4gVGhpcyBtYWtlcyBzZW5zZSBpZiBvcHRpbWl6YXRpb24KICAgICAgICAg
Ly8gc3VjY2VlZHMuIFN1Y2Nlc3NmdWx5IG9wdGltaXphdGlvbiBtZWFucyB0aGF0IGFsbCBjYWxs
cyBhcmUKQEAgLTc0NiwxOCArODAzLDcyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBp
biB0aGUgYmFzZWxpbmUgY29kZS4KICAgICAgICAgdm9pZCBvcHRpbWl6ZVNvb24oKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gLTEwMDsKKyAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tz
IGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2FuCisgICAgICAgIC8vIGRlY2lkZSB3aGVu
IHRvIHJlb3B0aW1pemUuIEl0J3MgaW50ZXJlc3RpbmcgdG8gbm90ZSB0aGF0IHRoZXNlCisgICAg
ICAgIC8vIGNvdW50ZXJzIG1heSBvdmVyZmxvdyB3aXRob3V0IGFueSBwcm90ZWN0aW9uLiBUaGUg
c3VjY2VzcworICAgICAgICAvLyBjb3VudGVyIHdpbGwgb3ZlcmZsb3cgYmVmb3JlIHRoZSBmYWls
IG9uZSBkb2VzLCBiZWN1YXNlIHRoZQorICAgICAgICAvLyBmYWlsIG9uZSBpcyB1c2VkIGFzIGEg
dHJpZ2dlciB0byByZW9wdGltaXplLiBTbyB0aGUgd29yc3QgY2FzZQorICAgICAgICAvLyBpcyB0
aGF0IHRoZSBzdWNjZXNzIGNvdW50ZXIgb3ZlcmZsb3dzIGFuZCB3ZSByZW9wdGltaXplIHdpdGhv
dXQKKyAgICAgICAgLy8gbmVlZGluZyB0by4gQnV0IHRoaXMgaXMgaGFybWxlc3MuIElmIGEgbWV0
aG9kIHJlYWxseSBkaWQKKyAgICAgICAgLy8gZXhlY3V0ZSAyXjMyIHRpbWVzIHRoZW4gY29tcGls
aW5nIGl0IGFnYWluIHByb2JhYmx5IHdvbid0IGh1cnQKKyAgICAgICAgLy8gYW55b25lLgorICAg
ICAgICAKKyAgICAgICAgdm9pZCBjb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcisrOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICB2b2lkIGNvdW50U3BlY3VsYXRpb25GYWlsdXJlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKys7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHVpbnQzMl90IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSBjb25z
dCB7IHJldHVybiBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXI7IH0KKyAgICAgICAgdWludDMy
X3Qgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVG
YWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdWludDMyX3QqIGFkZHJlc3NPZlNwZWN1
bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiAmbV9zcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyOyB9CisgICAgICAgIHVpbnQzMl90KiBhZGRyZXNzT2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgeyByZXR1cm4gJm1fc3BlY3VsYXRpdmVGYWlsQ291bnRlcjsgfQorICAgICAgICAKKyAgICAg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0Nv
dW50ZXIpOyB9CisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZh
aWxDb3VudGVyKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxh
dGl2ZUZhaWxDb3VudGVyKTsgfQorICAgICAgICAKICAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3
aGljaCB0aGUgSklUIHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAx
OyB9CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJl
dHVybigpIHsgcmV0dXJuIDE1OyB9CisKKyAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSBy
YXRpbyB3ZSB3YW50LgorICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygp
IHsgcmV0dXJuIDY7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVy
ZXMgdGhhdCB0cmlnZ2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KKyAgICAgICAgdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5y
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVuc2lnbmVkIGxhcmdlRmFp
bENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBzaG91
bGRSZW9wdGltaXplTm93KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRT
dWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3VsYXRp
dmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJnZUZh
aWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNo
b3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49
IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
Pj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAgICAgIH0KICAgICAgICAg
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBib29sIHNob3VsZE9wdGltaXpl
Tm93KCk7CiAjZWxzZQogICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50KCkgIT0gdGhpcyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbihn
bG9iYWxEYXRhKTsKKyAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKKyAgICAgICAg
ICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgfQogCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKICAgICAgICAgdm9pZCBkdW1wVmFsdWVQcm9maWxlcygpOwpAQCAt
ODI3LDYgKzkzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworICAg
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG1fZGZnT1NSRW50cnk7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKQEAgLTg1MSw3ICs5NjMsMTAgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIE93blB0cjxQcmVkaWN0aW9uVHJhY2tlcj4gbV9wcmVkaWN0aW9uczsK
IAogICAgICAgICBpbnQzMl90IG1fZXhlY3V0ZUNvdW50ZXI7CisgICAgICAgIHVpbnQzMl90IG1f
c3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcjsKKyAgICAgICAgdWludDMyX3QgbV9zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyOwogICAgICAgICB1aW50OF90IG1fb3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
OworICAgICAgICB1aW50OF90IG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXI7CiAKICAgICAg
ICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CkBAIC05MDksNiArMTAyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05MzUsNiArMTA1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkBAIC05NjIsNiArMTA3OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVOQUJMRShKSVQpCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVk
KEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbihKU0dsb2JhbERhdGEmKTsKICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHByaXZh
dGU6CiAgICAgICAgIEFTU0VSVChwcm9maWxlKTsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uID0gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAjaWYgRU5BQkxF
KERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIkR5bmFtaWMgWyV1LCAldV0gcHJl
ZGljdGlvbjogJXNcbiIsIG5vZGVJbmRleCwgYnl0ZWNvZGVJbmRleCwgcHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcHJpbnRmKCJEeW5hbWljIFtAJXUsIGJjIyV1XSBw
cmVkaWN0aW9uOiAlc1xuIiwgbm9kZUluZGV4LCBieXRlY29kZUluZGV4LCBwcmVkaWN0aW9uVG9T
dHJpbmcocHJlZGljdGlvbikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNiArNDA4LDkgQEAgdm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAgIC8vICAgICAgICAgZW50cnksIHNp
bmNlIGJvdGggZm9ybXMgb2YgT1NSIGFyZSBleHBlbnNpdmUuIE9TUiBlbnRyeSBpcwogICAgIC8v
ICAgICAgICAgcGFydGljdWxhcmx5IGV4cGVuc2l2ZS4KICAgICAvLworICAgIC8vICAgICAoZCkg
RnJlcXVlbnQgT1NSIGZhaWx1cmVzLCBldmVuIHRob3NlIHRoYXQgZG8gbm90IHJlc3VsdCBpbiB0
aGUgY29kZQorICAgIC8vICAgICAgICAgcnVubmluZyBpbiBhIGhvdCBsb29wLCByZXN1bHQgaW4g
cmVjb21waWxhdGlvbiBnZXR0aW5nIHRyaWdnZXJlZC4KKyAgICAvLwogICAgIC8vICAgICBUbyBl
bnN1cmUgKGMpLCB3ZSdkIGxpa2UgdG8gc2V0IHRoZSBleGVjdXRlIGNvdW50ZXIgdG8KICAgICAv
LyAgICAgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCgpLiBUaGlzIHNlZW1zIGxp
a2UgaXQgd291bGQgZW5kYW5nZXIKICAgICAvLyAgICAgKGEpIGFuZCAoYiksIHNpbmNlIHRoZW4g
ZXZlcnkgT1NSIGV4aXQgd291bGQgZGVsYXkgdGhlIG9wcG9ydHVuaXR5IGZvcgpAQCAtNDE1LDEx
ICs0MTgsNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUgogICAg
IC8vICAgICBmcmVxdWVudGx5IGFuZCB0aGUgZnVuY3Rpb24gaGFzIGZldyBsb29wcywgdGhlbiB0
aGUgY291bnRlciB3aWxsIG5ldmVyCiAgICAgLy8gICAgIGJlY29tZSBub24tbmVnYXRpdmUgYW5k
IE9TUiBlbnRyeSB3aWxsIG5ldmVyIGJlIHRyaWdnZXJlZC4gT1NSIGVudHJ5CiAgICAgLy8gICAg
IHdpbGwgb25seSBoYXBwZW4gaWYgYSBsb29wIGdldHMgaG90IGluIHRoZSBvbGQgSklULCB3aGlj
aCBkb2VzIGEgcHJldHR5Ci0gICAgLy8gICAgIGdvb2Qgam9iIG9mIGVuc3VyaW5nIChhKSBhbmQg
KGIpLiBUaGlzIGhldXJpc3RpYyBtYXkgbmVlZCB0byBiZQotICAgIC8vICAgICByZXRob3VnaHQg
aW4gdGhlIGZ1dHVyZSwgcGFydGljdWxhcmx5IGlmIHdlIHN1cHBvcnQgcmVvcHRpbWl6aW5nIGNv
ZGUKLSAgICAvLyAgICAgd2l0aCBuZXcgdmFsdWUgcHJvZmlsZXMgZ2F0aGVyZWQgZnJvbSBjb2Rl
IHRoYXQgZGlkIE9TUiBleGl0LgorICAgIC8vICAgICBnb29kIGpvYiBvZiBlbnN1cmluZyAoYSkg
YW5kIChiKS4gQnV0IHRoYXQgZG9lc24ndCB0YWtlIGNhcmUgb2YgKGQpLAorICAgIC8vICAgICBz
aW5jZSBlYWNoIHNwZWN1bGF0aW9uIGZhaWx1cmUgd291bGQgcmVzZXQgdGhlIGV4ZWN1dGUgY291
bnRlci4KKyAgICAvLyAgICAgU28gd2UgY2hlY2sgaGVyZSBpZiB0aGUgbnVtYmVyIG9mIHNwZWN1
bGF0aW9uIGZhaWx1cmVzIGlzIHNpZ25pZmljYW50bHkKKyAgICAvLyAgICAgbGFyZ2VyIHRoYW4g
dGhlIG51bWJlciBvZiBzdWNjZXNzZXMgKHdlIHdhbnQgOTAlIHN1Y2Nlc3MgcmF0ZSksIGFuZCBp
ZgorICAgIC8vICAgICB0aGVyZSBoYXZlIGJlZW4gYSBsYXJnZSBlbm91Z2ggbnVtYmVyIG9mIGZh
aWx1cmVzLiBJZiBzbywgd2Ugc2V0IHRoZQorICAgIC8vICAgICBjb3VudGVyIHRvIDA7IG90aGVy
d2lzZSB3ZSBzZXQgdGhlIGNvdW50ZXIgdG8KKyAgICAvLyAgICAgY291bnRlclZhbHVlRm9yT3B0
aW1pemVBZnRlcldhcm1VcCgpLgorICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb2RlQmxv
Y2soKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQ
UkluZm86OnJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJs
b2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSksIEdQUkluZm86OnJlZ1Qx
KTsKKyAgICBhZGQzMihJbW0zMigxKSwgR1BSSW5mbzo6cmVnVDIpOworICAgIGFkZDMyKEltbTMy
KC0xKSwgR1BSSW5mbzo6cmVnVDEpOworICAgIHN0b3JlMzIoR1BSSW5mbzo6cmVnVDIsIEFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpKTsKKyAgICBzdG9yZTMyKEdQUkluZm86OnJlZ1QxLCBBZGRyZXNzKEdQUkluZm86OnJl
Z1QwLCBDb2RlQmxvY2s6Om9mZnNldE9mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7Cisg
ICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwg
R1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxv
d09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJbW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSkpOworICAgIG11bDMyKEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3Vj
Y2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICAK
KyAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVxdWFsLCBHUFJJbmZvOjpy
ZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAotICAgIHN0b3JlMzIoSW1tMzIoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKSks
IGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKTsK
KyAgICAvLyBSZW9wdGltaXplIGFzIHNvb24gYXMgcG9zc2libGUuCisgICAgc3RvcmUzMihJbW0z
MihDb2RlQmxvY2s6OmNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKSksIEFk
ZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZFeGVjdXRlQ291bnRlcigp
KSk7CisgICAgSnVtcCBkb25lQWRqdXN0aW5nID0ganVtcCgpOworICAgIAorICAgIGZld0ZhaWxz
LmxpbmsodGhpcyk7CisgICAgbG93RmFpbFJhdGUubGluayh0aGlzKTsKKyAgICAKKyAgICBzdG9y
ZTMyKEltbTMyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5jb3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyTG9uZ1dhcm1VcCgpKSwgQWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICAKKyAgICBkb25lQWRqdXN0aW5nLmxp
bmsodGhpcyk7CiAgICAgCiAgICAgLy8gMTIpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBi
eXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KICAgICAKQEAgLTQ4MSw2ICs1MTMsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogICAgIC8vIGJvdGggbm9ybWFsIHJldHVy
biBjb2RlIGFuZCB3aGVuIGp1bXBpbmcgdG8gYW4gZXhjZXB0aW9uIGhhbmRsZXIpLgogICAgIHBy
ZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChHUFJJbmZvOjpyZWdUMik7CiAgICAgZW1pdFB1
dFRvQ2FsbEZyYW1lSGVhZGVyKEdQUkluZm86OnJlZ1QyLCBSZWdpc3RlckZpbGU6OlJldHVyblBD
KTsKKyAgICAKKyAgICBhZGRQdHIoSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhjb2RlQmxvY2so
KS0+YWRkcmVzc09mU3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpKSk7CiB9CiAKIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKQEAgLTQ5OCwxMCArNTMyLDYgQEAgdm9pZCBKSVRDb21w
aWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIGJvb2wgY29tcGlsZWRTcGVjdWxhdGl2ZSA9IHNwZWN1
bGF0aXZlLmNvbXBpbGUoKTsKICAgICBBU1NFUlRfVU5VU0VEKGNvbXBpbGVkU3BlY3VsYXRpdmUs
IGNvbXBpbGVkU3BlY3VsYXRpdmUpOwogCi0jaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCi0gICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
Ci0jZW5kaWYKLSAgICAKICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOwogCiAgICAgLy8g
SXRlcmF0ZSBvdmVyIHRoZSBtX2NhbGxzIHZlY3RvciwgY2hlY2tpbmcgZm9yIGV4Y2VwdGlvbiBj
aGVja3MsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CShyZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw0NiBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNpY0Jsb2NrKQogICAgIHsK
LSAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQoYmFzaWNCbG9jay5ieXRlY29kZUJl
Z2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjaWYgRU5B
QkxFKERGR19PU1JfRU5UUlkpCisgICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxv
Y2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlm
ZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworICAgICAgICAKKyAgICAg
ICAgdW5zaWduZWQgbGFzdExpdmVBcmd1bWVudCA9IDA7CisgICAgICAgIHVuc2lnbmVkIGxhc3RM
aXZlTG9jYWwgPSAwOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChi
YXNpY0Jsb2NrLm1fYXJndW1lbnRzW2ldLnZhbHVlICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBsYXN0TGl2ZUFyZ3VtZW50ID0gaTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLm1fbG9jYWxzW2ldLnZhbHVlICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBsYXN0TGl2ZUxvY2FsID0gaTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGxhc3RMaXZlQXJndW1lbnQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5tX2xp
dmVBcmd1bWVudHMucmVzaXplKGxhc3RMaXZlQXJndW1lbnQgKyAxKTsKKyAgICAgICAgICAgIGVu
dHJ5LT5tX2xpdmVBcmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBsYXN0TGl2ZUFyZ3VtZW50OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay5tX2FyZ3VtZW50c1tpXS52YWx1ZSAhPSBOb05v
ZGUpCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVBcmd1bWVudHMuc2V0KGkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5tX2xpdmVB
cmd1bWVudHMuY2xlYXJBbGwoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0TGl2ZUxvY2Fs
KSB7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLnJlc2l6ZShsYXN0TGl2ZUxv
Y2FsICsgMSk7CisgICAgICAgICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPD0gbGFz
dExpdmVMb2NhbDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2subV9sb2Nh
bHNbaV0udmFsdWUgIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9saXZl
VmFyaWFibGVzLnNldChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBlbnRyeS0+bV9saXZlVmFyaWFibGVzLmNsZWFyQWxsKCk7CisjZWxzZQorICAgICAgICBV
TlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CisjZW5kaWYKICAgICB9CiAKIHByaXZhdGU6CkBAIC0z
NTMsNyArMzkyLDYgQEAgcHJpdmF0ZToKICAgICAKICAgICAvLyBKSVQgY29kZSBtYXAgZm9yIE9T
UiBlbnRyeXBvaW50cy4KICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOwotICAgIENvbXBhY3RKSVRD
b2RlTWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAKICAgICBzdHJ1Y3QgUHJvcGVy
dHlBY2Nlc3NSZWNvcmQgewogICAgICAgICBQcm9wZXJ0eUFjY2Vzc1JlY29yZChDYWxsIGZ1bmN0
aW9uQ2FsbCwgaW50MTZfdCBkZWx0YUNoZWNrSW1tVG9DYWxsLCBpbnQxNl90IGRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2ssIGludDE2X3QgZGVsdGFDYWxsVG9Mb2FkT3JTdG9yZSwgaW50MTZfdCBkZWx0
YUNhbGxUb1Nsb3dDYXNlLCBpbnQxNl90IGRlbHRhQ2FsbFRvRG9uZSwgaW50OF90IGJhc2VHUFIs
IGludDhfdCB2YWx1ZUdQUiwgaW50OF90IHNjcmF0Y2hHUFIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKLSAg
ICBBU1NFUlQoY29kZUJsb2NrLT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVCghY29kZUJsb2Nr
LT5qaXRDb2RlTWFwKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2stPm51bWJlck9mREZHT1NSRW50
cmllcygpKTsKIAogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgcHJpbnRmKCJPU1Ig
aW4gJXAoJXApIGZyb20gYmMjJXVcbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5hbHRlcm5hdGl2
ZSgpLCBieXRlY29kZUluZGV4KTsKQEAgLTY2LDYgKzY3LDkgQEAgdm9pZCogcHJlcGFyZU9TUkVu
dHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
ayA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0g
Y29kZUJsb2NrLT5kZmdPU1JFbnRyeURhdGFGb3JCeXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgp
OworICAgIAorICAgIEFTU0VSVChlbnRyeS0+bV9ieXRlY29kZUluZGV4ID09IGJ5dGVjb2RlSW5k
ZXgpOwogICAgIAogICAgIC8vIFRoZSBjb2RlIGJlbG93IGNoZWNrcyBpZiBpdCBpcyBzYWZlIHRv
IHBlcmZvcm0gT1NSIGVudHJ5LiBJdCBtYXkgZmluZAogICAgIC8vIHRoYXQgaXQgaXMgdW5zYWZl
IHRvIGRvIHNvLCBmb3IgYW55IG51bWJlciBvZiByZWFzb25zLCB3aGljaCBhcmUgZG9jdW1lbnRl
ZApAQCAtOTcsNyArMTAxLDggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhl
YywgQwogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgcHJlZGljdGlvbnMtPm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgewotICAgICAgICBpZiAo
IXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJl
ZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpIHsKKyAgICAgICAgaWYgKGkgPCBl
bnRyeS0+bV9saXZlQXJndW1lbnRzLnNpemUoKSAmJiBlbnRyeS0+bV9saXZlQXJndW1lbnRzLmdl
dChpKQorICAgICAgICAgICAgJiYgIXByZWRpY3Rpb25Jc1ZhbGlkKGdsb2JhbERhdGEsIGV4ZWMt
PmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkp
IHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCIgICAg
T1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGks
IGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmco
cHJlZGljdGlvbnMtPmdldEFyZ3VtZW50UHJlZGljdGlvbihpKSkpOwogI2VuZGlmCkBAIC0xMDUs
MTEgKzExMCw5IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIEMKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBrbm93IGlmIGF0
IGFuIE9TUiBlbnRyeSwgYSB2YXJpYWJsZSBpcyBsaXZlLiBJZiBpdCBpc24ndAotICAgIC8vIHRo
ZW4gd2Ugc2hvdWxkbid0IHRyeSB0byB2ZXJpZnkgaXRzIHByZWRpY3Rpb24uCi0gICAgCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRpY3Rpb25zLT5udW1iZXJPZlZhcmlhYmxlcygp
OyArK2kpIHsKLSAgICAgICAgaWYgKCFwcmVkaWN0aW9uSXNWYWxpZChnbG9iYWxEYXRhLCBleGVj
LT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb25zLT5nZXRQcmVkaWN0aW9uKGkp
KSkgeworICAgICAgICBpZiAoaSA8IGVudHJ5LT5tX2xpdmVWYXJpYWJsZXMuc2l6ZSgpICYmIGVu
dHJ5LT5tX2xpdmVWYXJpYWJsZXMuZ2V0KGkpCisgICAgICAgICAgICAmJiAhcHJlZGljdGlvbklz
VmFsaWQoZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0
aW9ucy0+Z2V0UHJlZGljdGlvbihpKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQog
ICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlz
ICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5k
ZXNjcmlwdGlvbigpLCBwcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbnMtPmdldFByZWRpY3Rp
b24oaSkpKTsKICNlbmRpZgpAQCAtMTM5LDMwICsxNDIsOSBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgCiAgICAgZXhlYy0+c2V0Q29kZUJsb2NrKGNvZGVC
bG9jayk7CiAgICAgCi0gICAgLy8gNCkgRmluZCBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbiBt
YWNoaW5lIGNvZGUgYWRkcmVzcy4gVGhlIERGRyBzdG9yZXMKLSAgICAvLyAgICB0aGUgbWFjaGlu
ZSBjb2RlIG9mZnNldHMgb2YgT1NSIHRhcmdldHMgaW4gYSBDb21wYWN0SklUQ29kZU1hcC4KLSAg
ICAvLyAgICBEZWNvZGluZyBpdCBpcyBub3Qgc3VwZXIgZWZmaWNpZW50LCBidXQgd2UgZXhwZWN0
IHRoYXQgT1NSIGVudHJ5Ci0gICAgLy8gICAgaGFwcGVucyBzdWZmaWNpZW50bHkgcmFyZWx5LCBh
bmQgdGhhdCBPU1IgZW50cnlwb2ludHMgYXJlIHN1ZmZpY2llbnRseQotICAgIC8vICAgIGZldywg
dGhhdCB0aGlzIHdvbid0IGh1cnQgdGhyb3VnaHB1dC4gTm90ZSB0aGF0IHRoZSBvbmx5IHJlYWwK
LSAgICAvLyAgICByZWFzb24gd2h5IHdlIHVzZSBhIENvbXBhY3RKSVRDb2RlTWFwIGlzIHRvIGF2
b2lkIGhhdmluZyB0byBpbnRyb2R1Y2UKLSAgICAvLyAgICB5ZXQgYW5vdGhlciBkYXRhIHN0cnVj
dHVyZSBmb3IgbWFwcGluZyBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kCi0gICAgLy8gICAg
bWFjaGluZSBjb2RlIG9mZnNldHMuCi0gICAgCi0gICAgQ29tcGFjdEpJVENvZGVNYXA6OkRlY29k
ZXIgZGVjb2Rlcihjb2RlQmxvY2stPmppdENvZGVNYXAoKSk7Ci0gICAgdW5zaWduZWQgbWFjaGlu
ZUNvZGVPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAg
d2hpbGUgKGRlY29kZXIubnVtYmVyT2ZFbnRyaWVzUmVtYWluaW5nKCkpIHsKLSAgICAgICAgdW5z
aWduZWQgY3VycmVudEJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIHVuc2lnbmVkIGN1cnJlbnRNYWNo
aW5lQ29kZU9mZnNldDsKLSAgICAgICAgZGVjb2Rlci5yZWFkKGN1cnJlbnRCeXRlY29kZUluZGV4
LCBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQpOwotICAgICAgICBpZiAoY3VycmVudEJ5dGVjb2Rl
SW5kZXggPT0gYnl0ZWNvZGVJbmRleCkgewotICAgICAgICAgICAgbWFjaGluZUNvZGVPZmZzZXQg
PSBjdXJyZW50TWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobWFjaGluZUNvZGVPZmZzZXQgIT0gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKKyAgICAvLyA0KSBGaW5kIGFuZCByZXR1cm4g
dGhlIGRlc3RpbmF0aW9uIG1hY2hpbmUgY29kZSBhZGRyZXNzLgogICAgIAotICAgIHZvaWQqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihjb2RlQmxvY2stPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hY2hpbmVDb2RlT2Zmc2V0KTsK
KyAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBlbnRyeS0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
ICAgICBwcmludGYoIiAgICBPU1IgcmV0dXJuaW5nIG1hY2hpbmUgY29kZSBhZGRyZXNzICVwLlxu
IiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJ
KHJldmlzaW9uIDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5
X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRXhlY1N0YXRlOwpAQCAtMzQsNiArMzYsMTggQEAg
Y2xhc3MgQ29kZUJsb2NrOwogbmFtZXNwYWNlIERGRyB7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
K3N0cnVjdCBPU1JFbnRyeURhdGEgeworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIEJpdFZlY3RvciBtX2xpdmVBcmd1
bWVudHM7CisgICAgQml0VmVjdG9yIG1fbGl2ZVZhcmlhYmxlczsKK307CisKK2lubGluZSB1bnNp
Z25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlE
YXRhKQoreworICAgIHJldHVybiBvc3JFbnRyeURhdGEtPm1fYnl0ZWNvZGVJbmRleDsKK30KKwog
dm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwogI2Vsc2UKIGlubGluZSB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgdW5zaWduZWQpIHsgcmV0dXJuIDA7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5
NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzcsNiArODc3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAorICAgICAgICBpZiAoc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcihub2RlLmNoaWxkMSgp
KSkgeworICAgICAgICAgICAgLy8gRG8gaXQgdGhlIHNhZmUgd2F5LgorICAgICAgICAgICAgbm9u
U3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVS
b290cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJDb25zZXJ2YXRpdmVSb290cy5oIgogCisjaW5jbHVkZSAiSmV0dGlz
b25lZENvZGVCbG9ja3MuaCIKKwogbmFtZXNwYWNlIEpTQyB7CiAKIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKQEAgLTMzLDYgKzM1LDIwIEBAIGlubGluZSBib29sIGlzUG9p
bnRlckFsaWduZWQodm9pZCogcCkKICAgICByZXR1cm4gISgoaW50cHRyX3QpKHApICYgKHNpemVv
ZihjaGFyKikgLSAxKSk7CiB9CiAKK0NvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290
cyhjb25zdCBNYXJrZWRCbG9ja1NldCogYmxvY2tzKQorICAgIDogbV9yb290cyhtX2lubGluZVJv
b3RzKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQor
ICAgICwgbV9ibG9ja3MoYmxvY2tzKQoreworfQorCitDb25zZXJ2YXRpdmVSb290czo6fkNvbnNl
cnZhdGl2ZVJvb3RzKCkKK3sKKyAgICBpZiAobV9yb290cyAhPSBtX2lubGluZVJvb3RzKQorICAg
ICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXRBbmRSZWxlYXNlKG1fcm9vdHMsIG1fY2FwYWNpdHkg
KiBzaXplb2YoSlNDZWxsKikpOworfQorCiB2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpncm93KCkK
IHsKICAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBtX2NhcGFjaXR5ID09IGlubGluZUNhcGFjaXR5
ID8gbm9uSW5saW5lQ2FwYWNpdHkgOiBtX2NhcGFjaXR5ICogMjsKQEAgLTQ0LDggKzYwLDE2IEBA
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6Omdyb3coKQogICAgIG1fcm9vdHMgPSBuZXdSb290czsK
IH0KIAotaW5saW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKiBwLCBUaW55Qmxv
b21GaWx0ZXIgZmlsdGVyKQorY2xhc3MgRHVtbXlNYXJrSG9vayB7CitwdWJsaWM6CisgICAgdm9p
ZCBtYXJrKHZvaWQqKSB7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIE1hcmtIb29rPgoraW5s
aW5lIHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmdlbmVyaWNBZGRQb2ludGVyKHZvaWQqIHAsIFRp
bnlCbG9vbUZpbHRlciBmaWx0ZXIsIE1hcmtIb29rJiBtYXJrSG9vaykKIHsKKyAgICBtYXJrSG9v
ay5tYXJrKHApOworICAgIAogICAgIE1hcmtlZEJsb2NrKiBjYW5kaWRhdGUgPSBNYXJrZWRCbG9j
azo6YmxvY2tGb3IocCk7CiAgICAgaWYgKGZpbHRlci5ydWxlT3V0KHJlaW50ZXJwcmV0X2Nhc3Q8
Qml0cz4oY2FuZGlkYXRlKSkpIHsKICAgICAgICAgQVNTRVJUKCFjYW5kaWRhdGUgfHwgIW1fYmxv
Y2tzLT5zZXQoKS5jb250YWlucyhjYW5kaWRhdGUpKTsKQEAgLTcwLDcgKzk0LDggQEAgaW5saW5l
IHZvaWQgQ29uc2VydmF0aXZlUm9vdHM6OmFkZCh2b2lkKgogICAgIG1fcm9vdHNbbV9zaXplKytd
ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4ocCk7CiB9CiAKLXZvaWQgQ29uc2VydmF0aXZlUm9vdHM6
OmFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kKQordGVtcGxhdGU8dHlwZW5hbWUgTWFya0hvb2s+
Cit2b2lkIENvbnNlcnZhdGl2ZVJvb3RzOjpnZW5lcmljQWRkU3Bhbih2b2lkKiBiZWdpbiwgdm9p
ZCogZW5kLCBNYXJrSG9vayYgbWFya0hvb2spCiB7CiAgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7
CiAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDxjaGFyKj4oZW5kKSAtIHN0YXRpY19jYXN0PGNoYXIq
PihiZWdpbikpIDwgMHgxMDAwMDAwKTsKQEAgLTc5LDcgKzEwNCwxOCBAQCB2b2lkIENvbnNlcnZh
dGl2ZVJvb3RzOjphZGQodm9pZCogYmVnaW4sCiAKICAgICBUaW55Qmxvb21GaWx0ZXIgZmlsdGVy
ID0gbV9ibG9ja3MtPmZpbHRlcigpOyAvLyBNYWtlIGEgbG9jYWwgY29weSBvZiBmaWx0ZXIgdG8g
c2hvdyB0aGUgY29tcGlsZXIgaXQgd29uJ3QgYWxpYXMsIGFuZCBjYW4gYmUgcmVnaXN0ZXItYWxs
b2NhdGVkLgogICAgIGZvciAoY2hhcioqIGl0ID0gc3RhdGljX2Nhc3Q8Y2hhcioqPihiZWdpbik7
IGl0ICE9IHN0YXRpY19jYXN0PGNoYXIqKj4oZW5kKTsgKytpdCkKLSAgICAgICAgYWRkKCppdCwg
ZmlsdGVyKTsKKyAgICAgICAgZ2VuZXJpY0FkZFBvaW50ZXIoKml0LCBmaWx0ZXIsIG1hcmtIb29r
KTsKK30KKwordm9pZCBDb25zZXJ2YXRpdmVSb290czo6YWRkKHZvaWQqIGJlZ2luLCB2b2lkKiBl
bmQpCit7CisgICAgRHVtbXlNYXJrSG9vayBkdW1teU1hcmtIb29rOworICAgIGdlbmVyaWNBZGRT
cGFuKGJlZ2luLCBlbmQsIGR1bW15TWFya0hvb2spOworfQorCit2b2lkIENvbnNlcnZhdGl2ZVJv
b3RzOjphZGQodm9pZCogYmVnaW4sIHZvaWQqIGVuZCwgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpl
dHRpc29uZWRDb2RlQmxvY2tzKQoreworICAgIGdlbmVyaWNBZGRTcGFuKGJlZ2luLCBlbmQsIGpl
dHRpc29uZWRDb2RlQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db25zZXJ2YXRpdmVSb290cy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmgJKHJldmlzaW9u
IDk1NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29uc2VydmF0aXZlUm9vdHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTQ2VsbDsKK2NsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogY2xhc3MgSGVhcDsKIAog
Y2xhc3MgQ29uc2VydmF0aXZlUm9vdHMgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAg
fkNvbnNlcnZhdGl2ZVJvb3RzKCk7CiAKICAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCog
ZW5kKTsKKyAgICB2b2lkIGFkZCh2b2lkKiBiZWdpbiwgdm9pZCogZW5kLCBKZXR0aXNvbmVkQ29k
ZUJsb2NrcyYpOwogICAgIAogICAgIHNpemVfdCBzaXplKCk7CiAgICAgSlNDZWxsKiogcm9vdHMo
KTsKQEAgLTQ5LDcgKzUxLDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBp
bmxpbmVDYXBhY2l0eSA9IDEyODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vbklubGluZUNh
cGFjaXR5ID0gODE5MiAvIHNpemVvZihKU0NlbGwqKTsKICAgICAKLSAgICB2b2lkIGFkZCh2b2lk
KiwgVGlueUJsb29tRmlsdGVyKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAg
ICB2b2lkIGdlbmVyaWNBZGRQb2ludGVyKHZvaWQqLCBUaW55Qmxvb21GaWx0ZXIsIE1hcmtIb29r
Jik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBNYXJrSG9vaz4KKyAgICB2b2lkIGdlbmVyaWNB
ZGRTcGFuKHZvaWQqLCB2b2lkKiBlbmQsIE1hcmtIb29rJik7CisgICAgCiAgICAgdm9pZCBncm93
KCk7CiAKICAgICBKU0NlbGwqKiBtX3Jvb3RzOwpAQCAtNTksMjAgKzY2LDYgQEAgcHJpdmF0ZToK
ICAgICBKU0NlbGwqIG1faW5saW5lUm9vdHNbaW5saW5lQ2FwYWNpdHldOwogfTsKIAotaW5saW5l
IENvbnNlcnZhdGl2ZVJvb3RzOjpDb25zZXJ2YXRpdmVSb290cyhjb25zdCBNYXJrZWRCbG9ja1Nl
dCogYmxvY2tzKQotICAgIDogbV9yb290cyhtX2lubGluZVJvb3RzKQotICAgICwgbV9zaXplKDAp
Ci0gICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAgICwgbV9ibG9ja3MoYmxvY2tz
KQotewotfQotCi1pbmxpbmUgQ29uc2VydmF0aXZlUm9vdHM6On5Db25zZXJ2YXRpdmVSb290cygp
Ci17Ci0gICAgaWYgKG1fcm9vdHMgIT0gbV9pbmxpbmVSb290cykKLSAgICAgICAgT1NBbGxvY2F0
b3I6OmRlY29tbWl0QW5kUmVsZWFzZShtX3Jvb3RzLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEpTQ2Vs
bCopKTsKLX0KLQogaW5saW5lIHNpemVfdCBDb25zZXJ2YXRpdmVSb290czo6c2l6ZSgpCiB7CiAg
ICAgcmV0dXJuIG1fc2l6ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiA5NTU5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTQsNiArMzk0LDExIEBAIHZvaWQgSGVhcDo6bWFya1Byb3RlY3Rl
ZE9iamVjdHMoSGVhcFJvb3QKICAgICAgICAgaGVhcFJvb3RWaXNpdG9yLnZpc2l0KCZpdC0+Zmly
c3QpOwogfQogCit2b2lkIEhlYXA6OmFkZEpldHRpc29uZWRDb2RlQmxvY2soUGFzc093blB0cjxD
b2RlQmxvY2s+IGNvZGVCbG9jaykKK3sKKyAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmFkZENv
ZGVCbG9jayhjb2RlQmxvY2spOworfQorCiB2b2lkIEhlYXA6OnB1c2hUZW1wU29ydFZlY3RvcihW
ZWN0b3I8VmFsdWVTdHJpbmdQYWlyPiogdGVtcFZlY3RvcikKIHsKICAgICBtX3RlbXBTb3J0aW5n
VmVjdG9ycy5hcHBlbmQodGVtcFZlY3Rvcik7CkBAIC00NTYsMjAgKzQ2MSwyMiBAQCB2b2lkIEhl
YXA6Om1hcmtSb290cygpCiAgICAgbV9vcGVyYXRpb25JblByb2dyZXNzID0gQ29sbGVjdGlvbjsK
IAogICAgIHZvaWQqIGR1bW15OwotCisgICAgCiAgICAgLy8gV2UgZ2F0aGVyIGNvbnNlcnZhdGl2
ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2UgY29uc2VydmF0aXZlCiAg
ICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRlcm1pbmUgd2hldGhlciBh
IHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBDb25zZXJ2YXRpdmVSb290cyBtYWNoaW5lVGhyZWFk
Um9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tzKCkpOwogICAgIG1fbWFjaGluZVRocmVhZHMuZ2F0
aGVyQ29uc2VydmF0aXZlUm9vdHMobWFjaGluZVRocmVhZFJvb3RzLCAmZHVtbXkpOwogCiAgICAg
Q29uc2VydmF0aXZlUm9vdHMgcmVnaXN0ZXJGaWxlUm9vdHMoJm1fb2JqZWN0U3BhY2UuYmxvY2tz
KCkpOwotICAgIHJlZ2lzdGVyRmlsZSgpLmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKHJlZ2lzdGVy
RmlsZVJvb3RzKTsKKyAgICBtX2pldHRpc29uZWRDb2RlQmxvY2tzLmNsZWFyTWFya3MoKTsKKyAg
ICByZWdpc3RlckZpbGUoKS5nYXRoZXJDb25zZXJ2YXRpdmVSb290cyhyZWdpc3RlckZpbGVSb290
cywgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcyk7CisgICAgbV9qZXR0aXNvbmVkQ29kZUJsb2Nrcy5k
ZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKIAogICAgIGNsZWFyTWFya3MoKTsKIAogICAgIFNs
b3RWaXNpdG9yJiB2aXNpdG9yID0gbV9zbG90VmlzaXRvcjsKICAgICBIZWFwUm9vdFZpc2l0b3Ig
aGVhcFJvb3RWaXNpdG9yKHZpc2l0b3IpOwotCisgICAgCiAgICAgdmlzaXRvci5hcHBlbmQobWFj
aGluZVRocmVhZFJvb3RzKTsKICAgICB2aXNpdG9yLmRyYWluKCk7CiAKQEAgLTQ5Myw2ICs1MDAs
OSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cygpCiAKICAgICBtX2hhbmRsZVN0YWNrLnZpc2l0KGhl
YXBSb290VmlzaXRvcik7CiAgICAgdmlzaXRvci5kcmFpbigpOworICAgIAorICAgIG1famV0dGlz
b25lZENvZGVCbG9ja3MudHJhY2VDb2RlQmxvY2tzKHZpc2l0b3IpOworICAgIHZpc2l0b3IuZHJh
aW4oKTsKIAogICAgIC8vIFdlYWsgaGFuZGxlcyBtdXN0IGJlIG1hcmtlZCBsYXN0LCBiZWNhdXNl
IHRoZWlyIG93bmVycyB1c2UgdGhlIHNldCBvZgogICAgIC8vIG9wYXF1ZSByb290cyB0byBkZXRl
cm1pbmUgcmVhY2hhYmlsaXR5LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2
aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJBbGxvY2F0aW9uU3BhY2UuaCIK
ICNpbmNsdWRlICJIYW5kbGVIZWFwLmgiCiAjaW5jbHVkZSAiSGFuZGxlU3RhY2suaCIKKyNpbmNs
dWRlICJKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oIgogI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCiAj
aW5jbHVkZSAiTWFya2VkQmxvY2tTZXQuaCIKICNpbmNsdWRlICJNYXJrZWRTcGFjZS5oIgpAQCAt
OTgsNiArOTksOCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByb3RlY3QoSlNW
YWx1ZSk7CiAgICAgICAgIGJvb2wgdW5wcm90ZWN0KEpTVmFsdWUpOyAvLyBUcnVlIHdoZW4gdGhl
IHByb3RlY3QgY291bnQgZHJvcHMgdG8gMC4KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWRkSmV0
dGlzb25lZENvZGVCbG9jayhQYXNzT3duUHRyPENvZGVCbG9jaz4pOwogCiAgICAgICAgIHNpemVf
dCBzaXplKCk7CiAgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpOwpAQCAtMTkxLDYgKzE5NCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTbG90VmlzaXRvciBtX3Nsb3RWaXNpdG9yOwogICAg
ICAgICBIYW5kbGVIZWFwIG1faGFuZGxlSGVhcDsKICAgICAgICAgSGFuZGxlU3RhY2sgbV9oYW5k
bGVTdGFjazsKKyAgICAgICAgSmV0dGlzb25lZENvZGVCbG9ja3MgbV9qZXR0aXNvbmVkQ29kZUJs
b2NrczsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nr
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNv
bmVkQ29kZUJsb2Nrcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkpldHRpc29uZWRDb2RlQmxvY2tzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK0pldHRpc29uZWRDb2RlQmxvY2tzOjpKZXR0aXNvbmVkQ29k
ZUJsb2NrcygpIHsgfQorCitKZXR0aXNvbmVkQ29kZUJsb2Nrczo6fkpldHRpc29uZWRDb2RlQmxv
Y2tzKCkKK3sKKyAgICBXVEY6OmRlbGV0ZUFsbEtleXMobV9tYXApOworfQorCit2b2lkIEpldHRp
c29uZWRDb2RlQmxvY2tzOjphZGRDb2RlQmxvY2soUGFzc093blB0cjxDb2RlQmxvY2s+IGNvZGVC
bG9jaykKK3sKKyAgICBBU1NFUlQobV9tYXAuZmluZChjb2RlQmxvY2suZ2V0KCkpID09IG1fbWFw
LmVuZCgpKTsKKyAgICAKKyAgICBtX21hcC5hZGQoY29kZUJsb2NrLmxlYWtQdHIoKSwgZmFsc2Up
OworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjpjbGVhck1hcmtzKCkKK3sKKyAgICBI
YXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7
CisgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5k
KCk7CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0g
YmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPnNlY29uZCA9IGZhbHNl
OworfQorCit2b2lkIEpldHRpc29uZWRDb2RlQmxvY2tzOjpkZWxldGVVbm1hcmtlZENvZGVCbG9j
a3MoKQoreworICAgIFZlY3RvcjxDb2RlQmxvY2sqPiB0b1JlbW92ZTsKKyAgICAKKyAgICBIYXNo
TWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7Cisg
ICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7
CisgICAgZm9yIChIYXNoTWFwPENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVn
aW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaWYgKCFpdGVyLT5zZWNvbmQpCisg
ICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaXRlci0+Zmlyc3QpOworICAgIH0KKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9SZW1vdmUuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgbV9tYXAucmVtb3ZlKHRvUmVtb3ZlW2ldKTsKKyAgICAgICAgZGVsZXRlIHRvUmVtb3ZlW2ld
OworICAgIH0KK30KKwordm9pZCBKZXR0aXNvbmVkQ29kZUJsb2Nrczo6dHJhY2VDb2RlQmxvY2tz
KFNsb3RWaXNpdG9yJiBzbG90VmlzaXRvcikKK3sKKyAgICBIYXNoTWFwPENvZGVCbG9jayosIGJv
b2w+OjppdGVyYXRvciBiZWdpbiA9IG1fbWFwLmJlZ2luKCk7CisgICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBib29sPjo6aXRlcmF0b3IgZW5kID0gbV9tYXAuZW5kKCk7CisgICAgZm9yIChIYXNoTWFw
PENvZGVCbG9jayosIGJvb2w+OjppdGVyYXRvciBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCisgICAgICAgIGl0ZXItPmZpcnN0LT52aXNpdEFnZ3JlZ2F0ZShzbG90VmlzaXRvcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0pldHRpc29uZWRDb2RlQmxvY2tzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9KZXR0aXNvbmVkQ29kZUJsb2Nrcy5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgSmV0dGlzb25lZENvZGVCbG9ja3NfaAorI2RlZmluZSBKZXR0aXNv
bmVkQ29kZUJsb2Nrc19oCisKKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFNsb3RWaXNpdG9yOworCitjbGFz
cyBKZXR0aXNvbmVkQ29kZUJsb2NrcyB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7IC8v
IE9ubHkgbWFsbG9jJ2QgaW4gQ29uc2VydmF0aXZlUm9vdHMKK3B1YmxpYzoKKyAgICBKZXR0aXNv
bmVkQ29kZUJsb2NrcygpOworICAgIAorICAgIH5KZXR0aXNvbmVkQ29kZUJsb2NrcygpOworICAg
IAorICAgIHZvaWQgYWRkQ29kZUJsb2NrKFBhc3NPd25QdHI8Q29kZUJsb2NrPik7CisgICAgCisg
ICAgdm9pZCBjbGVhck1hcmtzKCk7CisgICAgCisgICAgdm9pZCBtYXJrKHZvaWQqIGNhbmRpZGF0
ZUNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgZm9yIDAgYW5k
IC0xIGJlY2F1c2UgdGhvc2UgYXJlIHVzZWQgYnkgdGhlIEhhc2hNYXAgYXMgbWFya2Vycy4KKyAg
ICAgICAgdWludHB0cl90IHZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNhbmRp
ZGF0ZUNvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGNoZWNrcyBmb3IgYm90
aCBvZiB0aG9zZSBuYXN0eSBjYXNlcyBpbiBvbmUgZ28uCisgICAgICAgIC8vIDAgKyAxID0gMQor
ICAgICAgICAvLyAtMSArIDEgPSAwCisgICAgICAgIGlmICh2YWx1ZSArIDEgPD0gMSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgYm9v
bD46Oml0ZXJhdG9yIGl0ZXIgPSBtX21hcC5maW5kKHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGNh
bmRpZGF0ZUNvZGVCbG9jaykpOworICAgICAgICBpZiAoaXRlciA9PSBtX21hcC5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaXRlci0+c2Vjb25kID0gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkZWxldGVVbm1hcmtlZENvZGVCbG9ja3MoKTsKKyAgICAKKyAgICB2b2lk
IHRyYWNlQ29kZUJsb2NrcyhTbG90VmlzaXRvciYpOworCitwcml2YXRlOgorICAgIC8vIEl0IHdv
dWxkIGJlIGdyZWF0IHRvIHVzZSBhbiBPd25QdHI8Q29kZUJsb2NrPiBoZXJlIGJ1dCB0aGF0IHdv
dWxkCisgICAgLy8gYWxtb3N0IGNlcnRhaW5seSBub3Qgd29yay4KKyAgICBIYXNoTWFwPENvZGVC
bG9jayosIGJvb2w+IG1fbWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBKZXR0aXNvbmVkQ29kZUJsb2Nrc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiA5NTU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSwxMSBAQCB2b2lkIFJlZ2lzdGVyRmlsZTo6Z2F0aGVyQ29u
c2VydmF0aXZlUm9vCiAgICAgY29uc2VydmF0aXZlUm9vdHMuYWRkKGJlZ2luKCksIGVuZCgpKTsK
IH0KIAordm9pZCBSZWdpc3RlckZpbGU6OmdhdGhlckNvbnNlcnZhdGl2ZVJvb3RzKENvbnNlcnZh
dGl2ZVJvb3RzJiBjb25zZXJ2YXRpdmVSb290cywgSmV0dGlzb25lZENvZGVCbG9ja3MmIGpldHRp
c29uZWRDb2RlQmxvY2tzKQoreworICAgIGNvbnNlcnZhdGl2ZVJvb3RzLmFkZChiZWdpbigpLCBl
bmQoKSwgamV0dGlzb25lZENvZGVCbG9ja3MpOworfQorCiB2b2lkIFJlZ2lzdGVyRmlsZTo6cmVs
ZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKIHsKICAgICBwdHJkaWZmX3QgZGVsdGEgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDk1NTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIENvbnNl
cnZhdGl2ZVJvb3RzOworICAgIGNsYXNzIEpldHRpc29uZWRDb2RlQmxvY2tzOwogCiAgICAgY2xh
c3MgUmVnaXN0ZXJGaWxlIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVnaXN0ZXJG
aWxlKTsKQEAgLTY0LDYgKzY1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH5SZWdpc3Rl
ckZpbGUoKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgZ2F0aGVyQ29uc2VydmF0aXZlUm9vdHMo
Q29uc2VydmF0aXZlUm9vdHMmKTsKKyAgICAgICAgdm9pZCBnYXRoZXJDb25zZXJ2YXRpdmVSb290
cyhDb25zZXJ2YXRpdmVSb290cyYsIEpldHRpc29uZWRDb2RlQmxvY2tzJik7CiAKICAgICAgICAg
UmVnaXN0ZXIqIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVnaXN0ZXIqPiht
X3Jlc2VydmF0aW9uLmJhc2UoKSk7IH0KICAgICAgICAgUmVnaXN0ZXIqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxNCw3ICsxOTE0LDIyIEBAIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IHN0YWNr
RnJhbWUuYXJnc1swXS5pbnQzMigpOwogCi0gICAgaWYgKCFjb2RlQmxvY2stPmhhc09wdGltaXpl
ZFJlcGxhY2VtZW50KCkpIHsKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50
ZigiRW50ZXJlZCBvcHRpbWl6ZV9mcm9tX2xvb3Agd2l0aCBleGVjdXRlQ291bnRlciA9ICVkLCBy
ZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRpb25EZWxheUNvdW50ZXIg
PSAldVxuIiwgY29kZUJsb2NrLT5leGVjdXRlQ291bnRlcigpLCBjb2RlQmxvY2stPnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0aW9uRGVsYXlDb3VudGVy
KCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRpbWl6ZWRSZXBsYWNlbWVu
dCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJDb25z
aWRlcmluZyBsb29wIE9TUiBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIs
IGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2Vt
ZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVu
dCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpKSB7Cisj
aWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgICAgIHByaW50ZigiVHJpZ2dlcmlu
ZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3ApLlxuIiwgY29kZUJsb2NrLCBjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCkpOworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJl
b3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFjb2RlQmxvY2stPnNob3VsZE9w
dGltaXplTm93KCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAg
cHJpbnRmKCJEZWxheWluZyBvcHRpbWl6YXRpb24gZm9yICVwIChpbiBsb29wKSBiZWNhdXNlIG9m
IGluc3VmZmljaWVudCBwcm9maWxpbmcuXG4iLCBjb2RlQmxvY2spOwpAQCAtMTk1Miw2ICsxOTY3
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogI2VuZGlmCiAK
ICAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsKKyAgICAgICAgb3B0aW1pemVkQ29k
ZUJsb2NrLT5jb3VudFNwZWN1bGF0aW9uU3VjY2VzcygpOwogICAgICAgICBTVFVCX1NFVF9SRVRV
Uk5fQUREUkVTUyhhZGRyZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE5NjAsNiAr
MTk3NiwzMCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9tCiAgICAg
cHJpbnRmKCJPcHRpbWl6aW5nICVwIGZyb20gbG9vcCBzdWNjZWVkZWQsIE9TUiBmYWlsZWQuXG4i
LCBjb2RlQmxvY2spOwogI2VuZGlmCiAKKyAgICAvLyBDb3VudCB0aGUgT1NSIGZhaWx1cmUgYXMg
YSBzcGVjdWxhdGlvbiBmYWlsdXJlLiBJZiB0aGlzIGhhcHBlbnMgYSBsb3QsIHRoZW4KKyAgICAv
LyByZW9wdGltaXplLgorICAgIG9wdGltaXplZENvZGVCbG9jay0+Y291bnRTcGVjdWxhdGlvbkZh
aWx1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQorICAgIHByaW50Zigi
RW5jb3VudGVyZWQgbG9vcCBPU1IgZmFpbHVyZSBpbnRvICVwKCVwKSB3aXRoIHN1Y2Nlc3MvZmFp
bCAldS8ldS5cbiIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxv
Y2stPnJlcGxhY2VtZW50KCktPnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisKKyAg
ICAvLyBXZSBhcmUgYSBsb3QgbW9yZSBjb25zZXJ2YXRpdmUgYWJvdXQgdHJpZ2dlcmluZyByZW9w
dGltaXphdGlvbiBhZnRlciBPU1IgZmFpbHVyZSB0aGFuCisgICAgLy8gYmVmb3JlIGl0LiBJZiB3
ZSBlbnRlciB0aGUgb3B0aW1pemVfZnJvbV9sb29wIHRyaWdnZXIgd2l0aCBhIGJ1Y2tldCBmdWxs
IG9mIGZhaWwKKyAgICAvLyBhbHJlYWR5LCB0aGVuIHdlIHJlYWxseSB3b3VsZCBsaWtlIHRvIHJl
b3B0aW1pemUgaW1tZWRpYXRlbHkuIEJ1dCB0aGlzIGNhc2UgY292ZXJzCisgICAgLy8gc29tZXRo
aW5nIGVsc2U6IHRoZXJlIHdlcmVuJ3QgbWFueSAob3IgYW55KSBzcGVjdWxhdGlvbiBmYWlsdXJl
cyBiZWZvcmUsIGJ1dCB3ZSBqdXN0CisgICAgLy8gZmFpbGVkIHRvIGVudGVyIHRoZSBzcGVjdWxh
dGl2ZSBjb2RlIGJlY2F1c2Ugc29tZSB2YXJpYWJsZSBoYWQgdGhlIHdyb25nIHZhbHVlIG9yCisg
ICAgLy8gYmVjYXVzZSB0aGUgT1NSIGNvZGUgZGVjaWRlZCBmb3IgYW55IHNwdXJpb3VzIHJlYXNv
biB0aGF0IGl0IGRpZCBub3Qgd2FudCB0byBPU1IKKyAgICAvLyByaWdodCBub3cuIFNvLCB3ZSBv
bmx5IHRyaWdnZXIgcmVvcHRpbWl6YXRpb24gb25seSB1cG9uIHRoZSBtb3JlIGNvbnNlcnZhdGl2
ZSAobm9uLWxvb3ApCisgICAgLy8gcmVvcHRpbWl6YXRpb24gdHJpZ2dlci4KKyAgICBpZiAob3B0
aW1pemVkQ29kZUJsb2NrLT5zaG91bGRSZW9wdGltaXplTm93KCkpIHsKKyNpZiBFTkFCTEUoSklU
X1ZFUkJPU0VfT1NSKQorICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRpb24g
b2YgJXAoJXApIChpbiBsb29wIGFmdGVyIE9TUiBmYWlsKS5cbiIsIGNvZGVCbG9jaywgY29kZUJs
b2NrLT5yZXBsYWNlbWVudCgpKTsKKyNlbmRpZgorICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1p
emUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgLy8gT1NSIGZhaWxlZCB0aGlzIHRpbWUsIGJ1dCBpdCBtaWdodCBzdWNjZWVkIG5leHQgdGlt
ZSEgTGV0IHRoZSBjb2RlIHJ1biBhIGJpdAogICAgIC8vIGxvbmdlciBhbmQgdGhlbiB0cnkgYWdh
aW4uCiAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZUFmdGVyV2FybVVwKCk7CkBAIC0xOTcyLDggKzIw
MTIsMjMgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQogICAgIENh
bGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwogICAgIAotICAgIGlmIChjb2Rl
QmxvY2stPmhhc09wdGltaXplZFJlcGxhY2VtZW50KCkpCisjaWYgRU5BQkxFKEpJVF9WRVJCT1NF
X09TUikKKyAgICBwcmludGYoIkVudGVyZWQgb3B0aW1pemVfZnJvbV9yZXQgd2l0aCBleGVjdXRl
Q291bnRlciA9ICVkLCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9ICV1LCBvcHRpbWl6YXRp
b25EZWxheUNvdW50ZXIgPSAldVxuIiwgY29kZUJsb2NrLT5leGVjdXRlQ291bnRlcigpLCBjb2Rl
QmxvY2stPnJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCksIGNvZGVCbG9jay0+b3B0aW1pemF0
aW9uRGVsYXlDb3VudGVyKCkpOworI2VuZGlmCisKKyAgICBpZiAoY29kZUJsb2NrLT5oYXNPcHRp
bWl6ZWRSZXBsYWNlbWVudCgpKSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAg
ICAgcHJpbnRmKCJSZXR1cm5pbmcgZnJvbSBvbGQgSklUIGNhbGwgZnJhbWUgd2l0aCBvcHRpbWl6
ZWQgcmVwbGFjZW1lbnQgJXAoJXApLCB3aXRoIHN1Y2Nlc3MvZmFpbCAldS8ldS5cbiIsIGNvZGVC
bG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkt
PnNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSwgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLT5z
cGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpOworI2VuZGlmCisgICAgICAgIGlmIChjb2RlQmxvY2st
PnJlcGxhY2VtZW50KCktPnNob3VsZFJlb3B0aW1pemVOb3coKSkgeworI2lmIEVOQUJMRShKSVRf
VkVSQk9TRV9PU1IpCisgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJpbmcgcmVvcHRpbWl6YXRp
b24gb2YgJXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxh
Y2VtZW50KCkpOworI2VuZGlmCisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1pemUoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICB9CisKICAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+c2hvdWxkT3B0aW1pemVOb3coKSkgewogI2lm
IEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsMTggQEAgREZHOjpJbnRyaW5zaWMgTmF0aXZlRXhlY3V0YWJsZTo6aW50cmlucwogfQogI2Vu
ZGlmCiAKKy8vIFV0aWxpdHkgbWV0aG9kIHVzZWQgZm9yIGpldHRpc29uaW5nIGNvZGUgYmxvY2tz
LgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIGpldHRpc29uQ29kZUJsb2NrKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgT3duUHRyPFQ+JiBjb2RlQmxvY2spCit7CisgICAgQVNT
RVJUKGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpICE9IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAg
ICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBPd25QdHI8VD4gY29kZUJs
b2NrVG9KZXR0aXNvbiA9IGNvZGVCbG9jay5yZWxlYXNlKCk7CisgICAgY29kZUJsb2NrID0gc3Rh
dGljX3BvaW50ZXJfY2FzdDxUPihjb2RlQmxvY2tUb0pldHRpc29uLT5yZWxlYXNlQWx0ZXJuYXRp
dmUoKSk7CisgICAgY29kZUJsb2NrVG9KZXR0aXNvbi0+dW5saW5rSW5jb21pbmdDYWxscygpOwor
ICAgIGdsb2JhbERhdGEuaGVhcC5hZGRKZXR0aXNvbmVkQ29kZUJsb2NrKHN0YXRpY19wb2ludGVy
X2Nhc3Q8Q29kZUJsb2NrPihjb2RlQmxvY2tUb0pldHRpc29uLnJlbGVhc2UoKSkpOworfQorCiBj
b25zdCBDbGFzc0luZm8gU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvID0geyAiU2NyaXB0RXhlY3V0
YWJsZSIsICZFeGVjdXRhYmxlQmFzZTo6c19pbmZvLCAwLCAwIH07CiAKIGNvbnN0IENsYXNzSW5m
byBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0geyAiRXZhbEV4ZWN1dGFibGUiLCAmU2NyaXB0RXhl
Y3V0YWJsZTo6c19pbmZvLCAwLCAwIH07CkBAIC0yMTEsNiArMjIzLDEzIEBAIEpTT2JqZWN0KiBF
dmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmEKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBF
dmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSkKK3sKKyAgICBqZXR0aXNvbkNvZGVCbG9jayhnbG9iYWxEYXRhLCBtX2V2YWxDb2RlQmxv
Y2spOworICAgIG1faml0Q29kZUZvckNhbGwgPSBtX2V2YWxDb2RlQmxvY2stPmdldEpJVENvZGUo
KTsKKyAgICBBU1NFUlQoIW1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjayk7Cit9CisKIHZv
aWQgRXZhbEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKQEAgLTMzMCw2
ICszNDksMTMgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAg
IHJldHVybiAwOwogfQogCit2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXpl
ZENvZGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIG1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9
IG1fcHJvZ3JhbUNvZGVCbG9jay0+Z2V0SklUQ29kZSgpOworICAgIEFTU0VSVCghbV9qaXRDb2Rl
Rm9yQ2FsbFdpdGhBcml0eUNoZWNrKTsKK30KKwogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6dW5s
aW5rQ2FsbHMoKQogewogI2lmIEVOQUJMRShKSVQpCkBAIC01MzMsNiArNTU5LDIwIEBAIEpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICByZXR1cm4gMDsKIH0KIAor
dm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2NrKGdsb2JhbERh
dGEsIG1fY29kZUJsb2NrRm9yQ2FsbCk7CisgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IG1fY29kZUJs
b2NrRm9yQ2FsbC0+Z2V0SklUQ29kZSgpOworICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlD
aGVjayA9IG1fY29kZUJsb2NrRm9yQ2FsbC0+Z2V0SklUQ29kZVdpdGhBcml0eUNoZWNrKCk7Cit9
CisKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3QoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQoreworICAgIGpldHRpc29uQ29kZUJsb2Nr
KGdsb2JhbERhdGEsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKKyAgICBtX2ppdENvZGVGb3JD
b25zdHJ1Y3QgPSBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+Z2V0SklUQ29kZSgpOworICAgIG1f
aml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gbV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QtPmdldEpJVENvZGVXaXRoQXJpdHlDaGVjaygpOworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXMsICZzX2luZm8pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTU1OTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
Nyw2ICszMjcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUq
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpTR2xvYmFs
RGF0YSYpOwogCiAgICAgICAgIEV2YWxDb2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKICAg
ICAgICAgewpAQCAtMzkyLDYgKzM5NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFp
bk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKEpT
R2xvYmFsRGF0YSYpOwogCiAgICAgICAgIFByb2dyYW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVj
b2RlKCkKICAgICAgICAgewpAQCAtNDc1LDYgKzQ3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNT
dGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKiwgRXhlY1N0YXRlKiBjYWxsZWVBcmdzRXhlYyA9IDApOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKEpTR2xv
YmFsRGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAg
ICAgICAgewpAQCAtNDk4LDYgKzUwNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRl
KiwgU2NvcGVDaGFpbk5vZGUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgamV0dGlzb25PcHRp
bWl6ZWRDb2RlRm9yQ29uc3RydWN0KEpTR2xvYmFsRGF0YSYpOwogCiAgICAgICAgIGJvb2wgaXNH
ZW5lcmF0ZWRGb3JDb25zdHJ1Y3QoKSBjb25zdAogICAgICAgICB7CkBAIC01MzgsNiArNTQ2LDE2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRG
b3JDb25zdHJ1Y3QoZXhlYywgc2NvcGVDaGFpbk5vZGUpOwogICAgICAgICB9CiAgICAgICAgIAor
ICAgICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIAorICAgICAgICAgICAgICAgIGpldHRpc29uT3B0
aW1pemVkQ29kZUZvckNhbGwoZ2xvYmFsRGF0YSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAg
ICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoZ2xvYmFsRGF0YSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgaXNHZW5lcmF0ZWRG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Qml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9CaXRW
ZWN0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQml0VmVj
dG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQml0VmVjdG9yX2gKKyNkZWZpbmUg
Qml0VmVjdG9yX2gKKworI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxzdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
VGhpcyBpcyBhIHNwYWNlLWVmZmljaWVudCwgcmVzaXplYWJsZSBiaXR2ZWN0b3IgY2xhc3MuIElu
IHRoZSBjb21tb24gY2FzZSBpdAorLy8gb2NjdXBpZXMgb25lIHdvcmQsIGJ1dCBpZiBuZWNlc3Nh
cnksIGl0IHdpbGwgaW5mbGF0ZSB0aGlzIG9uZSB3b3JkIHRvIHBvaW50CisvLyB0byBhIHNpbmds
ZSBjaHVuayBvZiBvdXQtb2YtbGluZSBhbGxvY2F0ZWQgc3RvcmFnZSB0byBzdG9yZSBhbiBhcmJp
dHJhcnkgbnVtYmVyCisvLyBvZiBiaXRzLgorLy8KKy8vIC0gVGhlIGJpdHZlY3RvciBuZWVkcyB0
byBiZSByZXNpemVkIG1hbnVhbGx5IChqdXN0IGNhbGwgZW5zdXJlU2l6ZSgpKS4KKy8vCisvLyAt
IFRoZSBiaXR2ZWN0b3IgcmVtZW1iZXJzIHRoZSBib3VuZCBvZiBob3cgbWFueSBiaXRzIGNhbiBi
ZSBzdG9yZWQsIGJ1dCB0aGlzCisvLyAgIG1heSBiZSBzbGlnaHRseSBncmVhdGVyIChieSBhcyBt
dWNoIGFzIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgY29uc3RhbnQpCisvLyAgIHRoYW4gdGhlIGxh
c3QgYXJndW1lbnQgcGFzc2VkIHRvIGVuc3VyZVNpemUoKS4KKy8vCisvLyAtIEFjY2Vzc2VzIEFT
U0VSVCB0aGF0IHlvdSBhcmUgd2l0aGluIGJvdW5kcy4KKy8vCisvLyAtIEJpdHMgYXJlIG5vdCBh
dXRvbWF0aWNhbGx5IGluaXRpYWxpemVkIHRvIHplcm8uCisvLworLy8gT24gdGhlIG90aGVyIGhh
bmQsIHRoaXMgQml0VmVjdG9yIGNsYXNzIG1heSBub3QgYmUgdGhlIGZhc3Rlc3QgYXJvdW5kLCBz
aW5jZQorLy8gaXQgZG9lcyBjb25kaXRpb25hbHMgb24gZXZlcnkgZ2V0L3NldC9jbGVhci4gQnV0
IGl0IGlzIGdyZWF0IGlmIHlvdSBuZWVkIHRvCisvLyBqdWdnbGUgYSBsb3Qgb2YgdmFyaWFibGUt
bGVuZ3RoIEJpdFZlY3RvcnMgYW5kIHlvdSdyZSB3b3JyaWVkIGFib3V0IHdhc3RpbmcKKy8vIHNw
YWNlLgorCitjbGFzcyBCaXRWZWN0b3IgeworcHVibGljOiAKKyAgICBCaXRWZWN0b3IoKQorICAg
ICAgICA6IG1fYml0c09yUG9pbnRlcihtYWtlSW5saW5lQml0cygwKSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIEJpdFZlY3Rvcihjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgICAgICA6IG1f
Yml0c09yUG9pbnRlcihtYWtlSW5saW5lQml0cygwKSkKKyAgICB7CisgICAgICAgICgqdGhpcykg
PSBvdGhlcjsKKyAgICB9CisgICAgCisgICAgfkJpdFZlY3RvcigpCisgICAgeworICAgICAgICBp
ZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgT3V0T2ZMaW5lQml0
czo6ZGVzdHJveShvdXRPZkxpbmVCaXRzKCkpOworICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3Im
IG9wZXJhdG9yPShjb25zdCBCaXRWZWN0b3ImIG90aGVyKQorICAgIHsKKyAgICAgICAgdWludHB0
cl90IG5ld0JpdHNPclBvaW50ZXI7CisgICAgICAgIGlmIChvdGhlci5pc0lubGluZSgpKQorICAg
ICAgICAgICAgbmV3Qml0c09yUG9pbnRlciA9IG90aGVyLm1fYml0c09yUG9pbnRlcjsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzKiBuZXdPdXRPZkxpbmVCaXRzID0g
T3V0T2ZMaW5lQml0czo6Y3JlYXRlKG90aGVyLnNpemUoKSk7CisgICAgICAgICAgICBtZW1jcHko
bmV3T3V0T2ZMaW5lQml0cy0+Yml0cygpLCBvdGhlci5iaXRzKCksIGJ5dGVDb3VudChvdGhlci5z
aXplKCkpKTsKKyAgICAgICAgICAgIG5ld0JpdHNPclBvaW50ZXIgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obmV3T3V0T2ZMaW5lQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFp
c0lubGluZSgpKQorICAgICAgICAgICAgT3V0T2ZMaW5lQml0czo6ZGVzdHJveShvdXRPZkxpbmVC
aXRzKCkpOworICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBuZXdCaXRzT3JQb2ludGVyOworICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzSW5saW5lKCkpCisgICAgICAgICAgICByZXR1cm4gbWF4SW5saW5l
Qml0cygpOworICAgICAgICByZXR1cm4gb3V0T2ZMaW5lQml0cygpLT5udW1CaXRzKCk7CisgICAg
fQorCisgICAgdm9pZCBlbnN1cmVTaXplKHNpemVfdCBudW1CaXRzKQorICAgIHsKKyAgICAgICAg
aWYgKG51bUJpdHMgPD0gc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXNp
emVPdXRPZkxpbmUobnVtQml0cyk7CisgICAgfQorICAgIAorICAgIC8vIExpa2UgZW5zdXJlU2l6
ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZlY3Rvci4KKyAg
ICB2b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cykKKyAgICB7CisgICAgICAgIGlmIChpc0lubGlu
ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKG51bUJpdHMg
PD0gbWF4SW5saW5lQml0cygpKSB7CisgICAgICAgICAgICBPdXRPZkxpbmVCaXRzKiBteU91dE9m
TGluZUJpdHMgPSBvdXRPZkxpbmVCaXRzKCk7CisgICAgICAgICAgICBtX2JpdHNPclBvaW50ZXIg
PSBtYWtlSW5saW5lQml0cygqbXlPdXRPZkxpbmVCaXRzLT5iaXRzKCkpOworICAgICAgICAgICAg
T3V0T2ZMaW5lQml0czo6ZGVzdHJveShteU91dE9mTGluZUJpdHMpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXNpemVPdXRPZkxpbmUobnVtQml0
cyk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXJBbGwoKQorICAgIHsKKyAgICAgICAgaWYg
KGlzSW5saW5lKCkpCisgICAgICAgICAgICBtX2JpdHNPclBvaW50ZXIgPSBtYWtlSW5saW5lQml0
cygwKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbWVtc2V0KG91dE9mTGluZUJpdHMoKS0+
Yml0cygpLCAwLCBieXRlQ291bnQoc2l6ZSgpKSk7CisgICAgfQorCisgICAgYm9vbCBnZXQoc2l6
ZV90IGJpdCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChiaXQgPCBzaXplKCkpOworICAg
ICAgICByZXR1cm4gISEoYml0cygpW2JpdCA+PiBiaXRzSW5Qb2ludGVyKCldICYgKHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkgLSAxKSkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXQoc2l6ZV90IGJpdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChiaXQgPCBzaXplKCkpOworICAgICAgICBiaXRzKClbYml0ID4+IGJpdHNJblBvaW50ZXIoKV0g
fD0gKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgKGJpdCAmIChiaXRzSW5Qb2ludGVyKCkg
LSAxKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKHNpemVfdCBiaXQpCisgICAgewor
ICAgICAgICBBU1NFUlQoYml0IDwgc2l6ZSgpKTsKKyAgICAgICAgYml0cygpW2JpdCA+PiBiaXRz
SW5Qb2ludGVyKCldICY9IH4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCAoYml0ICYgKGJp
dHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KHNpemVfdCBi
aXQsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBz
ZXQoYml0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xlYXIoYml0KTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzaXplb2Yodm9pZCopIDw8IDM7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyB1bnNpZ25lZCBtYXhJbmxpbmVCaXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXRz
SW5Qb2ludGVyKCkgLSAxOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHJlbGll
cyBvbiBiaXRDb3VudCBiZWluZyBhIG11bHRpcGxlIG9mIGJpdHNJblBvaW50ZXIoKQorICAgIHN0
YXRpYyBzaXplX3QgYnl0ZUNvdW50KHNpemVfdCBiaXRDb3VudCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCghKGJpdENvdW50ICYgKGJpdHNJblBvaW50ZXIoKSAtIDEpKSk7CisgICAgICAgIHJldHVy
biBiaXRDb3VudCA+PiAzOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdWludHB0cl90IG1ha2VJ
bmxpbmVCaXRzKHVpbnRwdHJfdCBiaXRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCEoYml0cyAm
IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IG1heElubGluZUJpdHMoKSkpKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHMgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBtYXhJbmxpbmVC
aXRzKCkpOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBPdXRPZkxpbmVCaXRzIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHNpemVfdCBudW1CaXRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1CaXRzOyB9
CisgICAgICAgIHNpemVfdCBudW1Xb3JkcygpIGNvbnN0IHsgcmV0dXJuIChtX251bUJpdHMgKyBi
aXRzSW5Qb2ludGVyKCkgLSAxKSA+PiBiaXRzSW5Qb2ludGVyKCk7IH0KKyAgICAgICAgdWludHB0
cl90KiBiaXRzKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPih0aGlzICsg
MSk7IH0KKyAgICAgICAgY29uc3QgdWludHB0cl90KiBiaXRzKCkgY29uc3QgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50cHRyX3QqPih0aGlzICsgMSk7IH0KKyAgICAgICAgCisg
ICAgICAgIHN0YXRpYyBPdXRPZkxpbmVCaXRzKiBjcmVhdGUoc2l6ZV90IG51bUJpdHMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG51bUJpdHMgPSAobnVtQml0cyArIGJpdHNJblBvaW50ZXIoKSAt
IDEpICYgfmJpdHNJblBvaW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBuZXcgKGZhc3RNYWxs
b2Moc2l6ZW9mKE91dE9mTGluZUJpdHMpICsgKG51bUJpdHMgPj4gYml0c0luUG9pbnRlcigpKSkp
IE91dE9mTGluZUJpdHMobnVtQml0cyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0
YXRpYyB2b2lkIGRlc3Ryb3koT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cykKKyAgICAgICAg
eworICAgICAgICAgICAgZmFzdEZyZWUob3V0T2ZMaW5lQml0cyk7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIE91dE9mTGluZUJpdHMoc2l6ZV90IG51bUJpdHMpCisgICAgICAg
ICAgICA6IG1fbnVtQml0cyhudW1CaXRzKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHNpemVfdCBtX251bUJpdHM7CisgICAgfTsKKyAgICAKKyAgICBib29sIGlzSW5s
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzT3JQb2ludGVyID4+IG1heElubGluZUJpdHMoKTsg
fQorICAgIAorICAgIGNvbnN0IE91dE9mTGluZUJpdHMqIG91dE9mTGluZUJpdHMoKSBjb25zdCB7
IHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IE91dE9mTGluZUJpdHMqPihtX2JpdHNPclBv
aW50ZXIpOyB9CisgICAgT3V0T2ZMaW5lQml0cyogb3V0T2ZMaW5lQml0cygpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8T3V0T2ZMaW5lQml0cyo+KG1fYml0c09yUG9pbnRlcik7IH0KKyAgICAK
KyAgICB2b2lkIHJlc2l6ZU91dE9mTGluZShzaXplX3QgbnVtQml0cykKKyAgICB7CisgICAgICAg
IEFTU0VSVChudW1CaXRzID4gbWF4SW5saW5lQml0cygpKTsKKyAgICAgICAgT3V0T2ZMaW5lQml0
cyogbmV3T3V0T2ZMaW5lQml0cyA9IE91dE9mTGluZUJpdHM6OmNyZWF0ZShudW1CaXRzKTsKKyAg
ICAgICAgbWVtY3B5KG5ld091dE9mTGluZUJpdHMtPmJpdHMoKSwgYml0cygpLCBieXRlQ291bnQo
c3RkOjptaW4oc2l6ZSgpLCBudW1CaXRzKSkpOworICAgICAgICBpZiAoIWlzSW5saW5lKCkpCisg
ICAgICAgICAgICBPdXRPZkxpbmVCaXRzOjpkZXN0cm95KG91dE9mTGluZUJpdHMoKSk7CisgICAg
ICAgIG1fYml0c09yUG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihuZXdPdXRP
ZkxpbmVCaXRzKTsKKyAgICB9CisgICAgCisgICAgdWludHB0cl90KiBiaXRzKCkKKyAgICB7Cisg
ICAgICAgIGlmIChpc0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuICZtX2JpdHNPclBvaW50
ZXI7CisgICAgICAgIHJldHVybiBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICB9CisgICAg
CisgICAgY29uc3QgdWludHB0cl90KiBiaXRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZSgpKQorICAgICAgICAgICAgcmV0dXJuICZtX2JpdHNPclBvaW50ZXI7CisgICAgICAg
IHJldHVybiBvdXRPZkxpbmVCaXRzKCktPmJpdHMoKTsKKyAgICB9CisgICAgCisgICAgdWludHB0
cl90IG1fYml0c09yUG9pbnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBX
VEY6OkJpdFZlY3RvcjsKKworI2VuZGlmIC8vIEJpdFZlY3Rvcl9oCg==
</data>
<flag name="review"
          id="105145"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>