<?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>72312</bug_id>
          
          <creation_ts>2011-11-14 14:29:25 -0800</creation_ts>
          <short_desc>DFG code blocks that have speculation checks on objects should refer to those objects weakly</short_desc>
          <delta_ts>2011-11-18 15:31:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>72311</dup_id>
          
          <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>72313</dependson>
    
    <dependson>72346</dependson>
    
    <dependson>72367</dependson>
    
    <dependson>72467</dependson>
    
    <dependson>72563</dependson>
          <blocked>72311</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>502320</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-14 14:29:25 -0800</bug_when>
    <thetext>If the DFG performs optimizations on things like get_by_id or call inlining, it will generate code that refers to objects that the source code did not have strong references to.  Instead, the references should be weak, so that if those objects are otherwise dead, the DFG&apos;s code does not keep them alive longer than necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504534</commentid>
    <comment_count>1</comment_count>
      <attachid>115517</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-16 21:05:37 -0800</bug_when>
    <thetext>Created attachment 115517
the patch

Still working on this, but it appears to work.  In the sense that it doesn&apos;t cause massive failures.  The mechanism should not kick in yet, though, since any weak references the DFG creates will be strongly referenced from the old JIT&apos;s code block for the same executable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504571</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-16 22:53:34 -0800</bug_when>
    <thetext>This passes all tests and does not affect performance.



[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc DFGWeakFixpoint:/Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc --remote bigmac,oldmac --local
Packaging VM builds for remote hosts...
Sending VM builds to bigmac...
Running on bigmac...
376/376                                                              
Generating benchmark report at TipOfTree_DFGWeakFixpoint_SunSpiderV8Kraken_20111116_2231_benchReport.txt

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100556)
&quot;DFGWeakFixpoint&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r100556)

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

                                            TipOfTree            DFGWeakFixpoint                                 
SunSpider:
   3d-cube                                7.4025+-0.0318    ?     7.4205+-0.0591       ?
   3d-morph                               8.5759+-0.1344    ^     8.3710+-0.0468       ^ definitely 1.0245x faster
   3d-raytrace                            7.7128+-0.0510          7.7036+-0.0581       
   access-binary-trees                    1.5980+-0.0042    ?     1.5990+-0.0170       ?
   access-fannkuch                        7.5230+-0.0142    ?     7.5241+-0.0135       ?
   access-nbody                           4.1804+-0.0190          4.1720+-0.0057       
   access-nsieve                          3.1509+-0.0438    ?     3.1579+-0.0404       ?
   bitops-3bit-bits-in-byte               1.2410+-0.0135          1.2386+-0.0150       
   bitops-bits-in-byte                    4.9122+-0.0111    ?     4.9190+-0.0144       ?
   bitops-bitwise-and                     3.2869+-0.0055          3.2857+-0.0082       
   bitops-nsieve-bits                     5.6567+-0.0421    ?     5.6683+-0.0517       ?
   controlflow-recursive                  2.2911+-0.0140    ?     2.2963+-0.0251       ?
   crypto-aes                             7.1446+-0.0363    ?     7.1503+-0.0403       ?
   crypto-md5                             2.5014+-0.0194    ?     2.5064+-0.0112       ?
   crypto-sha1                            2.1775+-0.0164    ?     2.1810+-0.0207       ?
   date-format-tofte                     10.6195+-0.0757    ?    10.6559+-0.0350       ?
   date-format-xparb                     11.0232+-0.1290         10.7497+-0.1798         might be 1.0254x faster
   math-cordic                            7.1711+-0.0601          7.1227+-0.0152       
   math-partial-sums                     10.4554+-0.0438         10.4411+-0.0189       
   math-spectral-norm                     2.6151+-0.0258          2.6041+-0.0217       
   regexp-dna                            12.9846+-0.0596         12.9728+-0.0542       
   string-base64                          3.9285+-0.0148    ?     3.9315+-0.0093       ?
   string-fasta                           7.3736+-0.0234    !     7.4478+-0.0469       ! definitely 1.0101x slower
   string-tagcloud                       12.9813+-0.0696    ?    13.0143+-0.0725       ?
   string-unpack-code                    22.2271+-0.0721         22.0984+-0.0928       
   string-validate-input                  5.7264+-0.2076          5.6436+-0.0373         might be 1.0147x faster

   &lt;arithmetic&gt; *                         6.7869+-0.0206          6.7644+-0.0206         might be 1.0033x faster
   &lt;geometric&gt;                            5.4023+-0.0186          5.3910+-0.0189         might be 1.0021x faster
   &lt;harmonic&gt;                             4.2005+-0.0174          4.1965+-0.0198         might be 1.0010x faster

                                            TipOfTree            DFGWeakFixpoint                                 
V8:
   crypto                                77.4661+-0.2099         77.2271+-0.2656       
   deltablue                            168.4244+-0.9719    ?   170.2991+-0.9884       ? might be 1.0111x slower
   earley-boyer                         104.4967+-1.4653    ?   104.6927+-1.4071       ?
   raytrace                              62.8356+-0.5364    ?    63.5544+-0.4021       ? might be 1.0114x slower
   regexp                               124.3039+-0.3228        123.5584+-0.5526       
   richards                             137.9984+-1.1186        137.4574+-0.2484       
   splay                                 90.2481+-1.0749    ?    90.3772+-1.1051       ?

   &lt;arithmetic&gt;                         109.3962+-0.4163    ?   109.5952+-0.3137       ? might be 1.0018x slower
   &lt;geometric&gt; *                        104.1090+-0.4122    ?   104.2988+-0.2974       ? might be 1.0018x slower
   &lt;harmonic&gt;                            98.9935+-0.4152    ?    99.2217+-0.2908       ? might be 1.0023x slower

                                            TipOfTree            DFGWeakFixpoint                                 
Kraken:
   ai-astar                             827.1420+-0.4496        817.6509+-10.4008        might be 1.0116x faster
   audio-beat-detection                 204.3278+-1.0583        203.6777+-0.6133       
   audio-dft                            260.7611+-2.6100        259.3759+-1.9791       
   audio-fft                            133.7633+-1.0539        133.0065+-0.6485       
   audio-oscillator                     293.5864+-0.5500        293.4817+-0.4592       
   imaging-darkroom                     338.4275+-5.2683        338.0507+-4.9685       
   imaging-desaturate                   240.7667+-0.0978    ?   240.8129+-0.0949       ?
   imaging-gaussian-blur                620.4826+-0.2404    ?   620.6064+-0.3426       ?
   json-parse-financial                  73.7686+-0.2356    !    74.3384+-0.0356       ! definitely 1.0077x slower
   json-stringify-tinderbox              86.8172+-0.6073         86.5426+-0.1903       
   stanford-crypto-aes                  117.9453+-1.3677        116.9190+-0.3102       
   stanford-crypto-ccm                  117.2711+-2.1838        115.7353+-0.7542         might be 1.0133x faster
   stanford-crypto-pbkdf2               233.0118+-0.9260    ^   231.2346+-0.6784       ^ definitely 1.0077x faster
   stanford-crypto-sha256-iterative      92.7507+-0.2058    ?    92.8232+-0.2092       ?

   &lt;arithmetic&gt; *                       260.0587+-0.4855        258.8754+-0.8583         might be 1.0046x faster
   &lt;geometric&gt;                          200.3032+-0.5880        199.5797+-0.3308         might be 1.0036x faster
   &lt;harmonic&gt;                           161.4670+-0.6430        161.0342+-0.1887         might be 1.0027x faster

                                            TipOfTree            DFGWeakFixpoint                                 
All benchmarks:
   &lt;arithmetic&gt;                          97.5118+-0.1409         97.1765+-0.2359         might be 1.0035x faster
   &lt;geometric&gt;                           24.6230+-0.0601         24.5745+-0.0557         might be 1.0020x faster
   &lt;harmonic&gt;                             7.4048+-0.0301          7.3978+-0.0342         might be 1.0009x faster

                                            TipOfTree            DFGWeakFixpoint                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                       56.8516+-0.1218         56.7367+-0.1020         might be 1.0020x faster

Sending VM builds to oldmac...
Running on oldmac...
376/376                                                              
Generating benchmark report at TipOfTree_DFGWeakFixpoint_SunSpiderV8Kraken_20111116_2236_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100556)
&quot;DFGWeakFixpoint&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r100556)

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

                                            TipOfTree            DFGWeakFixpoint                                 
SunSpider:
   3d-cube                                8.9939+-0.0825          8.9444+-0.0435       
   3d-morph                              10.5753+-0.1637    ^    10.1176+-0.0361       ^ definitely 1.0452x faster
   3d-raytrace                            9.2619+-0.1168          9.2029+-0.0666       
   access-binary-trees                    1.9065+-0.0090    ?     1.9100+-0.0080       ?
   access-fannkuch                        9.0863+-0.0115          9.0832+-0.0096       
   access-nbody                           5.0490+-0.0226          5.0372+-0.0054       
   access-nsieve                          3.7179+-0.0075          3.7178+-0.0181       
   bitops-3bit-bits-in-byte               1.4891+-0.0091    ?     1.4896+-0.0123       ?
   bitops-bits-in-byte                    5.9343+-0.0082          5.9278+-0.0139       
   bitops-bitwise-and                     3.9691+-0.0086    ?     3.9845+-0.0265       ?
   bitops-nsieve-bits                     6.8083+-0.0471    ?     6.8819+-0.0630       ? might be 1.0108x slower
   controlflow-recursive                  2.7662+-0.0176          2.7626+-0.0219       
   crypto-aes                             8.6018+-0.0531    ?     8.6409+-0.0500       ?
   crypto-md5                             2.9910+-0.0141    ?     2.9935+-0.0204       ?
   crypto-sha1                            2.6066+-0.0201    ?     2.6198+-0.0335       ?
   date-format-tofte                     12.9102+-0.0856    ?    13.1692+-0.1851       ? might be 1.0201x slower
   date-format-xparb                     13.8851+-0.4087    ^    13.2598+-0.1603       ^ definitely 1.0472x faster
   math-cordic                            8.6070+-0.0225    ?     8.6158+-0.0197       ?
   math-partial-sums                     12.5914+-0.0258    ?    12.6221+-0.0323       ?
   math-spectral-norm                     3.1252+-0.0049    ?     3.1270+-0.0066       ?
   regexp-dna                            15.7101+-0.0735         15.6987+-0.0602       
   string-base64                          4.7604+-0.0416          4.7557+-0.0330       
   string-fasta                           8.9272+-0.0259    ?     8.9639+-0.0251       ?
   string-tagcloud                       15.8031+-0.0985    ?    15.8938+-0.0961       ?
   string-unpack-code                    27.4174+-0.0675    ?    27.4486+-0.0542       ?
   string-validate-input                  6.8051+-0.0814    ?     6.8241+-0.0696       ?

   &lt;arithmetic&gt; *                         8.2423+-0.0338          8.2189+-0.0274         might be 1.0028x faster
   &lt;geometric&gt;                            6.5256+-0.0248          6.5147+-0.0231         might be 1.0017x faster
   &lt;harmonic&gt;                             5.0506+-0.0188          5.0500+-0.0194         might be 1.0001x faster

                                            TipOfTree            DFGWeakFixpoint                                 
V8:
   crypto                                93.4672+-0.3147         93.2981+-0.3405       
   deltablue                            202.9885+-1.2812    ?   204.3343+-0.5945       ?
   earley-boyer                         126.5185+-1.7474        125.8953+-1.3421       
   raytrace                              75.8272+-0.4731    ?    76.3673+-0.6252       ?
   regexp                               148.4860+-0.3750        147.8853+-0.2487       
   richards                             165.9017+-0.3001    ?   166.2819+-0.4990       ?
   splay                                106.3137+-0.7282    ?   106.3880+-1.1149       ?

   &lt;arithmetic&gt;                         131.3575+-0.3553    ?   131.4929+-0.3208       ? might be 1.0010x slower
   &lt;geometric&gt; *                        124.9888+-0.3483    ?   125.0944+-0.3708       ? might be 1.0008x slower
   &lt;harmonic&gt;                           118.8639+-0.3498    ?   118.9853+-0.4081       ? might be 1.0010x slower

                                            TipOfTree            DFGWeakFixpoint                                 
Kraken:
   ai-astar                             895.1609+-0.6140    ?   895.5434+-0.7446       ?
   audio-beat-detection                 250.0935+-1.7636        248.3998+-0.6289       
   audio-dft                            314.9273+-2.6615        314.3998+-2.6952       
   audio-fft                            162.4365+-1.1958    ?   162.7427+-1.1187       ?
   audio-oscillator                     351.4217+-1.3468    !   358.3105+-3.1365       ! definitely 1.0196x slower
   imaging-darkroom                     403.5768+-5.8311    ?   405.5841+-6.4234       ?
   imaging-desaturate                   291.2551+-0.0914        291.1852+-0.0766       
   imaging-gaussian-blur                750.6847+-0.1627    ?   750.7431+-0.1130       ?
   json-parse-financial                  90.0316+-0.3616    ?    90.6249+-0.3743       ?
   json-stringify-tinderbox             105.1410+-0.7503        105.0963+-0.5095       
   stanford-crypto-aes                  139.6053+-0.3937    !   145.2645+-3.7119       ! definitely 1.0405x slower
   stanford-crypto-ccm                  137.8774+-0.7153    ?   138.7943+-0.7749       ?
   stanford-crypto-pbkdf2               281.4804+-2.2261        281.2057+-2.3171       
   stanford-crypto-sha256-iterative     112.7609+-0.1899        112.6113+-0.2735       

   &lt;arithmetic&gt; *                       306.1752+-0.5808    ?   307.1790+-0.6449       ? might be 1.0033x slower
   &lt;geometric&gt;                          239.5798+-0.4921    !   240.7382+-0.6096       ! definitely 1.0048x slower
   &lt;harmonic&gt;                           194.4552+-0.4400    !   195.5881+-0.5319       ! definitely 1.0058x slower

                                            TipOfTree            DFGWeakFixpoint                                 
All benchmarks:
   &lt;arithmetic&gt;                         115.3246+-0.1789    ?   115.6308+-0.1878       ? might be 1.0027x slower
   &lt;geometric&gt;                           29.6285+-0.0779    ?    29.6475+-0.0724       ? might be 1.0006x slower
   &lt;harmonic&gt;                             8.9036+-0.0327          8.9033+-0.0336         might be 1.0000x faster

                                            TipOfTree            DFGWeakFixpoint                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                       68.0707+-0.1521    ?    68.0999+-0.1367       ? might be 1.0004x slower

Running locally...
376/376                                                              
Generating benchmark report at TipOfTree_DFGWeakFixpoint_SunSpiderV8Kraken_20111116_2238_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on nitroflex.local (MacBookPro8,2).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r100556)
&quot;DFGWeakFixpoint&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r100556)

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

                                            TipOfTree            DFGWeakFixpoint                                 
SunSpider:
   3d-cube                                6.9460+-0.1867          6.7194+-0.1208         might be 1.0337x faster
   3d-morph                               7.6314+-0.1379    ?     7.6325+-0.1602       ?
   3d-raytrace                            7.2052+-0.1985          7.1258+-0.1072         might be 1.0111x faster
   access-binary-trees                    1.5625+-0.0849          1.5398+-0.0517         might be 1.0147x faster
   access-fannkuch                        6.1227+-0.0908          6.1188+-0.0846       
   access-nbody                           3.4842+-0.0867          3.3981+-0.0667         might be 1.0254x faster
   access-nsieve                          2.4985+-0.0530    ?     2.5069+-0.0756       ?
   bitops-3bit-bits-in-byte               1.2494+-0.0190    ?     1.2716+-0.0358       ? might be 1.0178x slower
   bitops-bits-in-byte                    2.3695+-0.0817          2.3440+-0.0654         might be 1.0109x faster
   bitops-bitwise-and                     3.4721+-0.0672          3.4238+-0.0743         might be 1.0141x faster
   bitops-nsieve-bits                     5.1600+-0.0369    ?     5.2602+-0.0785       ? might be 1.0194x slower
   controlflow-recursive                  2.0428+-0.0329    ?     2.0540+-0.0554       ?
   crypto-aes                             6.9739+-0.1714          6.9190+-0.1607       
   crypto-md5                             2.3774+-0.0536          2.2922+-0.0375         might be 1.0372x faster
   crypto-sha1                            2.0697+-0.0512          2.0302+-0.0488         might be 1.0195x faster
   date-format-tofte                      9.9694+-0.2594    ?    10.0733+-0.1845       ? might be 1.0104x slower
   date-format-xparb                      9.9780+-0.1308    !    10.5261+-0.1992       ! definitely 1.0549x slower
   math-cordic                            6.3460+-0.0750    ?     6.3696+-0.1468       ?
   math-partial-sums                      7.4234+-0.1088          7.3576+-0.1024       
   math-spectral-norm                     2.3826+-0.0537          2.2977+-0.0415         might be 1.0369x faster
   regexp-dna                            10.7769+-0.1826    ?    10.9456+-0.1406       ? might be 1.0157x slower
   string-base64                          3.8982+-0.1135    ?     3.8995+-0.1257       ?
   string-fasta                           6.5992+-0.1566          6.5441+-0.1320       
   string-tagcloud                       11.5205+-0.2195         11.4117+-0.3031       
   string-unpack-code                    20.1020+-0.2994         19.8269+-0.3950         might be 1.0139x faster
   string-validate-input                  5.2314+-0.0889    ?     5.3145+-0.1251       ? might be 1.0159x slower

   &lt;arithmetic&gt; *                         5.9767+-0.0226          5.9693+-0.0255         might be 1.0012x faster
   &lt;geometric&gt;                            4.7696+-0.0276          4.7506+-0.0265         might be 1.0040x faster
   &lt;harmonic&gt;                             3.7707+-0.0358          3.7468+-0.0301         might be 1.0064x faster

                                            TipOfTree            DFGWeakFixpoint                                 
V8:
   crypto                                69.5986+-0.3279    ?    69.7588+-0.3738       ?
   deltablue                            149.5710+-1.8420    ?   149.6216+-1.6266       ?
   earley-boyer                          85.3260+-0.6411         84.8371+-0.8974       
   raytrace                              55.7197+-0.3247         55.5022+-0.4194       
   regexp                               102.2668+-0.3653        101.9430+-0.3022       
   richards                             116.7542+-0.4597    ?   117.0623+-0.7954       ?
   splay                                 70.5089+-0.7751    ?    71.5232+-1.3310       ? might be 1.0144x slower

   &lt;arithmetic&gt;                          92.8207+-0.3544    ?    92.8926+-0.4306       ? might be 1.0008x slower
   &lt;geometric&gt; *                         88.2391+-0.3096    ?    88.3206+-0.4070       ? might be 1.0009x slower
   &lt;harmonic&gt;                            84.0796+-0.2990    ?    84.1629+-0.4063       ? might be 1.0010x slower

                                            TipOfTree            DFGWeakFixpoint                                 
Kraken:
   ai-astar                             485.9056+-4.6336    ?   486.6909+-3.7186       ?
   audio-beat-detection                 189.0524+-2.1896        186.4712+-0.5929         might be 1.0138x faster
   audio-dft                            261.3420+-2.3663    ?   262.4310+-2.9045       ?
   audio-fft                            121.7954+-0.6730    ?   122.6599+-0.8257       ?
   audio-oscillator                     248.7274+-0.8064    ?   248.9647+-1.9696       ?
   imaging-darkroom                     299.4438+-6.1518        296.2831+-5.4980         might be 1.0107x faster
   imaging-desaturate                   221.6356+-0.6927    ?   221.8542+-0.6321       ?
   imaging-gaussian-blur                544.9619+-2.2368    ?   547.5263+-3.7770       ?
   json-parse-financial                  57.3320+-0.4201         57.1369+-0.2277       
   json-stringify-tinderbox              72.7738+-0.9726         72.2742+-0.3048       
   stanford-crypto-aes                   94.6696+-0.4103         94.5581+-0.7075       
   stanford-crypto-ccm                   98.3032+-0.4316    ?    98.3397+-0.6751       ?
   stanford-crypto-pbkdf2               186.2725+-0.6082    !   187.6683+-0.7824       ! definitely 1.0075x slower
   stanford-crypto-sha256-iterative      79.5267+-0.2744    ?    79.6907+-0.3087       ?

   &lt;arithmetic&gt; *                       211.5530+-0.5515    ?   211.6107+-0.6581       ? might be 1.0003x slower
   &lt;geometric&gt;                          168.6919+-0.2784        168.6176+-0.3932         might be 1.0004x faster
   &lt;harmonic&gt;                           135.9649+-0.2866        135.8237+-0.2465         might be 1.0010x faster

                                            TipOfTree            DFGWeakFixpoint                                 
All benchmarks:
   &lt;arithmetic&gt;                          80.1464+-0.1555    ?    80.1702+-0.1736       ? might be 1.0003x slower
   &lt;geometric&gt;                           21.3056+-0.0684         21.2587+-0.0709         might be 1.0022x faster
   &lt;harmonic&gt;                             6.6370+-0.0615          6.5960+-0.0518         might be 1.0062x faster

                                            TipOfTree            DFGWeakFixpoint                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                       48.1403+-0.0747         48.1397+-0.1053         might be 1.0000x faster

[pizlo@nitroflex bencher]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504614</commentid>
    <comment_count>3</comment_count>
      <attachid>115537</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 00:00:20 -0800</bug_when>
    <thetext>Created attachment 115537
the patch

Fixed 32-bit build.  All tests pass, performance is neutral.  Verified with printf&apos;s that the code was actually doing things; it was, and as expected: most code blocks find all their weak references to be live on the first pass, and all code blocks eventually always find all of their weak references to be live in the benchmarks we track.  The latter is true mainly because we still treat references from inline caches to be strong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504615</commentid>
    <comment_count>4</comment_count>
      <attachid>115538</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 00:01:32 -0800</bug_when>
    <thetext>Created attachment 115538
the patch

Removed bogus comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504884</commentid>
    <comment_count>5</comment_count>
      <attachid>115538</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-11-17 08:30:33 -0800</bug_when>
    <thetext>Comment on attachment 115538
the patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1685
&gt; +    // If some weak references are dead, then this fixpoint iteration was
&gt; +    // unsuccessful.
&gt; +    if (!allAreLiveSoFar)
&gt; +        return;

If we have weak references that are dead, where are we either clearing them, or removing the usage?  My reading of this says that we&apos;ll end up maintaining references to dead objects, that may subsequently become live again (through new allocations) -- this does not currently happen as all values are forced to be live via the constant tables, but if that were not the case this seems like it would be incorrect.  What have I missed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505166</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 13:45:29 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 115538 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115538&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1685
&gt; &gt; +    // If some weak references are dead, then this fixpoint iteration was
&gt; &gt; +    // unsuccessful.
&gt; &gt; +    if (!allAreLiveSoFar)
&gt; &gt; +        return;
&gt; 
&gt; If we have weak references that are dead, where are we either clearing them, or removing the usage?  My reading of this says that we&apos;ll end up maintaining references to dead objects, that may subsequently become live again (through new allocations) -- this does not currently happen as all values are forced to be live via the constant tables, but if that were not the case this seems like it would be incorrect.  What have I missed?

If we ever hit this point, then we would have also registered an unconditional finalizer.  If we finish GC without proving that the code block&apos;s weak references are live, then the unconditional finalizer will jettison the code block.

Weak references are never cleared.  If the code is executing (i.e. it&apos;s on the stack), we strongly mark its weak references.  If it&apos;s not executing, then we can jettison immediately during GC, so if any of its weak references are dead we just jettison and the code block dies immediately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505176</commentid>
    <comment_count>7</comment_count>
      <attachid>115538</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-17 13:53:24 -0800</bug_when>
    <thetext>Comment on attachment 115538
the patch

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

Thinking abstractly, I&apos;m not sure this is the right strategy for making optimizations weakly referenced. But perhaps there&apos;s a concrete application I&apos;m not considering, which validates this strategy. I would have a much easier time reasoning about this code if I could look at a benchmark or test case that demonstrated the problem we&apos;re trying to solve.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1623
&gt; +    // Add a weak reference harvester if we have not reached fixpoint and need to
&gt; +    // run again.

To turn this into a &quot;why&quot; comment, I would write: GC doesn&apos;t have enough information yet for us to decide whether to keep our DFG data, so we need to register a handler to run again at the end of GC, when more information is available.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1657
&gt; +                // If the following three things are live, then the target of the
&gt; +                // transition is also live:
&gt; +                // - This code block. We know it&apos;s live already because otherwise
&gt; +                //   we wouldn&apos;t be scanning ourselves.
&gt; +                // - The code origin of the transition. Transitions may arise from
&gt; +                //   code that was inlined. They are not relevant if the user&apos;s
&gt; +                //   object that is required for the inlinee to run is no longer
&gt; +                //   live.
&gt; +                // - The source of the transition. The transition checks if some
&gt; +                //   heap location holds the source, and if so, stores the target.
&gt; +                //   Hence the source must be live for the transition to be live.

Why do we want structure transitions to perform checks on behalf of inlined functions? It would be much more natural for functions themselves to act as first-class weak citizens, such that a linked/inlined function disappearing would be sufficient cause to blow away an optimized code block.

More broadly, I don&apos;t understand why structure transitions get special treatment here. Why are they distinct from other weakly referenced optimizations in a DFG code block?

I&apos;m concerned that an A-&gt;B transition keeps B alive if A is alive. This is the opposite of the structure marking strategy, which says that A should stay alive only if B is alive. The benefit of the structure marking strategy is that it ensures that a chain of structures can be retired if it becomes stale. In the case of object literals, A is the default empty object structure, which is permanent, so, with this patch&apos;s strategy, all transitions from an object literal are permanent. In the case of a constructor function, A is the function&apos;s .prototype&apos;s inheritorID, which will have been marked by the same object marking the CodeBlock, so, with this patch&apos;s strategy, the transition once again becomes permanent. (To clarify, by &quot;permanent&quot; I mean, &quot;will live as long as a strong reference&quot;, not necessarily &quot;memory leak&quot;.)

Maybe you&apos;re trying to make sure that a hot constructor CodeBlock survives even if the objects it constructs tend to be garbage? If so, I&apos;m still not sure why the transitions are special compared to other weakly optimized assumptions. It seems like any weakly optimized assumption could pertain to a typically short-lived object, and cause jettison churn. Perhaps a better strategy would be an explicit jettison churn guard, instead.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1111
&gt; +            // Am I a DFG code block? If not, then I&apos;m live if I am being scanned.
&gt; +            if (!m_dfgData)
&gt; +                return true;
&gt; +            
&gt; +            // If I am a DFG code block, then am I currently executing? If so,
&gt; +            // then I&apos;m definitely live.
&gt; +            if (m_dfgData-&gt;mayBeExecuting)

I don&apos;t think these &quot;what&quot; comments add anything. A &quot;why&quot; comment explaining why baseline JIT code always assumes itself to be live might be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505182</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 14:03:29 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 115538 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115538&amp;action=review
&gt; 
&gt; Thinking abstractly, I&apos;m not sure this is the right strategy for making optimizations weakly referenced. But perhaps there&apos;s a concrete application I&apos;m not considering, which validates this strategy. I would have a much easier time reasoning about this code if I could look at a benchmark or test case that demonstrated the problem we&apos;re trying to solve.

// One place in your code:
function foo(f) {
    return f(42);
}

// Another place in your code:
function bar() {
    foo(someWindow.baz);
}

There&apos;s a good chance t hat someWindow.baz will be inlined into foo().  Now so long as foo() is alive, someWindow is alive.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1623
&gt; &gt; +    // Add a weak reference harvester if we have not reached fixpoint and need to
&gt; &gt; +    // run again.
&gt; 
&gt; To turn this into a &quot;why&quot; comment, I would write: GC doesn&apos;t have enough information yet for us to decide whether to keep our DFG data, so we need to register a handler to run again at the end of GC, when more information is available.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1657
&gt; &gt; +                // If the following three things are live, then the target of the
&gt; &gt; +                // transition is also live:
&gt; &gt; +                // - This code block. We know it&apos;s live already because otherwise
&gt; &gt; +                //   we wouldn&apos;t be scanning ourselves.
&gt; &gt; +                // - The code origin of the transition. Transitions may arise from
&gt; &gt; +                //   code that was inlined. They are not relevant if the user&apos;s
&gt; &gt; +                //   object that is required for the inlinee to run is no longer
&gt; &gt; +                //   live.
&gt; &gt; +                // - The source of the transition. The transition checks if some
&gt; &gt; +                //   heap location holds the source, and if so, stores the target.
&gt; &gt; +                //   Hence the source must be live for the transition to be live.
&gt; 
&gt; Why do we want structure transitions to perform checks on behalf of inlined functions? It would be much more natural for functions themselves to act as first-class weak citizens, such that a linked/inlined function disappearing would be sufficient cause to blow away an optimized code block.

They don&apos;t do anything on behalf of functions.  Functions are also separately weak referenced.  Transitions just honor the fact that the transition isn&apos;t going to happen unless the owner is alive.

&gt; 
&gt; More broadly, I don&apos;t understand why structure transitions get special treatment here. Why are they distinct from other weakly referenced optimizations in a DFG code block?

Say you have Foo used as constructor:

function Foo() {
   this.a = 1;
   this.b = 2;
   this.c = 3;
}

If during GC, the structure corresponding to empty-&gt;a-&gt;b-&gt;c may not be reachable from anywhere but Foo(), because Foo() hadn&apos;t run recently, or did, but it&apos;s result was short-lived.  But Foo() is alive.  So we want to keep empty-&gt;a-&gt;b-&gt;c alive as well, because otherwise, we&apos;d have to throw away Foo().

Since Foo() may only exist in inlined form, the inline owner must look at the structure transitions of each of these assignments and check if both the owner (Foo) is alive, and the predecessor in the transition is alive, before deciding that the successor is alive.

&gt; 
&gt; I&apos;m concerned that an A-&gt;B transition keeps B alive if A is alive. This is the opposite of the structure marking strategy, which says that A should stay alive only if B is alive. The benefit of the structure marking strategy is that it ensures that a chain of structures can be retired if it becomes stale. In the case of object literals, A is the default empty object structure, which is permanent, so, with this patch&apos;s strategy, all transitions from an object literal are permanent. In the case of a constructor function, A is the function&apos;s .prototype&apos;s inheritorID, which will have been marked by the same object marking the CodeBlock, so, with this patch&apos;s strategy, the transition once again becomes permanent. (To clarify, by &quot;permanent&quot; I mean, &quot;will live as long as a strong reference&quot;, not necessarily &quot;memory leak&quot;.)

No, they won&apos;t be permanent.  Because the prerequisite to the A-&gt;B transition keeping B alive is that the code owner is also alive.

&gt; 
&gt; Maybe you&apos;re trying to make sure that a hot constructor CodeBlock survives even if the objects it constructs tend to be garbage? If so, I&apos;m still not sure why the transitions are special compared to other weakly optimized assumptions. It seems like any weakly optimized assumption could pertain to a typically short-lived object, and cause jettison churn. Perhaps a better strategy would be an explicit jettison churn guard, instead.

Not sure I follow.

The transition logic is not about making CodeBlocks survive.  It&apos;s about making the transitions they use remain valid.  Then separately the CodeBlock will survive if its weak references survive, and some of its weak references will be from its transitions (all of the values in WeakReferenceTransition are also in the CodeBlock&apos;s weak reference list).

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.h:1111
&gt; &gt; +            // Am I a DFG code block? If not, then I&apos;m live if I am being scanned.
&gt; &gt; +            if (!m_dfgData)
&gt; &gt; +                return true;
&gt; &gt; +            
&gt; &gt; +            // If I am a DFG code block, then am I currently executing? If so,
&gt; &gt; +            // then I&apos;m definitely live.
&gt; &gt; +            if (m_dfgData-&gt;mayBeExecuting)
&gt; 
&gt; I don&apos;t think these &quot;what&quot; comments add anything. A &quot;why&quot; comment explaining why baseline JIT code always assumes itself to be live might be helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>505529</commentid>
    <comment_count>9</comment_count>
      <attachid>115538</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-11-17 23:14:45 -0800</bug_when>
    <thetext>Comment on attachment 115538
the patch

I think it&apos;s better if this patch is just combined with https://bugs.webkit.org/show_bug.cgi?id=72311</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506133</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-11-18 15:31:24 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 72311 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115517</attachid>
            <date>2011-11-16 21:05:37 -0800</date>
            <delta_ts>2011-11-17 00:00:20 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgweakfixpoint_patch_1.diff</filename>
            <type>text/plain</type>
            <size>14679</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDExLTExLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSBzcGVjdWxhdGlvbiBjaGVja3Mgb24gb2JqZWN0cyBz
aG91bGQgcmVmZXIgdG8KKyAgICAgICAgdGhvc2Ugb2JqZWN0cyB3ZWFrbHkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBERkcgY29kZSBibG9j
a3Mgbm93IHBhcnRpY2lwYXRlIGluIHRoZSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0ZXIgZml4cG9p
bnQKKyAgICAgICAgc28gdGhhdCB0aGV5IG9ubHkgY29uc2lkZXIgdGhlbXNlbHZlcyB0byBiZSBs
aXZlIGlmIGVpdGhlciB0aGV5IGFyZQorICAgICAgICBjdXJyZW50bHkgZXhlY3V0aW5nLCBvciB0
aGVpciBvd25lciBpcyBsaXZlIGFuZCBhbGwgb2YgdGhlaXIgd2VhayByZWZlcmVuY2VzCisgICAg
ICAgIGFyZSBsaXZlLiBJZiBub3QsIHRoZSByZWxldmFudCBjb2RlIGJsb2NrcyBhcmUgamV0dGlz
b25lZC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnBl
cmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmpldHRp
c29uKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdT
Y2FuKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVf
U1RVQl9GVU5DVElPTik6CisKIDIwMTEtMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb2RlIGJsb2NrIGpldHRpc29uaW5nIHNob3VsZCBiZSBwYXJ0IG9m
IHRoZSBHQydzIHRyYW5zaXRpdmUgY2xvc3VyZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwMDU1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTg3LDYgKzE1ODcsMTE4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXQKIHsKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKworI2lmIEVOQUJMRShKSVQpICYmICFFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQorICAgIC8vIEtpbGwgb2ZmIHNvbWUgYnl0ZWNvZGUuIFdlIGNhbid0IGRv
IGl0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY2lkZW50YWxseQorICAgIC8vIGNh
bGwgaW50byBtYWxsb2Mgd2hpbGUgaW4gc3RvcC10aGUtd29ybGQgR0MgbW9kZS4KKyAgICBpZiAo
aGFzSW5zdHJ1Y3Rpb25zKCkgJiYgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUpCisgICAgICAgIHZp
c2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKKyNlbmRpZgorCisgICAgLy8g
Tm93IG1vdmUgb250byBhY3R1YWxseSB0cmFjaW5nLgorICAgIAorICAgIGlmIChzaG91bGRJbW1l
ZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKSB7CisgICAgICAgIC8vIFRoaXMgY29k
ZSBibG9jayBpcyBsaXZlLCBzbyBzY2FuIGFsbCByZWZlcmVuY2VzIHN0cm9uZ2x5IGFuZCByZXR1
cm4uCisgICAgICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAg
ICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgLy8gV2UgZ2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUg
c2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBsaXZlLAorICAgIC8vIGJ1dCB3ZSdy
ZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBzZW5zZTogd2UgbWF5IHlldCBkZWNp
ZGUgdGhhdCB0aGlzCisgICAgLy8gY29kZSBibG9jayBzaG91bGQgYmUgamV0dGlzb25lZCBiYXNl
ZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZlcmVuY2VzIGJlaW5nCisgICAgLy8gc3RhbGUuIFNl
dCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBzdGlsbCBhc3N1bWluZyB0aGF0IHdlJ3Jl
IGRlYWQsIGFuZAorICAgIC8vIHBlcmZvcm0gb25lIHJvdW5kIG9mIGRldGVybWluaW5nIGlmIHdl
J3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJtaW5lLCBiYXNlZCBvbgorICAgIC8vIGVpdGhlciB1
cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkgb3RoZXIgb2JqZWN0cyBiZWluZyBt
YXJrZWQgZm9yCisgICAgLy8gb3RoZXIgcmVhc29ucywgdGhhdCB0aGlzIGl0ZXJhdGlvbiBzaG91
bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0aGlzCisgICAgLy8gZGVjaXNpb24g
YnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4KKyAgICAKKyAgICB2aXNpdG9yLmFk
ZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIodGhpcyk7CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlv
bmFsRmluYWxpemVyKHRoaXMpOworICAgIAorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVu
UHJvdmVkID0gZmFsc2U7CisgICAgCisgICAgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlv
bih2aXNpdG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnBlcmZvcm1UcmFjaW5nRml4cG9pbnRJ
dGVyYXRpb24oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgLy8gRXZhbHVhdGUgb3VyIHdl
YWsgcmVmZXJlbmNlIHRyYW5zaXRpb25zLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2RmZ0RhdGEtPnRyYW5zaXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgoIW1fZGZn
RGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luCisgICAgICAgICAgICAgfHwgSGVhcDo6
aXNNYXJrZWQobV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX2NvZGVPcmlnaW4uZ2V0KCkpKQor
ICAgICAgICAgICAgJiYgSGVhcDo6aXNNYXJrZWQobV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5t
X2Zyb20uZ2V0KCkpKSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRo
aW5ncyBhcmUgbGl2ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQorICAgICAgICAgICAgLy8gdHJh
bnNpdGlvbiBpcyBhbHNvIGxpdmU6CisgICAgICAgICAgICAvLyAtIFRoaXMgY29kZSBibG9jay4g
V2Uga25vdyBpdCdzIGxpdmUgYWxyZWFkeSBiZWNhdXNlIG90aGVyd2lzZQorICAgICAgICAgICAg
Ly8gICB3ZSB3b3VsZG4ndCBiZSBzY2FubmluZyBvdXJzZWx2ZXMuCisgICAgICAgICAgICAvLyAt
IFRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgdHJhbnNpdGlvbi4gVHJhbnNpdGlvbnMgbWF5IGFyaXNl
IGZyb20KKyAgICAgICAgICAgIC8vICAgY29kZSB0aGF0IHdhcyBpbmxpbmVkLiBUaGV5IGFyZSBu
b3QgcmVsZXZhbnQgaWYgdGhlIHVzZXIncworICAgICAgICAgICAgLy8gICBvYmplY3QgdGhhdCBp
cyByZXF1aXJlZCBmb3IgdGhlIGlubGluZWUgdG8gcnVuIGlzIG5vIGxvbmdlcgorICAgICAgICAg
ICAgLy8gICBsaXZlLgorICAgICAgICAgICAgLy8gLSBUaGUgc291cmNlIG9mIHRoZSB0cmFuc2l0
aW9uLiBUaGUgdHJhbnNpdGlvbiBjaGVja3MgaWYgc29tZQorICAgICAgICAgICAgLy8gICBoZWFw
IGxvY2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgc3RvcmVzIHRoZSB0YXJnZXQu
CisgICAgICAgICAgICAvLyAgIEhlbmNlIHRoZSBzb3VyY2UgbXVzdCBiZSBsaXZlIGZvciB0aGUg
dHJhbnNpdGlvbiB0byBiZSBsaXZlLgorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fZGZn
RGF0YS0+dHJhbnNpdGlvbnNbaV0ubV90byk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gQ2hlY2sgaWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIHdvcmsgdG8gZG8uCisgICAgaWYgKG1f
ZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLy8gTm93IGNoZWNrIGFsbCBvZiBvdXIgd2VhayByZWZlcmVuY2VzLiBJZiBhbGwgb2YgdGhl
bSBhcmUgbGl2ZSwgdGhlbiB3ZQorICAgIC8vIGhhdmUgcHJvdmVkIGxpdmVuZXNzIGFuZCBzbyB3
ZSBzY2FuIG91ciBzdHJvbmcgcmVmZXJlbmNlcy4gSWYgYXQgZW5kIG9mCisgICAgLy8gR0Mgd2Ug
c3RpbGwgaGF2ZSBub3QgcHJvdmVkIGxpdmVuZXNzLCB0aGVuIHRoaXMgY29kZSBibG9jayBpcyB0
b2FzdC4KKyAgICBib29sIGFsbEFyZUxpdmVTb0ZhciA9IHRydWU7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+d2Vha1JlZmVyZW5jZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKCFIZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPndlYWtSZWZlcmVuY2VzW2ldLmdl
dCgpKSkgeworICAgICAgICAgICAgYWxsQXJlTGl2ZVNvRmFyID0gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBJZiBzb21lIHdlYWsgcmVm
ZXJlbmNlcyBhcmUgZGVhZCwgdGhlbiB0aGlzIGZpeHBvaW50IGl0ZXJhdGlvbncgd2FzCisgICAg
Ly8gdW5zdWNjZXNzZnVsLgorICAgIGlmICghYWxsQXJlTGl2ZVNvRmFyKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLy8gQWxsIHdlYWsgcmVmZXJlbmNlcyBhcmUgbGl2ZS4gUmVjb3JkIHRo
aXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKKyAgICAvLyBjb21lIGJhY2sgaGVyZSBhZ2Fpbiwg
YW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NI
YXNCZWVuUHJvdmVkID0gdHJ1ZTsKKyAgICBzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2
aXNpdG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbih2
aXNpdG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
K3sKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSBub3QgbGl2ZS4gSWYgd2UgYXJlLCB0aGVuIGpldHRp
c29uLgorICAgIGlmICghKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2Fu
KCkgfHwgbV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQpKSB7CisjaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJDb2RlIGJsb2NrICVwIGhhcyBkZWFkIHdl
YWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxuIiwgdGhpcyk7CisjZW5kaWYK
KworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmFzZWxpbmUgSklUIGtub3dzIHRoYXQg
aXQgc2hvdWxkIHJlLXdhcm0tdXAgYmVmb3JlCisgICAgICAgIC8vIG9wdGltaXppbmcuCisgICAg
ICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKKyAgICAgICAgCisgICAg
ICAgIGpldHRpc29uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gSGFu
ZGxlIHRoZSBieXRlY29kZSBkaXNjYXJkaW5nIGNob3JlLgorICAgIGlmIChtX3Nob3VsZERpc2Nh
cmRCeXRlY29kZSkgeworICAgICAgICBkaXNjYXJkQnl0ZWNvZGUoKTsKKyAgICAgICAgbV9zaG91
bGREaXNjYXJkQnl0ZWNvZGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpz
dHJvbmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKICAg
ICB2aXNpdG9yLmFwcGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZt
X293bmVyRXhlY3V0YWJsZSk7CiAgICAgaWYgKG1fcmFyZURhdGEpIHsKQEAgLTE2NTMsMTUgKzE3
NjUsNiBAQCB2b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgZm9y
ICh1bnNpZ25lZCBwcm9maWxlSW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBudW1iZXJPZlZhbHVl
UHJvZmlsZXMoKTsgKytwcm9maWxlSW5kZXgpCiAgICAgICAgIHZhbHVlUHJvZmlsZShwcm9maWxl
SW5kZXgpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKICNlbmRpZgotICAgIAotI2lmIEVO
QUJMRShKSVQpICYmICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIC8vIEtpbGwgb2ZmIHNv
bWUgYnl0ZWNvZGUuIFdlIGNhbid0IGRvIGl0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRv
IGFjY2lkZW50YWxseQotICAgIC8vIGNhbGwgaW50byBtYWxsb2Mgd2hpbGUgaW4gc3RvcC10aGUt
d29ybGQgR0MgbW9kZS4KLSAgICBpZiAoaGFzSW5zdHJ1Y3Rpb25zKCkgJiYgbV9zaG91bGREaXNj
YXJkQnl0ZWNvZGUpCi0gICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0
aGlzKTsKLSNlbmRpZgotICAgIAotICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNp
dG9yKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhT
bG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTE5ODIsMzcgKzIwODUsMjggQEAgYm9vbCBGdW5jdGlv
bkNvZGVCbG9jazo6Y2FuQ29tcGlsZVdpdGhERgogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVG
dW5jdGlvbkZvckNhbGwodGhpcyk7CiB9CiAKLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0
aXNvbigpCiB7CiAgICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7CiAgICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8
UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVk
Q29kZShnbG9iYWxEYXRhKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOwog
fQogCi12b2lkIEV2YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKK3ZvaWQgRXZhbENvZGVCbG9jazo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChnZXRKSVRU
eXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxh
Y2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRh
YmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7CisgICAgc3RhdGljX2Nh
c3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVk
Q29kZSgqZ2xvYmFsRGF0YSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlz
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0
dGlzb24oKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yKGdsb2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3Qg
OiBDb2RlRm9yQ2FsbCk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3du
ZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKmdsb2JhbERhdGEoKSwg
bV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KICNl
bmRpZgogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotI2lm
IEVOQUJMRShPUENPREVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgQVNTRVJUKG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKTsK
LSAgICBkaXNjYXJkQnl0ZWNvZGUoKTsKLX0KLQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
IGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA1NTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI1MCw3ICsyNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAg
IGNsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBj
bGFzcyBDb2RlQmxvY2sgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciwgcHVibGljIFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
ICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBwdWJsaWM6CkBAIC0yOTQsMTAgKzI5NCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGNhblByb2R1Y2VDb3B5V2l0aEJ5dGVj
b2RlKCkgeyByZXR1cm4gaGFzSW5zdHJ1Y3Rpb25zKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0
QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxsIHRoaXMg
aWYgeW91IGFyZSBub3QgamV0dGlzb25pbmcgYSBjb2RlIGJsb2NrLCBhbmQgdGh1cwotICAgICAg
ICAvLyBoYXZlIG5vIGV2aWRlbmNlIHRvIHN1Z2dlc3QgdGhhdCBpdCB3aWxsIG5ldmVyIGJlIGNh
bGxlZCBpbnRvIGFnYWluLgotICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7
CiAKQEAgLTUzNyw3ICs1MzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUQ29kZTo6
SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQogICAg
ICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4g
Z2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogICAgICAgICB2aXJ0dWFsIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAw
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJikgPSAwOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJs
b2NrKiByZXBsYWNlbWVudCgpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVX
aXRoREZHKCkgPSAwOwogICAgICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAg
LTEwNjAsMTAgKzEwNTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSkKKyAgICAgICAgdm9pZCByZW9wdGltaXplKCkKICAgICAgICAgewogICAgICAgICAg
ICAgQVNTRVJUKHJlcGxhY2VtZW50KCkgIT0gdGhpcyk7Ci0gICAgICAgICAgICByZXBsYWNlbWVu
dCgpLT5qZXR0aXNvbihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50KCktPmpl
dHRpc29uKCk7CiAgICAgICAgICAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CiAgICAgICAgICAg
ICBvcHRpbWl6ZUFmdGVyV2FybVVwKCk7CiAgICAgICAgIH0KQEAgLTEwODUsNiArMTA4MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29sIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlOwog
CiAgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNl
cyhTbG90VmlzaXRvciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKQEAgLTExMDEsNiArMTA5OCwyOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcmludFB1dEJ5SWRPcChFeGVjU3RhdGUqLCBp
bnQgbG9jYXRpb24sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3Qg
Y2hhciogb3ApIGNvbnN0OwogI2VuZGlmCiAgICAgICAgIHZvaWQgdmlzaXRTdHJ1Y3R1cmVzKFNs
b3RWaXNpdG9yJiwgSW5zdHJ1Y3Rpb24qIHZQQykgY29uc3Q7CisgICAgICAgIAorI2lmIEVOQUJM
RShERkdfSklUKQorICAgICAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NE
dXJpbmdTY2FuKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gQW0gSSBhIERGRyBjb2RlIGJs
b2NrPyBJZiBub3QsIHRoZW4gSSdtIGxpdmUgaWYgSSBhbSBiZWluZyBzY2FubmVkLgorICAgICAg
ICAgICAgaWYgKCFtX2RmZ0RhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIEkgYW0gYSBERkcgY29kZSBibG9jaywgdGhlbiBh
bSBJIGN1cnJlbnRseSBleGVjdXRpbmc/IElmIHNvLAorICAgICAgICAgICAgLy8gdGhlbiBJJ20g
ZGVmaW5pdGVseSBsaXZlLgorICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+bWF5QmVFeGVjdXRp
bmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBzaG91bGRJ
bW1lZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpIHsgcmV0dXJuIHRydWU7IH0KKyNl
bmRpZgorICAgICAgICAKKyAgICAgICAgdm9pZCBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0
aW9uKFNsb3RWaXNpdG9yJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRT
dHJvbmdSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgc3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjcmVhdGVSYXJl
RGF0YUlmTmVjZXNzYXJ5KCkKICAgICAgICAgewpAQCAtMTE3Nyw2ICsxMTk3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFr
UmVmZXJlbmNlczsKICAgICAgICAgICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAg
ICBib29sIGlzSmV0dGlzb25lZDsKKyAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJv
dmVkOyAvLyBJbml0aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KICAgICAgICAgfTsKICAg
ICAgICAgCiAgICAgICAgIE93blB0cjxERkdEYXRhPiBtX2RmZ0RhdGE7CkBAIC0xMjc4LDcgKzEy
OTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoK
ICAgICAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBT
Y29wZUNoYWluTm9kZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxE
YXRhJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBp
bGVXaXRoREZHKCk7CiAjZW5kaWYKQEAgLTEzMTIsNyArMTMzMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogI2lmIEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVu
dCgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpA
QCAtMTM0OSw3ICsxMzcwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRp
c29uKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAg
ICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTAwNTU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MzgsNyArMTkzOCw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplX2Zyb20KICNpZiBFTkFCTEUo
SklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1p
emF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCkuXG4iLCBjb2RlQmxvY2ssIGNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnJlb3B0aW1p
emUoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0y
MDA4LDcgKzIwMDgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9t
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgcHJpbnRmKCJUcmlnZ2VyaW5n
IHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gbG9vcCBhZnRlciBPU1IgZmFpbCkuXG4iLCBj
b2RlQmxvY2ssIGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSk7CiAjZW5kaWYKLSAgICAgICAgY29k
ZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAgICAgY29k
ZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIwNDAs
MTIgKzIwNDAsMTAgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemVfZnJvbQog
I2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgICAgICBwcmludGYoIlRyaWdnZXJp
bmcgcmVvcHRpbWl6YXRpb24gb2YgJXAoJXApIChpbiByZXR1cm4pLlxuIiwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBjb2RlQmxvY2st
PnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgY29kZUJs
b2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvZGVCbG9j
ay0+b3B0aW1pemVTb29uKCk7Ci0KLSAgICAgICAgY29kZUJsb2NrLT5vcHRpbWl6ZVNvb24oKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115537</attachid>
            <date>2011-11-17 00:00:20 -0800</date>
            <delta_ts>2011-11-17 00:01:32 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgweakfixpoint_patch_2.diff</filename>
            <type>text/plain</type>
            <size>15889</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDExLTExLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSBzcGVjdWxhdGlvbiBjaGVja3Mgb24gb2JqZWN0cyBz
aG91bGQgcmVmZXIgdG8KKyAgICAgICAgdGhvc2Ugb2JqZWN0cyB3ZWFrbHkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBERkcgY29kZSBibG9j
a3Mgbm93IHBhcnRpY2lwYXRlIGluIHRoZSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0ZXIgZml4cG9p
bnQKKyAgICAgICAgc28gdGhhdCB0aGV5IG9ubHkgY29uc2lkZXIgdGhlbXNlbHZlcyB0byBiZSBs
aXZlIGlmIGVpdGhlciB0aGV5IGFyZQorICAgICAgICBjdXJyZW50bHkgZXhlY3V0aW5nLCBvciB0
aGVpciBvd25lciBpcyBsaXZlIGFuZCBhbGwgb2YgdGhlaXIgd2VhayByZWZlcmVuY2VzCisgICAg
ICAgIGFyZSBsaXZlLiBJZiBub3QsIHRoZSByZWxldmFudCBjb2RlIGJsb2NrcyBhcmUgamV0dGlz
b25lZC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnBl
cmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmpldHRp
c29uKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdT
Y2FuKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVf
U1RVQl9GVU5DVElPTik6CisKIDIwMTEtMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb2RlIGJsb2NrIGpldHRpc29uaW5nIHNob3VsZCBiZSBwYXJ0IG9m
IHRoZSBHQydzIHRyYW5zaXRpdmUgY2xvc3VyZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwMDU1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTg3LDYgKzE1ODcsMTQyIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXQKIHsKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKworI2lmIEVOQUJMRShKSVQpICYmICFFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQorICAgIC8vIEtpbGwgb2ZmIHNvbWUgYnl0ZWNvZGUuIFdlIGNhbid0IGRv
IGl0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY2lkZW50YWxseQorICAgIC8vIGNh
bGwgaW50byBtYWxsb2Mgd2hpbGUgaW4gc3RvcC10aGUtd29ybGQgR0MgbW9kZS4KKyAgICBpZiAo
aGFzSW5zdHJ1Y3Rpb25zKCkgJiYgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUpCisgICAgICAgIHZp
c2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKKyNlbmRpZgorCisgICAgLy8g
Tm93IG1vdmUgb250byBhY3R1YWxseSB0cmFjaW5nLgorICAgIAorICAgIGlmIChzaG91bGRJbW1l
ZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKSB7CisgICAgICAgIC8vIFRoaXMgY29k
ZSBibG9jayBpcyBsaXZlLCBzbyBzY2FuIGFsbCByZWZlcmVuY2VzIHN0cm9uZ2x5IGFuZCByZXR1
cm4uCisgICAgICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAg
ICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gV2UgZ2V0IGhlcmUg
aWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBs
aXZlLAorICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBz
ZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCisgICAgLy8gY29kZSBibG9jayBzaG91
bGQgYmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZlcmVuY2VzIGJl
aW5nCisgICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBzdGls
bCBhc3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAorICAgIC8vIHBlcmZvcm0gb25lIHJvdW5k
IG9mIGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJtaW5lLCBiYXNl
ZCBvbgorICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkg
b3RoZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCisgICAgLy8gb3RoZXIgcmVhc29ucywgdGhh
dCB0aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0
aGlzCisgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4K
KyAgICAKKyAgICBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOworICAg
IG1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIAor
ICAgIHBlcmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24odmlzaXRvcik7CisKKyAgICAvLyBB
ZGQgYSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0ZXIgaWYgd2UgaGF2ZSBub3QgcmVhY2hlZCBmaXhw
b2ludCBhbmQgbmVlZCB0bworICAgIC8vIHJ1biBhZ2Fpbi4KKyAgICBpZiAoIShtX2RmZ0RhdGEt
PmxpdmVuZXNzSGFzQmVlblByb3ZlZCAmJiBtX2RmZ0RhdGEtPmFsbFRyYW5zaXRpb25zSGF2ZUJl
ZW5NYXJrZWQpKQorICAgICAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIodGhp
cyk7CisgICAgCisgICAgLy8gQWRkIGFuIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIGlmIHdlIG1h
eSBuZWVkIHRvIGpldHRpc29uLgorICAgIGlmICghbV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Q
cm92ZWQpCisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsK
KyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCit2b2lkIENvZGVCbG9jazo6cGVyZm9ybVRyYWNp
bmdGaXhwb2ludEl0ZXJhdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gRXZhbHVh
dGUgb3VyIHdlYWsgcmVmZXJlbmNlIHRyYW5zaXRpb25zLCBpZiB0aGVyZSBhcmUgc3RpbGwgc29t
ZSB0byBldmFsdWF0ZS4KKyAgICBpZiAoIW1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVl
bk1hcmtlZCkgeworICAgICAgICBib29sIGFsbEFyZU1hcmtlZFNvRmFyID0gdHJ1ZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+dHJhbnNpdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoIW1fZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9j
b2RlT3JpZ2luCisgICAgICAgICAgICAgICAgIHx8IEhlYXA6OmlzTWFya2VkKG1fZGZnRGF0YS0+
dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICAgICAgICAgICAgICAmJiBI
ZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPnRyYW5zaXRpb25zW2ldLm1fZnJvbS5nZXQoKSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2
ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24g
aXMgYWxzbyBsaXZlOgorICAgICAgICAgICAgICAgIC8vIC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBr
bm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1c2Ugb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAg
Ly8gICB3ZSB3b3VsZG4ndCBiZSBzY2FubmluZyBvdXJzZWx2ZXMuCisgICAgICAgICAgICAgICAg
Ly8gLSBUaGUgY29kZSBvcmlnaW4gb2YgdGhlIHRyYW5zaXRpb24uIFRyYW5zaXRpb25zIG1heSBh
cmlzZSBmcm9tCisgICAgICAgICAgICAgICAgLy8gICBjb2RlIHRoYXQgd2FzIGlubGluZWQuIFRo
ZXkgYXJlIG5vdCByZWxldmFudCBpZiB0aGUgdXNlcidzCisgICAgICAgICAgICAgICAgLy8gICBv
YmplY3QgdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIGlubGluZWUgdG8gcnVuIGlzIG5vIGxvbmdl
cgorICAgICAgICAgICAgICAgIC8vICAgbGl2ZS4KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBz
b3VyY2Ugb2YgdGhlIHRyYW5zaXRpb24uIFRoZSB0cmFuc2l0aW9uIGNoZWNrcyBpZiBzb21lCisg
ICAgICAgICAgICAgICAgLy8gICBoZWFwIGxvY2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBp
ZiBzbywgc3RvcmVzIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUg
c291cmNlIG11c3QgYmUgbGl2ZSBmb3IgdGhlIHRyYW5zaXRpb24gdG8gYmUgbGl2ZS4KKyAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX3Rv
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFy
ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChhbGxBcmVNYXJrZWRT
b0ZhcikKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtl
ZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IHJlbWFp
bmluZyB3b3JrIHRvIGRvLgorICAgIGlmIChtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3Zl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIE5vdyBjaGVjayBhbGwgb2Ygb3VyIHdl
YWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRoZW0gYXJlIGxpdmUsIHRoZW4gd2UKKyAgICAvLyBo
YXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28gd2Ugc2NhbiBvdXIgc3Ryb25nIHJlZmVyZW5jZXMu
IElmIGF0IGVuZCBvZgorICAgIC8vIEdDIHdlIHN0aWxsIGhhdmUgbm90IHByb3ZlZCBsaXZlbmVz
cywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMgdG9hc3QuCisgICAgYm9vbCBhbGxBcmVMaXZlU29G
YXIgPSB0cnVlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmZ0RhdGEtPndlYWtS
ZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9k
ZmdEYXRhLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gSWYgc29tZSB3ZWFrIHJlZmVyZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBm
aXhwb2ludCBpdGVyYXRpb24gd2FzCisgICAgLy8gdW5zdWNjZXNzZnVsLgorICAgIGlmICghYWxs
QXJlTGl2ZVNvRmFyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQWxsIHdlYWsgcmVm
ZXJlbmNlcyBhcmUgbGl2ZS4gUmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKKyAg
ICAvLyBjb21lIGJhY2sgaGVyZSBhZ2FpbiwgYW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2Vz
LgorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKKyAgICBzdHJv
bmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbih2aXNp
dG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSBub3QgbGl2ZS4gSWYg
d2UgYXJlLCB0aGVuIGpldHRpc29uLgorICAgIGlmICghKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1l
TGl2ZW5lc3NEdXJpbmdTY2FuKCkgfHwgbV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQp
KSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJDb2RlIGJs
b2NrICVwIGhhcyBkZWFkIHdlYWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxu
IiwgdGhpcyk7CisjZW5kaWYKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmFzZWxp
bmUgSklUIGtub3dzIHRoYXQgaXQgc2hvdWxkIHJlLXdhcm0tdXAgYmVmb3JlCisgICAgICAgIC8v
IG9wdGltaXppbmcuCisgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKKyAgICAgICAgCisgICAgICAgIGpldHRpc29uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgCisgICAgLy8gSGFuZGxlIHRoZSBieXRl
Y29kZSBkaXNjYXJkaW5nIGNob3JlLgorICAgIGlmIChtX3Nob3VsZERpc2NhcmRCeXRlY29kZSkg
eworICAgICAgICBkaXNjYXJkQnl0ZWNvZGUoKTsKKyAgICAgICAgbV9zaG91bGREaXNjYXJkQnl0
ZWNvZGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKICAgICB2aXNpdG9yLmFw
cGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0
YWJsZSk7CiAgICAgaWYgKG1fcmFyZURhdGEpIHsKQEAgLTE2NTMsMTUgKzE3ODksNiBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgZm9yICh1bnNpZ25lZCBw
cm9maWxlSW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsg
Kytwcm9maWxlSW5kZXgpCiAgICAgICAgIHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKICNlbmRpZgotICAgIAotI2lmIEVOQUJMRShKSVQpICYm
ICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIC8vIEtpbGwgb2ZmIHNvbWUgYnl0ZWNvZGUu
IFdlIGNhbid0IGRvIGl0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY2lkZW50YWxs
eQotICAgIC8vIGNhbGwgaW50byBtYWxsb2Mgd2hpbGUgaW4gc3RvcC10aGUtd29ybGQgR0MgbW9k
ZS4KLSAgICBpZiAoaGFzSW5zdHJ1Y3Rpb25zKCkgJiYgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUp
Ci0gICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKLSNlbmRp
ZgotICAgIAotICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKIH0KIAog
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKQEAgLTE5ODIsMzcgKzIxMDksMjggQEAgYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6
Y2FuQ29tcGlsZVdpdGhERgogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNh
bGwodGhpcyk7CiB9CiAKLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CiAg
ICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgQVNT
RVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxE
YXRhKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOwogfQogCi12b2lkIEV2
YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgRXZh
bENvZGVCbG9jazo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwot
ICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0
aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7CisgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZSgqZ2xvYmFs
RGF0YSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oKQogewog
ICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFT
U0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKGds
b2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2Fs
bCk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKmdsb2JhbERhdGEoKSwgbV9pc0NvbnN0cnVj
dG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KICNlbmRpZgogCi12b2lk
IENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmCi0gICAgQVNTRVJUKG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKTsKLSAgICBkaXNjYXJk
Qnl0ZWNvZGUoKTsKLX0KLQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKIGJvb2wgQ29kZUJs
b2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA1NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsy
NTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIGNsYXNzIENvZGVC
bG9jayA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBjbGFzcyBDb2RlQmxv
Y2sgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpJVDsKICAgICBwdWJsaWM6CkBAIC0yOTQsMTAgKzI5NCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkgeyByZXR1
cm4gaGFzSW5zdHJ1Y3Rpb25zKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGFyZSBu
b3QgamV0dGlzb25pbmcgYSBjb2RlIGJsb2NrLCBhbmQgdGh1cwotICAgICAgICAvLyBoYXZlIG5v
IGV2aWRlbmNlIHRvIHN1Z2dlc3QgdGhhdCBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBpbnRvIGFn
YWluLgotICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKQEAgLTUzNyw3
ICs1MzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRK
SVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgp
LmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJikgPSAwOworICAgICAgICB2aXJ0dWFs
IHZvaWQgamV0dGlzb24oKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCgpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAw
OwogICAgICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTEwNjAsMTAgKzEw
NTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAg
ICAgICAgdm9pZCByZW9wdGltaXplKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJl
cGxhY2VtZW50KCkgIT0gdGhpcyk7Ci0gICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50KCktPmpldHRpc29uKCk7CiAg
ICAgICAgICAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CiAgICAgICAgICAgICBvcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CiAgICAgICAgIH0KQEAgLTEwODUsNiArMTA4MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlOwogCiAgICAgcHJvdGVj
dGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKICAg
ICAgICAgCiAgICAgcHJpdmF0ZToKQEAgLTExMDEsNiArMTA5OCwzMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBwcmludFB1dEJ5SWRPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApIGNv
bnN0OwogI2VuZGlmCiAgICAgICAgIHZvaWQgdmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiwg
SW5zdHJ1Y3Rpb24qIHZQQykgY29uc3Q7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQor
ICAgICAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gQW0gSSBhIERGRyBjb2RlIGJsb2NrPyBJZiBub3Qs
IHRoZW4gSSdtIGxpdmUgaWYgSSBhbSBiZWluZyBzY2FubmVkLgorICAgICAgICAgICAgaWYgKCFt
X2RmZ0RhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIElmIEkgYW0gYSBERkcgY29kZSBibG9jaywgdGhlbiBhbSBJIGN1cnJlbnRs
eSBleGVjdXRpbmc/IElmIHNvLAorICAgICAgICAgICAgLy8gdGhlbiBJJ20gZGVmaW5pdGVseSBs
aXZlLgorICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFz
c3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorICAgICAg
ICAKKyAgICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGxpdmVuZXNzIGZvciB0aGlzIGNvZGUgYmxv
Y2sgaGFzIGJlZW4gcHJvdmVuLgorICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJucyBmYWxzZSwg
d2hpY2ggbWVhbnMgdGhhdCB0aGlzIG1heSBuZWVkIHRvIHJ1bgorICAgICAgICAvLyBhZ2Fpbi4K
KyAgICAgICAgdm9pZCBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKFNsb3RWaXNpdG9y
Jik7CisgICAgICAgIAorICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVuY2Vz
KFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5
KCkKICAgICAgICAgewpAQCAtMTE3Nyw2ICsxMjAwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsKICAg
ICAgICAgICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0dGlz
b25lZDsKKyAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0aWFs
aXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KKyAgICAgICAgICAgIGJvb2wgYWxsVHJhbnNpdGlv
bnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0MuCiAg
ICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwpA
QCAtMTI3OCw3ICsxMzAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQo
RXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpldHRp
c29uKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsKICAg
ICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlmCkBAIC0xMzEyLDcgKzEzMzcsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAgICAg
dmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNoYWlu
Tm9kZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZH
KCk7CiAjZW5kaWYKQEAgLTEzNDksNyArMTM3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmIEVO
QUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGpl
dHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEwMDU1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTM4LDcgKzE5MzgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9mcm9t
CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiVHJpZ2dl
cmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3ApLlxuIiwgY29kZUJsb2NrLCBj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBjb2RlQmxvY2st
PnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgY29kZUJs
b2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9
IGVsc2UgewpAQCAtMjAwOCw3ICsyMDA4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3B0aW1pemVfZnJvbQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIHByaW50
ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3AgYWZ0ZXIgT1NS
IGZhaWwpLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOwogI2VuZGlm
Ci0gICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7
CisgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yMDQwLDEyICsyMDQwLDEwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9w
dGltaXplX2Zyb20KICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAgcHJp
bnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gcmV0dXJuKS5cbiIs
IGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKICNlbmRpZgotICAgICAgICAg
ICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwotCi0gICAgICAgIGNvZGVCbG9jay0+b3B0
aW1pemVTb29uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115538</attachid>
            <date>2011-11-17 00:01:32 -0800</date>
            <delta_ts>2011-11-17 23:14:45 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>dfgweakfixpoint_patch_2.diff</filename>
            <type>text/plain</type>
            <size>15721</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAwNTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDExLTExLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGNvZGUgYmxvY2tzIHRoYXQgaGF2ZSBzcGVjdWxhdGlvbiBjaGVja3Mgb24gb2JqZWN0cyBz
aG91bGQgcmVmZXIgdG8KKyAgICAgICAgdGhvc2Ugb2JqZWN0cyB3ZWFrbHkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMzEyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBERkcgY29kZSBibG9j
a3Mgbm93IHBhcnRpY2lwYXRlIGluIHRoZSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0ZXIgZml4cG9p
bnQKKyAgICAgICAgc28gdGhhdCB0aGV5IG9ubHkgY29uc2lkZXIgdGhlbXNlbHZlcyB0byBiZSBs
aXZlIGlmIGVpdGhlciB0aGV5IGFyZQorICAgICAgICBjdXJyZW50bHkgZXhlY3V0aW5nLCBvciB0
aGVpciBvd25lciBpcyBsaXZlIGFuZCBhbGwgb2YgdGhlaXIgd2VhayByZWZlcmVuY2VzCisgICAg
ICAgIGFyZSBsaXZlLiBJZiBub3QsIHRoZSByZWxldmFudCBjb2RlIGJsb2NrcyBhcmUgamV0dGlz
b25lZC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnBl
cmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6
OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmpldHRp
c29uKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAo
SlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdT
Y2FuKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjpERUZJTkVf
U1RVQl9GVU5DVElPTik6CisKIDIwMTEtMTEtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBDb2RlIGJsb2NrIGpldHRpc29uaW5nIHNob3VsZCBiZSBwYXJ0IG9m
IHRoZSBHQydzIHRyYW5zaXRpdmUgY2xvc3VyZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDEwMDU1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTg3LDYgKzE1ODcsMTQyIEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXQKIHsKICAgICBpZiAoISFtX2FsdGVybmF0aXZlKQogICAgICAgICBtX2FsdGVybmF0aXZlLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKworI2lmIEVOQUJMRShKSVQpICYmICFFTkFCTEUoT1BD
T0RFX1NBTVBMSU5HKQorICAgIC8vIEtpbGwgb2ZmIHNvbWUgYnl0ZWNvZGUuIFdlIGNhbid0IGRv
IGl0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY2lkZW50YWxseQorICAgIC8vIGNh
bGwgaW50byBtYWxsb2Mgd2hpbGUgaW4gc3RvcC10aGUtd29ybGQgR0MgbW9kZS4KKyAgICBpZiAo
aGFzSW5zdHJ1Y3Rpb25zKCkgJiYgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUpCisgICAgICAgIHZp
c2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKKyNlbmRpZgorCisgICAgLy8g
Tm93IG1vdmUgb250byBhY3R1YWxseSB0cmFjaW5nLgorICAgIAorICAgIGlmIChzaG91bGRJbW1l
ZGlhdGVseUFzc3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpKSB7CisgICAgICAgIC8vIFRoaXMgY29k
ZSBibG9jayBpcyBsaXZlLCBzbyBzY2FuIGFsbCByZWZlcmVuY2VzIHN0cm9uZ2x5IGFuZCByZXR1
cm4uCisgICAgICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAg
ICAgICBzdHJvbmdseVZpc2l0V2Vha1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gV2UgZ2V0IGhlcmUg
aWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhlY3V0YWJsZSBpcyBs
aXZlLAorICAgIC8vIGJ1dCB3ZSdyZSBub3QgeWV0IGxpdmUgZm9yIHN1cmUgaW4gYW5vdGhlciBz
ZW5zZTogd2UgbWF5IHlldCBkZWNpZGUgdGhhdCB0aGlzCisgICAgLy8gY29kZSBibG9jayBzaG91
bGQgYmUgamV0dGlzb25lZCBiYXNlZCBvbiBpdHMgb3V0Z29pbmcgd2VhayByZWZlcmVuY2VzIGJl
aW5nCisgICAgLy8gc3RhbGUuIFNldCBhIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSdyZSBzdGls
bCBhc3N1bWluZyB0aGF0IHdlJ3JlIGRlYWQsIGFuZAorICAgIC8vIHBlcmZvcm0gb25lIHJvdW5k
IG9mIGRldGVybWluaW5nIGlmIHdlJ3JlIGxpdmUuIFRoZSBHQyBtYXkgZGV0ZXJtaW5lLCBiYXNl
ZCBvbgorICAgIC8vIGVpdGhlciB1cyBtYXJraW5nIGFkZGl0aW9uYWwgb2JqZWN0cywgb3IgYnkg
b3RoZXIgb2JqZWN0cyBiZWluZyBtYXJrZWQgZm9yCisgICAgLy8gb3RoZXIgcmVhc29ucywgdGhh
dCB0aGlzIGl0ZXJhdGlvbiBzaG91bGQgcnVuIGFnYWluOyBpdCB3aWxsIG5vdGlmeSB1cyBvZiB0
aGlzCisgICAgLy8gZGVjaXNpb24gYnkgY2FsbGluZyBoYXJ2ZXN0V2Vha1JlZmVyZW5jZXMoKS4K
KyAgICAKKyAgICBtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOworICAg
IG1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIAor
ICAgIHBlcmZvcm1UcmFjaW5nRml4cG9pbnRJdGVyYXRpb24odmlzaXRvcik7CisKKyAgICAvLyBB
ZGQgYSB3ZWFrIHJlZmVyZW5jZSBoYXJ2ZXN0ZXIgaWYgd2UgaGF2ZSBub3QgcmVhY2hlZCBmaXhw
b2ludCBhbmQgbmVlZCB0bworICAgIC8vIHJ1biBhZ2Fpbi4KKyAgICBpZiAoIShtX2RmZ0RhdGEt
PmxpdmVuZXNzSGFzQmVlblByb3ZlZCAmJiBtX2RmZ0RhdGEtPmFsbFRyYW5zaXRpb25zSGF2ZUJl
ZW5NYXJrZWQpKQorICAgICAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIodGhp
cyk7CisgICAgCisgICAgLy8gQWRkIGFuIHVuY29uZGl0aW9uYWwgZmluYWxpemVyIGlmIHdlIG1h
eSBuZWVkIHRvIGpldHRpc29uLgorICAgIGlmICghbV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Q
cm92ZWQpCisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsK
KyNlbHNlIC8vIEVOQUJMRShERkdfSklUKQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCit2b2lkIENvZGVCbG9jazo6cGVyZm9ybVRyYWNp
bmdGaXhwb2ludEl0ZXJhdGlvbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBVTlVTRURf
UEFSQU0odmlzaXRvcik7CisgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8gRXZhbHVh
dGUgb3VyIHdlYWsgcmVmZXJlbmNlIHRyYW5zaXRpb25zLCBpZiB0aGVyZSBhcmUgc3RpbGwgc29t
ZSB0byBldmFsdWF0ZS4KKyAgICBpZiAoIW1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVl
bk1hcmtlZCkgeworICAgICAgICBib29sIGFsbEFyZU1hcmtlZFNvRmFyID0gdHJ1ZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+dHJhbnNpdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoIW1fZGZnRGF0YS0+dHJhbnNpdGlvbnNbaV0ubV9j
b2RlT3JpZ2luCisgICAgICAgICAgICAgICAgIHx8IEhlYXA6OmlzTWFya2VkKG1fZGZnRGF0YS0+
dHJhbnNpdGlvbnNbaV0ubV9jb2RlT3JpZ2luLmdldCgpKSkKKyAgICAgICAgICAgICAgICAmJiBI
ZWFwOjppc01hcmtlZChtX2RmZ0RhdGEtPnRyYW5zaXRpb25zW2ldLm1fZnJvbS5nZXQoKSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5ncyBhcmUgbGl2
ZSwgdGhlbiB0aGUgdGFyZ2V0IG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIHRyYW5zaXRpb24g
aXMgYWxzbyBsaXZlOgorICAgICAgICAgICAgICAgIC8vIC0gVGhpcyBjb2RlIGJsb2NrLiBXZSBr
bm93IGl0J3MgbGl2ZSBhbHJlYWR5IGJlY2F1c2Ugb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAg
Ly8gICB3ZSB3b3VsZG4ndCBiZSBzY2FubmluZyBvdXJzZWx2ZXMuCisgICAgICAgICAgICAgICAg
Ly8gLSBUaGUgY29kZSBvcmlnaW4gb2YgdGhlIHRyYW5zaXRpb24uIFRyYW5zaXRpb25zIG1heSBh
cmlzZSBmcm9tCisgICAgICAgICAgICAgICAgLy8gICBjb2RlIHRoYXQgd2FzIGlubGluZWQuIFRo
ZXkgYXJlIG5vdCByZWxldmFudCBpZiB0aGUgdXNlcidzCisgICAgICAgICAgICAgICAgLy8gICBv
YmplY3QgdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIGlubGluZWUgdG8gcnVuIGlzIG5vIGxvbmdl
cgorICAgICAgICAgICAgICAgIC8vICAgbGl2ZS4KKyAgICAgICAgICAgICAgICAvLyAtIFRoZSBz
b3VyY2Ugb2YgdGhlIHRyYW5zaXRpb24uIFRoZSB0cmFuc2l0aW9uIGNoZWNrcyBpZiBzb21lCisg
ICAgICAgICAgICAgICAgLy8gICBoZWFwIGxvY2F0aW9uIGhvbGRzIHRoZSBzb3VyY2UsIGFuZCBp
ZiBzbywgc3RvcmVzIHRoZSB0YXJnZXQuCisgICAgICAgICAgICAgICAgLy8gICBIZW5jZSB0aGUg
c291cmNlIG11c3QgYmUgbGl2ZSBmb3IgdGhlIHRyYW5zaXRpb24gdG8gYmUgbGl2ZS4KKyAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9kZmdEYXRhLT50cmFuc2l0aW9uc1tpXS5tX3Rv
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGFsbEFyZU1hcmtlZFNvRmFy
ID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChhbGxBcmVNYXJrZWRT
b0ZhcikKKyAgICAgICAgICAgIG1fZGZnRGF0YS0+YWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtl
ZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYW55IHJlbWFp
bmluZyB3b3JrIHRvIGRvLgorICAgIGlmIChtX2RmZ0RhdGEtPmxpdmVuZXNzSGFzQmVlblByb3Zl
ZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIE5vdyBjaGVjayBhbGwgb2Ygb3VyIHdl
YWsgcmVmZXJlbmNlcy4gSWYgYWxsIG9mIHRoZW0gYXJlIGxpdmUsIHRoZW4gd2UKKyAgICAvLyBo
YXZlIHByb3ZlZCBsaXZlbmVzcyBhbmQgc28gd2Ugc2NhbiBvdXIgc3Ryb25nIHJlZmVyZW5jZXMu
IElmIGF0IGVuZCBvZgorICAgIC8vIEdDIHdlIHN0aWxsIGhhdmUgbm90IHByb3ZlZCBsaXZlbmVz
cywgdGhlbiB0aGlzIGNvZGUgYmxvY2sgaXMgdG9hc3QuCisgICAgYm9vbCBhbGxBcmVMaXZlU29G
YXIgPSB0cnVlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmZ0RhdGEtPndlYWtS
ZWZlcmVuY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghSGVhcDo6aXNNYXJrZWQobV9k
ZmdEYXRhLT53ZWFrUmVmZXJlbmNlc1tpXS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGFsbEFyZUxp
dmVTb0ZhciA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgLy8gSWYgc29tZSB3ZWFrIHJlZmVyZW5jZXMgYXJlIGRlYWQsIHRoZW4gdGhpcyBm
aXhwb2ludCBpdGVyYXRpb24gd2FzCisgICAgLy8gdW5zdWNjZXNzZnVsLgorICAgIGlmICghYWxs
QXJlTGl2ZVNvRmFyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQWxsIHdlYWsgcmVm
ZXJlbmNlcyBhcmUgbGl2ZS4gUmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKKyAg
ICAvLyBjb21lIGJhY2sgaGVyZSBhZ2FpbiwgYW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2Vz
LgorICAgIG1fZGZnRGF0YS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKKyAgICBzdHJv
bmdseVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgcGVyZm9ybVRyYWNpbmdGaXhwb2ludEl0ZXJhdGlvbih2aXNp
dG9yKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICAvLyBDaGVjayBpZiB3ZSdyZSBub3QgbGl2ZS4gSWYg
d2UgYXJlLCB0aGVuIGpldHRpc29uLgorICAgIGlmICghKHNob3VsZEltbWVkaWF0ZWx5QXNzdW1l
TGl2ZW5lc3NEdXJpbmdTY2FuKCkgfHwgbV9kZmdEYXRhLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQp
KSB7CisjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKKyAgICAgICAgcHJpbnRmKCJDb2RlIGJs
b2NrICVwIGhhcyBkZWFkIHdlYWsgcmVmZXJlbmNlcywgamV0dGlzb25pbmcgZHVyaW5nIEdDLlxu
IiwgdGhpcyk7CisjZW5kaWYKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYmFzZWxp
bmUgSklUIGtub3dzIHRoYXQgaXQgc2hvdWxkIHJlLXdhcm0tdXAgYmVmb3JlCisgICAgICAgIC8v
IG9wdGltaXppbmcuCisgICAgICAgIGFsdGVybmF0aXZlKCktPm9wdGltaXplQWZ0ZXJXYXJtVXAo
KTsKKyAgICAgICAgCisgICAgICAgIGpldHRpc29uKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgCisgICAgLy8gSGFuZGxlIHRoZSBieXRl
Y29kZSBkaXNjYXJkaW5nIGNob3JlLgorICAgIGlmIChtX3Nob3VsZERpc2NhcmRCeXRlY29kZSkg
eworICAgICAgICBkaXNjYXJkQnl0ZWNvZGUoKTsKKyAgICAgICAgbV9zaG91bGREaXNjYXJkQnl0
ZWNvZGUgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpzdHJvbmdseVZpc2l0
U3Ryb25nUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKICAgICB2aXNpdG9yLmFw
cGVuZCgmbV9nbG9iYWxPYmplY3QpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZtX293bmVyRXhlY3V0
YWJsZSk7CiAgICAgaWYgKG1fcmFyZURhdGEpIHsKQEAgLTE2NTMsMTUgKzE3ODksNiBAQCB2b2lk
IENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgZm9yICh1bnNpZ25lZCBw
cm9maWxlSW5kZXggPSAwOyBwcm9maWxlSW5kZXggPCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsg
Kytwcm9maWxlSW5kZXgpCiAgICAgICAgIHZhbHVlUHJvZmlsZShwcm9maWxlSW5kZXgpLT5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKICNlbmRpZgotICAgIAotI2lmIEVOQUJMRShKSVQpICYm
ICFFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgIC8vIEtpbGwgb2ZmIHNvbWUgYnl0ZWNvZGUu
IFdlIGNhbid0IGRvIGl0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFjY2lkZW50YWxs
eQotICAgIC8vIGNhbGwgaW50byBtYWxsb2Mgd2hpbGUgaW4gc3RvcC10aGUtd29ybGQgR0MgbW9k
ZS4KLSAgICBpZiAoaGFzSW5zdHJ1Y3Rpb25zKCkgJiYgbV9zaG91bGREaXNjYXJkQnl0ZWNvZGUp
Ci0gICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzKTsKLSNlbmRp
ZgotICAgIAotICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKIH0KIAog
dm9pZCBDb2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYg
dmlzaXRvcikKQEAgLTE5ODIsMzcgKzIxMDksMjggQEAgYm9vbCBGdW5jdGlvbkNvZGVCbG9jazo6
Y2FuQ29tcGlsZVdpdGhERgogICAgIHJldHVybiBERkc6OmNhbkNvbXBpbGVGdW5jdGlvbkZvckNh
bGwodGhpcyk7CiB9CiAKLXZvaWQgUHJvZ3JhbUNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBQcm9ncmFtQ29kZUJsb2NrOjpqZXR0aXNvbigpCiB7CiAg
ICAgQVNTRVJUKGdldEpJVFR5cGUoKSAhPSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgQVNT
RVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZShnbG9iYWxE
YXRhKTsKKyAgICBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlKCpnbG9iYWxEYXRhKCkpOwogfQogCi12b2lkIEV2
YWxDb2RlQmxvY2s6OmpldHRpc29uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKK3ZvaWQgRXZh
bENvZGVCbG9jazo6amV0dGlzb24oKQogewogICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwot
ICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0
aXNvbk9wdGltaXplZENvZGUoZ2xvYmFsRGF0YSk7CisgICAgc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZSgqZ2xvYmFs
RGF0YSgpKTsKIH0KIAotdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb24oKQogewog
ICAgIEFTU0VSVChnZXRKSVRUeXBlKCkgIT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIEFT
U0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKGds
b2JhbERhdGEsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2Fs
bCk7CisgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qZXR0aXNvbk9wdGltaXplZENvZGVGb3IoKmdsb2JhbERhdGEoKSwgbV9pc0NvbnN0cnVj
dG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KICNlbmRpZgogCi12b2lk
IENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpIHx8ICFFTkFCTEUoSklUKQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmCi0gICAgQVNTRVJUKG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlKTsKLSAgICBkaXNjYXJk
Qnl0ZWNvZGUoKTsKLX0KLQogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKIGJvb2wgQ29kZUJs
b2NrOjpzaG91bGRPcHRpbWl6ZU5vdygpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMDA1NTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw3ICsy
NTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAjZW5kaWYKIAotICAgIGNsYXNzIENvZGVC
bG9jayA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBjbGFzcyBDb2RlQmxv
Y2sgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciwgcHVibGljIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEpJVDsKICAgICBwdWJsaWM6CkBAIC0yOTQsMTAgKzI5NCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBib29sIGNhblByb2R1Y2VDb3B5V2l0aEJ5dGVjb2RlKCkgeyByZXR1
cm4gaGFzSW5zdHJ1Y3Rpb25zKCk7IH0KIAogICAgICAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJik7Ci0gICAgICAgIAotICAgICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGFyZSBu
b3QgamV0dGlzb25pbmcgYSBjb2RlIGJsb2NrLCBhbmQgdGh1cwotICAgICAgICAvLyBoYXZlIG5v
IGV2aWRlbmNlIHRvIHN1Z2dlc3QgdGhhdCBpdCB3aWxsIG5ldmVyIGJlIGNhbGxlZCBpbnRvIGFn
YWluLgotICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKQEAgLTUzNyw3
ICs1MzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRK
SVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQogICAgICAgICBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgp
LmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJikgPSAwOworICAgICAgICB2aXJ0dWFs
IHZvaWQgamV0dGlzb24oKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNl
bWVudCgpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRoREZHKCkgPSAw
OwogICAgICAgICBib29sIGhhc09wdGltaXplZFJlcGxhY2VtZW50KCkKQEAgLTEwNjAsMTAgKzEw
NTYsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJ
VCkKLSAgICAgICAgdm9pZCByZW9wdGltaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKKyAg
ICAgICAgdm9pZCByZW9wdGltaXplKCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKHJl
cGxhY2VtZW50KCkgIT0gdGhpcyk7Ci0gICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNv
bihnbG9iYWxEYXRhKTsKKyAgICAgICAgICAgIHJlcGxhY2VtZW50KCktPmpldHRpc29uKCk7CiAg
ICAgICAgICAgICBjb3VudFJlb3B0aW1pemF0aW9uKCk7CiAgICAgICAgICAgICBvcHRpbWl6ZUFm
dGVyV2FybVVwKCk7CiAgICAgICAgIH0KQEAgLTEwODUsNiArMTA4MSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBib29sIG1fc2hvdWxkRGlzY2FyZEJ5dGVjb2RlOwogCiAgICAgcHJvdGVj
dGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRv
ciYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKTsKICAg
ICAgICAgCiAgICAgcHJpdmF0ZToKQEAgLTExMDEsNiArMTA5OCwyOSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCBwcmludFB1dEJ5SWRPcChFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24s
IFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJiwgY29uc3QgY2hhciogb3ApIGNv
bnN0OwogI2VuZGlmCiAgICAgICAgIHZvaWQgdmlzaXRTdHJ1Y3R1cmVzKFNsb3RWaXNpdG9yJiwg
SW5zdHJ1Y3Rpb24qIHZQQykgY29uc3Q7CisgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQor
ICAgICAgICBib29sIHNob3VsZEltbWVkaWF0ZWx5QXNzdW1lTGl2ZW5lc3NEdXJpbmdTY2FuKCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gQW0gSSBhIERGRyBjb2RlIGJsb2NrPyBJZiBub3Qs
IHRoZW4gSSdtIGxpdmUgaWYgSSBhbSBiZWluZyBzY2FubmVkLgorICAgICAgICAgICAgaWYgKCFt
X2RmZ0RhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIElmIEkgYW0gYSBERkcgY29kZSBibG9jaywgdGhlbiBhbSBJIGN1cnJlbnRs
eSBleGVjdXRpbmc/IElmIHNvLAorICAgICAgICAgICAgLy8gdGhlbiBJJ20gZGVmaW5pdGVseSBs
aXZlLgorICAgICAgICAgICAgaWYgKG1fZGZnRGF0YS0+bWF5QmVFeGVjdXRpbmcpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgYm9vbCBzaG91bGRJbW1lZGlhdGVseUFz
c3VtZUxpdmVuZXNzRHVyaW5nU2NhbigpIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgorICAgICAg
ICAKKyAgICAgICAgdm9pZCBwZXJmb3JtVHJhY2luZ0ZpeHBvaW50SXRlcmF0aW9uKFNsb3RWaXNp
dG9yJik7CisgICAgICAgIAorICAgICAgICB2b2lkIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJik7CisgICAgICAgIHZvaWQgc3Ryb25nbHlWaXNpdFdlYWtSZWZlcmVu
Y2VzKFNsb3RWaXNpdG9yJik7CiAKICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNz
YXJ5KCkKICAgICAgICAgewpAQCAtMTE3Nyw2ICsxMjAwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4gPiB3ZWFrUmVmZXJlbmNlczsK
ICAgICAgICAgICAgIGJvb2wgbWF5QmVFeGVjdXRpbmc7CiAgICAgICAgICAgICBib29sIGlzSmV0
dGlzb25lZDsKKyAgICAgICAgICAgIGJvb2wgbGl2ZW5lc3NIYXNCZWVuUHJvdmVkOyAvLyBJbml0
aWFsaXplZCBhbmQgdXNlZCBvbiBldmVyeSBHQy4KKyAgICAgICAgICAgIGJvb2wgYWxsVHJhbnNp
dGlvbnNIYXZlQmVlbk1hcmtlZDsgLy8gSW5pdGlhbGl6ZWQgYW5kIHVzZWQgb24gZXZlcnkgR0Mu
CiAgICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRh
OwpAQCAtMTI3OCw3ICsxMzAzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWYgRU5BQkxFKEpJVCkK
ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6
ZWQoRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGpl
dHRpc29uKEpTR2xvYmFsRGF0YSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oKTsK
ICAgICAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpOwogI2VuZGlmCkBAIC0xMzEyLDcgKzEzMzcsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHByb3RlY3RlZDoKICAgICAg
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBTY29wZUNo
YWluTm9kZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb24oSlNHbG9iYWxEYXRhJik7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbigpOwogICAgICAgICB2aXJ0dWFsIENvZGVC
bG9jayogcmVwbGFjZW1lbnQoKTsKICAgICAgICAgdmlydHVhbCBib29sIGNhbkNvbXBpbGVXaXRo
REZHKCk7CiAjZW5kaWYKQEAgLTEzNDksNyArMTM3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2lm
IEVOQUJMRShKSVQpCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBj
b21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKik7Ci0gICAgICAgIHZp
cnR1YWwgdm9pZCBqZXR0aXNvbihKU0dsb2JhbERhdGEmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGpldHRpc29uKCk7CiAgICAgICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwog
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQ29tcGlsZVdpdGhERkcoKTsKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDEwMDU1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTM4LDcgKzE5MzgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZV9m
cm9tCiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIHByaW50ZigiVHJp
Z2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3ApLlxuIiwgY29kZUJsb2Nr
LCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOwogI2VuZGlmCi0gICAgICAgICAgICBjb2RlQmxv
Y2stPnJlb3B0aW1pemUoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgICAgICAgICAgY29k
ZUJsb2NrLT5yZW9wdGltaXplKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewpAQCAtMjAwOCw3ICsyMDA4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemVfZnJvbQogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCiAgICAgICAgIHBy
aW50ZigiVHJpZ2dlcmluZyByZW9wdGltaXphdGlvbiBvZiAlcCglcCkgKGluIGxvb3AgYWZ0ZXIg
T1NSIGZhaWwpLlxuIiwgY29kZUJsb2NrLCBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCkpOwogI2Vu
ZGlmCi0gICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZShjYWxsRnJhbWUtPmdsb2JhbERhdGEo
KSk7CisgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0yMDQwLDEyICsyMDQwLDEwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQs
IG9wdGltaXplX2Zyb20KICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgICAgICAgICAg
cHJpbnRmKCJUcmlnZ2VyaW5nIHJlb3B0aW1pemF0aW9uIG9mICVwKCVwKSAoaW4gcmV0dXJuKS5c
biIsIGNvZGVCbG9jaywgY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpKTsKICNlbmRpZgotICAgICAg
ICAgICAgY29kZUJsb2NrLT5yZW9wdGltaXplKGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsKKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+cmVvcHRpbWl6ZSgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBjb2RlQmxvY2stPm9wdGltaXplU29vbigpOwotCi0gICAgICAgIGNvZGVCbG9jay0+
b3B0aW1pemVTb29uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>