<?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>150217</bug_id>
          
          <creation_ts>2015-10-15 17:45:58 -0700</creation_ts>
          <short_desc>CopyBarrier must be avoided for slow TypedArrays</short_desc>
          <delta_ts>2015-10-16 15:54:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1133720</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-15 17:45:58 -0700</bug_when>
    <thetext>Otherwise, we might mask off meaningful bits from a misaligned array buffer view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133721</commentid>
    <comment_count>1</comment_count>
      <attachid>263233</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-15 17:48:55 -0700</bug_when>
    <thetext>Created attachment 263233
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133730</commentid>
    <comment_count>2</comment_count>
      <attachid>263237</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-15 19:00:11 -0700</bug_when>
    <thetext>Created attachment 263237
possibly the patch

Still need to get perf numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133734</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-15 19:52:24 -0700</bug_when>
    <thetext>Benchmark results:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r191150)
&quot;FixTypedArrays&quot; at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r191150)

Collected 6 samples per benchmark/VM, with 6 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               FixTypedArrays                                  
SunSpider:
   3d-cube                                            4.6755+-0.2353     ?      4.9148+-0.5279        ? might be 1.0512x slower
   3d-morph                                           5.2251+-0.3436     ?      5.3367+-0.2868        ? might be 1.0214x slower
   3d-raytrace                                        5.5302+-0.5715            5.2257+-0.0543          might be 1.0583x faster
   access-binary-trees                                2.1560+-0.1302     ?      2.1934+-0.1051        ? might be 1.0173x slower
   access-fannkuch                                    5.6290+-0.4100     ?      5.8903+-0.3274        ? might be 1.0464x slower
   access-nbody                                       2.5275+-0.0426     ?      2.5425+-0.0923        ?
   access-nsieve                                      3.0275+-0.0375     ?      3.0943+-0.0932        ? might be 1.0220x slower
   bitops-3bit-bits-in-byte                           1.1802+-0.0359     ?      1.2301+-0.1513        ? might be 1.0423x slower
   bitops-bits-in-byte                                3.2180+-0.0588            3.1814+-0.0523          might be 1.0115x faster
   bitops-bitwise-and                                 1.9767+-0.0181     ?      2.1115+-0.1652        ? might be 1.0682x slower
   bitops-nsieve-bits                                 3.0428+-0.1914            2.9195+-0.0230          might be 1.0422x faster
   controlflow-recursive                              2.3852+-0.1565            2.2863+-0.0896          might be 1.0432x faster
   crypto-aes                                         3.9926+-0.0887     ?      4.0430+-0.1019        ? might be 1.0126x slower
   crypto-md5                                         2.5622+-0.1803            2.5070+-0.0764          might be 1.0220x faster
   crypto-sha1                                        2.6265+-0.3373            2.4711+-0.2968          might be 1.0629x faster
   date-format-tofte                                  6.6436+-0.2660     ?      7.6729+-2.2058        ? might be 1.1549x slower
   date-format-xparb                                  4.5071+-0.1115     ?      4.6256+-0.1342        ? might be 1.0263x slower
   math-cordic                                        2.7818+-0.0271     ?      2.8073+-0.1170        ?
   math-partial-sums                                  4.8037+-0.1364     ?      4.8821+-0.2613        ? might be 1.0163x slower
   math-spectral-norm                                 2.0853+-0.3126            1.9560+-0.0645          might be 1.0661x faster
   regexp-dna                                         6.4709+-0.2139     ?      6.4905+-0.2507        ?
   string-base64                                      4.2061+-0.1009     ?      4.4519+-0.2666        ? might be 1.0585x slower
   string-fasta                                       5.9454+-0.1654     ?      5.9999+-0.3431        ?
   string-tagcloud                                    7.9501+-0.2019     ?      7.9545+-0.0691        ?
   string-unpack-code                                18.0295+-0.7721     ?     18.5337+-0.4147        ? might be 1.0280x slower
   string-validate-input                              4.4038+-0.0915     ?      4.4644+-0.1122        ? might be 1.0138x slower

   &lt;arithmetic&gt;                                       4.5224+-0.0684     ?      4.6072+-0.0653        ? might be 1.0187x slower

                                                        TipOfTree               FixTypedArrays                                  
LongSpider:
   3d-cube                                          807.1036+-14.0869    ?    825.0665+-50.9591       ? might be 1.0223x slower
   3d-morph                                        1499.8871+-14.4827        1492.9699+-8.6575        
   3d-raytrace                                      603.2103+-4.1717          601.5254+-5.6974        
   access-binary-trees                              792.3374+-7.2602          788.8332+-6.2210        
   access-fannkuch                                  297.4191+-9.6032          296.4521+-3.9305        
   access-nbody                                     511.7415+-3.0577     ?    512.5752+-3.6732        ?
   access-nsieve                                    379.9121+-13.6370         374.9701+-11.5504         might be 1.0132x faster
   bitops-3bit-bits-in-byte                          34.8275+-1.2653           33.7395+-0.4662          might be 1.0322x faster
   bitops-bits-in-byte                               75.0439+-1.4819           74.4906+-1.3788        
   bitops-nsieve-bits                               402.9231+-4.1815     ?    403.0334+-4.8600        ?
   controlflow-recursive                            431.5387+-10.0061    ?    437.9056+-7.3039        ? might be 1.0148x slower
   crypto-aes                                       559.1340+-21.1240         556.3987+-3.4591        
   crypto-md5                                       444.6400+-2.5304     ?    446.9867+-4.0705        ?
   crypto-sha1                                      661.9819+-2.8787          658.6925+-6.2881        
   date-format-tofte                                512.7638+-12.4225    ?    526.3571+-21.7182       ? might be 1.0265x slower
   date-format-xparb                                656.5649+-9.6052     ?    676.9935+-28.3754       ? might be 1.0311x slower
   hash-map                                         149.5555+-2.5221     ?    149.8626+-1.8073        ?
   math-cordic                                      480.2701+-2.9266          480.1611+-3.0649        
   math-partial-sums                                457.5940+-1.2293          455.8293+-0.6430        
   math-spectral-norm                               564.4707+-26.1051         553.1013+-6.6362          might be 1.0206x faster
   string-base64                                    367.7028+-14.7161    ?    375.3308+-10.9197       ? might be 1.0207x slower
   string-fasta                                     352.9664+-3.0575     ?    354.6510+-1.1583        ?
   string-tagcloud                                  174.5825+-1.5840          173.6661+-1.3829        

   &lt;geometric&gt;                                      388.1600+-0.6611     ?    388.5217+-1.0541        ? might be 1.0009x slower

                                                        TipOfTree               FixTypedArrays                                  
V8Spider:
   crypto                                            50.1512+-1.3285           49.5296+-2.0599          might be 1.0125x faster
   deltablue                                         76.8331+-4.6441           76.2441+-4.5515        
   earley-boyer                                      42.6030+-2.6555           41.4417+-1.1466          might be 1.0280x faster
   raytrace                                          29.8745+-1.9163           29.4311+-1.5741          might be 1.0151x faster
   regexp                                            62.7691+-2.3527           62.3043+-1.1201        
   richards                                          53.8949+-0.9630           53.0202+-0.7027          might be 1.0165x faster
   splay                                             37.6031+-1.3839           37.1698+-1.8386          might be 1.0117x faster

   &lt;geometric&gt;                                       48.3841+-0.8278           47.7206+-0.9101          might be 1.0139x faster

                                                        TipOfTree               FixTypedArrays                                  
Octane:
   encrypt                                           0.15567+-0.00374    ?     0.15789+-0.00514       ? might be 1.0143x slower
   decrypt                                           2.88251+-0.04043          2.88237+-0.03601       
   deltablue                                x2       0.13776+-0.00155    ?     0.14206+-0.01011       ? might be 1.0312x slower
   earley                                            0.28496+-0.00241    ?     0.28549+-0.00358       ?
   boyer                                             4.41317+-0.17591          4.33869+-0.06195         might be 1.0172x faster
   navier-stokes                            x2       4.85244+-0.02176          4.83762+-0.01474       
   raytrace                                 x2       0.85604+-0.00361    ?     0.85931+-0.00483       ?
   richards                                 x2       0.08714+-0.00028          0.08686+-0.00065       
   splay                                    x2       0.34587+-0.00392    ?     0.35032+-0.00387       ? might be 1.0129x slower
   regexp                                   x2      24.52530+-0.51657         24.38166+-0.66761       
   pdfjs                                    x2      37.67234+-0.50416    ^    36.86837+-0.18267       ^ definitely 1.0218x faster
   mandreel                                 x2      42.58950+-0.21413    ?    42.61987+-0.48653       ?
   gbemu                                    x2      32.00740+-0.32114    ?    32.88997+-2.55039       ? might be 1.0276x slower
   closure                                           0.57335+-0.00233    ?     0.57566+-0.00248       ?
   jquery                                            7.25789+-0.05985    ?     7.33945+-0.08677       ? might be 1.0112x slower
   box2d                                    x2       9.25104+-0.05717          9.23557+-0.06538       
   zlib                                     x2     384.83218+-12.18124   ?   394.52463+-8.55038       ? might be 1.0252x slower
   typescript                               x2     669.45247+-3.25393        668.29834+-14.33074      

   &lt;geometric&gt;                                       5.32835+-0.01033    ?     5.35214+-0.05011       ? might be 1.0045x slower

                                                        TipOfTree               FixTypedArrays                                  
Kraken:
   ai-astar                                          127.208+-1.931      ?     134.933+-15.354        ? might be 1.0607x slower
   audio-beat-detection                               48.265+-0.202             48.206+-0.339         
   audio-dft                                          95.513+-1.726      ?      96.343+-2.564         ?
   audio-fft                                          35.419+-0.582             34.954+-0.232           might be 1.0133x faster
   audio-oscillator                                   57.540+-1.038      ?      57.863+-1.351         ?
   imaging-darkroom                                   60.736+-2.086             60.545+-2.052         
   imaging-desaturate                                 48.031+-0.379      ?      49.193+-2.656         ? might be 1.0242x slower
   imaging-gaussian-blur                              87.103+-0.837      ?      87.196+-0.716         ?
   json-parse-financial                               38.287+-2.143      ?      39.499+-1.105         ? might be 1.0317x slower
   json-stringify-tinderbox                           22.814+-1.172             22.455+-0.577           might be 1.0160x faster
   stanford-crypto-aes                                42.204+-1.662             42.017+-1.134         
   stanford-crypto-ccm                                37.143+-1.362             36.720+-1.588           might be 1.0115x faster
   stanford-crypto-pbkdf2                             95.887+-1.203      ?      96.917+-2.984         ? might be 1.0107x slower
   stanford-crypto-sha256-iterative                   36.303+-0.303      ?      36.315+-0.936         ?

   &lt;arithmetic&gt;                                       59.461+-0.274      ?      60.225+-1.039         ? might be 1.0129x slower

                                                        TipOfTree               FixTypedArrays                                  
JSRegress:
   abc-forward-loop-equal                            31.0927+-1.9296           29.8762+-0.5329          might be 1.0407x faster
   abc-postfix-backward-loop                         29.9893+-1.0076           29.7627+-1.3935        
   abc-simple-backward-loop                          30.4796+-1.2833           29.4466+-0.6556          might be 1.0351x faster
   abc-simple-forward-loop                           29.7594+-0.7295     ?     30.4085+-2.2949        ? might be 1.0218x slower
   abc-skippy-loop                                   22.1582+-1.2899           21.9531+-0.7308        
   abs-boolean                                        2.4873+-0.1003            2.4866+-0.0982        
   adapt-to-double-divide                            17.3431+-1.2898           16.8473+-0.7329          might be 1.0294x faster
   aliased-arguments-getbyval                         1.3196+-0.1024            1.2140+-0.0679          might be 1.0870x faster
   allocate-big-object                                2.4339+-0.2178            2.4143+-0.2139        
   arguments-named-and-reflective                    10.7690+-0.6431           10.6882+-0.4090        
   arguments-out-of-bounds                            9.4322+-0.2263     ?      9.5230+-0.3845        ?
   arguments-strict-mode                              9.6622+-0.4029     ?      9.7098+-0.4942        ?
   arguments                                          8.3950+-0.1056            8.2901+-0.2182          might be 1.0127x faster
   arity-mismatch-inlining                            0.8798+-0.0505            0.8552+-0.0168          might be 1.0287x faster
   array-access-polymorphic-structure                 7.0806+-0.4019     ?      7.3749+-0.4838        ? might be 1.0416x slower
   array-nonarray-polymorhpic-access                 24.3443+-0.4147     ?     24.6886+-0.2575        ? might be 1.0141x slower
   array-prototype-every                             77.8590+-2.4816           75.5841+-1.5885          might be 1.0301x faster
   array-prototype-forEach                           78.9625+-7.3875           75.3428+-2.4010          might be 1.0480x faster
   array-prototype-map                               82.4921+-1.4967     ?     83.0734+-2.2950        ?
   array-prototype-reduce                            73.1525+-1.6652           71.7512+-1.0850          might be 1.0195x faster
   array-prototype-reduceRight                       71.9115+-1.7057     ?     72.0090+-1.2505        ?
   array-prototype-some                              77.0450+-3.0661           76.3105+-2.3869        
   array-splice-contiguous                           23.7245+-0.7259     ?     23.8662+-0.6740        ?
   array-with-double-add                              3.7537+-0.1437            3.6162+-0.0692          might be 1.0380x faster
   array-with-double-increment                        3.1456+-0.0555     ?      3.2147+-0.1382        ? might be 1.0220x slower
   array-with-double-mul-add                          4.4718+-0.0814     ?      4.5636+-0.3012        ? might be 1.0205x slower
   array-with-double-sum                              3.2773+-0.2085            3.2044+-0.0626          might be 1.0227x faster
   array-with-int32-add-sub                           6.4082+-0.3506            6.2344+-0.0758          might be 1.0279x faster
   array-with-int32-or-double-sum                     3.2937+-0.1209            3.2572+-0.0167          might be 1.0112x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.2486+-0.3291     ?     26.5835+-1.8787        ? might be 1.0529x slower
   ArrayBuffer-DataView-alloc-long-lived             12.2546+-0.9133           11.7771+-0.3538          might be 1.0405x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6260+-0.1436            3.5179+-0.0807          might be 1.0307x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     26.3239+-1.4210     ?     26.6003+-1.1463        ? might be 1.0105x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.6241+-0.5554           19.4623+-0.4262        
   ArrayBuffer-Int8Array-alloc-long-lived            11.5064+-0.5558     ?     11.5287+-0.9831        ?
   ArrayBuffer-Int8Array-alloc                        9.9383+-0.9913            9.7600+-0.5465          might be 1.0183x faster
   arrowfunction-call                                11.0581+-0.3122           10.7692+-0.2540          might be 1.0268x faster
   asmjs_bool_bug                                     8.0190+-0.1103     ?      8.0400+-0.1240        ?
   assign-custom-setter-polymorphic                   2.4292+-0.0340            2.4204+-0.0260        
   assign-custom-setter                               3.4403+-0.2009     ?      3.6208+-0.6266        ? might be 1.0525x slower
   basic-set                                          7.5606+-0.5460     ?      7.5678+-0.5027        ?
   big-int-mul                                        3.5603+-0.1883            3.4512+-0.0696          might be 1.0316x faster
   boolean-test                                       3.1439+-0.0543            3.0585+-0.0589          might be 1.0279x faster
   branch-fold                                        3.6268+-0.0644     ?      3.6636+-0.1897        ? might be 1.0102x slower
   branch-on-string-as-boolean                       18.1233+-1.3416           16.8998+-0.3129          might be 1.0724x faster
   by-val-generic                                     2.4035+-0.0813     ?      2.5402+-0.2906        ? might be 1.0569x slower
   call-spread-apply                                 29.0624+-2.5099           27.3295+-0.6675          might be 1.0634x faster
   call-spread-call                                  22.5938+-1.1307     ?     23.1843+-0.9583        ? might be 1.0261x slower
   captured-assignments                               0.4434+-0.0186     ?      0.4492+-0.0253        ? might be 1.0131x slower
   cast-int-to-double                                 5.1336+-0.1009     ?      5.2716+-0.2613        ? might be 1.0269x slower
   cell-argument                                      5.8134+-0.2399     ?      5.9707+-0.1681        ? might be 1.0271x slower
   cfg-simplify                                       2.8882+-0.0797     ?      2.9320+-0.1201        ? might be 1.0151x slower
   chain-getter-access                                8.3837+-0.2364     ?      8.5754+-0.7095        ? might be 1.0229x slower
   cmpeq-obj-to-obj-other                            13.3990+-0.5344           12.3402+-1.3015          might be 1.0858x faster
   constant-test                                      4.7842+-0.0784     ?      4.9994+-0.4603        ? might be 1.0450x slower
   create-lots-of-functions                           9.8050+-0.5512     ?     10.2470+-0.7445        ? might be 1.0451x slower
   cse-new-array-buffer                               2.4255+-0.2998            2.2566+-0.0800          might be 1.0748x faster
   cse-new-array                                      2.4021+-0.0843            2.3833+-0.0634        
   custom-setter-getter-as-put-get-by-id              0.5149+-0.0138     ?      0.5311+-0.0482        ? might be 1.0316x slower
   DataView-custom-properties                        31.7720+-0.9919           30.6098+-0.4949          might be 1.0380x faster
   delay-tear-off-arguments-strictmode               13.8116+-1.3775           12.8873+-0.4010          might be 1.0717x faster
   deltablue-varargs                                167.1303+-8.8122          164.4567+-3.5430          might be 1.0163x faster
   destructuring-arguments                          161.9123+-2.6871     ?    162.4801+-5.5176        ?
   destructuring-parameters-overridden-by-function   
                                                      0.4661+-0.0096     ?      0.5470+-0.1659        ? might be 1.1736x slower
   destructuring-swap                                 4.7025+-0.0456     ?      4.7719+-0.0581        ? might be 1.0148x slower
   direct-arguments-getbyval                          1.2814+-0.0778            1.1964+-0.0808          might be 1.0710x faster
   div-boolean-double                                 5.3061+-0.1289     ?      5.3101+-0.1646        ?
   div-boolean                                        8.1257+-0.0453     ?      8.2454+-0.2545        ? might be 1.0147x slower
   double-get-by-val-out-of-bounds                    4.4421+-0.2499            4.3992+-0.1226        
   double-pollution-getbyval                          8.4325+-0.2384     ?      8.5347+-0.2260        ? might be 1.0121x slower
   double-pollution-putbyoffset                       3.6669+-0.0499     ?      3.7161+-0.1595        ? might be 1.0134x slower
   double-real-use                                   25.4960+-2.6154           25.4238+-1.9654        
   double-to-int32-typed-array-no-inline              2.2325+-0.0952            2.2005+-0.0387          might be 1.0146x faster
   double-to-int32-typed-array                        2.1437+-0.1479            2.1234+-0.0729        
   double-to-uint32-typed-array-no-inline             2.3052+-0.0416     ?      2.4191+-0.2895        ? might be 1.0494x slower
   double-to-uint32-typed-array                       2.1281+-0.0862            2.0841+-0.0590          might be 1.0211x faster
   elidable-new-object-dag                           33.6698+-0.5494     ?     34.3348+-0.7559        ? might be 1.0197x slower
   elidable-new-object-roflcopter                    34.0736+-2.7862           33.4689+-2.0238          might be 1.0181x faster
   elidable-new-object-then-call                     31.4364+-0.5026     ?     32.5750+-2.1314        ? might be 1.0362x slower
   elidable-new-object-tree                          38.5257+-2.2479           37.3382+-0.6333          might be 1.0318x faster
   empty-string-plus-int                              4.8053+-0.1762            4.7284+-0.1769          might be 1.0163x faster
   emscripten-cube2hash                              28.6513+-1.5792           27.1165+-2.1451          might be 1.0566x faster
   exit-length-on-plain-object                       16.5004+-1.6742           15.6743+-0.8383          might be 1.0527x faster
   external-arguments-getbyval                        1.3432+-0.1115     ?      1.3445+-0.1715        ?
   external-arguments-putbyval                        2.1862+-0.0586     ?      2.2974+-0.1205        ? might be 1.0509x slower
   fixed-typed-array-storage-var-index                1.2632+-0.0355     ?      1.2925+-0.0743        ? might be 1.0232x slower
   fixed-typed-array-storage                          0.9705+-0.0571            0.9385+-0.0430          might be 1.0340x faster
   Float32Array-matrix-mult                           4.2920+-0.1829     ?      4.3029+-0.0718        ?
   Float32Array-to-Float64Array-set                  55.7461+-1.4968     ?     56.0960+-1.2790        ?
   Float64Array-alloc-long-lived                     63.3628+-3.2052           62.6022+-5.3707          might be 1.0121x faster
   Float64Array-to-Int16Array-set                    68.0363+-3.0724           66.1285+-1.2798          might be 1.0289x faster
   fold-double-to-int                                12.5230+-0.5195           12.4101+-0.0307        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.8395+-0.8643           10.4779+-1.6876          might be 1.0345x faster
   fold-get-by-id-to-multi-get-by-offset              9.6016+-0.4957     ?     10.0576+-1.5550        ? might be 1.0475x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.3087+-0.7359     ?      9.5105+-3.2947        ? might be 1.0217x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.6207+-1.9752            8.2169+-1.4230          might be 1.0491x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.3075+-1.1972     ?      9.9071+-0.9441        ? might be 1.0644x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.4509+-1.0130           10.0514+-0.6803          might be 1.0398x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.5518+-0.5165     ?     10.0827+-0.8402        ? might be 1.0556x slower
   fold-put-by-id-to-multi-put-by-offset             11.3182+-1.4073           10.3466+-0.6027          might be 1.0939x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.7965+-0.3594           10.3021+-1.1569          might be 1.0480x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.3555+-1.1772     ?     11.4647+-2.2769        ?
   fold-put-structure                                 7.8201+-1.2063     ?      8.3320+-0.2853        ? might be 1.0655x slower
   for-of-iterate-array-entries                      10.9705+-0.1045           10.8724+-0.2832        
   for-of-iterate-array-keys                          3.4368+-0.1113     ?      3.4732+-0.0802        ? might be 1.0106x slower
   for-of-iterate-array-values                        3.3634+-0.0830     ?      3.4400+-0.1054        ? might be 1.0228x slower
   fround                                            17.6005+-0.2331     ?     18.3544+-0.6875        ? might be 1.0428x slower
   ftl-library-inlining-dataview                     58.4534+-0.8219           57.5145+-1.0322          might be 1.0163x faster
   ftl-library-inlining                              97.2646+-1.5214     ?     97.3380+-2.2384        ?
   function-call                                     10.9799+-0.5515           10.9279+-0.2273        
   function-dot-apply                                 2.1121+-0.2604            2.0664+-0.1306          might be 1.0221x faster
   function-test                                      2.7017+-0.0390     ?      2.7150+-0.0545        ?
   function-with-eval                                84.8234+-2.3168           83.3398+-2.0072          might be 1.0178x faster
   gcse-poly-get-less-obvious                        22.0080+-0.8781           21.8831+-1.0476        
   gcse-poly-get                                     23.4668+-2.5892           23.2593+-2.3710        
   gcse                                               3.4080+-0.0960     ?      3.4190+-0.0849        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.8289+-0.5400            2.6041+-0.0621          might be 1.0863x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.7952+-0.2644     ?      4.8009+-0.1696        ?
   get-by-id-chain-from-try-block                     2.4097+-0.0515            2.4037+-0.0400        
   get-by-id-check-structure-elimination              4.0038+-0.1874            3.8947+-0.0579          might be 1.0280x faster
   get-by-id-proto-or-self                           16.8782+-1.2671     ?     17.3020+-2.0487        ? might be 1.0251x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.1760+-0.6887            2.8711+-0.0090          might be 1.1062x faster
   get-by-id-self-or-proto                           16.3996+-1.0600     ?     16.9084+-1.7665        ? might be 1.0310x slower
   get-by-val-out-of-bounds                           4.2660+-0.1604     ?      4.3388+-0.1782        ? might be 1.0171x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7282+-0.0632     ?      2.7510+-0.0676        ?
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.2389+-0.2556            6.1148+-0.1447          might be 1.0203x faster
   get-by-val-with-string-chain-from-try-block   
                                                      2.4500+-0.0781     ?      2.5061+-0.1189        ? might be 1.0229x slower
   get-by-val-with-string-check-structure-elimination   
                                                      5.8942+-0.5540            5.7714+-0.3206          might be 1.0213x faster
   get-by-val-with-string-proto-or-self              17.3044+-1.4453           17.0768+-1.2327          might be 1.0133x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.2170+-0.2174            3.0653+-0.0382          might be 1.0495x faster
   get-by-val-with-string-self-or-proto              16.0715+-0.9508     ?     17.9040+-1.3271        ? might be 1.1140x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      2.9622+-0.0775     ?      3.0072+-0.1894        ? might be 1.0152x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3483+-0.0782     ?     12.5448+-0.3215        ? might be 1.0159x slower
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.4094+-0.0212            2.4017+-0.0236        
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.5970+-0.1611           11.3781+-0.1142          might be 1.0192x faster
   get-by-val-with-symbol-proto-or-self              17.8220+-1.9411     ?     19.6051+-5.9143        ? might be 1.1001x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.9483+-0.4281            3.7843+-0.1692          might be 1.0433x faster
   get-by-val-with-symbol-self-or-proto              16.8226+-0.9041     ?     16.8480+-0.9508        ?
   get_callee_monomorphic                             2.3410+-0.0956     ?      2.3663+-0.1303        ? might be 1.0108x slower
   get_callee_polymorphic                             3.3159+-0.0954     ?      3.3712+-0.1915        ? might be 1.0167x slower
   getter-no-activation                               4.6759+-0.0375     ?      4.7959+-0.2713        ? might be 1.0257x slower
   getter-prototype                                   8.1947+-0.4088            8.0652+-0.3090          might be 1.0161x faster
   getter-richards-try-catch                        992.7869+-13.4064    ?    994.5620+-30.1986       ?
   getter-richards                                  116.1336+-5.8495     ?    116.1407+-10.6008       ?
   getter                                             6.2823+-0.6527            6.0592+-0.8015          might be 1.0368x faster
   global-object-access-with-mutating-structure   
                                                      5.7669+-0.2197            5.5824+-0.1345          might be 1.0330x faster
   global-var-const-infer-fire-from-opt               0.8110+-0.2501            0.7299+-0.0712          might be 1.1110x faster
   global-var-const-infer                             0.6270+-0.0043     ?      0.7387+-0.2649        ? might be 1.1781x slower
   hard-overflow-check-equal                         27.8706+-1.4336           26.9848+-0.8886          might be 1.0328x faster
   hard-overflow-check                               28.6785+-5.4685           26.7874+-1.1787          might be 1.0706x faster
   HashMap-put-get-iterate-keys                      25.3370+-2.0624     ?     25.3493+-1.9561        ?
   HashMap-put-get-iterate                           28.1456+-1.6107           26.9978+-0.8372          might be 1.0425x faster
   HashMap-string-put-get-iterate                    23.5836+-1.2954     ?     23.6125+-0.8809        ?
   hoist-make-rope                                    9.4350+-0.9535            8.2667+-0.7252          might be 1.1413x faster
   hoist-poly-check-structure-effectful-loop   
                                                      3.7502+-0.1988            3.6750+-0.1192          might be 1.0205x faster
   hoist-poly-check-structure                         3.0741+-0.0639     ?      3.0768+-0.0861        ?
   imul-double-only                                   7.9147+-0.3148            7.6329+-0.4657          might be 1.0369x faster
   imul-int-only                                      8.3127+-1.1536     ?      8.7782+-0.8526        ? might be 1.0560x slower
   imul-mixed                                         6.6013+-0.4838     ?      7.2727+-0.5756        ? might be 1.1017x slower
   in-four-cases                                     18.5927+-0.1814           18.5143+-0.5769        
   in-one-case-false                                 10.2596+-0.3963     ?     10.3009+-0.5120        ?
   in-one-case-true                                  10.2393+-0.3506     ?     11.2048+-1.2044        ? might be 1.0943x slower
   in-two-cases                                      10.9005+-0.4330           10.3783+-0.1683          might be 1.0503x faster
   indexed-properties-in-objects                      2.8714+-0.1031            2.8083+-0.0547          might be 1.0225x faster
   infer-closure-const-then-mov-no-inline             3.7791+-0.3221            3.5868+-0.0664          might be 1.0536x faster
   infer-closure-const-then-mov                      16.5603+-0.8124     ?     16.6721+-0.8106        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.1938+-0.4561     ?     11.4203+-0.5590        ? might be 1.0202x slower
   infer-closure-const-then-put-to-scope             22.9852+-0.3947     ?     23.8832+-2.2957        ? might be 1.0391x slower
   infer-closure-const-then-reenter-no-inline   
                                                     48.9607+-2.1837           48.6713+-0.9288        
   infer-closure-const-then-reenter                  23.0061+-0.6219     ?     23.3152+-0.9227        ? might be 1.0134x slower
   infer-constant-global-property                     3.4694+-0.1063     ?      3.5272+-0.3112        ? might be 1.0167x slower
   infer-constant-property                            2.6419+-0.0466     ?      2.6423+-0.1264        ?
   infer-one-time-closure-ten-vars                    7.8046+-0.2471     ?      8.1130+-0.6076        ? might be 1.0395x slower
   infer-one-time-closure-two-vars                    7.5980+-0.4516            7.2353+-0.1869          might be 1.0501x faster
   infer-one-time-closure                             7.5259+-0.8189     ?      7.6914+-0.5581        ? might be 1.0220x slower
   infer-one-time-deep-closure                       10.9885+-0.7923           10.8795+-0.4877          might be 1.0100x faster
   inline-arguments-access                            3.5878+-0.0832            3.5158+-0.0434          might be 1.0205x faster
   inline-arguments-aliased-access                    3.7395+-0.2848            3.6331+-0.0945          might be 1.0293x faster
   inline-arguments-local-escape                      3.6153+-0.1084     ?      3.7188+-0.1852        ? might be 1.0286x slower
   inline-get-scoped-var                              4.5223+-0.1339     ?      4.6993+-0.2849        ? might be 1.0391x slower
   inlined-put-by-id-transition                       9.4242+-0.3242            9.2286+-0.3719          might be 1.0212x faster
   inlined-put-by-val-with-string-transition   
                                                     43.5955+-2.8156     ^     39.9722+-0.7901        ^ definitely 1.0906x faster
   inlined-put-by-val-with-symbol-transition   
                                                     42.6478+-1.0417           41.5377+-3.3960          might be 1.0267x faster
   int-or-other-abs-then-get-by-val                   4.5490+-0.1577            4.4775+-0.1037          might be 1.0160x faster
   int-or-other-abs-zero-then-get-by-val             16.6730+-1.6883           15.9936+-0.7787          might be 1.0425x faster
   int-or-other-add-then-get-by-val                   4.2308+-0.1003     ?      4.2711+-0.0891        ?
   int-or-other-add                                   5.0546+-0.2264            4.9940+-0.2037          might be 1.0121x faster
   int-or-other-div-then-get-by-val                   3.9037+-0.2919            3.8580+-0.1952          might be 1.0118x faster
   int-or-other-max-then-get-by-val                   4.0508+-0.3075            3.8774+-0.0959          might be 1.0447x faster
   int-or-other-min-then-get-by-val                   3.8597+-0.1128     ?      3.9283+-0.1265        ? might be 1.0178x slower
   int-or-other-mod-then-get-by-val                   3.6749+-0.0462            3.6688+-0.0846        
   int-or-other-mul-then-get-by-val                   3.6091+-0.0824     ?      3.6178+-0.0942        ?
   int-or-other-neg-then-get-by-val                   4.1997+-0.1435            4.1973+-0.0362        
   int-or-other-neg-zero-then-get-by-val             15.8937+-0.4966           15.6053+-0.3247          might be 1.0185x faster
   int-or-other-sub-then-get-by-val                   4.1460+-0.0725     ?      4.1923+-0.1202        ? might be 1.0112x slower
   int-or-other-sub                                   3.6641+-0.4615            3.4844+-0.1123          might be 1.0516x faster
   int-overflow-local                                 4.1543+-0.0838     ?      4.1646+-0.0853        ?
   Int16Array-alloc-long-lived                       44.3691+-1.9770     ?     45.2637+-2.7784        ? might be 1.0202x slower
   Int16Array-bubble-sort-with-byteLength            19.2190+-0.7877     !     21.9874+-1.0321        ! definitely 1.1440x slower
   Int16Array-bubble-sort                            17.5399+-0.3147     !     22.6990+-1.2413        ! definitely 1.2941x slower
   Int16Array-load-int-mul                            1.5055+-0.0895            1.5015+-0.1256        
   Int16Array-to-Int32Array-set                      53.9383+-1.2035     ?     54.8022+-3.3360        ? might be 1.0160x slower
   Int32Array-alloc-large                            12.3273+-0.4767     ?     13.2561+-0.8981        ? might be 1.0753x slower
   Int32Array-alloc-long-lived                       50.1804+-1.4181     ?     50.5647+-1.3398        ?
   Int32Array-alloc                                   3.1170+-0.3787            3.0968+-0.2491        
   Int32Array-Int8Array-view-alloc                    6.0201+-0.1471     ?      6.0294+-0.1489        ?
   int52-spill                                        4.5867+-0.1860     ?      4.7198+-0.3061        ? might be 1.0290x slower
   Int8Array-alloc-long-lived                        39.7928+-1.2493           39.6075+-1.0681        
   Int8Array-load-with-byteLength                     3.5017+-0.1700            3.4180+-0.0576          might be 1.0245x faster
   Int8Array-load                                     3.4460+-0.0644            3.3787+-0.0478          might be 1.0199x faster
   integer-divide                                    10.3551+-0.0867     ?     10.5255+-0.2332        ? might be 1.0165x slower
   integer-modulo                                     1.6243+-0.0432     ?      1.6278+-0.0446        ?
   is-boolean-fold-tricky                             3.9016+-0.2756            3.7879+-0.0816          might be 1.0300x faster
   is-boolean-fold                                    2.8711+-0.4946            2.6576+-0.0593          might be 1.0804x faster
   is-function-fold-tricky-internal-function   
                                                      9.8294+-0.6242            9.5801+-0.4122          might be 1.0260x faster
   is-function-fold-tricky                            4.0274+-0.0938     ?      4.1469+-0.1147        ? might be 1.0297x slower
   is-function-fold                                   2.7547+-0.1353            2.6627+-0.0347          might be 1.0346x faster
   is-number-fold-tricky                              3.9329+-0.0798            3.9097+-0.0630        
   is-number-fold                                     2.7143+-0.0734     ?      2.8186+-0.3826        ? might be 1.0384x slower
   is-object-or-null-fold-functions                   2.7126+-0.0583            2.6912+-0.0366        
   is-object-or-null-fold-less-tricky                 4.1460+-0.2714     ?      4.2613+-0.3908        ? might be 1.0278x slower
   is-object-or-null-fold-tricky                      4.8401+-0.1279            4.8169+-0.1193        
   is-object-or-null-fold                             2.7273+-0.0925            2.7024+-0.0413        
   is-object-or-null-trickier-function                4.0023+-0.0763     ?      4.0451+-0.0488        ? might be 1.0107x slower
   is-object-or-null-trickier-internal-function   
                                                      9.7083+-0.0716     !      9.9345+-0.0495        ! definitely 1.0233x slower
   is-object-or-null-tricky-function                  4.0051+-0.0829     ?      4.0870+-0.1287        ? might be 1.0204x slower
   is-object-or-null-tricky-internal-function   
                                                      7.4683+-0.1166     ?      7.5951+-0.5935        ? might be 1.0170x slower
   is-string-fold-tricky                              3.9449+-0.0405     ?      4.0000+-0.1293        ? might be 1.0140x slower
   is-string-fold                                     2.7402+-0.0527     ?      2.7572+-0.1848        ?
   is-undefined-fold-tricky                           3.3676+-0.0999     ?      3.4154+-0.1357        ? might be 1.0142x slower
   is-undefined-fold                                  2.6436+-0.0340     ?      2.8532+-0.4918        ? might be 1.0793x slower
   JSONP-negative-0                                   0.2601+-0.0067     ?      0.2671+-0.0153        ? might be 1.0269x slower
   large-int-captured                                 4.0829+-0.1604     ?      4.1488+-0.1531        ? might be 1.0161x slower
   large-int-neg                                     13.9969+-0.4780     ?     14.3792+-0.4035        ? might be 1.0273x slower
   large-int                                         12.9623+-0.4696           12.7332+-0.1913          might be 1.0180x faster
   load-varargs-elimination                          21.1470+-0.9345     ?     21.9924+-2.1536        ? might be 1.0400x slower
   logical-not-weird-types                            3.2255+-0.3228            3.0785+-0.0607          might be 1.0478x faster
   logical-not                                        4.4348+-0.2300            4.3525+-0.0961          might be 1.0189x faster
   lots-of-fields                                     9.6707+-0.5069            9.5348+-0.4361          might be 1.0142x faster
   make-indexed-storage                               2.8672+-0.1111            2.8136+-0.1091          might be 1.0191x faster
   make-rope-cse                                      3.7703+-0.5333            3.5830+-0.2371          might be 1.0523x faster
   marsaglia-larger-ints                             32.7215+-0.8256           31.7130+-0.6451          might be 1.0318x faster
   marsaglia-osr-entry                               22.0717+-1.0383           21.3654+-0.4778          might be 1.0331x faster
   math-with-out-of-bounds-array-values              22.5090+-0.7910           22.3395+-1.9997        
   max-boolean                                        2.6957+-0.0857            2.5842+-0.0480          might be 1.0432x faster
   method-on-number                                  15.6602+-0.3764     ?     15.6711+-0.2982        ?
   min-boolean                                        2.5663+-0.0180     ?      2.6998+-0.1228        ? might be 1.0520x slower
   minus-boolean-double                               3.0898+-0.0515            3.0670+-0.0349        
   minus-boolean                                      2.3418+-0.0500     ?      2.3499+-0.0270        ?
   misc-strict-eq                                    29.4897+-1.8717           29.4255+-1.1191        
   mod-boolean-double                                11.0142+-0.1260     ?     11.0843+-0.3174        ?
   mod-boolean                                        8.2898+-0.1463     ?      8.3278+-0.1250        ?
   mul-boolean-double                                 3.6007+-0.0193     ?      3.7164+-0.2623        ? might be 1.0321x slower
   mul-boolean                                        2.8538+-0.1283            2.8204+-0.0515          might be 1.0118x faster
   neg-boolean                                        3.1006+-0.0397     ?      3.1519+-0.1557        ? might be 1.0165x slower
   negative-zero-divide                               0.3603+-0.0271            0.3539+-0.0130          might be 1.0181x faster
   negative-zero-modulo                               0.3595+-0.0472            0.3451+-0.0255          might be 1.0419x faster
   negative-zero-negate                               0.3956+-0.1745            0.3726+-0.1178          might be 1.0617x faster
   nested-function-parsing                           45.4869+-1.1094           45.3610+-0.6013        
   new-array-buffer-dead                             86.5184+-1.0162     ?     87.0897+-1.5186        ?
   new-array-buffer-push                              6.1712+-0.4178     ?      6.7629+-1.3450        ? might be 1.0959x slower
   new-array-dead                                    14.6422+-0.6460     ?     15.0940+-1.2980        ? might be 1.0309x slower
   new-array-push                                     4.1853+-0.5005     ?      4.4191+-0.3164        ? might be 1.0559x slower
   no-inline-constructor                             30.3115+-0.1857     ?     30.8079+-0.7586        ? might be 1.0164x slower
   number-test                                        3.0863+-0.1049            3.0660+-0.0517        
   object-closure-call                                4.9685+-0.3475            4.9170+-0.1655          might be 1.0105x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.1582+-0.2319     ?      4.9455+-1.6857        ? might be 1.1893x slower
   object-test                                        2.7819+-0.1201            2.7814+-0.1848        
   obvious-sink-pathology-taken                      97.3273+-2.6316           96.2664+-0.5799          might be 1.0110x faster
   obvious-sink-pathology                            29.8297+-1.0041           29.2858+-0.2103          might be 1.0186x faster
   obviously-elidable-new-object                     29.5202+-1.3468           28.5475+-0.7236          might be 1.0341x faster
   plus-boolean-arith                                 2.3905+-0.0429     ?      2.4235+-0.0678        ? might be 1.0138x slower
   plus-boolean-double                                3.1105+-0.0875            3.1048+-0.0546        
   plus-boolean                                       2.5422+-0.0533     ?      2.5684+-0.0326        ? might be 1.0103x slower
   poly-chain-access-different-prototypes-simple   
                                                      2.5789+-0.0633            2.5733+-0.0480        
   poly-chain-access-different-prototypes             2.5759+-0.1077            2.5445+-0.0254          might be 1.0124x faster
   poly-chain-access-simpler                          2.6742+-0.1467            2.5953+-0.0620          might be 1.0304x faster
   poly-chain-access                                  2.5953+-0.0945            2.5551+-0.0609          might be 1.0158x faster
   poly-stricteq                                     53.3066+-0.8642     ?     54.0068+-0.9026        ? might be 1.0131x slower
   polymorphic-array-call                             1.3609+-0.2843            1.3099+-0.0674          might be 1.0390x faster
   polymorphic-get-by-id                              3.0155+-0.1405     ?      3.0264+-0.3663        ?
   polymorphic-put-by-id                             28.3276+-1.1037           27.8229+-2.0446          might be 1.0181x faster
   polymorphic-put-by-val-with-string                28.6014+-1.5058     ?     28.9659+-1.2040        ? might be 1.0127x slower
   polymorphic-put-by-val-with-symbol                28.9093+-1.7676     ?     30.0766+-1.4747        ? might be 1.0404x slower
   polymorphic-structure                             12.3825+-0.2076     ?     12.4467+-0.2354        ?
   polyvariant-monomorphic-get-by-id                  6.5904+-1.3639            6.3175+-1.0490          might be 1.0432x faster
   proto-getter-access                                8.3752+-0.1309     ?      8.4305+-0.4739        ?
   prototype-access-with-mutating-prototype           5.5090+-0.2489            5.4708+-0.2002        
   put-by-id-replace-and-transition                   7.7155+-0.6916     ?      7.9016+-0.1337        ? might be 1.0241x slower
   put-by-id-slightly-polymorphic                     2.7266+-0.1373     ?      2.7805+-0.1213        ? might be 1.0198x slower
   put-by-id                                          9.8710+-0.6053     ?     10.3940+-0.6286        ? might be 1.0530x slower
   put-by-val-direct                                  0.4257+-0.1020            0.3604+-0.0271          might be 1.1811x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.2903+-0.2986     ?      5.5057+-0.2220        ? might be 1.0407x slower
   put-by-val-machine-int                             2.5803+-0.2059     ?      2.6082+-0.0445        ? might be 1.0108x slower
   put-by-val-with-string-replace-and-transition   
                                                     10.0514+-0.2223     ?     10.1804+-0.2622        ? might be 1.0128x slower
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9986+-0.0760     ?      3.0892+-0.2253        ? might be 1.0302x slower
   put-by-val-with-string                            10.7861+-0.8985           10.1041+-0.3579          might be 1.0675x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     11.8815+-0.8467     ?     12.2748+-0.9716        ? might be 1.0331x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.1875+-0.1314     ?      3.2053+-0.1127        ?
   put-by-val-with-symbol                            10.6102+-0.5622     ?     11.3527+-1.6864        ? might be 1.0700x slower
   rare-osr-exit-on-local                            13.9960+-0.5574           13.7491+-0.1790          might be 1.0180x faster
   raytrace-with-empty-try-catch                      5.1869+-0.0991     ?      5.2808+-0.2137        ? might be 1.0181x slower
   raytrace-with-try-catch                           10.6875+-1.9143            9.8283+-0.1595          might be 1.0874x faster
   register-pressure-from-osr                        16.6332+-0.4665     ?     16.7360+-0.9802        ?
   repeat-multi-get-by-offset                        21.8057+-0.3584     ?     21.8926+-0.3818        ?
   richards-empty-try-catch                          74.3780+-5.3041           71.9070+-0.8755          might be 1.0344x faster
   richards-try-catch                               239.3179+-3.5609          239.0817+-2.6214        
   setter-prototype                                   7.6549+-0.1719     ?      7.8158+-0.2220        ? might be 1.0210x slower
   setter                                             5.7700+-0.6307     ?      5.9686+-0.5573        ? might be 1.0344x slower
   simple-activation-demo                            25.3677+-2.4201           23.9065+-0.4862          might be 1.0611x faster
   simple-getter-access                              10.7190+-0.1445     ?     10.8053+-0.3692        ?
   simple-poly-call-nested                            8.9128+-0.1961     ^      8.1351+-0.2538        ^ definitely 1.0956x faster
   simple-poly-call                                   1.3015+-0.0377            1.2719+-0.0136          might be 1.0233x faster
   sin-boolean                                       20.3957+-2.3641     ?     20.4177+-2.0080        ?
   singleton-scope                                   64.6046+-0.8147     ?     65.3915+-3.9945        ? might be 1.0122x slower
   sink-function                                     10.0085+-0.5826            9.8361+-0.5310          might be 1.0175x faster
   sink-huge-activation                              15.9982+-0.7873     ?     16.0951+-0.9178        ?
   sinkable-new-object-dag                           52.5722+-1.6208     ?     53.9578+-1.3311        ? might be 1.0264x slower
   sinkable-new-object-taken                         42.0554+-2.8651           41.8710+-1.8188        
   sinkable-new-object                               30.3323+-0.9850           29.9370+-1.0771          might be 1.0132x faster
   slow-array-profile-convergence                     2.6786+-0.3899            2.5658+-0.0763          might be 1.0440x faster
   slow-convergence                                   2.5324+-0.3700            2.4353+-0.0850          might be 1.0399x faster
   slow-ternaries                                    17.9741+-2.0193     ?     18.2394+-0.6936        ? might be 1.0148x slower
   sorting-benchmark                                 17.9370+-1.9839           17.3289+-0.8577          might be 1.0351x faster
   sparse-conditional                                 1.2079+-0.0887            1.1474+-0.0300          might be 1.0527x faster
   splice-to-remove                                  11.9471+-0.1626     ?     12.2808+-0.2354        ? might be 1.0279x slower
   string-char-code-at                               14.0491+-1.8032           13.3432+-0.1386          might be 1.0529x faster
   string-concat-object                               2.0555+-0.0741     !      2.2218+-0.0765        ! definitely 1.0809x slower
   string-concat-pair-object                          2.1524+-0.0665     ?      2.1763+-0.3326        ? might be 1.0111x slower
   string-concat-pair-simple                          9.2703+-0.8202     ?      9.8757+-0.8698        ? might be 1.0653x slower
   string-concat-simple                               9.2830+-0.4726     ?      9.3847+-0.5806        ? might be 1.0110x slower
   string-cons-repeat                                 6.3584+-0.2959     ?      6.3909+-0.1796        ?
   string-cons-tower                                  6.7253+-0.2840     ?      6.7628+-0.4403        ?
   string-equality                                   18.2227+-0.4993     ?     18.2762+-0.3492        ?
   string-get-by-val-big-char                         6.6605+-0.3269            6.5715+-0.2941          might be 1.0136x faster
   string-get-by-val-out-of-bounds-insane             3.1292+-0.2463            3.1209+-0.0788        
   string-get-by-val-out-of-bounds                    3.9599+-0.0544     ?      3.9658+-0.1018        ?
   string-get-by-val                                  2.9615+-0.3173            2.9000+-0.1865          might be 1.0212x faster
   string-hash                                        1.8637+-0.0582     ?      2.0415+-0.4906        ? might be 1.0954x slower
   string-long-ident-equality                        14.9573+-0.2425     ?     17.0123+-4.3041        ? might be 1.1374x slower
   string-out-of-bounds                              10.2200+-0.4328     ?     10.2749+-0.3256        ?
   string-repeat-arith                               27.8573+-1.7793           26.1894+-0.6476          might be 1.0637x faster
   string-sub                                        53.8776+-1.7725           53.4518+-1.3816        
   string-test                                        3.0089+-0.2012            2.9293+-0.0578          might be 1.0272x faster
   string-var-equality                               27.9538+-1.2092           27.7765+-0.6906        
   structure-hoist-over-transitions                   2.3455+-0.1541     ?      2.3493+-0.0895        ?
   substring-concat-weird                            36.4498+-1.3935           35.2572+-0.6354          might be 1.0338x faster
   substring-concat                                  40.0091+-1.3473           39.9498+-0.6150        
   substring                                         44.5387+-0.6216     ?     45.8658+-1.9812        ? might be 1.0298x slower
   switch-char-constant                               2.7269+-0.0747     ?      2.8300+-0.2726        ? might be 1.0378x slower
   switch-char                                        6.1075+-0.8898     ?      7.2946+-1.0348        ? might be 1.1944x slower
   switch-constant                                    8.4682+-1.9924     ?      8.5909+-0.5828        ? might be 1.0145x slower
   switch-string-basic-big-var                       15.4037+-1.0604           14.6535+-0.3735          might be 1.0512x faster
   switch-string-basic-big                           15.6580+-1.0469           15.3359+-0.5397          might be 1.0210x faster
   switch-string-basic-var                           13.9017+-0.4184           13.6331+-0.1605          might be 1.0197x faster
   switch-string-basic                               13.5162+-1.0244           13.0433+-0.3221          might be 1.0363x faster
   switch-string-big-length-tower-var                17.9424+-0.7651     ?     19.6864+-3.4159        ? might be 1.0972x slower
   switch-string-length-tower-var                    13.5350+-0.3771           13.4826+-0.4590        
   switch-string-length-tower                        11.9269+-0.4415     ?     11.9522+-0.2741        ?
   switch-string-short                               12.0498+-0.2178           11.8941+-0.1424          might be 1.0131x faster
   switch                                            11.7178+-0.7366           10.7767+-0.6704          might be 1.0873x faster
   tear-off-arguments-simple                          3.1733+-0.2451            3.1030+-0.2233          might be 1.0227x faster
   tear-off-arguments                                 4.1434+-0.3423            4.0858+-0.1514          might be 1.0141x faster
   temporal-structure                                11.8474+-0.1388     ?     11.9392+-0.5749        ?
   to-int32-boolean                                  13.1618+-1.3214           12.9657+-0.6678          might be 1.0151x faster
   try-catch-get-by-val-cloned-arguments              9.2507+-0.0728     ?      9.7059+-0.4841        ? might be 1.0492x slower
   try-catch-get-by-val-direct-arguments              2.0297+-0.1273     ?      2.1478+-0.0624        ? might be 1.0582x slower
   try-catch-get-by-val-scoped-arguments              4.5055+-0.1272     ?      4.7029+-0.4568        ? might be 1.0438x slower
   typed-array-get-set-by-val-profiling              27.3417+-0.9059           27.1536+-1.0229        
   undefined-property-access                        218.5614+-9.1123          216.0439+-3.9517          might be 1.0117x faster
   undefined-test                                     3.1117+-0.1214     ?      3.1145+-0.0452        ?
   unprofiled-licm                                    9.2321+-0.3206            9.2237+-0.2395        
   v8-raytrace-with-empty-try-catch                  24.1367+-1.1382     ?     24.3754+-0.6670        ?
   v8-raytrace-with-try-catch                        62.4555+-2.1813           61.1191+-1.5280          might be 1.0219x faster
   varargs-call                                      13.5537+-0.7236           13.1660+-0.3678          might be 1.0294x faster
   varargs-construct-inline                          22.1469+-0.7822           21.6859+-0.6986          might be 1.0213x faster
   varargs-construct                                 20.3550+-0.5962     ?     20.4996+-0.9027        ?
   varargs-inline                                     9.0896+-0.3637            9.0470+-0.3395        
   varargs-strict-mode                               10.4887+-1.1153           10.0518+-0.2820          might be 1.0435x faster
   varargs                                            9.9513+-0.3653     ?     10.0995+-0.8521        ? might be 1.0149x slower
   weird-inlining-const-prop                          2.4817+-0.6337            2.1095+-0.0539          might be 1.1764x faster

   &lt;geometric&gt;                                        8.1025+-0.0187            8.0940+-0.0242          might be 1.0011x faster

                                                        TipOfTree               FixTypedArrays                                  
AsmBench:
   bigfib.cpp                                       455.6811+-17.9760         451.0170+-8.6408          might be 1.0103x faster
   cray.c                                           399.7716+-12.7590         393.4328+-4.0822          might be 1.0161x faster
   dry.c                                            418.2099+-7.8111     ?    428.7768+-4.8235        ? might be 1.0253x slower
   FloatMM.c                                        683.4253+-3.9365     ?    697.5125+-21.6773       ? might be 1.0206x slower
   gcc-loops.cpp                                   3437.7587+-18.4866        3435.3886+-11.2602       
   n-body.c                                         825.6740+-3.1108          824.7231+-3.5658        
   Quicksort.c                                      410.4412+-3.1251          404.5633+-3.7980          might be 1.0145x faster
   stepanov_container.cpp                          3507.5177+-24.6336    ?   3510.5180+-40.3811       ?
   Towers.c                                         233.9105+-2.5730     ?    234.1923+-4.7442        ?

   &lt;geometric&gt;                                      716.4165+-5.0675     ?    716.8283+-3.5049        ? might be 1.0006x slower

                                                        TipOfTree               FixTypedArrays                                  
CompressionBench:
   huffman                                           61.3783+-1.1002           61.2773+-0.9089        
   arithmetic-simple                                275.7478+-2.5129     ?    276.8722+-3.2416        ?
   arithmetic-precise                               260.6422+-8.9025          252.6284+-1.7609          might be 1.0317x faster
   arithmetic-complex-precise                       255.1493+-3.5902          252.1502+-2.4573          might be 1.0119x faster
   arithmetic-precise-order-0                       288.8969+-1.8505          288.2190+-5.3246        
   arithmetic-precise-order-1                       304.6100+-3.8419     ?    307.0992+-5.7264        ?
   arithmetic-precise-order-2                       357.5446+-3.5684          355.9205+-3.6199        
   arithmetic-simple-order-1                        325.6619+-3.2901          324.2571+-2.1061        
   arithmetic-simple-order-2                        374.7574+-7.7205          370.0241+-0.9437          might be 1.0128x faster
   lz-string                                        319.6182+-11.5394    ?    321.3376+-14.1132       ?

   &lt;geometric&gt;                                      259.4075+-2.2816          258.0886+-1.6328          might be 1.0051x faster

                                                        TipOfTree               FixTypedArrays                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                   50.2280+-0.1077     ?     50.3366+-0.2434        ? might be 1.0022x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1133735</commentid>
    <comment_count>4</comment_count>
      <attachid>263240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-15 19:55:01 -0700</bug_when>
    <thetext>Created attachment 263240
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134084</commentid>
    <comment_count>5</comment_count>
      <attachid>263240</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-10-16 15:42:11 -0700</bug_when>
    <thetext>Comment on attachment 263240
the patch

r=me
As we discussed, please write a byte offset test as well and include it in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134089</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-16 15:50:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 263240 [details]
&gt; the patch
&gt; 
&gt; r=me
&gt; As we discussed, please write a byte offset test as well and include it in
&gt; the patch.

Yup, I added it.  Indeed, it fails on trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134091</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-16 15:54:22 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/191221</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263233</attachid>
            <date>2015-10-15 17:48:55 -0700</date>
            <delta_ts>2015-10-15 19:00:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24522</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBA
CisyMDE1LTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29weUJhcnJpZXIgbXVzdCBiZSBhdm9pZGVkIGZvciBzbG93IFR5cGVkQXJyYXlzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAyMTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgaG93IHdlIGFj
Y2VzcyBhcnJheSBidWZmZXIgdmlld3Mgc28gdGhhdCB3ZSBkb24ndCBmaXJlIHRoZSBiYXJyaWVy
IHNsb3cgcGF0aCwgYW5kCisgICAgICAgIGRvbid0IG1hc2sgb2ZmIHRoZSBzcGFjZUJpdHMsIGlm
IHRoZSB2aWV3IGlzIG5vdCBGYXN0VHlwZWRBcnJheS4gVGhhdCdzIGJlY2F1c2UgaW4gdGhhdCBj
YXNlCisgICAgICAgIG1fdmVjdG9yIGNvdWxkIGJlIG1pc2FsaWduZWQgYW5kIHNvIGhhdmUgbWVh
bmluZ2Z1bCBub24tc3BhY2UgZGF0YSBpbiB0aGUgc3BhY2VCaXRzLiBBbHNvIGluCisgICAgICAg
IHRoYXQgY2FzZSwgbV92ZWN0b3IgZG9lcyBub3QgcG9pbnQgaW50byBjb3BpZWQgc3BhY2UuCisK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9m
ZnNldCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkVmVjdG9yV2l0aEJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvcHlCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjppc0luVG9TcGFjZSk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bG9hZEJ1dHRlcmZseVJlYWRPbmx5KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkVmVjdG9yUmVhZE9u
bHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OnJlbW92ZVNwYWNl
Qml0cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6aXNGYXN0VHlw
ZWRBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YmFzZUlu
ZGV4KToKKyAgICAgICAgKiBoZWFwL0NvcHlCYXJyaWVyLmg6CisgICAgICAgIChKU0M6OkNvcHlC
YXJyaWVyQmFzZTo6Z2V0V2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmll
ckJhc2U6OmdldFByZWRpY2F0ZWQpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmllckJhc2U6Omdl
dCk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6Y29weVN0YXRlKToKKyAgICAgICAg
KEpTQzo6Q29weUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyOjpnZXRQ
cmVkaWNhdGVkKToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXI6OnNldCk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJhcnJpZXIpOgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmTm90VHlwZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZGYXN0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RGYXN0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
bG9hZFR5cGVkQXJyYXlWZWN0b3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1
cmlmeU5hTik6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6YnJhbmNoSWZUb1NwYWNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpicmFuY2hJZk5vdFRvU3BhY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OnJlbW92ZVNwYWNlQml0cyk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvckJ5dGVPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpsZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Lmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp0eXBlZFZlY3Rvcik6
CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5n
U3RvcmUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL21pc2FsaWdu
ZWQtaW50OC12aWV3LXJlYWQuanM6IEFkZGVkLgorICAgICAgICAobWFrZSk6CisgICAgICAgIChm
b28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5q
czogQWRkZWQuCisgICAgICAgIChtYWtlKToKKyAgICAgICAgKGZvbyk6CisKIDIwMTUtMTAtMTUg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTExMzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkxMTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzODUsMTQgKzQzODUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEluZGV4ZWRQcgogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoaXNUeXBl
ZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLAotICAgICAgICAgICAgc3RvcmFn
ZVJlZyk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZmFpbCA9IG1faml0LmxvYWRUeXBl
ZEFycmF5VmVjdG9yKGJhc2VSZWcsIHN0b3JhZ2VSZWcpOwogCiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaElmTm90VG9TcGFjZShzdG9yYWdlUmVnKSwKLSAgICAgICAgICAgICAgICB0aGlz
LCBvcGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3Rvciwgc3RvcmFnZVJlZywgYmFzZVJlZykpOwor
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKGZhaWwsIHRoaXMsIG9wZXJhdGlvbkdldEFycmF5QnVm
ZmVyVmVjdG9yLCBzdG9yYWdlUmVnLCBiYXNlUmVnKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAKQEAgLTQ0MTcsNyArNDQxNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0VHlwZWRBcnJhCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKICAgICBtX2pp
dC5yZW1vdmVTcGFjZUJpdHMoZGF0YUdQUik7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3Io
KSksIHZlY3RvckdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHZlY3RvclJlYWR5Owor
ICAgIHZlY3RvclJlYWR5LmFwcGVuZChtX2ppdC5icmFuY2hJZlRvU3BhY2UodmVjdG9yR1BSKSk7
CisgICAgdmVjdG9yUmVhZHkuYXBwZW5kKG1faml0LmJyYW5jaElmTm90RmFzdFR5cGVkQXJyYXko
YmFzZUdQUikpOwogICAgIG1faml0LnJlbW92ZVNwYWNlQml0cyh2ZWN0b3JHUFIpOworICAgIHZl
Y3RvclJlYWR5LmxpbmsoJm1faml0KTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRhdGFHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpKSwgZGF0
YUdQUik7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkYXRhR1BS
LCBBcnJheUJ1ZmZlcjo6b2Zmc2V0T2ZEYXRhKCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5zdWJQ
dHIoZGF0YUdQUiwgdmVjdG9yR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjE0MSwzMyArNjE0MSw2NSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJuIGNv
cHlCYXJyaWVyKAogICAgICAgICAgICAgb2JqZWN0LCBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpLAotICAgICAgICAgICAgb3BlcmF0aW9uR2V0
QXJyYXlCdWZmZXJWZWN0b3IpOworICAgICAgICAgICAgWyZdIChMVmFsdWUgZmFzdFJlc3VsdFZh
bHVlKSAtPiBMVmFsdWUgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkVmVjdG9yV2l0aEJhcnJpZXIgc2xvdyBwYXRoIikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFz
dFJlc3VsdCk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVkQXJyYXko
b2JqZWN0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1Bh
dGgsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZh
bHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3Rv
cjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJW
ZWN0b3IsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAgICB9LCBv
YmplY3QpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgICAgICAgICB9KTsKICAgICB9Ci0g
ICAgCisKICAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50
ZXIsIFBfSklUT3BlcmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rpb24pCiAgICAgewotICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgibG9hZEJ1dHRlcmZs
eVdpdGhCYXJyaWVyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIgY29u
dGludWF0aW9uIikpOworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisgICAgICAgICAgICBv
YmplY3QsIHBvaW50ZXIsCisgICAgICAgICAgICBbJl0gKExWYWx1ZSkgLT4gTFZhbHVlIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhG
dW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCkpOworICAgICAgICAgICAgICAgICAgICB9LCBvYmplY3QpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBMVmFsdWUgY29weUJh
cnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50ZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiY29weUJhcnJpZXIgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNvcHlCYXJyaWVyIGNvbnRpbnVh
dGlvbiIpKTsKIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHBvaW50ZXIpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC50
ZXN0SXNaZXJvUHRyKHBvaW50ZXIsIG1fb3V0LmNvbnN0SW50UHRyKENvcHlCYXJyaWVyQmFzZTo6
c3BhY2VCaXRzKSksCi0gICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShz
bG93UGF0aCkpOworICAgICAgICBtX291dC5icmFuY2goaXNJblRvU3BhY2UocG9pbnRlciksIHVz
dWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAKICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsK
IAotICAgICAgICBMVmFsdWUgY2FsbCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAo
Y29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRo
OjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5l
cmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoRnVuY3Rpb24sIGxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgIH0s
IG9iamVjdCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3IoY2FsbCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3IoZnVuY3RvcihmYXN0UmVzdWx0LnZhbHVlKCkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCk7CiAgICAgfQogCisgICAgTFZhbHVlIGlzSW5Ub1NwYWNlKExWYWx1ZSBwb2lu
dGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm9QdHIocG9pbnRlciwg
bV9vdXQuY29uc3RJbnRQdHIoQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKTsKKyAgICB9CisK
ICAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVJlYWRPbmx5KExWYWx1ZSBvYmplY3QpCiAgICAgewog
ICAgICAgICByZXR1cm4gcmVtb3ZlU3BhY2VCaXRzKG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hl
YXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOwpAQCAtNjE3NSw3ICs2MjA3LDI1IEBAIHByaXZhdGU6
CiAKICAgICBMVmFsdWUgbG9hZFZlY3RvclJlYWRPbmx5KExWYWx1ZSBvYmplY3QpCiAgICAgewot
ICAgICAgICByZXR1cm4gcmVtb3ZlU3BhY2VCaXRzKG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hl
YXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvcikpOworICAgICAgICBMVmFsdWUgZmFzdFJlc3Vs
dFZhbHVlID0gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdf
dmVjdG9yKTsKKworICAgICAgICBMQmFzaWNCbG9jayBwb3NzaWJseUZyb21TcGFjZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgibG9hZFZlY3RvclJlYWRPbmx5IHBvc3NpYmx5IGZyb20gc3BhY2Ui
KSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgibG9hZFZlY3RvclJlYWRPbmx5IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBWYWx1
ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7CisK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKGZhc3RSZXN1bHRWYWx1ZSksIHVzdWFs
bHkoY29udGludWF0aW9uKSwgcmFyZWx5KHBvc3NpYmx5RnJvbVNwYWNlKSk7CisKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhwb3NzaWJseUZyb21TcGFjZSk7
CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKKyAgICAg
ICAgICAgIGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmVtb3ZlU3BhY2VCaXRzKGZhc3RSZXN1
bHRWYWx1ZSksIGZhc3RSZXN1bHRWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQ
dHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgIH0KIAogICAgIExWYWx1ZSByZW1vdmVT
cGFjZUJpdHMoTFZhbHVlIHN0b3JhZ2UpCkBAIC02MTgzLDYgKzYyMzMsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIG1fb3V0LmJpdEFuZCgKICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0
LmNvbnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oQ29weUJhcnJpZXJCYXNlOjpzcGFj
ZUJpdHMpKSk7CiAgICAgfQorCisgICAgTFZhbHVlIGlzRmFzdFR5cGVkQXJyYXkoTFZhbHVlIG9i
amVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgIG1f
b3V0LmxvYWQzMihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSksCisgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSksCisgICAgfQogICAgIAog
ICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZh
bHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0g
MCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJ
KHJldmlzaW9uIDE5MTE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJy
aWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDE0ICs3NCwyNSBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAorICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gb2YgZ2V0
KCkgaWYgeW91IG9ubHkgd2FudCB0byBleGVjdXRlIHRoZSBiYXJyaWVyIHNsb3cgcGF0aCBpZiBz
b21lIGNvbmRpdGlvbgorICAgIC8vIGhvbGRzLCBhbmQgeW91IG9ubHkgd2FudCB0byBldmFsdWF0
ZSB0aGF0IGNvbmRpdGlvbiBhZnRlciBmaXJzdCBjaGVja2luZyB0aGUgYmFycmllcidzCisgICAg
Ly8gY29uZGl0aW9uLiBVc3VhbGx5LCB5b3UganVzdCB3YW50IHRvIHVzZSBnZXQoKS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQqIGdldFByZWRpY2F0ZWQoY29uc3Qg
SlNDZWxsKiBvd25lciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHZv
aWQqIHJlc3VsdCA9IG1fdmFsdWU7CisgICAgICAgIGlmIChVTkxJS0VMWShiaXR3aXNlX2Nhc3Q8
dWludHB0cl90PihyZXN1bHQpICYgc3BhY2VCaXRzKSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0
b3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSGVhcDo6Y29weUJhcnJpZXIob3duZXIsIG1f
dmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAg
Ly8gV2hlbiB3ZSBhcmUgaW4gdGhlIGNvbmN1cnJlbnQgY29weWluZyBwaGFzZSwgdGhpcyBtZXRo
b2QgbWF5IGxvY2sgdGhlIGJhcnJpZXIgb2JqZWN0IChpLmUuIHRoZSBmaWVsZAogICAgIC8vIHBv
aW50aW5nIHRvIGNvcGllZCBzcGFjZSkgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgb3duaW5n
IG9iamVjdCdzIGNvcHlCYWNraW5nU3RvcmUoKSBtZXRob2QuCiAgICAgdm9pZCogZ2V0KGNvbnN0
IEpTQ2VsbCogb3duZXIpIGNvbnN0CiAgICAgewotICAgICAgICB2b2lkKiByZXN1bHQgPSBtX3Zh
bHVlOwotICAgICAgICBpZiAoVU5MSUtFTFkoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0
KSAmIHNwYWNlQml0cykpCi0gICAgICAgICAgICByZXR1cm4gSGVhcDo6Y29weUJhcnJpZXIob3du
ZXIsIG1fdmFsdWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gZ2V0
UHJlZGljYXRlZChvd25lciwgW10gKCkgLT4gYm9vbCB7IHJldHVybiB0cnVlOyB9KTsKICAgICB9
CiAKICAgICBDb3B5U3RhdGUgY29weVN0YXRlKCkgY29uc3QKQEAgLTE1OSw2ICsxNzAsMTIgQEAg
cHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJp
ZXJCYXNlOjpnZXQob3duZXIpKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIFQqIGdldFByZWRpY2F0ZWQoY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
VCo+KENvcHlCYXJyaWVyQmFzZTo6Z2V0UHJlZGljYXRlZChvd25lciwgZnVuY3RvcikpOworICAg
IH0KICAgICAKICAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZh
bHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lv
biAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAwMiw3ICsxMDAyLDExIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVk
U2V0KGNvbnN0IEpTQ2UKIAogdm9pZCogSGVhcDo6Y29weUJhcnJpZXIoY29uc3QgSlNDZWxsKiwg
dm9pZComIHBvaW50ZXIpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Igbm93LgorICAgIC8vIERv
IG5vdGhpbmcgZm9yIG5vdywgZXhjZXB0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvdyBiaXRzIGFy
ZSBtYXNrZWQgb2ZmLiBUaGlzIGhlbHBzIHRvCisgICAgLy8gc2ltdWxhdGUgZW5vdWdoIG9mIHRo
aXMgYmFycmllciB0aGF0IGF0IGxlYXN0IHdlIGNhbiB0ZXN0IHRoZSBsb3cgYml0cyBhc3N1bXB0
aW9ucy4KKyAgICBwb2ludGVyID0gYml0d2lzZV9jYXN0PHZvaWQqPigKKyAgICAgICAgYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiB+c3RhdGljX2Nhc3Q8dWludHB0cl90PihDb3B5
QmFycmllckJhc2U6OnNwYWNlQml0cykpOworICAgIAogICAgIHJldHVybiBwb2ludGVyOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsMzMgQEAgQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
K0Fzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRmFzdFR5cGVk
QXJyYXkoR1BSUmVnIGJhc2VHUFIpCit7CisgICAgcmV0dXJuIGJyYW5jaDMyKAorICAgICAgICBF
cXVhbCwKKyAgICAgICAgQWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0
T2ZNb2RlKCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVkQXJyYXkpKTsKK30KKwor
QXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RGYXN0VHlw
ZWRBcnJheShHUFJSZWcgYmFzZUdQUikKK3sKKyAgICByZXR1cm4gYnJhbmNoMzIoCisgICAgICAg
IE5vdEVxdWFsLAorICAgICAgICBBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3Ojpv
ZmZzZXRPZk1vZGUoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihGYXN0VHlwZWRBcnJheSkpOwor
fQorCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjpsb2FkVHlwZWRBcnJh
eVZlY3RvcihHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUikKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChiYXNlR1BSICE9IHJlc3VsdEdQUik7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNz
KGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgcmVzdWx0R1BS
KTsKKyAgICBKdW1wIG9rID0gYnJhbmNoSWZUb1NwYWNlKHJlc3VsdEdQUik7CisgICAgSnVtcCBy
ZXN1bHQgPSBicmFuY2hJZkZhc3RUeXBlZEFycmF5KGJhc2VHUFIpOworICAgIG9rLmxpbmsodGhp
cyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnB1cmlm
eU5hTihGUFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IGJy
YW5jaERvdWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBA
IC03NTYsNiArNzU2LDExIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIEp1bXAgYnJh
bmNoSWZUb1NwYWNlKEdQUlJlZyBzdG9yYWdlR1BSKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJy
YW5jaFRlc3QzMihaZXJvLCBzdG9yYWdlR1BSLCBUcnVzdGVkSW1tMzIoQ29weUJhcnJpZXJCYXNl
OjpzcGFjZUJpdHMpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaElmTm90VG9TcGFjZShHUFJS
ZWcgc3RvcmFnZUdQUikKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoTm9uWmVy
bywgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSk7
CkBAIC03NjUsNiArNzcwLDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGFuZFB0cihUcnVz
dGVkSW1tUHRyKH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VC
aXRzKSksIHN0b3JhZ2VHUFIpOwogICAgIH0KKworICAgIEp1bXAgYnJhbmNoSWZGYXN0VHlwZWRB
cnJheShHUFJSZWcgYmFzZUdQUik7CisgICAgSnVtcCBicmFuY2hJZk5vdEZhc3RUeXBlZEFycmF5
KEdQUlJlZyBiYXNlR1BSKTsKKworICAgIC8vIFJldHVybnMgYSBqdW1wIHRvIHNsb3cgcGF0aCBm
b3Igd2hlbiB3ZSBuZWVkIHRvIGV4ZWN1dGUgdGhlIGJhcnJpZXIuIE5vdGUgdGhhdCBiYXNlR1BS
IGFuZAorICAgIC8vIHJlc3VsdEdQUiBtdXN0IGJlIGRpZmZlcmVudC4KKyAgICBKdW1wIGxvYWRU
eXBlZEFycmF5VmVjdG9yKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSKTsKICAgICAK
ICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9m
ZnNldCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTkxMTUwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTUsOCAr
MTQ1NSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBs
b2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNo
KTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRy
dXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNB
cnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaCkpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQobG9hZFR5cGVkQXJyYXlWZWN0b3IoYmFzZSwgc2NyYXRjaCkpOwogICAg
IAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CkBAIC0xNTI3
LDggKzE1MjYsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAg
ICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2Ny
YXRjaCk7CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNo
LCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7CiAgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2Us
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGxvYWRUeXBlZEFycmF5VmVjdG9yKGJhc2UsIHNjcmF0Y2gpKTsK
ICAgICAKICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgpAQCAt
MTU5NSw4ICsxNTkzLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0
QgogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4g
Z2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhl
IGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKGxhdGVTY3JhdGNoKSk7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBsYXRlU2NyYXRjaCkpOwogICAg
IAogICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXpl
KHR5cGUpID09IDEpOwpAQCAtMTY4MSw4ICsxNjc4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhp
cyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAv
LyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNj
cmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKGxhdGVTY3Jh
dGNoKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBs
YXRlU2NyYXRjaCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAg
ICBjYXNlIDQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVm
ZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE5MTE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3
ICsxNjEsMTUgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBpbXBs
KCk7CiAgICAgdm9pZCBuZXV0ZXIoKTsKICAgICAKLSAgICB2b2lkKiB2ZWN0b3IoKSB7IHJldHVy
biBtX3ZlY3Rvci5nZXQodGhpcyk7IH0KKyAgICB2b2lkKiB2ZWN0b3IoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmVjdG9yLmdldFByZWRpY2F0ZWQoCisgICAgICAgICAgICB0aGlzLAorICAg
ICAgICAgICAgW3RoaXNdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBtb2Rl
KCkgPT0gRmFzdFR5cGVkQXJyYXk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAg
dW5zaWduZWQgYnl0ZU9mZnNldCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
QXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxOTExNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBpbmxpbmUgdW5zaWduZWQgSlNB
cnJheUJ1ZmZlclZpZXc6OmJ5dGVPCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHB0cmRp
ZmZfdCBkZWx0YSA9Ci0gICAgICAgIGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IuZ2V0
KHRoaXMpKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAg
ICAgYml0d2lzZV9jYXN0PHVpbnQ4X3QqPih2ZWN0b3IoKSkgLSBzdGF0aWNfY2FzdDx1aW50OF90
Kj4oYnVmZmVyKCktPmRhdGEoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGRlbHRhKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihyZXN1bHQpID09IGRlbHRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMTkxMTUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgcHVibGljOgogICAgIAog
ICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6
VHlwZSo+KG1fdmVjdG9yLmdldCh0aGlzKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHZlY3RvcigpKTsKICAgICB9CiAgICAgdHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0KHRoaXMp
KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4o
dmVjdG9yKCkpOwogICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG1lYW50IHRvIG1h
dGNoIGluZGV4ZWQgYWNjZXNzIG1ldGhvZHMgdGhhdCBKU09iamVjdApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDE5MTE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NzAsNyArNDcwLDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFw
dG9yPjo6YwogICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiAgICAg
ICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0
V2l0aG91dEJhcnJpZXIoKSkpIHsKICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fdmVjdG9y
KTsKLSAgICAgICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRo
aXNPYmplY3QpOworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT52ZWN0b3Io
KTsKICAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRo
aXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBtZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0
b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX3ZlY3Rv
ci5zZXRXaXRob3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFyKj4obmV3VmVjdG9yKSk7CkBAIC01
MDksNyArNTA5LDcgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYQog
ICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwogICAgICAgICAvLyBSZXVzZSBh
bHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgogICAgICAgICB0aGlz
T2JqZWN0LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAgICAgICAgICAgIGJpdHdp
c2VfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCh0aGlzT2Jq
ZWN0KSktPmJ1dHRlcmZseSgpKTsKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxJbmRleGluZ0hl
YWRlcio+KHRoaXNPYmplY3QtPnZlY3RvcigpKS0+YnV0dGVyZmx5KCkpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIFZNJiB2bSA9ICpoZWFwLT52bSgpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX2J1
dHRlcmZseS5zZXQodm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlS
aWdodCgKQEAgLTUyMSwxNCArNTIxLDE0IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFy
cmF5VmlldzxBZGEKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewogICAg
IGNhc2UgRmFzdFR5cGVkQXJyYXk6Ci0gICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVh
dGUodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpLCB0aGlzT2JqZWN0LT5ieXRl
TGVuZ3RoKCkpOworICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmpl
Y3QtPnZlY3RvcigpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CiAgICAgICAgIC8vIEZJWE1F
OiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEg
bWVtb3J5CiAgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBj
YXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAogICAgICAgICAvLyB0aGUg
d2hvbGUgYnVmZmVyLgotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRl
ZCh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRoaXNPYmplY3QtPmJ5dGVM
ZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRo
aXNPYmplY3QtPnZlY3RvcigpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbWlzYWxpZ25lZC1pbnQ4LXZpZXctcmVhZC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21pc2FsaWduZWQtaW50OC12aWV3
LXJlYWQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL21pc2FsaWduZWQtaW50OC12aWV3LXJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNiBAQAorZnVuY3Rpb24gbWFrZShvZmZzZXQpIHsKKyAgICAvLyBEZWZhdWx0IG9mZnNldCBp
cyAxLgorICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkKKyAgICAgICAgb2Zmc2V0ID0gMTsKKyAg
ICAKKyAgICB2YXIgaW50OEFycmF5ID0gbmV3IEludDhBcnJheSgxMDApOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgaW50OEFycmF5Lmxlbmd0aDsgKytpKQorICAgICAgICBpbnQ4QXJyYXlbaV0g
PSBpOworCisgICAgcmV0dXJuIG5ldyBJbnQ4QXJyYXkoaW50OEFycmF5LmJ1ZmZlciwgb2Zmc2V0
LCBpbnQ4QXJyYXkubGVuZ3RoIC0gb2Zmc2V0KTsKK30KK25vSW5saW5lKG1ha2UpOworCitmdW5j
dGlvbiBmb28obywgaSkgeworICAgIHJldHVybiBvW2ldOworfQorCitub0lubGluZShmb28pOwor
Cit2YXIgbyA9IG1ha2UoKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
IHZhciBpbmRleCA9IGkgJSBvLmxlbmd0aDsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8sIGluZGV4
KTsKKyAgICBpZiAocmVzdWx0ICE9IGluZGV4ICsgMSkKKyAgICAgICAgdGhyb3cgIlJlYWQgdGVz
dCBlcnJvcjogYmFkIHJlc3VsdCBmb3IgaW5kZXggPSAiICsgaW5kZXggKyAiOiAiICsgcmVzdWx0
ICsgIjsgZXhwZWN0ZWQgIiArIChpbmRleCArIDEpOworfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21pc2FsaWduZWQtaW50
OC12aWV3LXdyaXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMwIEBACitmdW5jdGlvbiBtYWtlKG9mZnNldCkgeworICAgIC8vIERlZmF1bHQg
b2Zmc2V0IGlzIDEuCisgICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKQorICAgICAgICBvZmZzZXQg
PSAxOworICAgIAorICAgIHZhciBpbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KDEwMCk7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnQ4QXJyYXkubGVuZ3RoOyArK2kpCisgICAgICAgIGludDhB
cnJheVtpXSA9IGk7CisKKyAgICByZXR1cm4gbmV3IEludDhBcnJheShpbnQ4QXJyYXkuYnVmZmVy
LCBvZmZzZXQsIGludDhBcnJheS5sZW5ndGggLSBvZmZzZXQpOworfQorbm9JbmxpbmUobWFrZSk7
CisKK2Z1bmN0aW9uIGZvbyhvLCBpLCB2KSB7CisgICAgb1tpXSA9IHY7Cit9CisKK25vSW5saW5l
KGZvbyk7CisKK3ZhciBvID0gbWFrZSgpOwordmFyIHJlYWwgPSBuZXcgSW50OEFycmF5KG8uYnVm
ZmVyKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBpbmRleCA9
IGkgJSBvLmxlbmd0aDsKKyAgICB2YXIgdmFsdWUgPSBpICUgNzsKKyAgICBmb28obywgaW5kZXgs
IHZhbHVlKTsKKyAgICB2YXIgcmVzdWx0ID0gcmVhbFtpbmRleCArIDFdOworICAgIGlmIChyZXN1
bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93ICJXcml0ZSB0ZXN0IGVycm9yOiBiYWQgcmVzdWx0
IGZvciBpbmRleCA9ICIgKyBpbmRleCArICI6ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZCAiICsg
dmFsdWU7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263237</attachid>
            <date>2015-10-15 19:00:11 -0700</date>
            <delta_ts>2015-10-15 19:55:01 -0700</delta_ts>
            <desc>possibly the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24936</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBA
CisyMDE1LTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29weUJhcnJpZXIgbXVzdCBiZSBhdm9pZGVkIGZvciBzbG93IFR5cGVkQXJyYXlzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAyMTcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgaG93IHdlIGFj
Y2VzcyBhcnJheSBidWZmZXIgdmlld3Mgc28gdGhhdCB3ZSBkb24ndCBmaXJlIHRoZSBiYXJyaWVy
IHNsb3cgcGF0aCwgYW5kCisgICAgICAgIGRvbid0IG1hc2sgb2ZmIHRoZSBzcGFjZUJpdHMsIGlm
IHRoZSB2aWV3IGlzIG5vdCBGYXN0VHlwZWRBcnJheS4gVGhhdCdzIGJlY2F1c2UgaW4gdGhhdCBj
YXNlCisgICAgICAgIG1fdmVjdG9yIGNvdWxkIGJlIG1pc2FsaWduZWQgYW5kIHNvIGhhdmUgbWVh
bmluZ2Z1bCBub24tc3BhY2UgZGF0YSBpbiB0aGUgc3BhY2VCaXRzLiBBbHNvIGluCisgICAgICAg
IHRoYXQgY2FzZSwgbV92ZWN0b3IgZG9lcyBub3QgcG9pbnQgaW50byBjb3BpZWQgc3BhY2UuCisK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9m
ZnNldCk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkVmVjdG9yV2l0aEJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvcHlCYXJyaWVyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjppc0luVG9TcGFjZSk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6bG9hZEJ1dHRlcmZseVJlYWRPbmx5KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpsb2FkVmVjdG9yUmVhZE9u
bHkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OnJlbW92ZVNwYWNl
Qml0cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6aXNGYXN0VHlw
ZWRBcnJheSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YmFzZUlu
ZGV4KToKKyAgICAgICAgKiBoZWFwL0NvcHlCYXJyaWVyLmg6CisgICAgICAgIChKU0M6OkNvcHlC
YXJyaWVyQmFzZTo6Z2V0V2l0aG91dEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmll
ckJhc2U6OmdldFByZWRpY2F0ZWQpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmllckJhc2U6Omdl
dCk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6Y29weVN0YXRlKToKKyAgICAgICAg
KEpTQzo6Q29weUJhcnJpZXI6OmdldCk6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyOjpnZXRQ
cmVkaWNhdGVkKToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXI6OnNldCk6CisgICAgICAgICog
aGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Y29weUJhcnJpZXIpOgorICAgICAg
ICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBl
cnM6OmJyYW5jaElmTm90VHlwZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZGYXN0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RGYXN0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6
bG9hZFR5cGVkQXJyYXlWZWN0b3IpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1
cmlmeU5hTik6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlND
OjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6YnJhbmNoSWZUb1NwYWNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxw
ZXJzOjpicmFuY2hJZk5vdFRvU3BhY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OnJlbW92ZVNwYWNlQml0cyk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvckJ5dGVPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZp
ZXcuaDoKKyAgICAgICAgKEpTQzo6SlNBcnJheUJ1ZmZlclZpZXc6OnZlY3Rvcik6CisgICAgICAg
IChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpsZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNB
cnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpieXRlT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Lmg6CisgICAgICAgIChKU0M6OkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Ojp0eXBlZFZlY3Rvcik6
CisgICAgICAgICogcnVudGltZS9KU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6SlNHZW5lcmljVHlwZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5n
U3RvcmUpOgorICAgICAgICAoSlNDOjpKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6
c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL21pc2FsaWdu
ZWQtaW50OC12aWV3LXJlYWQuanM6IEFkZGVkLgorICAgICAgICAobWFrZSk6CisgICAgICAgIChm
b28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5q
czogQWRkZWQuCisgICAgICAgIChtYWtlKToKKyAgICAgICAgKGZvbyk6CisKIDIwMTUtMTAtMTUg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTExMzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTkxMTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzODUsMTQgKzQzODUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEluZGV4ZWRQcgogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoaXNUeXBl
ZFZpZXcobm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKSkpOwotICAgICAgICBtX2pp
dC5sb2FkUHRyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLAotICAgICAgICAgICAgc3RvcmFn
ZVJlZyk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZmFpbCA9IG1faml0LmxvYWRUeXBl
ZEFycmF5VmVjdG9yKGJhc2VSZWcsIHN0b3JhZ2VSZWcpOwogCiAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaElmTm90VG9TcGFjZShzdG9yYWdlUmVnKSwKLSAgICAgICAgICAgICAgICB0aGlz
LCBvcGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3Rvciwgc3RvcmFnZVJlZywgYmFzZVJlZykpOwor
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKGZhaWwsIHRoaXMsIG9wZXJhdGlvbkdldEFycmF5QnVm
ZmVyVmVjdG9yLCBzdG9yYWdlUmVnLCBiYXNlUmVnKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAKQEAgLTQ0MTcsNyArNDQxNCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0VHlwZWRBcnJhCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKICAgICBtX2pp
dC5yZW1vdmVTcGFjZUJpdHMoZGF0YUdQUik7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3Io
KSksIHZlY3RvckdQUik7CisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHZlY3RvclJlYWR5Owor
ICAgIHZlY3RvclJlYWR5LmFwcGVuZChtX2ppdC5icmFuY2hJZlRvU3BhY2UodmVjdG9yR1BSKSk7
CisgICAgdmVjdG9yUmVhZHkuYXBwZW5kKG1faml0LmJyYW5jaElmTm90RmFzdFR5cGVkQXJyYXko
YmFzZUdQUikpOwogICAgIG1faml0LnJlbW92ZVNwYWNlQml0cyh2ZWN0b3JHUFIpOworICAgIHZl
Y3RvclJlYWR5LmxpbmsoJm1faml0KTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRhdGFHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpKSwgZGF0
YUdQUik7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkYXRhR1BS
LCBBcnJheUJ1ZmZlcjo6b2Zmc2V0T2ZEYXRhKCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5zdWJQ
dHIoZGF0YUdQUiwgdmVjdG9yR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEzOSwzNSArNjEzOSw2OCBAQCBwcml2YXRlOgogICAgIAogICAgIExWYWx1ZSBsb2FkVmVj
dG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKICAgICB7CisgICAgICAgIExWYWx1ZSBmYXN0
UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVy
Vmlld192ZWN0b3IpOwogICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBv
YmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3Zl
Y3RvciksCi0gICAgICAgICAgICBvcGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3Rvcik7CisgICAg
ICAgICAgICBmYXN0UmVzdWx0VmFsdWUsCisgICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsK
KyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRW
ZWN0b3JXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmFy
ZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
IGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlv
bnNbMV0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAgICB9LCBvYmplY3QpOworICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xv
d1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJl
c3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgICAgICAgICB9KTsKICAgICB9Ci0gICAgCisKICAgICBM
VmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50ZXIsIFBfSklUT3Bl
cmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rpb24pCiAgICAgewotICAgICAgICBMQmFzaWNCbG9jayBz
bG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgibG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVy
IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIgY29udGludWF0aW9uIikp
OworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisgICAgICAgICAgICBwb2ludGVyLAorICAg
ICAgICAgICAgWyZdICgpIC0+IExWYWx1ZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxhenlT
bG93UGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+
JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJl
Y3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICAgICAg
fSwgb2JqZWN0KTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgTFZhbHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBwb2ludGVyLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGgg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNvcHlCYXJyaWVyIHNsb3cgcGF0aCIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjb3B5
QmFycmllciBjb250aW51YXRpb24iKSk7CiAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihwb2ludGVyKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgbV9vdXQudGVzdElzWmVyb1B0cihwb2ludGVyLCBtX291dC5jb25zdEludFB0cihD
b3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpLAotICAgICAgICAgICAgdXN1YWxseShjb250aW51
YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1Nw
YWNlKHBvaW50ZXIpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwog
CiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgTFZhbHVlIGNhbGwgPSBsYXp5U2xvd1BhdGgoCi0g
ICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVm
UHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aEZ1bmN0
aW9uLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7
Ci0gICAgICAgICAgICB9LCBvYmplY3QpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGNhbGwpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGZ1bmN0b3IoKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpOwogICAgIH0KIAorICAgIExWYWx1ZSBpc0luVG9TcGFjZShMVmFsdWUgcG9pbnRl
cikKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC50ZXN0SXNaZXJvUHRyKHBvaW50ZXIsIG1f
b3V0LmNvbnN0SW50UHRyKENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSk7CisgICAgfQorCiAg
ICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlSZWFkT25seShMVmFsdWUgb2JqZWN0KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHJlbW92ZVNwYWNlQml0cyhtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFw
cy5KU09iamVjdF9idXR0ZXJmbHkpKTsKQEAgLTYxNzUsNyArNjIwOCwyNSBAQCBwcml2YXRlOgog
CiAgICAgTFZhbHVlIGxvYWRWZWN0b3JSZWFkT25seShMVmFsdWUgb2JqZWN0KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHJlbW92ZVNwYWNlQml0cyhtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFw
cy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpKTsKKyAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRW
YWx1ZSA9IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3Zl
Y3Rvcik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgcG9zc2libHlGcm9tU3BhY2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFkT25seSBwb3NzaWJseSBmcm9tIHNwYWNlIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImxvYWRWZWN0b3JSZWFkT25seSBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworCisg
ICAgICAgIG1fb3V0LmJyYW5jaChpc0luVG9TcGFjZShmYXN0UmVzdWx0VmFsdWUpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShwb3NzaWJseUZyb21TcGFjZSkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ocG9zc2libHlGcm9tU3BhY2UsIGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IG1fb3V0LnNl
bGVjdCgKKyAgICAgICAgICAgIGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmVtb3ZlU3BhY2VC
aXRzKGZhc3RSZXN1bHRWYWx1ZSksIGZhc3RSZXN1bHRWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBo
aShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgIH0KIAogICAgIExW
YWx1ZSByZW1vdmVTcGFjZUJpdHMoTFZhbHVlIHN0b3JhZ2UpCkBAIC02MTgzLDYgKzYyMzQsMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG1fb3V0LmJpdEFuZCgKICAgICAgICAgICAgIHN0
b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oQ29weUJhcnJp
ZXJCYXNlOjpzcGFjZUJpdHMpKSk7CiAgICAgfQorCisgICAgTFZhbHVlIGlzRmFzdFR5cGVkQXJy
YXkoTFZhbHVlIG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAg
ICAgICAgICAgIG1fb3V0LmxvYWQzMihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdf
bW9kZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSk7Cisg
ICAgfQogICAgIAogICAgIFR5cGVkUG9pbnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVh
cCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlLCBwdHJkaWZm
X3Qgb2Zmc2V0ID0gMCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b3B5QmFycmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
cHlCYXJyaWVyLmgJKHJldmlzaW9uIDE5MTE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0NvcHlCYXJyaWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTc0LDE0ICs3NCwyNSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAorICAgIC8vIFVzZSB0aGlzIHZlcnNp
b24gb2YgZ2V0KCkgaWYgeW91IG9ubHkgd2FudCB0byBleGVjdXRlIHRoZSBiYXJyaWVyIHNsb3cg
cGF0aCBpZiBzb21lIGNvbmRpdGlvbgorICAgIC8vIGhvbGRzLCBhbmQgeW91IG9ubHkgd2FudCB0
byBldmFsdWF0ZSB0aGF0IGNvbmRpdGlvbiBhZnRlciBmaXJzdCBjaGVja2luZyB0aGUgYmFycmll
cidzCisgICAgLy8gY29uZGl0aW9uLiBVc3VhbGx5LCB5b3UganVzdCB3YW50IHRvIHVzZSBnZXQo
KS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQqIGdldFByZWRpY2F0
ZWQoY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fdmFsdWU7CisgICAgICAgIGlmIChVTkxJS0VM
WShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihyZXN1bHQpICYgc3BhY2VCaXRzKSkgeworICAgICAg
ICAgICAgaWYgKGZ1bmN0b3IoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSGVhcDo6Y29weUJh
cnJpZXIob3duZXIsIG1fdmFsdWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCiAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gdGhlIGNvbmN1cnJlbnQgY29weWluZyBw
aGFzZSwgdGhpcyBtZXRob2QgbWF5IGxvY2sgdGhlIGJhcnJpZXIgb2JqZWN0IChpLmUuIHRoZSBm
aWVsZAogICAgIC8vIHBvaW50aW5nIHRvIGNvcGllZCBzcGFjZSkgYW5kIGNhbGwgZGlyZWN0bHkg
aW50byB0aGUgb3duaW5nIG9iamVjdCdzIGNvcHlCYWNraW5nU3RvcmUoKSBtZXRob2QuCiAgICAg
dm9pZCogZ2V0KGNvbnN0IEpTQ2VsbCogb3duZXIpIGNvbnN0CiAgICAgewotICAgICAgICB2b2lk
KiByZXN1bHQgPSBtX3ZhbHVlOwotICAgICAgICBpZiAoVU5MSUtFTFkoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ocmVzdWx0KSAmIHNwYWNlQml0cykpCi0gICAgICAgICAgICByZXR1cm4gSGVhcDo6
Y29weUJhcnJpZXIob3duZXIsIG1fdmFsdWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXR1cm4gZ2V0UHJlZGljYXRlZChvd25lciwgW10gKCkgLT4gYm9vbCB7IHJldHVybiB0
cnVlOyB9KTsKICAgICB9CiAKICAgICBDb3B5U3RhdGUgY29weVN0YXRlKCkgY29uc3QKQEAgLTE1
OSw2ICsxNzAsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxUKj4oQ29weUJhcnJpZXJCYXNlOjpnZXQob3duZXIpKTsKICAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIFQqIGdldFByZWRpY2F0ZWQoY29uc3QgSlNDZWxsKiBv
d25lciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8VCo+KENvcHlCYXJyaWVyQmFzZTo6Z2V0UHJlZGljYXRlZChvd25lciwg
ZnVuY3RvcikpOworICAgIH0KICAgICAKICAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIFQqIHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuY3BwCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMiw3ICsxMDAyLDExIEBAIHZvaWQgSGVhcDo6
YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0IEpTQ2UKIAogdm9pZCogSGVhcDo6Y29weUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiwgdm9pZComIHBvaW50ZXIpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Ig
bm93LgorICAgIC8vIERvIG5vdGhpbmcgZm9yIG5vdywgZXhjZXB0IG1ha2luZyBzdXJlIHRoYXQg
dGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQgb2ZmLiBUaGlzIGhlbHBzIHRvCisgICAgLy8gc2ltdWxh
dGUgZW5vdWdoIG9mIHRoaXMgYmFycmllciB0aGF0IGF0IGxlYXN0IHdlIGNhbiB0ZXN0IHRoZSBs
b3cgYml0cyBhc3N1bXB0aW9ucy4KKyAgICBwb2ludGVyID0gYml0d2lzZV9jYXN0PHZvaWQqPigK
KyAgICAgICAgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcikgJiB+c3RhdGljX2Nhc3Q8
dWludHB0cl90PihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpOworICAgIAogICAgIHJldHVy
biBwb2ludGVyOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
MzMgQEAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wTGlzdCBBc3NlbWJseUhlbHBlcgogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKK0Fzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmJy
YW5jaElmRmFzdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2VHUFIpCit7CisgICAgcmV0dXJuIGJyYW5j
aDMyKAorICAgICAgICBFcXVhbCwKKyAgICAgICAgQWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVm
ZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVk
QXJyYXkpKTsKK30KKworQXNzZW1ibHlIZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RGYXN0VHlwZWRBcnJheShHUFJSZWcgYmFzZUdQUikKK3sKKyAgICByZXR1cm4gYnJh
bmNoMzIoCisgICAgICAgIE5vdEVxdWFsLAorICAgICAgICBBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1vZGUoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihGYXN0
VHlwZWRBcnJheSkpOworfQorCitBc3NlbWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJz
Ojpsb2FkVHlwZWRBcnJheVZlY3RvcihHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUikK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChiYXNlR1BSICE9IHJlc3VsdEdQUik7CisgICAgCisgICAg
bG9hZFB0cihBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rv
cigpKSwgcmVzdWx0R1BSKTsKKyAgICBKdW1wIG9rID0gYnJhbmNoSWZUb1NwYWNlKHJlc3VsdEdQ
Uik7CisgICAgSnVtcCByZXN1bHQgPSBicmFuY2hJZkZhc3RUeXBlZEFycmF5KGJhc2VHUFIpOwor
ICAgIG9rLmxpbmsodGhpcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJs
eUhlbHBlcnM6OnB1cmlmeU5hTihGUFJSZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG5vdE5hTiA9IGJyYW5jaERvdWJsZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAx
OTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NTYsNiArNzU2LDExIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0K
IAorICAgIEp1bXAgYnJhbmNoSWZUb1NwYWNlKEdQUlJlZyBzdG9yYWdlR1BSKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihaZXJvLCBzdG9yYWdlR1BSLCBUcnVzdGVkSW1tMzIo
Q29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaElm
Tm90VG9TcGFjZShHUFJSZWcgc3RvcmFnZUdQUikKICAgICB7CiAgICAgICAgIHJldHVybiBicmFu
Y2hUZXN0MzIoTm9uWmVybywgc3RvcmFnZUdQUiwgVHJ1c3RlZEltbTMyKENvcHlCYXJyaWVyQmFz
ZTo6c3BhY2VCaXRzKSk7CkBAIC03NjUsNiArNzcwLDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGFuZFB0cihUcnVzdGVkSW1tUHRyKH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENvcHlCYXJy
aWVyQmFzZTo6c3BhY2VCaXRzKSksIHN0b3JhZ2VHUFIpOwogICAgIH0KKworICAgIEp1bXAgYnJh
bmNoSWZGYXN0VHlwZWRBcnJheShHUFJSZWcgYmFzZUdQUik7CisgICAgSnVtcCBicmFuY2hJZk5v
dEZhc3RUeXBlZEFycmF5KEdQUlJlZyBiYXNlR1BSKTsKKworICAgIC8vIFJldHVybnMgYSBqdW1w
IHRvIHNsb3cgcGF0aCBmb3Igd2hlbiB3ZSBuZWVkIHRvIGV4ZWN1dGUgdGhlIGJhcnJpZXIuIE5v
dGUgdGhhdCBiYXNlR1BSIGFuZAorICAgIC8vIHJlc3VsdEdQUiBtdXN0IGJlIGRpZmZlcmVudC4K
KyAgICBKdW1wIGxvYWRUeXBlZEFycmF5VmVjdG9yKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVz
dWx0R1BSKTsKICAgICAKICAgICBzdGF0aWMgQWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChw
dHJkaWZmX3QgYnl0ZU9mZnNldCkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTkxMTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0NTUsOCArMTQ1NSw3IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRB
cnJheUdldEIKICAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsK
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFk
ZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3Rvcigp
KSwgc2NyYXRjaCk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2Uoc2Ny
YXRjaCkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQobG9hZFR5cGVkQXJyYXlWZWN0b3IoYmFzZSwg
c2NyYXRjaCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBj
YXNlIDE6CkBAIC0xNTI3LDggKzE1MjYsNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0
VHlwZWRBcnJheUdlCiAgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUp
KSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5
LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0
b3IoKSksIHNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNl
KHNjcmF0Y2gpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGxvYWRUeXBlZEFycmF5VmVjdG9yKGJh
c2UsIHNjcmF0Y2gpKTsKICAgICAKICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAg
ICAgY2FzZSA0OgpAQCAtMTU5NSw4ICsxNTkzLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJ
bnRUeXBlZEFycmF5UHV0QgogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBp
bnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBw
YXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRy
ZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0
Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKGxhdGVTY3JhdGNo
KSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBsYXRl
U2NyYXRjaCkpOwogICAgIAogICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKICAgICAgICAgQVNT
RVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwpAQCAtMTY4MSw4ICsxNjc4LDcgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxk
IGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQg
dGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQu
Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZl
Y3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RU
b1NwYWNlKGxhdGVTY3JhdGNoKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJh
eVZlY3RvcihiYXNlLCBsYXRlU2NyYXRjaCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNp
emUodHlwZSkpIHsKICAgICBjYXNlIDQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0FycmF5QnVmZmVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHJldmlzaW9uIDE5MTE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MSw3ICsxNjEsMTUgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8QXJyYXlC
dWZmZXJWaWV3PiBpbXBsKCk7CiAgICAgdm9pZCBuZXV0ZXIoKTsKICAgICAKLSAgICB2b2lkKiB2
ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3Rvci5nZXQodGhpcyk7IH0KKyAgICB2b2lkKiB2ZWN0b3Io
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yLmdldFByZWRpY2F0ZWQoCisgICAgICAg
ICAgICB0aGlzLAorICAgICAgICAgICAgW3RoaXNdICgpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtb2RlKCkgPT0gRmFzdFR5cGVkQXJyYXk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisgICAgCiAgICAgdW5zaWduZWQgYnl0ZU9mZnNldCgpOwogICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShy
ZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBpbmxp
bmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZlclZpZXc6OmJ5dGVPCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAogICAgIHB0cmRpZmZfdCBkZWx0YSA9Ci0gICAgICAgIGJpdHdpc2VfY2FzdDx1aW50OF90
Kj4obV92ZWN0b3IuZ2V0KHRoaXMpKSAtIHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+
ZGF0YSgpKTsKKyAgICAgICAgYml0d2lzZV9jYXN0PHVpbnQ4X3QqPih2ZWN0b3IoKSkgLSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVyKCktPmRhdGEoKSk7CiAgICAgCiAgICAgdW5zaWduZWQg
cmVzdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRlbHRhKTsKICAgICBBU1NFUlQoc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihyZXN1bHQpID09IGRlbHRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAko
cmV2aXNpb24gMTkxMTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5l
cmljVHlwZWRBcnJheVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAg
cHVibGljOgogICAgIAogICAgIGNvbnN0IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVj
dG9yKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1fdmVjdG9yLmdldCh0aGlzKSk7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHZlY3RvcigpKTsK
ICAgICB9CiAgICAgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92
ZWN0b3IuZ2V0KHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBB
ZGFwdG9yOjpUeXBlKj4odmVjdG9yKCkpOwogICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMg
YXJlIG1lYW50IHRvIG1hdGNoIGluZGV4ZWQgYWNjZXNzIG1ldGhvZHMgdGhhdCBKU09iamVjdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgJKHJldmlzaW9uIDE5MTE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzAsNyArNDcwLDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBl
ZEFycmF5VmlldzxBZGFwdG9yPjo6YwogICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9y
Q29weVRva2VuCiAgICAgICAgICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVj
dC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJhcnJpZXIoKSkpIHsKICAgICAgICAgQVNTRVJUKHRoaXNP
YmplY3QtPm1fdmVjdG9yKTsKLSAgICAgICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+
bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpOworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlz
T2JqZWN0LT52ZWN0b3IoKTsKICAgICAgICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxv
Y2F0ZU5ld1NwYWNlKHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICBtZW1jcHkobmV3
VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNPYmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICB0aGlz
T2JqZWN0LT5tX3ZlY3Rvci5zZXRXaXRob3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFyKj4obmV3
VmVjdG9yKSk7CkBAIC01MDksNyArNTA5LDcgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3PEFkYQogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwogICAg
ICAgICAvLyBSZXVzZSBhbHJlYWR5IGFsbG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxl
LgogICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVj
dG9yLmdldCh0aGlzT2JqZWN0KSktPmJ1dHRlcmZseSgpKTsKKyAgICAgICAgICAgIGJpdHdpc2Vf
Y2FzdDxJbmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPnZlY3RvcigpKS0+YnV0dGVyZmx5KCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIFZNJiB2bSA9ICpoZWFwLT52bSgpOwogICAgICAgICB0
aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5zZXQodm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3Jl
YXRlT3JHcm93QXJyYXlSaWdodCgKQEAgLTUyMSwxNCArNTIxLDE0IEBAIEFycmF5QnVmZmVyKiBK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGEKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3Qt
Pm1fbW9kZSkgewogICAgIGNhc2UgRmFzdFR5cGVkQXJyYXk6Ci0gICAgICAgIGJ1ZmZlciA9IEFy
cmF5QnVmZmVyOjpjcmVhdGUodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpLCB0
aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOworICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKHRoaXNPYmplY3QtPnZlY3RvcigpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwog
ICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CiAg
ICAgICAgIC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3Rp
bmciIGZyb20gZXh0cmEgbWVtb3J5CiAgICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0
aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUgR0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAog
ICAgICAgICAvLyB0aGUgd2hvbGUgYnVmZmVyLgotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2JqZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRo
aXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpj
cmVhdGVBZG9wdGVkKHRoaXNPYmplY3QtPnZlY3RvcigpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3Ro
KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWlzYWxpZ25lZC1pbnQ4LXZpZXctcmVhZC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21pc2Fs
aWduZWQtaW50OC12aWV3LXJlYWQuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL21pc2FsaWduZWQtaW50OC12aWV3LXJlYWQuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gbWFrZShvZmZzZXQpIHsKKyAgICAvLyBE
ZWZhdWx0IG9mZnNldCBpcyAxLgorICAgIGlmIChvZmZzZXQgPT09IHZvaWQgMCkKKyAgICAgICAg
b2Zmc2V0ID0gMTsKKyAgICAKKyAgICB2YXIgaW50OEFycmF5ID0gbmV3IEludDhBcnJheSgxMDAp
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50OEFycmF5Lmxlbmd0aDsgKytpKQorICAgICAg
ICBpbnQ4QXJyYXlbaV0gPSBpOworCisgICAgcmV0dXJuIG5ldyBJbnQ4QXJyYXkoaW50OEFycmF5
LmJ1ZmZlciwgb2Zmc2V0LCBpbnQ4QXJyYXkubGVuZ3RoIC0gb2Zmc2V0KTsKK30KK25vSW5saW5l
KG1ha2UpOworCitmdW5jdGlvbiBmb28obywgaSkgeworICAgIHJldHVybiBvW2ldOworfQorCitu
b0lubGluZShmb28pOworCit2YXIgbyA9IG1ha2UoKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgIHZhciBpbmRleCA9IGkgJSBvLmxlbmd0aDsKKyAgICB2YXIgcmVzdWx0
ID0gZm9vKG8sIGluZGV4KTsKKyAgICBpZiAocmVzdWx0ICE9IGluZGV4ICsgMSkKKyAgICAgICAg
dGhyb3cgIlJlYWQgdGVzdCBlcnJvcjogYmFkIHJlc3VsdCBmb3IgaW5kZXggPSAiICsgaW5kZXgg
KyAiOiAiICsgcmVzdWx0ICsgIjsgZXhwZWN0ZWQgIiArIChpbmRleCArIDEpOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13
cml0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L21pc2FsaWduZWQtaW50OC12aWV3LXdyaXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACitmdW5jdGlvbiBtYWtlKG9mZnNldCkgewor
ICAgIC8vIERlZmF1bHQgb2Zmc2V0IGlzIDEuCisgICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKQor
ICAgICAgICBvZmZzZXQgPSAxOworICAgIAorICAgIHZhciBpbnQ4QXJyYXkgPSBuZXcgSW50OEFy
cmF5KDEwMCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnQ4QXJyYXkubGVuZ3RoOyArK2kp
CisgICAgICAgIGludDhBcnJheVtpXSA9IGk7CisKKyAgICByZXR1cm4gbmV3IEludDhBcnJheShp
bnQ4QXJyYXkuYnVmZmVyLCBvZmZzZXQsIGludDhBcnJheS5sZW5ndGggLSBvZmZzZXQpOworfQor
bm9JbmxpbmUobWFrZSk7CisKK2Z1bmN0aW9uIGZvbyhvLCBpLCB2KSB7CisgICAgb1tpXSA9IHY7
Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBvID0gbWFrZSgpOwordmFyIHJlYWwgPSBuZXcg
SW50OEFycmF5KG8uYnVmZmVyKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgIHZhciBpbmRleCA9IGkgJSBvLmxlbmd0aDsKKyAgICB2YXIgdmFsdWUgPSBpICUgNzsKKyAg
ICBmb28obywgaW5kZXgsIHZhbHVlKTsKKyAgICB2YXIgcmVzdWx0ID0gcmVhbFtpbmRleCArIDFd
OworICAgIGlmIChyZXN1bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93ICJXcml0ZSB0ZXN0IGVy
cm9yOiBiYWQgcmVzdWx0IGZvciBpbmRleCA9ICIgKyBpbmRleCArICI6ICIgKyByZXN1bHQgKyAi
OyBleHBlY3RlZCAiICsgdmFsdWU7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263240</attachid>
            <date>2015-10-15 19:55:01 -0700</date>
            <delta_ts>2015-10-16 15:42:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>24969</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxMTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE1LTEwLTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Q29weUJhcnJpZXIgbXVzdCBiZSBhdm9pZGVkIGZvciBzbG93IFR5cGVkQXJyYXlzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAyMTcKKyAgICAgICAg
cmRhcjovL3Byb2JsZW0vMjMxMjg3OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBDaGFuZ2UgaG93IHdlIGFjY2VzcyBhcnJheSBidWZmZXIgdmlld3Mg
c28gdGhhdCB3ZSBkb24ndCBmaXJlIHRoZSBiYXJyaWVyIHNsb3cgcGF0aCwgYW5kCisgICAgICAg
IGRvbid0IG1hc2sgb2ZmIHRoZSBzcGFjZUJpdHMsIGlmIHRoZSB2aWV3IGlzIG5vdCBGYXN0VHlw
ZWRBcnJheS4gVGhhdCdzIGJlY2F1c2UgaW4gdGhhdCBjYXNlCisgICAgICAgIG1fdmVjdG9yIGNv
dWxkIGJlIG1pc2FsaWduZWQgYW5kIHNvIGhhdmUgbWVhbmluZ2Z1bCBub24tc3BhY2UgZGF0YSBp
biB0aGUgc3BhY2VCaXRzLiBBbHNvIGluCisgICAgICAgIHRoYXQgY2FzZSwgbV92ZWN0b3IgZG9l
cyBub3QgcG9pbnQgaW50byBjb3BpZWQgc3BhY2UuCisKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpsb2FkVmVjdG9yV2l0aEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0xMVk06OmNvcHlCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9MTFZNOjppc0luVG9TcGFjZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6bG9hZEJ1dHRlcmZseVJlYWRPbmx5KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9MTFZNOjpsb2FkVmVjdG9yUmVhZE9ubHkpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0xMVk06OnJlbW92ZVNwYWNlQml0cyk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6aXNGYXN0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YmFzZUluZGV4KToKKyAgICAgICAgKiBoZWFwL0Nv
cHlCYXJyaWVyLmg6CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyQmFzZTo6Z2V0V2l0aG91dEJh
cnJpZXIpOgorICAgICAgICAoSlNDOjpDb3B5QmFycmllckJhc2U6OmdldFByZWRpY2F0ZWQpOgor
ICAgICAgICAoSlNDOjpDb3B5QmFycmllckJhc2U6OmdldCk6CisgICAgICAgIChKU0M6OkNvcHlC
YXJyaWVyQmFzZTo6Y29weVN0YXRlKToKKyAgICAgICAgKEpTQzo6Q29weUJhcnJpZXI6OmdldCk6
CisgICAgICAgIChKU0M6OkNvcHlCYXJyaWVyOjpnZXRQcmVkaWNhdGVkKToKKyAgICAgICAgKEpT
Qzo6Q29weUJhcnJpZXI6OnNldCk6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y29weUJhcnJpZXIpOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMu
Y3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmTm90VHlwZSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZGYXN0VHlwZWRBcnJheSk6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RGYXN0VHlwZWRBcnJheSk6
CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6bG9hZFR5cGVkQXJyYXlWZWN0b3IpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTik6CisgICAgICAgICogaml0
L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmJyYW5j
aFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZUb1Nw
YWNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpicmFuY2hJZk5vdFRvU3BhY2Up
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OnJlbW92ZVNwYWNlQml0cyk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQpOgorICAgICAg
ICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdElu
dFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRB
cnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaDoKKyAgICAgICAgKEpTQzo6SlNB
cnJheUJ1ZmZlclZpZXc6OnZlY3Rvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3
OjpsZW5ndGgpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkpTQXJyYXlCdWZmZXJWaWV3OjpieXRlT2Zmc2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Lmg6CisgICAgICAgIChKU0M6OkpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Ojp0eXBlZFZlY3Rvcik6CisgICAgICAgICogcnVudGltZS9KU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNHZW5lcmljVHlw
ZWRBcnJheVZpZXc8QWRhcHRvcj46OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAoSlNDOjpK
U0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6c2xvd0Rvd25BbmRXYXN0ZU1lbW9yeSk6
CisgICAgICAgICogdGVzdHMvc3RyZXNzL21pc2FsaWduZWQtaW50OC12aWV3LXJlYWQuanM6IEFk
ZGVkLgorICAgICAgICAobWFrZSk6CisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0
cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5qczogQWRkZWQuCisgICAgICAgIChtYWtl
KToKKyAgICAgICAgKGZvbyk6CisKIDIwMTUtMTAtMTUgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1x
dWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTEx
MzUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTkxMTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzODUsMTQgKzQzODUsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgICAgICAKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoaXNUeXBlZFZpZXcobm9kZS0+YXJyYXlNb2RlKCku
dHlwZWRBcnJheVR5cGUoKSkpOwotICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNl
dE9mVmVjdG9yKCkpLAotICAgICAgICAgICAgc3RvcmFnZVJlZyk7CisKKyAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgZmFpbCA9IG1faml0LmxvYWRUeXBlZEFycmF5VmVjdG9yKGJhc2VSZWcsIHN0
b3JhZ2VSZWcpOwogCiAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmTm90VG9TcGFjZShz
dG9yYWdlUmVnKSwKLSAgICAgICAgICAgICAgICB0aGlzLCBvcGVyYXRpb25HZXRBcnJheUJ1ZmZl
clZlY3Rvciwgc3RvcmFnZVJlZywgYmFzZVJlZykpOworICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KGZhaWwsIHRoaXMsIG9wZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yLCBzdG9yYWdlUmVnLCBi
YXNlUmVnKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQ0MTcsNyArNDQxNCwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJhCiAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5yZW1vdmVTcGFjZUJpdHMoZGF0YUdQ
Uik7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHZlY3RvckdQUik7CisgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IHZlY3RvclJlYWR5OworICAgIHZlY3RvclJlYWR5LmFwcGVuZCht
X2ppdC5icmFuY2hJZlRvU3BhY2UodmVjdG9yR1BSKSk7CisgICAgdmVjdG9yUmVhZHkuYXBwZW5k
KG1faml0LmJyYW5jaElmTm90RmFzdFR5cGVkQXJyYXkoYmFzZUdQUikpOwogICAgIG1faml0LnJl
bW92ZVNwYWNlQml0cyh2ZWN0b3JHUFIpOworICAgIHZlY3RvclJlYWR5LmxpbmsoJm1faml0KTsK
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGRhdGFHUFIsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZBcnJheUJ1ZmZlcigpKSwgZGF0YUdQUik7CiAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkYXRhR1BSLCBBcnJheUJ1ZmZlcjo6b2Zmc2V0T2ZE
YXRhKCkpLCBkYXRhR1BSKTsKICAgICBtX2ppdC5zdWJQdHIoZGF0YUdQUiwgdmVjdG9yR1BSKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEzOSwzNSArNjEzOSw2OCBAQCBw
cml2YXRlOgogICAgIAogICAgIExWYWx1ZSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9i
amVjdCkKICAgICB7CisgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2Fk
UHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwogICAgICAgICBy
ZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2Jq
ZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3RvciksCi0gICAgICAgICAgICBvcGVy
YXRpb25HZXRBcnJheUJ1ZmZlclZlY3Rvcik7CisgICAgICAgICAgICBmYXN0UmVzdWx0VmFsdWUs
CisgICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgibG9hZFZlY3RvcldpdGhCYXJy
aWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JXaXRoQmFycmllciBjb250aW51
YXRpb24iKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShj
b250aW51YXRpb24pKTsKKworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgICAg
ICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExh
enlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAg
ICAgICAgICAgICAgICAgICB9LCBvYmplY3QpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAg
ICAgICAgICB9KTsKICAgICB9Ci0gICAgCisKICAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVl
IG9iamVjdCwgTFZhbHVlIHBvaW50ZXIsIFBfSklUT3BlcmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rp
b24pCiAgICAgewotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgibG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkQnV0
dGVyZmx5V2l0aEJhcnJpZXIgY29udGludWF0aW9uIikpOworICAgICAgICByZXR1cm4gY29weUJh
cnJpZXIoCisgICAgICAgICAgICBwb2ludGVyLAorICAgICAgICAgICAgWyZdICgpIC0+IExWYWx1
ZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAg
ICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRp
cmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsKKyAgICAgICAgICAg
IH0pOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgTFZhbHVl
IGNvcHlCYXJyaWVyKExWYWx1ZSBwb2ludGVyLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNvcHlCYXJyaWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjb3B5QmFycmllciBjb250aW51YXRpb24iKSk7
CiAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihwb2lu
dGVyKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQudGVzdElzWmVy
b1B0cihwb2ludGVyLCBtX291dC5jb25zdEludFB0cihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0
cykpLAotICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgp
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKHBvaW50ZXIpLCB1c3VhbGx5KGNv
bnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwogCiAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAg
ICAgTFZhbHVlIGNhbGwgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAot
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aEZ1bmN0aW9uLCBsb2NhdGlvbnNbMF0uZGlyZWN0
R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICB9LCBvYmplY3Qp
OwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGwp
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZ1bmN0
b3IoKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgcmV0dXJuIG1fb3V0
LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgIH0KIAorICAg
IExWYWx1ZSBpc0luVG9TcGFjZShMVmFsdWUgcG9pbnRlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBtX291dC50ZXN0SXNaZXJvUHRyKHBvaW50ZXIsIG1fb3V0LmNvbnN0SW50UHRyKENvcHlCYXJy
aWVyQmFzZTo6c3BhY2VCaXRzKSk7CisgICAgfQorCiAgICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlS
ZWFkT25seShMVmFsdWUgb2JqZWN0KQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlbW92ZVNwYWNl
Qml0cyhtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsK
QEAgLTYxNzUsNyArNjIwOCwyNSBAQCBwcml2YXRlOgogCiAgICAgTFZhbHVlIGxvYWRWZWN0b3JS
ZWFkT25seShMVmFsdWUgb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbW92ZVNwYWNl
Qml0cyhtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0
b3IpKTsKKyAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQdHIob2Jq
ZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisKKyAgICAgICAgTEJhc2lj
QmxvY2sgcG9zc2libHlGcm9tU3BhY2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0
b3JSZWFkT25seSBwb3NzaWJseSBmcm9tIHNwYWNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFkT25seSBj
b250aW51YXRpb24iKSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lu
VG9TcGFjZShmYXN0UmVzdWx0VmFsdWUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShw
b3NzaWJseUZyb21TcGFjZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8ocG9zc2libHlGcm9tU3BhY2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
TFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgIGlzRmFz
dFR5cGVkQXJyYXkob2JqZWN0KSwgcmVtb3ZlU3BhY2VCaXRzKGZhc3RSZXN1bHRWYWx1ZSksIGZh
c3RSZXN1bHRWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1
bHQsIHNsb3dSZXN1bHQpOwogICAgIH0KIAogICAgIExWYWx1ZSByZW1vdmVTcGFjZUJpdHMoTFZh
bHVlIHN0b3JhZ2UpCkBAIC02MTgzLDYgKzYyMzQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIG1fb3V0LmJpdEFuZCgKICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRy
KH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKSk7CiAg
ICAgfQorCisgICAgTFZhbHVlIGlzRmFzdFR5cGVkQXJyYXkoTFZhbHVlIG9iamVjdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihv
YmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSksCisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSk7CisgICAgfQogICAgIAogICAgIFR5cGVkUG9p
bnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2Us
IExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db3B5QmFycmllci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJKHJldmlzaW9uIDE5
MTE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvcHlCYXJyaWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTc0LDE0ICs3NCwyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZhbHVl
OwogICAgIH0KIAorICAgIC8vIFVzZSB0aGlzIHZlcnNpb24gb2YgZ2V0KCkgaWYgeW91IG9ubHkg
d2FudCB0byBleGVjdXRlIHRoZSBiYXJyaWVyIHNsb3cgcGF0aCBpZiBzb21lIGNvbmRpdGlvbgor
ICAgIC8vIGhvbGRzLCBhbmQgeW91IG9ubHkgd2FudCB0byBldmFsdWF0ZSB0aGF0IGNvbmRpdGlv
biBhZnRlciBmaXJzdCBjaGVja2luZyB0aGUgYmFycmllcidzCisgICAgLy8gY29uZGl0aW9uLiBV
c3VhbGx5LCB5b3UganVzdCB3YW50IHRvIHVzZSBnZXQoKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQqIGdldFByZWRpY2F0ZWQoY29uc3QgSlNDZWxsKiBvd25lciwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHZvaWQqIHJlc3Vs
dCA9IG1fdmFsdWU7CisgICAgICAgIGlmIChVTkxJS0VMWShiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihyZXN1bHQpICYgc3BhY2VCaXRzKSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0b3IoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSGVhcDo6Y29weUJhcnJpZXIob3duZXIsIG1fdmFsdWUpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgLy8gV2hlbiB3
ZSBhcmUgaW4gdGhlIGNvbmN1cnJlbnQgY29weWluZyBwaGFzZSwgdGhpcyBtZXRob2QgbWF5IGxv
Y2sgdGhlIGJhcnJpZXIgb2JqZWN0IChpLmUuIHRoZSBmaWVsZAogICAgIC8vIHBvaW50aW5nIHRv
IGNvcGllZCBzcGFjZSkgYW5kIGNhbGwgZGlyZWN0bHkgaW50byB0aGUgb3duaW5nIG9iamVjdCdz
IGNvcHlCYWNraW5nU3RvcmUoKSBtZXRob2QuCiAgICAgdm9pZCogZ2V0KGNvbnN0IEpTQ2VsbCog
b3duZXIpIGNvbnN0CiAgICAgewotICAgICAgICB2b2lkKiByZXN1bHQgPSBtX3ZhbHVlOwotICAg
ICAgICBpZiAoVU5MSUtFTFkoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0KSAmIHNwYWNl
Qml0cykpCi0gICAgICAgICAgICByZXR1cm4gSGVhcDo6Y29weUJhcnJpZXIob3duZXIsIG1fdmFs
dWUpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gZ2V0UHJlZGljYXRl
ZChvd25lciwgW10gKCkgLT4gYm9vbCB7IHJldHVybiB0cnVlOyB9KTsKICAgICB9CiAKICAgICBD
b3B5U3RhdGUgY29weVN0YXRlKCkgY29uc3QKQEAgLTE1OSw2ICsxNzAsMTIgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4oQ29weUJhcnJpZXJCYXNlOjpn
ZXQob3duZXIpKTsKICAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IFQqIGdldFByZWRpY2F0ZWQoY29uc3QgSlNDZWxsKiBvd25lciwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VCo+KENvcHlC
YXJyaWVyQmFzZTo6Z2V0UHJlZGljYXRlZChvd25lciwgZnVuY3RvcikpOworICAgIH0KICAgICAK
ICAgICB2b2lkIHNldChWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIFQqIHZhbHVlKQogICAg
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxOTExNTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwMiw3ICsxMDAyLDExIEBAIHZvaWQgSGVhcDo6YWRkVG9SZW1lbWJlcmVkU2V0KGNvbnN0
IEpTQ2UKIAogdm9pZCogSGVhcDo6Y29weUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgdm9pZComIHBv
aW50ZXIpCiB7Ci0gICAgLy8gRG8gbm90aGluZyBmb3Igbm93LgorICAgIC8vIERvIG5vdGhpbmcg
Zm9yIG5vdywgZXhjZXB0IG1ha2luZyBzdXJlIHRoYXQgdGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQg
b2ZmLiBUaGlzIGhlbHBzIHRvCisgICAgLy8gc2ltdWxhdGUgZW5vdWdoIG9mIHRoaXMgYmFycmll
ciB0aGF0IGF0IGxlYXN0IHdlIGNhbiB0ZXN0IHRoZSBsb3cgYml0cyBhc3N1bXB0aW9ucy4KKyAg
ICBwb2ludGVyID0gYml0d2lzZV9jYXN0PHZvaWQqPigKKyAgICAgICAgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ocG9pbnRlcikgJiB+c3RhdGljX2Nhc3Q8dWludHB0cl90PihDb3B5QmFycmllckJh
c2U6OnNwYWNlQml0cykpOworICAgIAogICAgIHJldHVybiBwb2ludGVyOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsMzMgQEAgQXNzZW1ibHlIZWxwZXJzOjpK
dW1wTGlzdCBBc3NlbWJseUhlbHBlcgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK0Fzc2VtYmx5
SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmJyYW5jaElmRmFzdFR5cGVkQXJyYXkoR1BS
UmVnIGJhc2VHUFIpCit7CisgICAgcmV0dXJuIGJyYW5jaDMyKAorICAgICAgICBFcXVhbCwKKyAg
ICAgICAgQWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZNb2RlKCkp
LAorICAgICAgICBUcnVzdGVkSW1tMzIoRmFzdFR5cGVkQXJyYXkpKTsKK30KKworQXNzZW1ibHlI
ZWxwZXJzOjpKdW1wIEFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOb3RGYXN0VHlwZWRBcnJheShH
UFJSZWcgYmFzZUdQUikKK3sKKyAgICByZXR1cm4gYnJhbmNoMzIoCisgICAgICAgIE5vdEVxdWFs
LAorICAgICAgICBBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZk1v
ZGUoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihGYXN0VHlwZWRBcnJheSkpOworfQorCitBc3Nl
bWJseUhlbHBlcnM6Okp1bXAgQXNzZW1ibHlIZWxwZXJzOjpsb2FkVHlwZWRBcnJheVZlY3RvcihH
UFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUikKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChi
YXNlR1BSICE9IHJlc3VsdEdQUik7CisgICAgCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2VHUFIs
IEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgcmVzdWx0R1BSKTsKKyAgICBK
dW1wIG9rID0gYnJhbmNoSWZUb1NwYWNlKHJlc3VsdEdQUik7CisgICAgSnVtcCByZXN1bHQgPSBi
cmFuY2hJZkZhc3RUeXBlZEFycmF5KGJhc2VHUFIpOworICAgIG9rLmxpbmsodGhpcyk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6OnB1cmlmeU5hTihGUFJS
ZWcgZnByKQogewogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE5hTiA9IGJyYW5jaERvdWJs
ZShEb3VibGVFcXVhbCwgZnByLCBmcHIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTYsNiAr
NzU2LDExIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAorICAgIEp1bXAgYnJhbmNoSWZUb1Nw
YWNlKEdQUlJlZyBzdG9yYWdlR1BSKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3Qz
MihaZXJvLCBzdG9yYWdlR1BSLCBUcnVzdGVkSW1tMzIoQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJp
dHMpKTsKKyAgICB9CisKICAgICBKdW1wIGJyYW5jaElmTm90VG9TcGFjZShHUFJSZWcgc3RvcmFn
ZUdQUikKICAgICB7CiAgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoTm9uWmVybywgc3RvcmFn
ZUdQUiwgVHJ1c3RlZEltbTMyKENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSk7CkBAIC03NjUs
NiArNzcwLDEzIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGFuZFB0cihUcnVzdGVkSW1tUHRy
KH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSksIHN0
b3JhZ2VHUFIpOwogICAgIH0KKworICAgIEp1bXAgYnJhbmNoSWZGYXN0VHlwZWRBcnJheShHUFJS
ZWcgYmFzZUdQUik7CisgICAgSnVtcCBicmFuY2hJZk5vdEZhc3RUeXBlZEFycmF5KEdQUlJlZyBi
YXNlR1BSKTsKKworICAgIC8vIFJldHVybnMgYSBqdW1wIHRvIHNsb3cgcGF0aCBmb3Igd2hlbiB3
ZSBuZWVkIHRvIGV4ZWN1dGUgdGhlIGJhcnJpZXIuIE5vdGUgdGhhdCBiYXNlR1BSIGFuZAorICAg
IC8vIHJlc3VsdEdQUiBtdXN0IGJlIGRpZmZlcmVudC4KKyAgICBKdW1wIGxvYWRUeXBlZEFycmF5
VmVjdG9yKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0R1BSKTsKICAgICAKICAgICBzdGF0
aWMgQWRkcmVzcyBhZGRyZXNzRm9yQnl0ZU9mZnNldChwdHJkaWZmX3QgYnl0ZU9mZnNldCkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcAkocmV2aXNpb24gMTkxMTUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NTUsOCArMTQ1NSw3IEBA
IEpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEIKICAgICBsb2FkOChBZGRy
ZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0z
Mih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdFRvU3BhY2Uoc2NyYXRjaCkpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQobG9hZFR5cGVkQXJyYXlWZWN0b3IoYmFzZSwgc2NyYXRjaCkpOwogICAgIAogICAgIHN3
aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDE6CkBAIC0xNTI3LDggKzE1MjYs
NyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheUdlCiAgICAgbG9hZDgo
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CiAg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVk
SW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7CiAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKHNjcmF0Y2gpKTsKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGxvYWRUeXBlZEFycmF5VmVjdG9yKGJhc2UsIHNjcmF0Y2gpKTsKICAgICAKICAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CiAgICAgY2FzZSA0OgpAQCAtMTU5NSw4ICsx
NTkzLDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBlZEFycmF5UHV0QgogICAgIAog
ICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMgaW4gZ2V0X2J5X3Zh
bCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4cGVjdHMgdGhlIGJhc2UgdG8g
YmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJW
aWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZOb3RUb1NwYWNlKGxhdGVTY3JhdGNoKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBsYXRlU2NyYXRjaCkpOwogICAgIAogICAgIGlm
IChpc0NsYW1wZWQodHlwZSkpIHsKICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09
IDEpOwpAQCAtMTY4MSw4ICsxNjc4LDcgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5
cGVkQXJyYXlQdQogICAgIAogICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJh
c2UgYXMgaW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKICAgICAvLyBwYXRoIGV4
cGVjdHMgdGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCi0gICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RUb1NwYWNlKGxhdGVTY3JhdGNoKSk7Cisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChsb2FkVHlwZWRBcnJheVZlY3RvcihiYXNlLCBsYXRlU2NyYXRj
aCkpOwogICAgIAogICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKICAgICBjYXNlIDQ6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmgJKHJldmlzaW9uIDE5MTE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEsMTUg
QEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiBpbXBsKCk7CiAgICAg
dm9pZCBuZXV0ZXIoKTsKICAgICAKLSAgICB2b2lkKiB2ZWN0b3IoKSB7IHJldHVybiBtX3ZlY3Rv
ci5nZXQodGhpcyk7IH0KKyAgICB2b2lkKiB2ZWN0b3IoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmVjdG9yLmdldFByZWRpY2F0ZWQoCisgICAgICAgICAgICB0aGlzLAorICAgICAgICAgICAg
W3RoaXNdICgpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBtb2RlKCkgPT0gRmFz
dFR5cGVkQXJyYXk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCiAgICAgdW5zaWduZWQg
Ynl0ZU9mZnNldCgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVu
Z3RoOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oCShyZXZpc2lvbiAxOTExNTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlld0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBAQCBpbmxpbmUgdW5zaWduZWQgSlNBcnJheUJ1ZmZl
clZpZXc6OmJ5dGVPCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIHB0cmRpZmZfdCBkZWx0
YSA9Ci0gICAgICAgIGJpdHdpc2VfY2FzdDx1aW50OF90Kj4obV92ZWN0b3IuZ2V0KHRoaXMpKSAt
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihidWZmZXIoKS0+ZGF0YSgpKTsKKyAgICAgICAgYml0d2lz
ZV9jYXN0PHVpbnQ4X3QqPih2ZWN0b3IoKSkgLSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oYnVmZmVy
KCktPmRhdGEoKSk7CiAgICAgCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGRlbHRhKTsKICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihyZXN1bHQp
ID09IGRlbHRhKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkocmV2aXNpb24gMTkxMTUwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgcHVibGljOgogICAgIAogICAgIGNvbnN0
IHR5cGVuYW1lIEFkYXB0b3I6OlR5cGUqIHR5cGVkVmVjdG9yKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdHlwZW5hbWUgQWRhcHRvcjo6VHlwZSo+KG1f
dmVjdG9yLmdldCh0aGlzKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Y29uc3QgdHlw
ZW5hbWUgQWRhcHRvcjo6VHlwZSo+KHZlY3RvcigpKTsKICAgICB9CiAgICAgdHlwZW5hbWUgQWRh
cHRvcjo6VHlwZSogdHlwZWRWZWN0b3IoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4obV92ZWN0b3IuZ2V0KHRoaXMpKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBBZGFwdG9yOjpUeXBlKj4odmVjdG9yKCkp
OwogICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIG1lYW50IHRvIG1hdGNoIGluZGV4
ZWQgYWNjZXNzIG1ldGhvZHMgdGhhdCBKU09iamVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmgJKHJldmlzaW9uIDE5MTE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NzAsNyArNDcwLDcgQEAgdm9pZCBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxBZGFwdG9yPjo6Ywog
ICAgIGlmICh0b2tlbiA9PSBUeXBlZEFycmF5VmVjdG9yQ29weVRva2VuCiAgICAgICAgICYmIHZp
c2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0V2l0aG91dEJh
cnJpZXIoKSkpIHsKICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fdmVjdG9yKTsKLSAgICAg
ICAgdm9pZCogb2xkVmVjdG9yID0gdGhpc09iamVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3Qp
OworICAgICAgICB2b2lkKiBvbGRWZWN0b3IgPSB0aGlzT2JqZWN0LT52ZWN0b3IoKTsKICAgICAg
ICAgdm9pZCogbmV3VmVjdG9yID0gdmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKHRoaXNPYmplY3Qt
PmJ5dGVTaXplKCkpOwogICAgICAgICBtZW1jcHkobmV3VmVjdG9yLCBvbGRWZWN0b3IsIHRoaXNP
YmplY3QtPmJ5dGVTaXplKCkpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX3ZlY3Rvci5zZXRXaXRo
b3V0QmFycmllcihzdGF0aWNfY2FzdDxjaGFyKj4obmV3VmVjdG9yKSk7CkBAIC01MDksNyArNTA5
LDcgQEAgQXJyYXlCdWZmZXIqIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3PEFkYQogICAgICAgICBB
U1NFUlQodGhpc09iamVjdC0+bV92ZWN0b3IpOwogICAgICAgICAvLyBSZXVzZSBhbHJlYWR5IGFs
bG9jYXRlZCBtZW1vcnkgaWYgYXQgYWxsIHBvc3NpYmxlLgogICAgICAgICB0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseS5zZXRXaXRob3V0QmFycmllcigKLSAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxJ
bmRleGluZ0hlYWRlcio+KHRoaXNPYmplY3QtPm1fdmVjdG9yLmdldCh0aGlzT2JqZWN0KSktPmJ1
dHRlcmZseSgpKTsKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxJbmRleGluZ0hlYWRlcio+KHRo
aXNPYmplY3QtPnZlY3RvcigpKS0+YnV0dGVyZmx5KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IFZNJiB2bSA9ICpoZWFwLT52bSgpOwogICAgICAgICB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5z
ZXQodm0sIHRoaXNPYmplY3QsIEJ1dHRlcmZseTo6Y3JlYXRlT3JHcm93QXJyYXlSaWdodCgKQEAg
LTUyMSwxNCArNTIxLDE0IEBAIEFycmF5QnVmZmVyKiBKU0dlbmVyaWNUeXBlZEFycmF5VmlldzxB
ZGEKICAgICAKICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPm1fbW9kZSkgewogICAgIGNhc2UgRmFz
dFR5cGVkQXJyYXk6Ci0gICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGUodGhpc09i
amVjdC0+bV92ZWN0b3IuZ2V0KHRoaXNPYmplY3QpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkp
OworICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHRoaXNPYmplY3QtPnZlY3Rv
cigpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgY2FzZSBPdmVyc2l6ZVR5cGVkQXJyYXk6CiAgICAgICAgIC8vIEZJWE1FOiBjb25zaWRl
ciBkb2luZyBzb21ldGhpbmcgbGlrZSAic3VidHJhY3RpbmciIGZyb20gZXh0cmEgbWVtb3J5CiAg
ICAgICAgIC8vIGNvc3QsIHNpbmNlIHJpZ2h0IG5vdyB0aGlzIGNhc2Ugd2lsbCBjYXVzZSB0aGUg
R0MgdG8gdGhpbmsgdGhhdCB3ZSByZWFsbG9jYXRlZAogICAgICAgICAvLyB0aGUgd2hvbGUgYnVm
ZmVyLgotICAgICAgICBidWZmZXIgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlQWRvcHRlZCh0aGlzT2Jq
ZWN0LT5tX3ZlY3Rvci5nZXQodGhpc09iamVjdCksIHRoaXNPYmplY3QtPmJ5dGVMZW5ndGgoKSk7
CisgICAgICAgIGJ1ZmZlciA9IEFycmF5QnVmZmVyOjpjcmVhdGVBZG9wdGVkKHRoaXNPYmplY3Qt
PnZlY3RvcigpLCB0aGlzT2JqZWN0LT5ieXRlTGVuZ3RoKCkpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvbWlzYWxpZ25lZC1pbnQ4LXZpZXctcmVhZC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21pc2FsaWduZWQtaW50OC12aWV3LXJlYWQuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21pc2Fs
aWduZWQtaW50OC12aWV3LXJlYWQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAor
ZnVuY3Rpb24gbWFrZShvZmZzZXQpIHsKKyAgICAvLyBEZWZhdWx0IG9mZnNldCBpcyAxLgorICAg
IGlmIChvZmZzZXQgPT09IHZvaWQgMCkKKyAgICAgICAgb2Zmc2V0ID0gMTsKKyAgICAKKyAgICB2
YXIgaW50OEFycmF5ID0gbmV3IEludDhBcnJheSgxMDApOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgaW50OEFycmF5Lmxlbmd0aDsgKytpKQorICAgICAgICBpbnQ4QXJyYXlbaV0gPSBpOworCisg
ICAgcmV0dXJuIG5ldyBJbnQ4QXJyYXkoaW50OEFycmF5LmJ1ZmZlciwgb2Zmc2V0LCBpbnQ4QXJy
YXkubGVuZ3RoIC0gb2Zmc2V0KTsKK30KK25vSW5saW5lKG1ha2UpOworCitmdW5jdGlvbiBmb28o
bywgaSkgeworICAgIHJldHVybiBvW2ldOworfQorCitub0lubGluZShmb28pOworCit2YXIgbyA9
IG1ha2UoKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBpbmRl
eCA9IGkgJSBvLmxlbmd0aDsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKG8sIGluZGV4KTsKKyAgICBp
ZiAocmVzdWx0ICE9IGluZGV4ICsgMSkKKyAgICAgICAgdGhyb3cgIlJlYWQgdGVzdCBlcnJvcjog
YmFkIHJlc3VsdCBmb3IgaW5kZXggPSAiICsgaW5kZXggKyAiOiAiICsgcmVzdWx0ICsgIjsgZXhw
ZWN0ZWQgIiArIChpbmRleCArIDEpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21pc2FsaWduZWQtaW50OC12aWV3LXdy
aXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9taXNhbGlnbmVkLWludDgtdmlldy13cml0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMwIEBACitmdW5jdGlvbiBtYWtlKG9mZnNldCkgeworICAgIC8vIERlZmF1bHQgb2Zmc2V0IGlz
IDEuCisgICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKQorICAgICAgICBvZmZzZXQgPSAxOworICAg
IAorICAgIHZhciBpbnQ4QXJyYXkgPSBuZXcgSW50OEFycmF5KDEwMCk7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBpbnQ4QXJyYXkubGVuZ3RoOyArK2kpCisgICAgICAgIGludDhBcnJheVtpXSA9
IGk7CisKKyAgICByZXR1cm4gbmV3IEludDhBcnJheShpbnQ4QXJyYXkuYnVmZmVyLCBvZmZzZXQs
IGludDhBcnJheS5sZW5ndGggLSBvZmZzZXQpOworfQorbm9JbmxpbmUobWFrZSk7CisKK2Z1bmN0
aW9uIGZvbyhvLCBpLCB2KSB7CisgICAgb1tpXSA9IHY7Cit9CisKK25vSW5saW5lKGZvbyk7CisK
K3ZhciBvID0gbWFrZSgpOwordmFyIHJlYWwgPSBuZXcgSW50OEFycmF5KG8uYnVmZmVyKTsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBpbmRleCA9IGkgJSBvLmxl
bmd0aDsKKyAgICB2YXIgdmFsdWUgPSBpICUgNzsKKyAgICBmb28obywgaW5kZXgsIHZhbHVlKTsK
KyAgICB2YXIgcmVzdWx0ID0gcmVhbFtpbmRleCArIDFdOworICAgIGlmIChyZXN1bHQgIT0gdmFs
dWUpCisgICAgICAgIHRocm93ICJXcml0ZSB0ZXN0IGVycm9yOiBiYWQgcmVzdWx0IGZvciBpbmRl
eCA9ICIgKyBpbmRleCArICI6ICIgKyByZXN1bHQgKyAiOyBleHBlY3RlZCAiICsgdmFsdWU7Cit9
CisK
</data>
<flag name="review"
          id="288412"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>