<?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>145618</bug_id>
          
          <creation_ts>2015-06-03 14:39:05 -0700</creation_ts>
          <short_desc>Simplify unboxing of double JSValues known to be not NaN and not Int32</short_desc>
          <delta_ts>2015-06-04 22:00:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>145666</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</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>1099292</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-03 14:39:05 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099294</commentid>
    <comment_count>1</comment_count>
      <attachid>254211</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-03 14:45:53 -0700</bug_when>
    <thetext>Created attachment 254211
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099378</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-03 21:04:47 -0700</bug_when>
    <thetext>This is a speed-up on small benchmarks, but it hurts on larger codebases.  We sort of slowly discover that things that usually loaded double might also load integers.  That sucks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099394</commentid>
    <comment_count>3</comment_count>
      <attachid>254243</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-03 21:49:44 -0700</bug_when>
    <thetext>Created attachment 254243
the fully speculative approach

It&apos;s not a speed-up.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r185168)
&quot;DoubleRealUse&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r185168)

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               DoubleRealUse                                   
SunSpider:
   3d-cube                                            5.2075+-0.0833     ?      5.3324+-0.1867        ? might be 1.0240x slower
   3d-morph                                           6.1673+-0.3740            5.8788+-0.1221          might be 1.0491x faster
   3d-raytrace                                        6.5563+-0.0789            6.4498+-0.0731          might be 1.0165x faster
   access-binary-trees                                2.4699+-0.2710     ?      2.5842+-0.3809        ? might be 1.0463x slower
   access-fannkuch                                    6.1806+-0.1458            6.1668+-0.0737        
   access-nbody                                       3.1104+-0.0510            3.0740+-0.3740          might be 1.0118x faster
   access-nsieve                                      3.5695+-0.2341            3.3698+-0.0740          might be 1.0592x faster
   bitops-3bit-bits-in-byte                           1.6565+-0.0785     ?      1.6637+-0.0660        ?
   bitops-bits-in-byte                                4.0986+-0.2763            4.0587+-0.3927        
   bitops-bitwise-and                                 2.1854+-0.0838            2.1850+-0.0748        
   bitops-nsieve-bits                                 3.2852+-0.0727     ?      3.3074+-0.1230        ?
   controlflow-recursive                              3.0378+-0.1247            3.0242+-0.0948        
   crypto-aes                                         4.7883+-0.2016     ?      4.8606+-0.2916        ? might be 1.0151x slower
   crypto-md5                                         3.2500+-0.2745     ?      3.2623+-0.4295        ?
   crypto-sha1                                        3.8812+-0.3857            3.7139+-0.2853          might be 1.0450x faster
   date-format-tofte                                  9.3881+-0.3306     ?      9.4261+-0.1504        ?
   date-format-xparb                                  5.8167+-0.1341     ?      6.0332+-0.2083        ? might be 1.0372x slower
   math-cordic                                        3.2987+-0.2547            3.2331+-0.1280          might be 1.0203x faster
   math-partial-sums                                  5.7467+-0.8611     ?      5.8330+-1.0082        ? might be 1.0150x slower
   math-spectral-norm                                 2.0642+-0.0330     ?      2.1838+-0.1491        ? might be 1.0579x slower
   regexp-dna                                         8.6687+-1.6371            8.6411+-1.5925        
   string-base64                                      5.0812+-0.2293     ?      5.1669+-0.1582        ? might be 1.0169x slower
   string-fasta                                       7.4731+-1.0590            6.6886+-0.0766          might be 1.1173x faster
   string-tagcloud                                   10.2870+-1.0441           10.1497+-0.4703          might be 1.0135x faster
   string-unpack-code                                21.3035+-0.8507           20.7372+-0.6711          might be 1.0273x faster
   string-validate-input                              6.0163+-0.1456            5.9932+-0.2005        

   &lt;arithmetic&gt;                                       5.5611+-0.1496            5.5007+-0.0727          might be 1.0110x faster

                                                        TipOfTree               DoubleRealUse                                   
LongSpider:
   3d-cube                                          902.2222+-7.6102          895.4152+-5.1156        
   3d-morph                                        1542.4805+-25.7183        1528.7774+-2.8184        
   3d-raytrace                                      696.4887+-3.9326     ?    725.1276+-37.4852       ? might be 1.0411x slower
   access-binary-trees                             1002.5318+-7.2856     ?   1004.8466+-8.3921        ?
   access-fannkuch                                  332.7771+-7.6106     ?    339.3682+-16.9684       ? might be 1.0198x slower
   access-nbody                                     667.3458+-80.2716         607.5635+-26.6574         might be 1.0984x faster
   access-nsieve                                    478.9073+-6.4017     ?    480.7949+-6.8700        ?
   bitops-3bit-bits-in-byte                          45.7203+-2.2841           45.2336+-1.0784          might be 1.0108x faster
   bitops-bits-in-byte                               99.7555+-1.0750     ?    100.5952+-6.1329        ?
   bitops-nsieve-bits                               423.4315+-4.3478          421.3146+-2.6293        
   controlflow-recursive                            491.8769+-11.4132         486.4794+-13.3929         might be 1.0111x faster
   crypto-aes                                       705.0099+-7.8571     ?    709.0625+-8.0707        ?
   crypto-md5                                       517.1257+-7.5386     !    545.3444+-19.6261       ! definitely 1.0546x slower
   crypto-sha1                                      607.4552+-4.2406          599.2410+-4.6065          might be 1.0137x faster
   date-format-tofte                                770.1103+-61.8561         745.5965+-14.6196         might be 1.0329x faster
   date-format-xparb                                812.3102+-18.3401         803.2241+-16.6033         might be 1.0113x faster
   hash-map                                         184.2764+-2.0028     ?    184.8893+-4.9793        ?
   math-cordic                                      590.9546+-4.5418     ^    579.3164+-4.5807        ^ definitely 1.0201x faster
   math-partial-sums                                510.2572+-9.0965     ?    513.2317+-15.0406       ?
   math-spectral-norm                               575.7033+-26.2633         566.6305+-2.3492          might be 1.0160x faster
   string-base64                                    415.4858+-7.9618          415.1095+-13.2360       
   string-fasta                                     430.0212+-4.2098     ^    422.5883+-2.9173        ^ definitely 1.0176x faster
   string-tagcloud                                  198.2579+-5.7287          194.8677+-2.9214          might be 1.0174x faster

   &lt;geometric&gt;                                      457.2412+-2.8887          454.8856+-3.3251          might be 1.0052x faster

                                                        TipOfTree               DoubleRealUse                                   
V8Spider:
   crypto                                            57.5230+-3.3151           55.8582+-2.2353          might be 1.0298x faster
   deltablue                                         99.6683+-2.8588     ?    103.4340+-4.3219        ? might be 1.0378x slower
   earley-boyer                                      50.1773+-2.4286           48.4775+-2.6288          might be 1.0351x faster
   raytrace                                          42.7799+-2.9050           41.6053+-2.1656          might be 1.0282x faster
   regexp                                            83.7779+-2.0596     ?     85.2198+-2.3967        ? might be 1.0172x slower
   richards                                          86.1364+-9.4491           78.6632+-1.8901          might be 1.0950x faster
   splay                                             38.9261+-2.6066     ?     38.9561+-2.8811        ?

   &lt;geometric&gt;                                       61.7590+-1.5058           60.6784+-1.2904          might be 1.0178x faster

                                                        TipOfTree               DoubleRealUse                                   
Octane:
   encrypt                                           0.20342+-0.00187    ?     0.20669+-0.00742       ? might be 1.0161x slower
   decrypt                                           3.59392+-0.04761    ?     3.61798+-0.16179       ?
   deltablue                                x2       0.19611+-0.00159          0.19557+-0.00139       
   earley                                            0.39254+-0.00559    ?     0.39506+-0.00622       ?
   boyer                                             5.18598+-0.05464          5.14634+-0.05711       
   navier-stokes                            x2       5.19834+-0.04226    ?     5.29325+-0.20832       ? might be 1.0183x slower
   raytrace                                 x2       1.28006+-0.05758          1.26084+-0.05403         might be 1.0152x faster
   richards                                 x2       0.13058+-0.00830    ?     0.13404+-0.01589       ? might be 1.0265x slower
   splay                                    x2       0.40027+-0.00264    ?     0.40176+-0.00467       ?
   regexp                                   x2      31.67856+-0.25548         31.66756+-0.19514       
   pdfjs                                    x2      43.55866+-1.82793         42.77513+-0.39407         might be 1.0183x faster
   mandreel                                 x2      50.56241+-0.60535         50.29173+-0.17694       
   gbemu                                    x2      43.03807+-0.98079         42.18216+-0.60149         might be 1.0203x faster
   closure                                           0.59586+-0.00434    ^     0.57045+-0.00935       ^ definitely 1.0445x faster
   jquery                                            8.11527+-1.03202          7.46431+-0.58215         might be 1.0872x faster
   box2d                                    x2      12.57739+-0.13561    !    13.08020+-0.23478       ! definitely 1.0400x slower
   zlib                                     x2     384.27230+-18.61507   ?   398.42453+-1.88660       ? might be 1.0368x slower
   typescript                               x2     821.99406+-8.82742    ?   869.12850+-131.49051     ? might be 1.0573x slower

   &lt;geometric&gt;                                       6.64357+-0.03593    ?     6.66855+-0.08163       ? might be 1.0038x slower

                                                        TipOfTree               DoubleRealUse                                   
Kraken:
   ai-astar                                          236.443+-1.670            236.181+-1.787         
   audio-beat-detection                              107.971+-0.979      ^     105.016+-0.805         ^ definitely 1.0281x faster
   audio-dft                                         119.337+-2.966      ?     120.659+-4.208         ? might be 1.0111x slower
   audio-fft                                          85.316+-4.901      ?      87.926+-6.763         ? might be 1.0306x slower
   audio-oscillator                                   78.017+-2.126             77.422+-1.466         
   imaging-darkroom                                  105.233+-1.858      ?     108.444+-2.833         ? might be 1.0305x slower
   imaging-desaturate                                 64.715+-2.082             64.201+-1.512         
   imaging-gaussian-blur                             113.112+-5.271            110.452+-1.969           might be 1.0241x faster
   json-parse-financial                               48.111+-3.034      ?      49.360+-1.908         ? might be 1.0260x slower
   json-stringify-tinderbox                           28.977+-1.646             28.150+-0.096           might be 1.0294x faster
   stanford-crypto-aes                                57.852+-0.744      ?      58.111+-1.059         ?
   stanford-crypto-ccm                                50.009+-2.686             47.360+-1.271           might be 1.0559x faster
   stanford-crypto-pbkdf2                            110.913+-2.068      ?     113.451+-5.204         ? might be 1.0229x slower
   stanford-crypto-sha256-iterative                   44.537+-2.003             42.976+-0.941           might be 1.0363x faster

   &lt;arithmetic&gt;                                       89.324+-0.609             89.265+-0.672           might be 1.0007x faster

                                                        TipOfTree               DoubleRealUse                                   
JSRegress:
   abs-boolean                                        2.8376+-0.3266            2.7451+-0.0865          might be 1.0337x faster
   adapt-to-double-divide                            16.7734+-0.5426     ?     17.0118+-0.3433        ? might be 1.0142x slower
   aliased-arguments-getbyval                         1.4055+-0.1806            1.3113+-0.0304          might be 1.0718x faster
   allocate-big-object                                3.0466+-0.4180            3.0170+-0.4234        
   arguments-named-and-reflective                    13.2015+-1.3778           12.6938+-0.9487          might be 1.0400x faster
   arguments-out-of-bounds                           14.9971+-0.3518     ?     15.3243+-0.7902        ? might be 1.0218x slower
   arguments-strict-mode                             10.8641+-0.3232     ?     11.1214+-0.9365        ? might be 1.0237x slower
   arguments                                         10.0681+-0.6876            9.8380+-0.3512          might be 1.0234x faster
   arity-mismatch-inlining                            1.0291+-0.1555            1.0253+-0.1510        
   array-access-polymorphic-structure                 7.0399+-0.2564     ?      7.3042+-1.0102        ? might be 1.0375x slower
   array-nonarray-polymorhpic-access                 33.9204+-1.5068           33.8266+-1.2544        
   array-prototype-every                             87.0354+-2.3006           84.2882+-2.7259          might be 1.0326x faster
   array-prototype-forEach                           85.8264+-3.1040           82.1468+-2.9620          might be 1.0448x faster
   array-prototype-map                               91.2099+-2.0517     ?     93.5383+-5.3774        ? might be 1.0255x slower
   array-prototype-reduce                            82.2781+-4.1595           80.0555+-2.1708          might be 1.0278x faster
   array-prototype-reduceRight                       79.4298+-1.3697     ?     80.3011+-1.5326        ? might be 1.0110x slower
   array-prototype-some                              87.3388+-2.5978           83.0658+-3.1192          might be 1.0514x faster
   array-splice-contiguous                           45.5822+-1.0578           43.6873+-1.0541          might be 1.0434x faster
   array-with-double-add                              4.4175+-0.3048     ?      4.6088+-0.4721        ? might be 1.0433x slower
   array-with-double-increment                        3.4209+-0.3021            3.3191+-0.0958          might be 1.0307x faster
   array-with-double-mul-add                          5.3308+-0.1826            5.2437+-0.1354          might be 1.0166x faster
   array-with-double-sum                              3.3361+-0.0229     ?      3.3625+-0.0653        ?
   array-with-int32-add-sub                           6.8907+-0.1447     ?      6.9786+-0.2622        ? might be 1.0127x slower
   array-with-int32-or-double-sum                     3.4983+-0.1685            3.4334+-0.0686          might be 1.0189x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     38.4041+-1.9034           38.1603+-1.8058        
   ArrayBuffer-DataView-alloc-long-lived             15.3880+-1.5195           14.1374+-0.1883          might be 1.0885x faster
   ArrayBuffer-Int32Array-byteOffset                  4.2602+-0.6290            4.2323+-0.6394        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     39.0927+-1.6346           38.8737+-1.3288        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.8891+-1.4255     ?     24.0944+-2.4210        ? might be 1.0527x slower
   ArrayBuffer-Int8Array-alloc-long-lived            14.4453+-1.6649           13.8597+-1.1174          might be 1.0423x faster
   ArrayBuffer-Int8Array-alloc                       10.6375+-0.2400           10.5234+-0.2488          might be 1.0108x faster
   asmjs_bool_bug                                     7.8302+-0.2158            7.8073+-0.2157        
   assign-custom-setter-polymorphic                   3.5393+-0.6087            3.1836+-0.1760          might be 1.1117x faster
   assign-custom-setter                               4.3242+-0.1463     ?      4.4461+-0.5629        ? might be 1.0282x slower
   basic-set                                         10.4209+-2.5099           10.3842+-1.3897        
   big-int-mul                                        4.2530+-0.0442     ?      4.3186+-0.1396        ? might be 1.0154x slower
   boolean-test                                       3.1616+-0.0397     ?      3.2970+-0.3065        ? might be 1.0428x slower
   branch-fold                                        4.1911+-0.3835            4.0564+-0.3298          might be 1.0332x faster
   branch-on-string-as-boolean                       20.4595+-0.4351     ?     20.7202+-0.7411        ? might be 1.0127x slower
   by-val-generic                                     8.1837+-0.1469     ?      8.6629+-1.2123        ? might be 1.0586x slower
   call-spread-apply                                 30.8493+-1.0747     ?     32.0629+-1.5713        ? might be 1.0393x slower
   call-spread-call                                  26.0834+-0.7277     ?     26.7745+-2.2894        ? might be 1.0265x slower
   captured-assignments                               0.5478+-0.0517            0.5298+-0.0321          might be 1.0339x faster
   cast-int-to-double                                 5.4578+-0.2206            5.4109+-0.1563        
   cell-argument                                      8.7883+-0.3329     ?      8.8635+-0.4228        ?
   cfg-simplify                                       2.9381+-0.1462            2.8512+-0.0344          might be 1.0305x faster
   chain-getter-access                                9.5314+-0.1399            9.4527+-0.2901        
   cmpeq-obj-to-obj-other                            11.9466+-1.0611     ?     12.1261+-0.8434        ? might be 1.0150x slower
   constant-test                                      5.0378+-0.0863            5.0149+-0.0348        
   create-lots-of-functions                          11.7821+-0.4059           11.6198+-0.2246          might be 1.0140x faster
   cse-new-array-buffer                               2.6167+-0.2285            2.5841+-0.0810          might be 1.0126x faster
   cse-new-array                                      2.6519+-0.0500     ?      2.6969+-0.1211        ? might be 1.0170x slower
   DataView-custom-properties                        42.7445+-1.0516     ?     43.8654+-2.3752        ? might be 1.0262x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.6428+-0.1140            0.5741+-0.0199          might be 1.1196x faster
   delay-tear-off-arguments-strictmode               14.4125+-0.2257     ?     14.4250+-0.2993        ?
   deltablue-varargs                                210.4035+-0.7795     ?    212.7792+-3.2653        ? might be 1.0113x slower
   destructuring-arguments                           17.3330+-0.3969     ?     17.8540+-0.5462        ? might be 1.0301x slower
   destructuring-swap                                 5.2234+-0.1952            5.1254+-0.0739          might be 1.0191x faster
   direct-arguments-getbyval                          1.3277+-0.0776            1.3091+-0.0347          might be 1.0142x faster
   div-boolean-double                                 5.3381+-0.1240            5.2511+-0.0229          might be 1.0166x faster
   div-boolean                                        7.8847+-0.1132            7.8754+-0.0961        
   double-get-by-val-out-of-bounds                    4.5522+-0.0381     ?      4.7736+-0.2450        ? might be 1.0486x slower
   double-pollution-getbyval                          8.9635+-0.1112            8.9047+-0.0870        
   double-pollution-putbyoffset                       4.4185+-0.0732     ?      4.4722+-0.2199        ? might be 1.0122x slower
   double-real-use                                   39.0668+-1.6955     ^     30.4990+-1.2299        ^ definitely 1.2809x faster
   double-to-int32-typed-array-no-inline              2.7313+-0.2043     ?      2.7535+-0.2377        ?
   double-to-int32-typed-array                        2.1572+-0.2232            2.0500+-0.0574          might be 1.0523x faster
   double-to-uint32-typed-array-no-inline             2.7023+-0.2326            2.6252+-0.0622          might be 1.0294x faster
   double-to-uint32-typed-array                       2.0720+-0.0287     ?      2.3260+-0.3393        ? might be 1.1226x slower
   elidable-new-object-dag                           44.2897+-1.3454     ?     44.4213+-0.9309        ?
   elidable-new-object-roflcopter                    44.8328+-1.5369     ?     45.4310+-1.6736        ? might be 1.0133x slower
   elidable-new-object-then-call                     40.2274+-1.3271     ?     41.3258+-2.2996        ? might be 1.0273x slower
   elidable-new-object-tree                          46.4532+-1.2336           45.0935+-1.1671          might be 1.0302x faster
   empty-string-plus-int                              5.6277+-0.2631            5.5695+-0.2339          might be 1.0104x faster
   emscripten-cube2hash                              39.1297+-1.4873     ?     41.1858+-4.3145        ? might be 1.0525x slower
   exit-length-on-plain-object                       15.0299+-1.5489           14.8380+-1.5363          might be 1.0129x faster
   external-arguments-getbyval                        1.3437+-0.1977            1.2830+-0.0798          might be 1.0473x faster
   external-arguments-putbyval                        2.4117+-0.0928     ?      2.5052+-0.2451        ? might be 1.0388x slower
   fixed-typed-array-storage-var-index                1.2375+-0.0392     ?      1.3359+-0.1200        ? might be 1.0794x slower
   fixed-typed-array-storage                          0.9421+-0.1219     ?      0.9768+-0.1244        ? might be 1.0368x slower
   Float32Array-matrix-mult                           4.5734+-0.1918     ?      4.5754+-0.2368        ?
   Float32Array-to-Float64Array-set                  57.2163+-1.1058           56.1418+-0.5572          might be 1.0191x faster
   Float64Array-alloc-long-lived                     94.5553+-14.3392          88.8394+-2.0734          might be 1.0643x faster
   Float64Array-to-Int16Array-set                    80.2882+-24.3991          71.4111+-2.2570          might be 1.1243x faster
   fold-double-to-int                                13.5704+-0.2985     ?     14.6393+-1.3181        ? might be 1.0788x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.7907+-1.3939           10.1106+-1.3575          might be 1.0673x faster
   fold-get-by-id-to-multi-get-by-offset             10.7985+-1.0210           10.2894+-0.9842          might be 1.0495x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.8443+-0.7882     ?     10.0229+-1.1569        ? might be 1.0181x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.9176+-0.6141            9.5675+-0.5345          might be 1.0366x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.7037+-1.7508            8.9285+-0.5125          might be 1.1988x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      7.8844+-1.3119            7.6875+-1.5877          might be 1.0256x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.4602+-1.3174           10.4260+-0.9964        
   fold-put-by-id-to-multi-put-by-offset              9.9980+-1.9674     ?     10.4753+-0.8441        ? might be 1.0477x slower
   fold-put-structure                                 7.6666+-1.6118            7.4066+-1.4183          might be 1.0351x faster
   for-of-iterate-array-entries                       4.6623+-0.1293     ?      4.7010+-0.1734        ?
   for-of-iterate-array-keys                          3.9391+-0.3203            3.9340+-0.3743        
   for-of-iterate-array-values                        3.6787+-0.1282            3.6475+-0.2078        
   fround                                            21.4746+-0.9308           20.8999+-0.5318          might be 1.0275x faster
   ftl-library-inlining-dataview                     64.9382+-1.0983     ?     65.1637+-1.6433        ?
   ftl-library-inlining                              74.2057+-18.0303          66.9991+-0.9306          might be 1.1076x faster
   function-dot-apply                                 2.5230+-0.2466            2.2663+-0.0386          might be 1.1133x faster
   function-test                                      3.0274+-0.2219            2.9648+-0.0695          might be 1.0211x faster
   function-with-eval                               102.6410+-2.4377          102.6136+-2.3049        
   gcse-poly-get-less-obvious                        18.5053+-1.0033     ?     18.7858+-0.8200        ? might be 1.0152x slower
   gcse-poly-get                                     20.1694+-1.5331           19.9557+-1.4433          might be 1.0107x faster
   gcse                                               4.4203+-0.0701     ?      4.5905+-0.4470        ? might be 1.0385x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.9832+-0.3608            2.8367+-0.1326          might be 1.0516x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1282+-0.1250     ?      6.2177+-0.2375        ? might be 1.0146x slower
   get-by-id-chain-from-try-block                     7.0140+-0.5718            6.6600+-0.1425          might be 1.0531x faster
   get-by-id-check-structure-elimination              5.1483+-0.0670            5.1313+-0.0862        
   get-by-id-proto-or-self                           19.4073+-1.6552     ?     19.9637+-2.1348        ? might be 1.0287x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0160+-0.0383     ?      3.0227+-0.0682        ?
   get-by-id-self-or-proto                           19.9460+-1.7833           19.0833+-1.7449          might be 1.0452x faster
   get-by-val-out-of-bounds                           4.5542+-0.1369            4.5197+-0.1044        
   get_callee_monomorphic                             4.3585+-3.2620            2.9818+-0.2521          might be 1.4617x faster
   get_callee_polymorphic                             3.9095+-0.2449     ?      4.0955+-0.3186        ? might be 1.0476x slower
   getter-no-activation                               5.0218+-0.1814     ?      5.1886+-0.3417        ? might be 1.0332x slower
   getter-prototype                                  14.9541+-0.2419     ?     15.9630+-0.9818        ? might be 1.0675x slower
   getter-richards                                  124.2562+-6.2881     ?    125.4907+-6.0617        ?
   getter                                             6.6858+-0.6336            5.9235+-0.7752          might be 1.1287x faster
   global-var-const-infer-fire-from-opt               1.0173+-0.1377            1.0118+-0.1388        
   global-var-const-infer                             0.9065+-0.1779     ?      0.9185+-0.1056        ? might be 1.0132x slower
   HashMap-put-get-iterate-keys                      30.2247+-1.3320     ?     31.1772+-3.0472        ? might be 1.0315x slower
   HashMap-put-get-iterate                           31.3045+-2.3697     ?     31.4943+-0.6194        ?
   HashMap-string-put-get-iterate                    32.0721+-1.8685     ?     32.9683+-2.0579        ? might be 1.0279x slower
   hoist-make-rope                                   12.7364+-1.3327           12.2931+-0.7632          might be 1.0361x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.1100+-0.0293     ?      5.2917+-0.2498        ? might be 1.0356x slower
   hoist-poly-check-structure                         3.7509+-0.0777     ?      3.9055+-0.3564        ? might be 1.0412x slower
   imul-double-only                                   8.6060+-0.1512            8.6001+-0.2152        
   imul-int-only                                     10.4123+-1.4735           10.1228+-0.5164          might be 1.0286x faster
   imul-mixed                                         8.5044+-0.4534     ?      8.8334+-0.3452        ? might be 1.0387x slower
   in-four-cases                                     22.2348+-0.2869     ?     22.5486+-0.4569        ? might be 1.0141x slower
   in-one-case-false                                 11.0827+-0.0546     ?     11.1069+-0.1143        ?
   in-one-case-true                                  12.1269+-1.6875           11.1901+-0.1851          might be 1.0837x faster
   in-two-cases                                      11.8077+-0.1629           11.7408+-0.1111        
   indexed-properties-in-objects                      2.9668+-0.0758     ?      3.1082+-0.4127        ? might be 1.0477x slower
   infer-closure-const-then-mov-no-inline             4.5200+-0.8152            4.2318+-0.2552          might be 1.0681x faster
   infer-closure-const-then-mov                      19.8160+-0.2918     ?     20.1775+-0.3038        ? might be 1.0182x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     13.2520+-1.1941           13.1132+-0.9908          might be 1.0106x faster
   infer-closure-const-then-put-to-scope             21.8588+-1.0526     ?     22.2146+-1.2806        ? might be 1.0163x slower
   infer-closure-const-then-reenter-no-inline   
                                                     54.5949+-0.3532     ?     56.0672+-2.8812        ? might be 1.0270x slower
   infer-closure-const-then-reenter                  22.8127+-1.4267     ?     23.2625+-2.3935        ? might be 1.0197x slower
   infer-constant-global-property                     4.0082+-0.3825            3.5937+-0.0933          might be 1.1153x faster
   infer-constant-property                            2.8944+-0.2435            2.8083+-0.0785          might be 1.0307x faster
   infer-one-time-closure-ten-vars                   13.3232+-1.4699           13.2872+-1.5319        
   infer-one-time-closure-two-vars                   12.2513+-0.3514     ?     12.2869+-0.2255        ?
   infer-one-time-closure                            12.6633+-1.5575           12.0705+-0.2563          might be 1.0491x faster
   infer-one-time-deep-closure                       21.2947+-0.6907     ?     21.6072+-1.4548        ? might be 1.0147x slower
   inline-arguments-access                            4.6730+-0.1381     ?      4.7654+-0.1724        ? might be 1.0198x slower
   inline-arguments-aliased-access                    4.7504+-0.1716            4.7082+-0.0807        
   inline-arguments-local-escape                      4.8551+-0.3103            4.6902+-0.0616          might be 1.0352x faster
   inline-get-scoped-var                              5.1100+-0.1824     ?      5.1344+-0.5319        ?
   inlined-put-by-id-transition                      11.9030+-0.5962     ?     12.2266+-0.3723        ? might be 1.0272x slower
   int-or-other-abs-then-get-by-val                   5.1215+-0.2454            5.0756+-0.0787        
   int-or-other-abs-zero-then-get-by-val             17.8440+-0.9926           17.6526+-0.9544          might be 1.0108x faster
   int-or-other-add-then-get-by-val                   4.4205+-0.1034     ?      4.4861+-0.1758        ? might be 1.0149x slower
   int-or-other-add                                   5.3848+-0.0202     ?      5.3971+-0.0357        ?
   int-or-other-div-then-get-by-val                   4.3278+-0.1161     ?      4.3933+-0.2540        ? might be 1.0151x slower
   int-or-other-max-then-get-by-val                   4.7248+-0.9101            4.5157+-0.2431          might be 1.0463x faster
   int-or-other-min-then-get-by-val                   4.4384+-0.1156     ?      4.4504+-0.1541        ?
   int-or-other-mod-then-get-by-val                   4.2196+-0.2621            4.1223+-0.2608          might be 1.0236x faster
   int-or-other-mul-then-get-by-val                   3.9810+-0.0937     ?      4.1138+-0.2077        ? might be 1.0333x slower
   int-or-other-neg-then-get-by-val                   4.8594+-0.1167     ?      4.8968+-0.1402        ?
   int-or-other-neg-zero-then-get-by-val             18.4589+-1.7394     ?     19.3217+-1.9011        ? might be 1.0467x slower
   int-or-other-sub-then-get-by-val                   4.4002+-0.0115            4.3920+-0.0349        
   int-or-other-sub                                   3.7487+-0.1903            3.6540+-0.0526          might be 1.0259x faster
   int-overflow-local                                 4.6661+-0.1774            4.6343+-0.1715        
   Int16Array-alloc-long-lived                       54.3511+-2.9206     ?     54.5292+-2.1662        ?
   Int16Array-bubble-sort-with-byteLength            19.9249+-0.9188     ?     20.2442+-0.6781        ? might be 1.0160x slower
   Int16Array-bubble-sort                            20.8496+-1.4314           20.3274+-0.5610          might be 1.0257x faster
   Int16Array-load-int-mul                            1.7804+-0.2673     ?      1.7904+-0.2219        ?
   Int16Array-to-Int32Array-set                      57.8140+-1.8583     ?     58.3795+-2.3094        ?
   Int32Array-alloc-large                            23.6589+-0.1905     ?     23.9900+-0.6308        ? might be 1.0140x slower
   Int32Array-alloc-long-lived                       63.2822+-1.4778     ?     64.7022+-1.5537        ? might be 1.0224x slower
   Int32Array-alloc                                   3.7797+-0.4164            3.6362+-0.3875          might be 1.0395x faster
   Int32Array-Int8Array-view-alloc                    7.1634+-1.0068            6.7926+-0.3483          might be 1.0546x faster
   int52-spill                                        6.2610+-0.7893            6.0571+-0.1953          might be 1.0337x faster
   Int8Array-alloc-long-lived                        48.1276+-1.4136     ?     48.3827+-0.9814        ?
   Int8Array-load-with-byteLength                     3.5852+-0.4155            3.4337+-0.0975          might be 1.0441x faster
   Int8Array-load                                     3.5115+-0.2397            3.4783+-0.1436        
   integer-divide                                    11.3422+-0.3493           10.9189+-0.1067          might be 1.0388x faster
   integer-modulo                                     2.1478+-0.1087            2.1188+-0.1170          might be 1.0137x faster
   is-boolean-fold-tricky                             4.4830+-0.0704     ?      4.7302+-0.3595        ? might be 1.0551x slower
   is-boolean-fold                                    2.9036+-0.0376     ?      3.1035+-0.3258        ? might be 1.0688x slower
   is-function-fold-tricky-internal-function   
                                                     11.9618+-0.0885           11.9406+-0.1377        
   is-function-fold-tricky                            4.6790+-0.2567            4.6241+-0.0850          might be 1.0119x faster
   is-function-fold                                   2.9247+-0.0667     ?      2.9884+-0.1406        ? might be 1.0218x slower
   is-number-fold-tricky                              4.5805+-0.1666     ?      4.6740+-0.3337        ? might be 1.0204x slower
   is-number-fold                                     2.9275+-0.0550     ?      3.1178+-0.3831        ? might be 1.0650x slower
   is-object-or-null-fold-functions                   2.9695+-0.0318     ?      3.0308+-0.2409        ? might be 1.0206x slower
   is-object-or-null-fold-less-tricky                 4.7665+-0.6049            4.6498+-0.0841          might be 1.0251x faster
   is-object-or-null-fold-tricky                      6.6985+-0.0985     ?      6.7192+-0.1697        ?
   is-object-or-null-fold                             3.0727+-0.2637            2.9555+-0.0719          might be 1.0396x faster
   is-object-or-null-trickier-function                5.0022+-0.5587     ?      5.0970+-0.5050        ? might be 1.0189x slower
   is-object-or-null-trickier-internal-function   
                                                     12.7261+-0.3110     ?     13.0110+-0.6257        ? might be 1.0224x slower
   is-object-or-null-tricky-function                  4.9194+-0.4001            4.7124+-0.0998          might be 1.0439x faster
   is-object-or-null-tricky-internal-function   
                                                      9.4375+-0.1333     ?      9.4692+-0.1508        ?
   is-string-fold-tricky                              4.6027+-0.2229     ?      4.6833+-0.2499        ? might be 1.0175x slower
   is-string-fold                                     2.9202+-0.1234     ?      2.9450+-0.1312        ?
   is-undefined-fold-tricky                           3.8329+-0.1706            3.7989+-0.0864        
   is-undefined-fold                                  2.9125+-0.0294     ?      3.1643+-0.3385        ? might be 1.0865x slower
   large-int-captured                                 4.7419+-0.1537     ?      4.8794+-0.1371        ? might be 1.0290x slower
   large-int-neg                                     17.1477+-1.7475           16.3807+-0.4393          might be 1.0468x faster
   large-int                                         15.5111+-1.2273     ?     16.0937+-0.7750        ? might be 1.0376x slower
   load-varargs-elimination                          24.2316+-1.2811     ?     24.4222+-1.9877        ?
   logical-not-weird-types                            3.3941+-0.1888            3.3179+-0.0455          might be 1.0230x faster
   logical-not                                        4.6557+-0.0309     ?      4.6676+-0.0862        ?
   lots-of-fields                                    12.6707+-0.3571           12.5468+-0.1883        
   make-indexed-storage                               3.1636+-0.3018     ?      3.3836+-0.6067        ? might be 1.0695x slower
   make-rope-cse                                     12.2181+-1.3334           11.8793+-1.1884          might be 1.0285x faster
   marsaglia-larger-ints                             37.0295+-2.3763     ?     37.1607+-1.6921        ?
   marsaglia-osr-entry                               24.4607+-2.0935           23.7255+-1.5469          might be 1.0310x faster
   math-with-out-of-bounds-array-values              25.5886+-1.8904           25.0866+-0.7850          might be 1.0200x faster
   max-boolean                                        2.5857+-0.0435     ?      2.6598+-0.1374        ? might be 1.0287x slower
   method-on-number                                  17.3110+-0.1650     ?     17.5668+-0.6050        ? might be 1.0148x slower
   min-boolean                                        2.5511+-0.0263            2.5465+-0.0703        
   minus-boolean-double                               3.3351+-0.1154     ?      3.3551+-0.2793        ?
   minus-boolean                                      2.4524+-0.1014     ?      2.5657+-0.3028        ? might be 1.0462x slower
   misc-strict-eq                                    38.7204+-1.0216     ?     42.2240+-6.5308        ? might be 1.0905x slower
   mod-boolean-double                                10.9502+-0.0796           10.9231+-0.1240        
   mod-boolean                                        8.0583+-0.1661            7.8685+-0.0303          might be 1.0241x faster
   mul-boolean-double                                 3.7335+-0.0744     ?      3.7753+-0.1276        ? might be 1.0112x slower
   mul-boolean                                        3.0894+-0.3625            2.9347+-0.0483          might be 1.0527x faster
   neg-boolean                                        3.4464+-0.4038            3.2710+-0.0869          might be 1.0536x faster
   negative-zero-divide                               0.4207+-0.0578            0.4096+-0.0471          might be 1.0271x faster
   negative-zero-modulo                               0.4023+-0.0598            0.3929+-0.0273          might be 1.0237x faster
   negative-zero-negate                               0.3674+-0.0188            0.3531+-0.0190          might be 1.0403x faster
   nested-function-parsing                           40.5914+-1.7576     ?     41.7058+-3.3320        ? might be 1.0275x slower
   new-array-buffer-dead                            114.2998+-1.5549     ?    114.6182+-1.3925        ?
   new-array-buffer-push                              7.2747+-0.9603            6.9245+-0.1207          might be 1.0506x faster
   new-array-dead                                    19.3903+-0.5255     ?     19.8325+-1.2238        ? might be 1.0228x slower
   new-array-push                                     6.7833+-0.3648            6.4696+-0.1749          might be 1.0485x faster
   no-inline-constructor                             41.8991+-1.5522     ?     41.9394+-1.6583        ?
   number-test                                        3.1413+-0.1006     ?      3.2775+-0.3410        ? might be 1.0434x slower
   object-closure-call                                5.7493+-0.0656     ?      6.0048+-0.2294        ? might be 1.0444x slower
   object-test                                        2.8927+-0.0469     ?      2.9446+-0.1355        ? might be 1.0179x slower
   obvious-sink-pathology-taken                     142.9825+-2.1512          140.8191+-2.0056          might be 1.0154x faster
   obvious-sink-pathology                           133.0490+-1.4301     ?    133.2569+-2.4277        ?
   obviously-elidable-new-object                     35.7445+-1.7268           35.3518+-1.5200          might be 1.0111x faster
   plus-boolean-arith                                 2.5623+-0.0585     ?      2.6721+-0.2732        ? might be 1.0429x slower
   plus-boolean-double                                3.3501+-0.2911            3.2718+-0.0602          might be 1.0239x faster
   plus-boolean                                       2.5957+-0.2950            2.5927+-0.3068        
   poly-chain-access-different-prototypes-simple   
                                                      3.3689+-0.0501     ?      3.7232+-0.4822        ? might be 1.1052x slower
   poly-chain-access-different-prototypes             2.7000+-0.2363     ?      2.7984+-0.3462        ? might be 1.0364x slower
   poly-chain-access-simpler                          3.3518+-0.0442     ?      3.3630+-0.0640        ?
   poly-chain-access                                  2.7590+-0.3102            2.7491+-0.3492        
   poly-stricteq                                     60.5506+-1.8994     ?     63.6329+-3.3601        ? might be 1.0509x slower
   polymorphic-array-call                             1.4986+-0.1730            1.4307+-0.0843          might be 1.0474x faster
   polymorphic-get-by-id                              3.2782+-0.2155            3.2665+-0.2156        
   polymorphic-put-by-id                             33.4622+-1.7446     ?     33.6665+-3.0862        ?
   polymorphic-structure                             15.0530+-0.2385           14.8111+-0.1080          might be 1.0163x faster
   polyvariant-monomorphic-get-by-id                  8.8453+-0.2127            8.7787+-0.3083        
   proto-getter-access                                9.2908+-0.1065     ?      9.3082+-0.1288        ?
   put-by-id-replace-and-transition                   9.7959+-0.2382     ?     10.0859+-0.5009        ? might be 1.0296x slower
   put-by-id-slightly-polymorphic                     3.1323+-0.4104            2.9204+-0.1634          might be 1.0726x faster
   put-by-id                                         13.0553+-0.4262           12.7040+-0.3052          might be 1.0277x faster
   put-by-val-direct                                  0.4283+-0.0795            0.4272+-0.0522        
   put-by-val-large-index-blank-indexing-type   
                                                     13.1276+-1.4051           12.1064+-0.3343          might be 1.0844x faster
   put-by-val-machine-int                             2.9094+-0.1600     ?      2.9724+-0.2621        ? might be 1.0216x slower
   rare-osr-exit-on-local                            15.9099+-0.6103           15.8766+-0.9555        
   register-pressure-from-osr                        21.9226+-1.2966     ?     22.2310+-1.3063        ? might be 1.0141x slower
   repeat-multi-get-by-offset                        24.3743+-0.3086     ?     24.7098+-0.2497        ? might be 1.0138x slower
   setter-prototype                                  10.7619+-0.5196           10.4538+-0.1769          might be 1.0295x faster
   setter                                             6.2537+-0.8783     ?      6.3359+-0.5745        ? might be 1.0131x slower
   simple-activation-demo                            25.2025+-0.4405     ?     25.4860+-0.4742        ? might be 1.0113x slower
   simple-getter-access                              11.6899+-0.2631     ?     11.7480+-0.3036        ?
   simple-poly-call-nested                            8.1728+-0.0876            8.1190+-0.1956        
   simple-poly-call                                   1.4102+-0.0767            1.3463+-0.0401          might be 1.0475x faster
   sin-boolean                                       22.6632+-0.5788     ?     23.3724+-1.3998        ? might be 1.0313x slower
   singleton-scope                                   63.9156+-1.9700           63.0796+-1.9565          might be 1.0133x faster
   sink-function                                     12.4641+-0.7043     ?     12.4647+-0.3738        ?
   sink-huge-activation                              19.2975+-0.7630     ?     19.8514+-1.5714        ? might be 1.0287x slower
   sinkable-new-object-dag                           71.9130+-2.4208           70.5653+-1.8497          might be 1.0191x faster
   sinkable-new-object-taken                         52.0552+-3.0743     ?     52.3549+-4.9129        ?
   sinkable-new-object                               39.1655+-0.6509     ?     39.7068+-1.5556        ? might be 1.0138x slower
   slow-array-profile-convergence                     2.8878+-0.2076     ?      2.9471+-0.0751        ? might be 1.0205x slower
   slow-convergence                                   3.0730+-0.3470            2.7896+-0.0615          might be 1.1016x faster
   slow-ternaries                                    18.8223+-2.0692     ?     21.4842+-2.4291        ? might be 1.1414x slower
   sorting-benchmark                                 19.2030+-0.5318           18.6563+-0.4758          might be 1.0293x faster
   sparse-conditional                                 1.2264+-0.0749     ?      1.2312+-0.1474        ?
   splice-to-remove                                  16.0563+-1.7855           15.6812+-1.5290          might be 1.0239x faster
   string-char-code-at                               16.7347+-0.8669           16.4208+-0.5914          might be 1.0191x faster
   string-concat-object                               2.8617+-0.3465            2.7163+-0.2363          might be 1.0535x faster
   string-concat-pair-object                          2.8368+-0.3453            2.7112+-0.2158          might be 1.0463x faster
   string-concat-pair-simple                         12.3529+-1.0113           12.1772+-0.9165          might be 1.0144x faster
   string-concat-simple                              12.4578+-0.4951     ?     12.5195+-1.1764        ?
   string-cons-repeat                                 8.0747+-0.2880     ?      8.2799+-0.3900        ? might be 1.0254x slower
   string-cons-tower                                  8.5498+-0.6764            8.4909+-0.6138        
   string-equality                                   18.5198+-1.5364           17.8836+-0.5688          might be 1.0356x faster
   string-get-by-val-big-char                         7.3082+-0.0762            7.2928+-0.0735        
   string-get-by-val-out-of-bounds-insane             3.8822+-0.4778            3.7118+-0.2930          might be 1.0459x faster
   string-get-by-val-out-of-bounds                    5.9774+-0.9069            5.5479+-0.0299          might be 1.0774x faster
   string-get-by-val                                  3.3770+-0.0225            3.3624+-0.0220        
   string-hash                                        2.1770+-0.1004     ?      2.2645+-0.2380        ? might be 1.0402x slower
   string-long-ident-equality                        14.7213+-0.3649     ?     14.7865+-0.4588        ?
   string-out-of-bounds                              15.2880+-0.4108           14.9545+-0.3898          might be 1.0223x faster
   string-repeat-arith                               35.7542+-1.4529           35.4350+-2.9356        
   string-sub                                        67.8794+-4.3434     ?     68.5086+-4.5731        ?
   string-test                                        3.0181+-0.1270     ?      3.2303+-0.3456        ? might be 1.0703x slower
   string-var-equality                               32.7290+-1.3032     ?     34.2165+-2.1635        ? might be 1.0454x slower
   structure-hoist-over-transitions                   2.7901+-0.1108     ?      2.8010+-0.2556        ?
   substring-concat-weird                            41.9108+-1.3926           40.7247+-1.8571          might be 1.0291x faster
   substring-concat                                  43.4109+-1.1216     ?     43.7703+-1.1727        ?
   substring                                         46.6959+-2.3642           46.0793+-1.8715          might be 1.0134x faster
   switch-char-constant                               3.0058+-0.4271     ?      3.0671+-0.2604        ? might be 1.0204x slower
   switch-char                                        7.1657+-0.6936     ?      8.5056+-3.2870        ? might be 1.1870x slower
   switch-constant                                    9.0639+-1.1615            8.5501+-0.3464          might be 1.0601x faster
   switch-string-basic-big-var                       18.5407+-0.3937           18.3272+-0.2640          might be 1.0116x faster
   switch-string-basic-big                           15.0085+-0.2522     ?     15.3356+-0.5832        ? might be 1.0218x slower
   switch-string-basic-var                           15.2753+-0.2562     ?     15.5671+-1.1621        ? might be 1.0191x slower
   switch-string-basic                               13.4288+-0.1705     ?     14.1586+-0.7360        ? might be 1.0543x slower
   switch-string-big-length-tower-var                20.9299+-1.3765           20.1623+-0.4438          might be 1.0381x faster
   switch-string-length-tower-var                    16.5822+-1.6813           15.7602+-0.2953          might be 1.0522x faster
   switch-string-length-tower                        13.2035+-0.1588     ?     13.3005+-0.2497        ?
   switch-string-short                               13.1145+-0.2329     ?     13.2142+-0.3672        ?
   switch                                            12.6549+-0.2787     ?     12.8795+-0.2741        ? might be 1.0177x slower
   tear-off-arguments-simple                          3.6147+-0.2295     ?      3.6676+-0.2604        ? might be 1.0146x slower
   tear-off-arguments                                 4.8877+-0.1064            4.8542+-0.0646        
   temporal-structure                                12.2610+-0.0931     ?     12.3354+-0.2138        ?
   to-int32-boolean                                  13.8328+-0.1757     ?     14.0223+-0.2766        ? might be 1.0137x slower
   try-catch-get-by-val-cloned-arguments             15.2725+-1.2145     ?     15.8356+-1.6117        ? might be 1.0369x slower
   try-catch-get-by-val-direct-arguments              6.7498+-0.2283     ?      7.1612+-0.9423        ? might be 1.0610x slower
   try-catch-get-by-val-scoped-arguments              8.1247+-0.9463     ?      8.6989+-1.4290        ? might be 1.0707x slower
   typed-array-get-set-by-val-profiling              32.0531+-0.4645     ?     33.2397+-1.5452        ? might be 1.0370x slower
   undefined-property-access                        345.4032+-4.9826          343.1266+-3.7414        
   undefined-test                                     3.0913+-0.0947     ?      3.2022+-0.3273        ? might be 1.0359x slower
   unprofiled-licm                                   24.0673+-1.8458           22.7692+-0.2689          might be 1.0570x faster
   varargs-call                                      15.5179+-1.1307     ?     15.8522+-0.9078        ? might be 1.0215x slower
   varargs-construct-inline                          27.9700+-0.3651     ?     28.1016+-0.4652        ?
   varargs-construct                                 23.2754+-1.1227           22.8737+-0.5924          might be 1.0176x faster
   varargs-inline                                     9.3752+-0.1059     ?      9.5979+-0.5112        ? might be 1.0238x slower
   varargs-strict-mode                               10.1875+-0.3392     ?     10.6054+-1.0846        ? might be 1.0410x slower
   varargs                                           10.2556+-0.3138           10.1293+-0.1912          might be 1.0125x faster
   weird-inlining-const-prop                          3.4197+-0.1985     ?      3.5808+-0.6880        ? might be 1.0471x slower

   &lt;geometric&gt;                                        9.0044+-0.0365            8.9777+-0.0336          might be 1.0030x faster

                                                        TipOfTree               DoubleRealUse                                   
AsmBench:
   bigfib.cpp                                       503.0432+-3.8539     ?    504.4475+-12.4463       ?
   cray.c                                           442.8666+-37.6423         433.9375+-11.7515         might be 1.0206x faster
   dry.c                                            497.8990+-32.9357         490.5914+-10.1555         might be 1.0149x faster
   FloatMM.c                                        728.0811+-8.9143     ?    732.2224+-7.0928        ?
   gcc-loops.cpp                                   4288.9237+-12.7884        4287.5203+-10.1031       
   n-body.c                                         986.8309+-16.8883    ?    987.5693+-4.1504        ?
   Quicksort.c                                      424.0061+-8.4774          420.4270+-5.0102        
   stepanov_container.cpp                          3644.1721+-28.9923        3625.5382+-33.9577       
   Towers.c                                         262.4240+-4.6459     ?    268.7939+-11.3024       ? might be 1.0243x slower

   &lt;geometric&gt;                                      802.4849+-8.3162          801.3281+-5.0665          might be 1.0014x faster

                                                        TipOfTree               DoubleRealUse                                   
CompressionBench:
   huffman                                          372.1481+-2.4314          359.9830+-21.8492         might be 1.0338x faster
   arithmetic-simple                                369.5149+-1.8958          365.4513+-3.8456          might be 1.0111x faster
   arithmetic-precise                               284.2368+-4.0836     ?    285.6455+-4.0471        ?
   arithmetic-complex-precise                       282.7521+-3.7237     ?    283.8317+-3.8072        ?
   arithmetic-precise-order-0                       377.7775+-3.9822     ?    383.9491+-12.6373       ? might be 1.0163x slower
   arithmetic-precise-order-1                       336.8847+-5.7941          335.5776+-3.4991        
   arithmetic-precise-order-2                       367.8700+-2.4209     ?    369.9931+-4.7226        ?
   arithmetic-simple-order-1                        425.8757+-3.1045          424.7941+-1.7873        
   arithmetic-simple-order-2                        476.4365+-6.9473     ?    486.7944+-26.6505       ? might be 1.0217x slower
   lz-string                                        321.2834+-8.3610     ?    324.4677+-23.6514       ?

   &lt;geometric&gt;                                      357.0867+-1.0973     ?    357.3429+-2.1540        ? might be 1.0007x slower

                                                        TipOfTree               DoubleRealUse                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   62.7480+-0.2255           62.4810+-0.2299          might be 1.0043x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099422</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-03 23:24:39 -0700</bug_when>
    <thetext>Performance of my new approach, which doesn&apos;t exit on int32:


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r185168)
&quot;DoubleRealUse&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r185168)

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               DoubleRealUse                                   
SunSpider:
   3d-cube                                            5.3221+-0.1115            5.2605+-0.1609          might be 1.0117x faster
   3d-morph                                           5.9623+-0.2388            5.9599+-0.2709        
   3d-raytrace                                        6.8566+-0.6339            6.5788+-0.0808          might be 1.0422x faster
   access-binary-trees                                2.4335+-0.1505            2.4120+-0.1860        
   access-fannkuch                                    6.1764+-0.1127            6.0918+-0.1051          might be 1.0139x faster
   access-nbody                                       3.3754+-0.4442            3.0621+-0.1999          might be 1.1023x faster
   access-nsieve                                      3.5551+-0.2637            3.5038+-0.3001          might be 1.0146x faster
   bitops-3bit-bits-in-byte                           1.6198+-0.0319     ?      1.6975+-0.2081        ? might be 1.0480x slower
   bitops-bits-in-byte                                3.8624+-0.2744     ?      3.9931+-0.2235        ? might be 1.0338x slower
   bitops-bitwise-and                                 2.2467+-0.2766            2.1314+-0.0466          might be 1.0541x faster
   bitops-nsieve-bits                                 3.3441+-0.1082            3.3337+-0.1040        
   controlflow-recursive                              3.2377+-0.1895            2.8695+-0.2331          might be 1.1283x faster
   crypto-aes                                         4.9750+-0.3584            4.9052+-0.1531          might be 1.0142x faster
   crypto-md5                                         3.0975+-0.2459            2.8215+-0.1347          might be 1.0978x faster
   crypto-sha1                                        3.6498+-0.3771     ?      3.8837+-0.4193        ? might be 1.0641x slower
   date-format-tofte                                  9.3612+-0.1448     ?      9.4022+-0.1499        ?
   date-format-xparb                                  5.9841+-0.2561     ?      6.1887+-0.4810        ? might be 1.0342x slower
   math-cordic                                        3.2651+-0.1193            3.1871+-0.0546          might be 1.0245x faster
   math-partial-sums                                  5.8693+-0.4863            5.5940+-0.1428          might be 1.0492x faster
   math-spectral-norm                                 2.1519+-0.2269            2.1172+-0.1708          might be 1.0164x faster
   regexp-dna                                         7.5005+-0.0389     ?      8.0334+-1.3654        ? might be 1.0711x slower
   string-base64                                      5.9878+-1.0825            5.4905+-0.8090          might be 1.0906x faster
   string-fasta                                       7.1882+-0.8249            6.9584+-0.5457          might be 1.0330x faster
   string-tagcloud                                   10.3786+-0.8621            9.8961+-0.6123          might be 1.0488x faster
   string-unpack-code                                23.0459+-2.2604           21.7979+-2.0024          might be 1.0573x faster
   string-validate-input                              6.0846+-0.1851     ?      6.2032+-0.3189        ? might be 1.0195x slower

   &lt;arithmetic&gt;                                       5.6358+-0.0808            5.5144+-0.0886          might be 1.0220x faster

                                                        TipOfTree               DoubleRealUse                                   
LongSpider:
   3d-cube                                          917.2194+-42.2956    ?    919.8247+-29.7549       ?
   3d-morph                                        1544.4682+-11.9912        1543.7540+-17.2601       
   3d-raytrace                                      712.4201+-23.6070    ?    744.5203+-41.4073       ? might be 1.0451x slower
   access-binary-trees                             1024.1423+-40.5805        1005.8717+-14.0052         might be 1.0182x faster
   access-fannkuch                                  337.8470+-12.8270         330.5921+-10.3222         might be 1.0219x faster
   access-nbody                                     652.9954+-61.6087         592.6971+-4.4409          might be 1.1017x faster
   access-nsieve                                    479.2895+-7.5068     ?    491.1532+-34.0588       ? might be 1.0248x slower
   bitops-3bit-bits-in-byte                          44.5645+-0.5171     ?     44.5877+-0.7342        ?
   bitops-bits-in-byte                              105.0497+-7.8977          101.3522+-5.3547          might be 1.0365x faster
   bitops-nsieve-bits                               434.1840+-16.4957         422.4702+-3.5278          might be 1.0277x faster
   controlflow-recursive                            501.1655+-18.4525    ?    505.2799+-25.5211       ?
   crypto-aes                                       726.6181+-33.2660         712.1210+-5.9667          might be 1.0204x faster
   crypto-md5                                       530.9701+-10.8298         528.4897+-12.8996       
   crypto-sha1                                      606.7327+-3.9739     ?    612.4525+-38.4913       ?
   date-format-tofte                                746.2010+-23.1563         727.0964+-9.3464          might be 1.0263x faster
   date-format-xparb                                811.0345+-28.4121    ?    838.2397+-41.7665       ? might be 1.0335x slower
   hash-map                                         184.8923+-3.1517          181.2685+-3.3051          might be 1.0200x faster
   math-cordic                                      612.3558+-35.5435         577.8084+-3.0599          might be 1.0598x faster
   math-partial-sums                                504.5493+-3.3006     ?    512.5730+-8.6444        ? might be 1.0159x slower
   math-spectral-norm                               565.8687+-2.6923     ?    567.4092+-4.9666        ?
   string-base64                                    415.3897+-4.6097     ?    418.6079+-12.7659       ?
   string-fasta                                     444.6607+-23.0503         430.0969+-15.9991         might be 1.0339x faster
   string-tagcloud                                  207.4302+-16.2675         204.3066+-17.9218         might be 1.0153x faster

   &lt;geometric&gt;                                      461.8882+-1.8881          457.3781+-3.3135          might be 1.0099x faster

                                                        TipOfTree               DoubleRealUse                                   
V8Spider:
   crypto                                            57.7496+-3.0320     ?     60.8284+-5.8435        ? might be 1.0533x slower
   deltablue                                        104.7713+-3.4896          102.1827+-8.1962          might be 1.0253x faster
   earley-boyer                                      50.5662+-5.5138     ?     52.0559+-4.4320        ? might be 1.0295x slower
   raytrace                                          44.7061+-3.0388           42.8388+-2.8336          might be 1.0436x faster
   regexp                                            84.5137+-2.2940           83.1131+-2.1030          might be 1.0169x faster
   richards                                          81.2517+-6.0775           79.8196+-0.8812          might be 1.0179x faster
   splay                                             42.0199+-3.0746           40.0898+-2.0098          might be 1.0481x faster

   &lt;geometric&gt;                                       62.9252+-1.4146           62.3231+-1.5881          might be 1.0097x faster

                                                        TipOfTree               DoubleRealUse                                   
Octane:
   encrypt                                           0.20854+-0.00863          0.20386+-0.00186         might be 1.0230x faster
   decrypt                                           3.56241+-0.03378    ?     3.58548+-0.04629       ?
   deltablue                                x2       0.20159+-0.01385    ?     0.20415+-0.01228       ? might be 1.0127x slower
   earley                                            0.39619+-0.00396          0.39215+-0.00405         might be 1.0103x faster
   boyer                                             5.17320+-0.04329    ?     5.26057+-0.30956       ? might be 1.0169x slower
   navier-stokes                            x2       5.27705+-0.20541          5.22030+-0.03267         might be 1.0109x faster
   raytrace                                 x2       1.28515+-0.03617    ?     1.29003+-0.05392       ?
   richards                                 x2       0.12848+-0.00126    ?     0.12886+-0.00325       ?
   splay                                    x2       0.39996+-0.00159          0.39906+-0.00255       
   regexp                                   x2      32.90609+-3.06426         31.85910+-0.56316         might be 1.0329x faster
   pdfjs                                    x2      42.91595+-0.38536    ^    42.25975+-0.19507       ^ definitely 1.0155x faster
   mandreel                                 x2      50.32801+-0.54515    ?    50.69274+-0.30064       ?
   gbemu                                    x2      45.82190+-4.12467         42.43828+-0.80124         might be 1.0797x faster
   closure                                           0.59536+-0.00585    ^     0.56619+-0.00379       ^ definitely 1.0515x faster
   jquery                                            7.63519+-0.02944    ^     7.16633+-0.03314       ^ definitely 1.0654x faster
   box2d                                    x2      12.93921+-0.94770         11.97389+-0.08236         might be 1.0806x faster
   zlib                                     x2     405.26081+-9.29927        395.88812+-15.06107        might be 1.0237x faster
   typescript                               x2     853.36060+-44.88187       819.22392+-11.70259        might be 1.0417x faster

   &lt;geometric&gt;                                       6.73528+-0.07313    ^     6.59899+-0.03044       ^ definitely 1.0207x faster

                                                        TipOfTree               DoubleRealUse                                   
Kraken:
   ai-astar                                          242.602+-12.660           240.309+-9.473         
   audio-beat-detection                              108.350+-1.467            107.936+-1.428         
   audio-dft                                         122.741+-5.550            122.306+-3.750         
   audio-fft                                          88.611+-0.392             86.581+-5.400           might be 1.0235x faster
   audio-oscillator                                   80.961+-6.072             77.711+-1.794           might be 1.0418x faster
   imaging-darkroom                                  105.736+-3.112      ?     108.799+-5.380         ? might be 1.0290x slower
   imaging-desaturate                                 63.841+-1.471      ?      65.774+-5.839         ? might be 1.0303x slower
   imaging-gaussian-blur                             115.439+-7.592            114.226+-6.674           might be 1.0106x faster
   json-parse-financial                               50.726+-2.791             48.051+-1.766           might be 1.0557x faster
   json-stringify-tinderbox                           30.833+-3.090             29.742+-1.794           might be 1.0367x faster
   stanford-crypto-aes                                59.024+-2.176             58.361+-0.809           might be 1.0114x faster
   stanford-crypto-ccm                                47.892+-0.821      ?      48.995+-2.995         ? might be 1.0230x slower
   stanford-crypto-pbkdf2                            113.131+-4.454            112.259+-2.244         
   stanford-crypto-sha256-iterative                   43.465+-1.807      ?      45.898+-3.345         ? might be 1.0560x slower

   &lt;arithmetic&gt;                                       90.954+-1.477             90.496+-0.787           might be 1.0051x faster

                                                        TipOfTree               DoubleRealUse                                   
JSRegress:
   abs-boolean                                        2.8114+-0.2897     ?      2.8145+-0.2992        ?
   adapt-to-double-divide                            16.8920+-0.3431     ?     16.9135+-0.4199        ?
   aliased-arguments-getbyval                         1.5129+-0.2248            1.3359+-0.0451          might be 1.1325x faster
   allocate-big-object                                2.9823+-0.2318            2.8687+-0.0812          might be 1.0396x faster
   arguments-named-and-reflective                    12.8610+-1.3388           12.4720+-0.4148          might be 1.0312x faster
   arguments-out-of-bounds                           15.1156+-0.6290           14.8651+-0.3375          might be 1.0168x faster
   arguments-strict-mode                             11.6353+-1.7941           10.8552+-0.3270          might be 1.0719x faster
   arguments                                          9.5457+-0.3407     ?      9.9382+-0.5204        ? might be 1.0411x slower
   arity-mismatch-inlining                            0.8903+-0.0256     ?      0.9446+-0.1076        ? might be 1.0610x slower
   array-access-polymorphic-structure                 7.0231+-0.2917            6.8479+-0.0999          might be 1.0256x faster
   array-nonarray-polymorhpic-access                 32.5298+-0.9568     ?     33.4861+-0.7683        ? might be 1.0294x slower
   array-prototype-every                             88.4079+-6.0190           86.5592+-1.1108          might be 1.0214x faster
   array-prototype-forEach                           85.6392+-1.5240     ?     86.3467+-3.8160        ?
   array-prototype-map                               90.6049+-1.7808     ?     94.0712+-4.1318        ? might be 1.0383x slower
   array-prototype-reduce                            82.9908+-4.2836     ?     83.8667+-3.0509        ? might be 1.0106x slower
   array-prototype-reduceRight                       85.3295+-4.9150           83.9731+-4.0075          might be 1.0162x faster
   array-prototype-some                              86.9649+-2.0917     ?     87.4474+-1.2406        ?
   array-splice-contiguous                           51.2373+-16.4331          44.1206+-2.2141          might be 1.1613x faster
   array-with-double-add                              4.3380+-0.1882            4.3306+-0.1389        
   array-with-double-increment                        3.3798+-0.1068     ?      3.5820+-0.3674        ? might be 1.0598x slower
   array-with-double-mul-add                          5.3164+-0.2988            5.2090+-0.1939          might be 1.0206x faster
   array-with-double-sum                              3.3680+-0.0680     ?      3.4962+-0.2408        ? might be 1.0381x slower
   array-with-int32-add-sub                           6.8637+-0.1116     ?      7.1249+-0.3921        ? might be 1.0380x slower
   array-with-int32-or-double-sum                     3.4480+-0.0914     ?      3.7091+-0.3780        ? might be 1.0757x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     41.8827+-10.6098          37.8267+-2.4433          might be 1.1072x faster
   ArrayBuffer-DataView-alloc-long-lived             15.6614+-1.7170     ?     15.8339+-1.6042        ? might be 1.0110x slower
   ArrayBuffer-Int32Array-byteOffset                  3.9434+-0.2392     ?      4.1202+-0.5129        ? might be 1.0448x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     38.8276+-1.2156     ?     39.8738+-2.4821        ? might be 1.0269x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.7090+-1.6928           23.4332+-1.6092          might be 1.0118x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.5720+-0.2512     ?     15.4474+-1.7530        ? might be 1.1382x slower
   ArrayBuffer-Int8Array-alloc                       10.7818+-0.9576     ?     11.9685+-1.8215        ? might be 1.1101x slower
   asmjs_bool_bug                                     7.7734+-0.1244     ?      7.8242+-0.1816        ?
   assign-custom-setter-polymorphic                   3.4442+-0.3955     ?      3.6086+-0.4517        ? might be 1.0477x slower
   assign-custom-setter                               4.4948+-0.6149     ?      4.6045+-0.1211        ? might be 1.0244x slower
   basic-set                                          9.5898+-0.2172     ?      9.7019+-0.4752        ? might be 1.0117x slower
   big-int-mul                                        4.2476+-0.0231     ?      4.2749+-0.0544        ?
   boolean-test                                       3.2785+-0.3509            3.1678+-0.0555          might be 1.0350x faster
   branch-fold                                        3.9665+-0.1242     ?      4.1718+-0.2495        ? might be 1.0518x slower
   branch-on-string-as-boolean                       20.8798+-1.4349     ?     21.4420+-1.6542        ? might be 1.0269x slower
   by-val-generic                                     8.3175+-0.2430            8.1008+-0.2063          might be 1.0267x faster
   call-spread-apply                                 31.7943+-1.4148           30.6744+-1.2583          might be 1.0365x faster
   call-spread-call                                  28.4733+-3.2890           26.0910+-1.2132          might be 1.0913x faster
   captured-assignments                               0.5201+-0.0411     ?      0.5244+-0.0315        ?
   cast-int-to-double                                 5.3133+-0.0640     ?      5.3871+-0.1743        ? might be 1.0139x slower
   cell-argument                                      8.8143+-0.3961     ?      8.9379+-0.5941        ? might be 1.0140x slower
   cfg-simplify                                       2.9262+-0.0997     ?      3.1070+-0.4300        ? might be 1.0618x slower
   chain-getter-access                                9.4799+-0.2662     ?     10.3308+-2.4842        ? might be 1.0898x slower
   cmpeq-obj-to-obj-other                            12.5308+-1.0451           12.3457+-1.2009          might be 1.0150x faster
   constant-test                                      5.1180+-0.1499            5.1128+-0.1452        
   create-lots-of-functions                          11.9613+-0.5257           11.6611+-0.3488          might be 1.0257x faster
   cse-new-array-buffer                               2.6289+-0.2152            2.5493+-0.0377          might be 1.0312x faster
   cse-new-array                                      2.7060+-0.1238     ?      2.7336+-0.1666        ? might be 1.0102x slower
   DataView-custom-properties                        43.2959+-1.7895           42.8274+-1.4969          might be 1.0109x faster
   deconstructing-parameters-overridden-by-function   
                                                      0.6073+-0.0723     ?      0.6098+-0.0724        ?
   delay-tear-off-arguments-strictmode               14.7008+-0.4581     ?     14.9596+-0.7625        ? might be 1.0176x slower
   deltablue-varargs                                214.7441+-2.7793     ^    208.2834+-2.4455        ^ definitely 1.0310x faster
   destructuring-arguments                           17.4799+-0.2621     ?     17.7035+-1.1765        ? might be 1.0128x slower
   destructuring-swap                                 5.1204+-0.0825     ?      5.3871+-0.4405        ? might be 1.0521x slower
   direct-arguments-getbyval                          1.3741+-0.1787            1.3575+-0.1039          might be 1.0122x faster
   div-boolean-double                                 5.2666+-0.0183     ?      5.4085+-0.1748        ? might be 1.0269x slower
   div-boolean                                        7.9165+-0.1262     ?      8.0062+-0.2171        ? might be 1.0113x slower
   double-get-by-val-out-of-bounds                    4.7349+-0.2299            4.6386+-0.1325          might be 1.0208x faster
   double-pollution-getbyval                          8.9498+-0.1430     ?      9.0498+-0.1603        ? might be 1.0112x slower
   double-pollution-putbyoffset                       4.4456+-0.0673     ?      4.5197+-0.1755        ? might be 1.0166x slower
   double-real-use                                   39.1786+-1.8233     ^     30.8531+-1.8957        ^ definitely 1.2698x faster
   double-to-int32-typed-array-no-inline              2.5629+-0.1765     ?      2.7885+-0.3717        ? might be 1.0880x slower
   double-to-int32-typed-array                        2.0853+-0.1308     ?      2.1274+-0.2535        ? might be 1.0202x slower
   double-to-uint32-typed-array-no-inline             2.7319+-0.3297            2.7048+-0.2044          might be 1.0100x faster
   double-to-uint32-typed-array                       2.1392+-0.1100     ?      2.2248+-0.2762        ? might be 1.0400x slower
   elidable-new-object-dag                           44.7008+-2.3656     ?     45.1475+-2.2248        ?
   elidable-new-object-roflcopter                    44.3101+-0.4757     ?     44.7950+-1.1877        ? might be 1.0109x slower
   elidable-new-object-then-call                     41.0045+-2.0075           40.3546+-1.4403          might be 1.0161x faster
   elidable-new-object-tree                          46.8196+-1.9683           46.2384+-1.3045          might be 1.0126x faster
   empty-string-plus-int                              5.7489+-0.4892            5.6980+-0.3887        
   emscripten-cube2hash                              39.5624+-1.8832     ?     39.7053+-2.8232        ?
   exit-length-on-plain-object                       15.1968+-0.9972           15.0829+-1.3701        
   external-arguments-getbyval                        1.3080+-0.0767     ?      1.3283+-0.1358        ? might be 1.0155x slower
   external-arguments-putbyval                        2.4663+-0.0725     ?      2.5273+-0.2738        ? might be 1.0247x slower
   fixed-typed-array-storage-var-index                1.2515+-0.0646     ?      1.2721+-0.1496        ? might be 1.0165x slower
   fixed-typed-array-storage                          0.9309+-0.0596     ?      1.0026+-0.2316        ? might be 1.0771x slower
   Float32Array-matrix-mult                           4.5619+-0.1972     ?      4.6108+-0.3491        ? might be 1.0107x slower
   Float32Array-to-Float64Array-set                  57.3800+-1.6022     ^     53.8384+-1.2295        ^ definitely 1.0658x faster
   Float64Array-alloc-long-lived                     86.8374+-1.3782     ?     88.6209+-2.6563        ? might be 1.0205x slower
   Float64Array-to-Int16Array-set                    70.5072+-1.2068           70.1819+-2.0211        
   fold-double-to-int                                14.4996+-1.4479           14.2610+-1.1076          might be 1.0167x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.5252+-0.3477            9.8842+-0.9565          might be 1.0649x faster
   fold-get-by-id-to-multi-get-by-offset             10.8769+-1.3505           10.2194+-0.8194          might be 1.0643x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.7946+-0.5263     ?     10.5529+-0.7976        ? might be 1.0774x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     10.3841+-0.7463            9.4507+-0.7456          might be 1.0988x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.3845+-0.7569     ?     10.6707+-1.3360        ? might be 1.0276x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      7.6596+-0.4136            6.1729+-1.2491          might be 1.2408x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1639+-0.4948     ?     10.3641+-0.9431        ? might be 1.0197x slower
   fold-put-by-id-to-multi-put-by-offset             10.8777+-1.3103           10.1400+-0.7171          might be 1.0728x faster
   fold-put-structure                                 6.8127+-1.6188     ?      8.1930+-0.9459        ? might be 1.2026x slower
   for-of-iterate-array-entries                       4.7464+-0.2574            4.6472+-0.1876          might be 1.0213x faster
   for-of-iterate-array-keys                          4.0723+-0.2996            3.9709+-0.4581          might be 1.0255x faster
   for-of-iterate-array-values                        3.7769+-0.2057            3.6478+-0.1476          might be 1.0354x faster
   fround                                            21.3029+-1.2740           20.8685+-0.5585          might be 1.0208x faster
   ftl-library-inlining-dataview                     64.6773+-1.0438     ?     66.2338+-1.7576        ? might be 1.0241x slower
   ftl-library-inlining                              75.7161+-18.2590    ?     76.7194+-14.5666       ? might be 1.0133x slower
   function-dot-apply                                 2.3244+-0.1769     ?      2.3845+-0.2273        ? might be 1.0259x slower
   function-test                                      2.9386+-0.0986     ?      3.1374+-0.4538        ? might be 1.0676x slower
   function-with-eval                               105.0135+-4.8879     ?    105.1054+-4.5495        ?
   gcse-poly-get-less-obvious                        18.0062+-0.3045     ?     19.2136+-1.4151        ? might be 1.0671x slower
   gcse-poly-get                                     21.7950+-1.2984           20.8569+-2.3297          might be 1.0450x faster
   gcse                                               4.5926+-0.3118            4.5278+-0.3258          might be 1.0143x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7787+-0.0358     ?      2.8595+-0.0911        ? might be 1.0291x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.2432+-0.2184     ?      6.3842+-0.3752        ? might be 1.0226x slower
   get-by-id-chain-from-try-block                     6.8829+-0.7322            6.7402+-0.2689          might be 1.0212x faster
   get-by-id-check-structure-elimination              5.2436+-0.1873     ?      5.4378+-0.6713        ? might be 1.0370x slower
   get-by-id-proto-or-self                           19.5225+-2.1985           19.0816+-1.3728          might be 1.0231x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.1508+-0.1719     ?      3.1845+-0.3532        ? might be 1.0107x slower
   get-by-id-self-or-proto                           19.3795+-1.6346           19.3105+-2.0013        
   get-by-val-out-of-bounds                           4.5187+-0.0898            4.5018+-0.1283        
   get_callee_monomorphic                             3.1096+-0.3292     ?      3.1187+-0.2847        ?
   get_callee_polymorphic                             3.8514+-0.1523     ?      3.8957+-0.3576        ? might be 1.0115x slower
   getter-no-activation                               5.1573+-0.2709     ?      5.1873+-0.2737        ?
   getter-prototype                                  15.5717+-1.4198           15.4470+-0.8811        
   getter-richards                                  122.4377+-6.3844     ?    127.9659+-11.7732       ? might be 1.0452x slower
   getter                                             5.8061+-0.7873     ?      6.5084+-0.8060        ? might be 1.1210x slower
   global-var-const-infer-fire-from-opt               0.9237+-0.0748     ?      0.9508+-0.0335        ? might be 1.0292x slower
   global-var-const-infer                             1.0044+-0.2326            0.9635+-0.1915          might be 1.0424x faster
   HashMap-put-get-iterate-keys                      31.9761+-2.3091           30.5245+-3.2805          might be 1.0476x faster
   HashMap-put-get-iterate                           33.8839+-1.6019           32.6040+-0.7785          might be 1.0393x faster
   HashMap-string-put-get-iterate                    32.9646+-1.3268     ?     33.0186+-2.2479        ?
   hoist-make-rope                                   13.2138+-0.5259     ^     11.7207+-0.3643        ^ definitely 1.1274x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.1246+-0.0401            5.1134+-0.1054        
   hoist-poly-check-structure                         3.7417+-0.0490     ?      3.7914+-0.0514        ? might be 1.0133x slower
   imul-double-only                                   8.9388+-0.6346     ?      9.0351+-0.6244        ? might be 1.0108x slower
   imul-int-only                                     10.1606+-1.0664           10.0148+-0.6802          might be 1.0146x faster
   imul-mixed                                         8.3631+-0.8105     ?      8.8562+-1.4634        ? might be 1.0590x slower
   in-four-cases                                     22.4516+-0.2337     ?     24.4944+-4.0805        ? might be 1.0910x slower
   in-one-case-false                                 11.1368+-0.1508     ?     12.2178+-1.5564        ? might be 1.0971x slower
   in-one-case-true                                  11.2594+-0.4072     ?     11.2805+-0.3854        ?
   in-two-cases                                      11.6828+-0.1881           11.6370+-0.0706        
   indexed-properties-in-objects                      3.0941+-0.3590            2.9584+-0.0428          might be 1.0459x faster
   infer-closure-const-then-mov-no-inline             4.2793+-0.3960            4.0385+-0.1232          might be 1.0596x faster
   infer-closure-const-then-mov                      19.8404+-0.3855     ?     20.0677+-0.3620        ? might be 1.0115x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     13.4953+-1.0339           13.0972+-0.7097          might be 1.0304x faster
   infer-closure-const-then-put-to-scope             22.2641+-1.1405     ?     23.1667+-1.6480        ? might be 1.0405x slower
   infer-closure-const-then-reenter-no-inline   
                                                     54.4719+-0.5209     ?     56.2917+-2.8050        ? might be 1.0334x slower
   infer-closure-const-then-reenter                  23.5198+-1.4825           22.5830+-0.9684          might be 1.0415x faster
   infer-constant-global-property                     3.6351+-0.1083            3.6045+-0.0644        
   infer-constant-property                            2.7953+-0.0392     ?      2.8058+-0.1099        ?
   infer-one-time-closure-ten-vars                   13.1030+-0.9390           12.7433+-0.8129          might be 1.0282x faster
   infer-one-time-closure-two-vars                   12.1914+-0.3297           12.0424+-0.3273          might be 1.0124x faster
   infer-one-time-closure                            12.1316+-0.2544     ?     12.4941+-0.9584        ? might be 1.0299x slower
   infer-one-time-deep-closure                       21.2563+-1.2864     ?     22.1341+-1.7041        ? might be 1.0413x slower
   inline-arguments-access                            4.8317+-0.4726            4.6950+-0.2604          might be 1.0291x faster
   inline-arguments-aliased-access                    4.6918+-0.0734     ?      4.8013+-0.2213        ? might be 1.0233x slower
   inline-arguments-local-escape                      4.9218+-0.3120            4.7498+-0.1426          might be 1.0362x faster
   inline-get-scoped-var                              5.0800+-0.2111     ?      5.1424+-0.3498        ? might be 1.0123x slower
   inlined-put-by-id-transition                      12.0632+-1.0561           11.8208+-0.4582          might be 1.0205x faster
   int-or-other-abs-then-get-by-val                   5.0432+-0.0761     ?      5.1066+-0.1840        ? might be 1.0126x slower
   int-or-other-abs-zero-then-get-by-val             17.4413+-0.4036     ?     18.5194+-1.3740        ? might be 1.0618x slower
   int-or-other-add-then-get-by-val                   4.4347+-0.0825     ?      4.5955+-0.3175        ? might be 1.0363x slower
   int-or-other-add                                   5.3702+-0.0278     ?      5.8728+-0.9776        ? might be 1.0936x slower
   int-or-other-div-then-get-by-val                   4.3114+-0.0669     ?      4.3470+-0.1079        ?
   int-or-other-max-then-get-by-val                   4.5511+-0.2799            4.3501+-0.0323          might be 1.0462x faster
   int-or-other-min-then-get-by-val                   4.5540+-0.3184     ?      4.5587+-0.3321        ?
   int-or-other-mod-then-get-by-val                   3.9918+-0.0814     ?      4.2338+-0.2763        ? might be 1.0606x slower
   int-or-other-mul-then-get-by-val                   4.0608+-0.1752            4.0204+-0.1237          might be 1.0100x faster
   int-or-other-neg-then-get-by-val                   5.0430+-0.2364            4.8081+-0.0107          might be 1.0489x faster
   int-or-other-neg-zero-then-get-by-val             17.6216+-0.2645     ?     17.9727+-0.3929        ? might be 1.0199x slower
   int-or-other-sub-then-get-by-val                   4.4516+-0.0919     ?      4.5013+-0.2086        ? might be 1.0112x slower
   int-or-other-sub                                   3.7262+-0.1549     ?      3.7862+-0.3329        ? might be 1.0161x slower
   int-overflow-local                                 4.6991+-0.1066     ?      5.2985+-1.8016        ? might be 1.1275x slower
   Int16Array-alloc-long-lived                       53.2579+-1.2255     ?     53.4637+-1.4634        ?
   Int16Array-bubble-sort-with-byteLength            20.8310+-1.3066           20.3810+-0.1387          might be 1.0221x faster
   Int16Array-bubble-sort                            20.9899+-1.5208     ?     21.4960+-0.4231        ? might be 1.0241x slower
   Int16Array-load-int-mul                            1.5481+-0.0248     ?      1.5492+-0.0581        ?
   Int16Array-to-Int32Array-set                      58.5953+-2.1180     !     87.0462+-2.0388        ! definitely 1.4855x slower
   Int32Array-alloc-large                            24.0928+-0.7134           23.7636+-0.8337          might be 1.0139x faster
   Int32Array-alloc-long-lived                       64.6822+-1.2487           63.9060+-1.4974          might be 1.0121x faster
   Int32Array-alloc                                   3.4528+-0.1495     ?      3.5756+-0.2745        ? might be 1.0356x slower
   Int32Array-Int8Array-view-alloc                    7.3626+-0.9694            6.6453+-0.1471          might be 1.1079x faster
   int52-spill                                        5.8572+-0.0881     !      6.6057+-0.2007        ! definitely 1.1278x slower
   Int8Array-alloc-long-lived                        47.5931+-0.9026     ?     47.8157+-1.1874        ?
   Int8Array-load-with-byteLength                     3.4464+-0.0892            3.4091+-0.0603          might be 1.0109x faster
   Int8Array-load                                     3.4590+-0.0989     ?      3.5804+-0.4295        ? might be 1.0351x slower
   integer-divide                                    11.1394+-0.2960           10.9485+-0.1081          might be 1.0174x faster
   integer-modulo                                     2.1705+-0.1468            2.1366+-0.1366          might be 1.0158x faster
   is-boolean-fold-tricky                             4.5005+-0.0733     ?      4.7784+-0.2219        ? might be 1.0618x slower
   is-boolean-fold                                    2.9912+-0.2254            2.9220+-0.0554          might be 1.0237x faster
   is-function-fold-tricky-internal-function   
                                                     11.9466+-0.1336     ?     12.4842+-0.9593        ? might be 1.0450x slower
   is-function-fold-tricky                            4.6517+-0.1944            4.6147+-0.0594        
   is-function-fold                                   2.9396+-0.0610     ?      2.9736+-0.0606        ? might be 1.0116x slower
   is-number-fold-tricky                              4.4688+-0.0638     ?      4.7042+-0.3811        ? might be 1.0527x slower
   is-number-fold                                     2.9264+-0.1368     ?      3.1362+-0.3365        ? might be 1.0717x slower
   is-object-or-null-fold-functions                   2.9731+-0.0263     ?      3.0087+-0.0577        ? might be 1.0120x slower
   is-object-or-null-fold-less-tricky                 4.9979+-0.5992            4.6989+-0.2243          might be 1.0636x faster
   is-object-or-null-fold-tricky                      6.7910+-0.2055            6.7454+-0.1395        
   is-object-or-null-fold                             2.9794+-0.1718            2.9431+-0.0445          might be 1.0123x faster
   is-object-or-null-trickier-function                4.7193+-0.2030     ?      4.7338+-0.1885        ?
   is-object-or-null-trickier-internal-function   
                                                     13.0205+-1.1077           12.7615+-0.1580          might be 1.0203x faster
   is-object-or-null-tricky-function                  4.7392+-0.1004     ?      4.7966+-0.3045        ? might be 1.0121x slower
   is-object-or-null-tricky-internal-function   
                                                      9.5158+-0.1467            9.3372+-0.1174          might be 1.0191x faster
   is-string-fold-tricky                              4.6525+-0.2771            4.5609+-0.0529          might be 1.0201x faster
   is-string-fold                                     2.9078+-0.0969     ?      3.1592+-0.3217        ? might be 1.0865x slower
   is-undefined-fold-tricky                           3.9989+-0.4170            3.8263+-0.0715          might be 1.0451x faster
   is-undefined-fold                                  3.0665+-0.4244            3.0613+-0.3426        
   large-int-captured                                 4.7270+-0.0664     ?      5.0343+-0.3677        ? might be 1.0650x slower
   large-int-neg                                     16.1226+-0.1969     ?     18.4455+-5.2215        ? might be 1.1441x slower
   large-int                                         15.6311+-1.3657           14.6141+-0.2640          might be 1.0696x faster
   load-varargs-elimination                          22.8688+-0.2632     ?     23.5152+-0.7849        ? might be 1.0283x slower
   logical-not-weird-types                            3.3622+-0.0416     ?      3.3722+-0.1416        ?
   logical-not                                        4.6353+-0.0490            4.5875+-0.0528          might be 1.0104x faster
   lots-of-fields                                    12.6048+-0.3528           12.4803+-0.2305        
   make-indexed-storage                               3.3081+-0.1141            3.2760+-0.0847        
   make-rope-cse                                     11.8657+-1.2716           11.5791+-0.9861          might be 1.0248x faster
   marsaglia-larger-ints                             36.6383+-0.9094     ?     36.9322+-0.8724        ?
   marsaglia-osr-entry                               24.8483+-3.2181           24.1886+-1.6482          might be 1.0273x faster
   math-with-out-of-bounds-array-values              24.6324+-0.2971     ?     25.6852+-1.9280        ? might be 1.0427x slower
   max-boolean                                        2.6772+-0.2922            2.6512+-0.3039        
   method-on-number                                  18.3747+-1.3804           17.7392+-0.7767          might be 1.0358x faster
   min-boolean                                        2.6519+-0.0752            2.6467+-0.2027        
   minus-boolean-double                               3.3043+-0.1456     ?      3.3566+-0.2622        ? might be 1.0158x slower
   minus-boolean                                      2.5179+-0.2882            2.4880+-0.1529          might be 1.0120x faster
   misc-strict-eq                                    40.1883+-3.4439           39.7957+-2.0677        
   mod-boolean-double                                11.0357+-0.2610     ?     11.2461+-0.4919        ? might be 1.0191x slower
   mod-boolean                                        8.0228+-0.2189            7.9757+-0.2379        
   mul-boolean-double                                 3.9513+-0.2687            3.8156+-0.0636          might be 1.0356x faster
   mul-boolean                                        3.0155+-0.0862            2.9323+-0.0505          might be 1.0283x faster
   neg-boolean                                        3.3316+-0.1652            3.2722+-0.1184          might be 1.0182x faster
   negative-zero-divide                               0.4189+-0.0607            0.4084+-0.0371          might be 1.0256x faster
   negative-zero-modulo                               0.3932+-0.0140     ?      0.4098+-0.0553        ? might be 1.0422x slower
   negative-zero-negate                               0.3679+-0.0204     ?      0.3810+-0.0613        ? might be 1.0356x slower
   nested-function-parsing                           40.9829+-2.8663           39.7147+-1.4549          might be 1.0319x faster
   new-array-buffer-dead                            116.5228+-3.5705          114.8875+-3.6648          might be 1.0142x faster
   new-array-buffer-push                              7.1389+-0.5711     ?      7.2685+-0.3968        ? might be 1.0182x slower
   new-array-dead                                    19.8783+-0.7806           19.4840+-0.4646          might be 1.0202x faster
   new-array-push                                     6.4842+-0.1715     ?      7.0729+-1.0964        ? might be 1.0908x slower
   no-inline-constructor                             41.1329+-1.1680     ?     42.3153+-1.4673        ? might be 1.0287x slower
   number-test                                        3.3175+-0.3128            3.1242+-0.0769          might be 1.0619x faster
   object-closure-call                                6.6723+-2.4675     ?      6.9599+-2.8078        ? might be 1.0431x slower
   object-test                                        2.9133+-0.0602     ?      3.0579+-0.2771        ? might be 1.0496x slower
   obvious-sink-pathology-taken                     146.2438+-7.2540          145.1579+-7.3554        
   obvious-sink-pathology                           133.9435+-2.6962     ?    134.6573+-6.6222        ?
   obviously-elidable-new-object                     36.4064+-2.0877           35.3983+-1.4125          might be 1.0285x faster
   plus-boolean-arith                                 2.5663+-0.0334     ?      2.7342+-0.3410        ? might be 1.0654x slower
   plus-boolean-double                                3.2665+-0.0768     ?      3.3694+-0.3092        ? might be 1.0315x slower
   plus-boolean                                       2.6465+-0.2831            2.5819+-0.2684          might be 1.0250x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.3791+-0.1125     ?      3.4765+-0.2635        ? might be 1.0288x slower
   poly-chain-access-different-prototypes             2.8866+-0.3795            2.6135+-0.0316          might be 1.1045x faster
   poly-chain-access-simpler                          3.4803+-0.3513     ?      3.5109+-0.2623        ?
   poly-chain-access                                  2.6293+-0.0338     ?      2.6722+-0.0678        ? might be 1.0163x slower
   poly-stricteq                                     62.3378+-4.2474           61.3070+-2.8681          might be 1.0168x faster
   polymorphic-array-call                             1.5722+-0.2331     ?      1.5788+-0.1851        ?
   polymorphic-get-by-id                              3.3204+-0.2173     ?      3.3369+-0.2809        ?
   polymorphic-put-by-id                             30.4176+-2.0487     ?     33.5857+-3.0898        ? might be 1.1042x slower
   polymorphic-structure                             15.7642+-1.6749     ?     16.1063+-1.3548        ? might be 1.0217x slower
   polyvariant-monomorphic-get-by-id                  8.8915+-0.7234            8.8010+-0.2973          might be 1.0103x faster
   proto-getter-access                                9.2603+-0.1010     ?      9.4116+-0.1047        ? might be 1.0163x slower
   put-by-id-replace-and-transition                   9.9561+-0.2371     ?     10.0173+-0.5196        ?
   put-by-id-slightly-polymorphic                     3.0058+-0.3558            2.8665+-0.0209          might be 1.0486x faster
   put-by-id                                         13.1625+-0.7817           13.1198+-0.5997        
   put-by-val-direct                                  0.3978+-0.0234     ?      0.4090+-0.0201        ? might be 1.0281x slower
   put-by-val-large-index-blank-indexing-type   
                                                     12.5117+-0.8008     ?     12.5155+-1.1926        ?
   put-by-val-machine-int                             2.8490+-0.0573     ?      2.8655+-0.0459        ?
   rare-osr-exit-on-local                            15.4760+-0.7914     ?     15.6964+-0.9254        ? might be 1.0142x slower
   register-pressure-from-osr                        21.8500+-1.1353           21.4581+-0.2381          might be 1.0183x faster
   repeat-multi-get-by-offset                        26.2705+-1.5164           25.5339+-1.5595          might be 1.0289x faster
   setter-prototype                                  10.3936+-0.0765     ?     10.6021+-0.2289        ? might be 1.0201x slower
   setter                                             6.4727+-1.1381            6.1420+-0.9220          might be 1.0538x faster
   simple-activation-demo                            25.4780+-0.7757     ?     25.4843+-0.6526        ?
   simple-getter-access                              12.0555+-0.5549     ?     12.1281+-0.5233        ?
   simple-poly-call-nested                            8.4959+-0.4501     ?      8.5973+-0.5802        ? might be 1.0119x slower
   simple-poly-call                                   1.4036+-0.1996     ?      1.4580+-0.1725        ? might be 1.0388x slower
   sin-boolean                                       23.0189+-1.2927     ?     23.5117+-1.2151        ? might be 1.0214x slower
   singleton-scope                                   62.2816+-0.5644     ?     64.3267+-3.4082        ? might be 1.0328x slower
   sink-function                                     12.2345+-0.2793     ?     12.4375+-0.5234        ? might be 1.0166x slower
   sink-huge-activation                              19.5452+-0.6955           19.4954+-1.6026        
   sinkable-new-object-dag                           71.8970+-2.4000     ?     72.1729+-3.1456        ?
   sinkable-new-object-taken                         53.4487+-4.3083     ?     53.4896+-3.7812        ?
   sinkable-new-object                               41.0754+-1.8944           39.8442+-1.5570          might be 1.0309x faster
   slow-array-profile-convergence                     2.9406+-0.1362     ?      3.1369+-0.4300        ? might be 1.0668x slower
   slow-convergence                                   2.7920+-0.1450     ?      3.1395+-0.4592        ? might be 1.1245x slower
   slow-ternaries                                    19.6669+-2.5399     ?     21.3606+-2.3525        ? might be 1.0861x slower
   sorting-benchmark                                 18.8436+-0.4924           18.7901+-0.2727        
   sparse-conditional                                 1.2684+-0.1808            1.2070+-0.0547          might be 1.0508x faster
   splice-to-remove                                  16.1900+-1.7071           16.1652+-1.9601        
   string-char-code-at                               16.5265+-0.5441     ?     16.8091+-1.4586        ? might be 1.0171x slower
   string-concat-object                               2.7056+-0.1068     ?      2.7931+-0.2133        ? might be 1.0323x slower
   string-concat-pair-object                          2.7020+-0.1053            2.6384+-0.1148          might be 1.0241x faster
   string-concat-pair-simple                         12.8510+-1.6452           12.1397+-0.5975          might be 1.0586x faster
   string-concat-simple                              13.2045+-1.2903           12.7945+-1.2119          might be 1.0320x faster
   string-cons-repeat                                 8.9475+-1.0274     ?      9.0047+-1.2322        ?
   string-cons-tower                                  8.7348+-0.4938     ?      8.9245+-1.0792        ? might be 1.0217x slower
   string-equality                                   18.0052+-0.7431     ?     18.1871+-0.8178        ? might be 1.0101x slower
   string-get-by-val-big-char                         7.9296+-1.5597            7.2378+-0.0583          might be 1.0956x faster
   string-get-by-val-out-of-bounds-insane             3.7111+-0.2049            3.6165+-0.0799          might be 1.0262x faster
   string-get-by-val-out-of-bounds                    5.6405+-0.1309            5.6151+-0.1039        
   string-get-by-val                                  3.4892+-0.3435     ?      3.8206+-1.1454        ? might be 1.0950x slower
   string-hash                                        2.3642+-0.3967            2.2887+-0.2090          might be 1.0330x faster
   string-long-ident-equality                        14.8783+-0.2863           14.7138+-0.2758          might be 1.0112x faster
   string-out-of-bounds                              15.2030+-0.6894     ?     15.5404+-1.4605        ? might be 1.0222x slower
   string-repeat-arith                               35.2340+-1.8705           34.7127+-2.2871          might be 1.0150x faster
   string-sub                                        67.1257+-1.4318           66.4390+-4.4738          might be 1.0103x faster
   string-test                                        3.0470+-0.1627     ?      3.1121+-0.1076        ? might be 1.0214x slower
   string-var-equality                               32.1891+-0.4765     ?     33.4429+-1.2621        ? might be 1.0389x slower
   structure-hoist-over-transitions                   2.8652+-0.2707            2.8005+-0.2231          might be 1.0231x faster
   substring-concat-weird                            40.4087+-0.3936     ?     41.3549+-1.5362        ? might be 1.0234x slower
   substring-concat                                  43.0608+-0.6943           42.7293+-0.7460        
   substring                                         45.5489+-0.5227     ?     48.1099+-4.1626        ? might be 1.0562x slower
   switch-char-constant                               3.1151+-0.4200            3.0975+-0.4064        
   switch-char                                        7.7828+-2.8346     ?      7.7878+-2.7107        ?
   switch-constant                                    8.7140+-0.6519            8.4566+-0.1854          might be 1.0304x faster
   switch-string-basic-big-var                       18.3619+-0.2243     ?     18.8311+-0.3725        ? might be 1.0256x slower
   switch-string-basic-big                           14.8380+-0.2850     ?     15.7090+-1.1136        ? might be 1.0587x slower
   switch-string-basic-var                           15.4687+-0.5082           15.2678+-0.3530          might be 1.0132x faster
   switch-string-basic                               13.5540+-0.2108     ?     13.6899+-0.2105        ? might be 1.0100x slower
   switch-string-big-length-tower-var                20.9254+-1.1904     ?     21.0904+-1.1275        ?
   switch-string-length-tower-var                    15.8864+-0.3595     ?     16.3394+-0.7493        ? might be 1.0285x slower
   switch-string-length-tower                        13.3218+-0.1852           13.1422+-0.1413          might be 1.0137x faster
   switch-string-short                               13.4403+-0.6141           13.2874+-0.3013          might be 1.0115x faster
   switch                                            12.7922+-0.2465           12.7230+-0.1607        
   tear-off-arguments-simple                          3.6452+-0.1268     ?      3.8313+-0.4198        ? might be 1.0510x slower
   tear-off-arguments                                 5.2900+-0.7428            4.8188+-0.0460          might be 1.0978x faster
   temporal-structure                                12.2795+-0.4360     ?     12.3909+-0.3273        ?
   to-int32-boolean                                  14.1243+-1.1032     ?     14.4255+-0.5901        ? might be 1.0213x slower
   try-catch-get-by-val-cloned-arguments             15.5437+-1.2737           15.3269+-1.4182          might be 1.0141x faster
   try-catch-get-by-val-direct-arguments              6.8077+-0.1795     ?      7.3624+-1.2003        ? might be 1.0815x slower
   try-catch-get-by-val-scoped-arguments              8.2208+-1.1171            7.8603+-0.4170          might be 1.0459x faster
   typed-array-get-set-by-val-profiling              33.1695+-1.3411     ?     33.5614+-2.2356        ? might be 1.0118x slower
   undefined-property-access                        344.8654+-6.1666     ?    345.0793+-5.0147        ?
   undefined-test                                     3.1023+-0.0744     ?      3.2363+-0.3026        ? might be 1.0432x slower
   unprofiled-licm                                   23.5878+-1.6899           23.3000+-0.8779          might be 1.0124x faster
   varargs-call                                      14.9572+-0.2133     ?     15.4218+-0.6636        ? might be 1.0311x slower
   varargs-construct-inline                          28.0513+-0.4670     ?     28.5467+-1.0283        ? might be 1.0177x slower
   varargs-construct                                 23.1161+-0.9771           22.9963+-0.6595        
   varargs-inline                                     9.4993+-0.2461     ?      9.7183+-0.4031        ? might be 1.0231x slower
   varargs-strict-mode                               10.3865+-0.4436           10.3680+-0.6278        
   varargs                                           10.2161+-0.3311           10.1215+-0.1238        
   weird-inlining-const-prop                          3.4757+-0.2676            3.3995+-0.3688          might be 1.0224x faster

   &lt;geometric&gt;                                        9.0072+-0.0414     ?      9.0500+-0.0258        ? might be 1.0047x slower

                                                        TipOfTree               DoubleRealUse                                   
AsmBench:
   bigfib.cpp                                       527.3094+-43.0637         500.3729+-0.9951          might be 1.0538x faster
   cray.c                                           434.0237+-5.9763          427.9939+-4.5663          might be 1.0141x faster
   dry.c                                            489.8357+-6.7331     ?    497.7663+-29.8481       ? might be 1.0162x slower
   FloatMM.c                                        733.1705+-12.7840    ?    744.6158+-36.3405       ? might be 1.0156x slower
   gcc-loops.cpp                                   4298.8606+-33.0480    ?   4379.6672+-235.0977      ? might be 1.0188x slower
   n-body.c                                        1027.0808+-74.1027        1005.6156+-51.8324         might be 1.0213x faster
   Quicksort.c                                      429.9165+-21.9303         421.4313+-5.3643          might be 1.0201x faster
   stepanov_container.cpp                          3629.3052+-12.1689    ?   3648.4669+-21.5411       ?
   Towers.c                                         265.9443+-7.6005          265.3615+-9.2464        

   &lt;geometric&gt;                                      809.8567+-14.0131         805.0211+-5.7733          might be 1.0060x faster

                                                        TipOfTree               DoubleRealUse                                   
CompressionBench:
   huffman                                          379.4922+-13.7496    ?    380.0467+-2.1474        ?
   arithmetic-simple                                371.0971+-6.6682          370.0134+-3.8310        
   arithmetic-precise                               283.1228+-3.1358     ?    285.7389+-10.3425       ?
   arithmetic-complex-precise                       288.9532+-6.6155          283.2126+-3.6934          might be 1.0203x faster
   arithmetic-precise-order-0                       390.1610+-19.3233         380.7223+-5.7522          might be 1.0248x faster
   arithmetic-precise-order-1                       335.6155+-5.8232          332.9047+-5.6272        
   arithmetic-precise-order-2                       371.9170+-7.0694     ?    374.6683+-14.0849       ?
   arithmetic-simple-order-1                        446.9975+-34.3723         425.2524+-3.4415          might be 1.0511x faster
   arithmetic-simple-order-2                        478.2733+-9.3357     ?    489.0075+-38.7198       ? might be 1.0224x slower
   lz-string                                        314.5315+-5.5190     ?    326.9615+-18.4241       ? might be 1.0395x slower

   &lt;geometric&gt;                                      360.9749+-1.4394          360.0230+-3.7051          might be 1.0026x faster

                                                        TipOfTree               DoubleRealUse                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   63.4921+-0.2623     ^     62.9351+-0.2809        ^ definitely 1.0089x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099423</commentid>
    <comment_count>5</comment_count>
      <attachid>254252</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-03 23:25:16 -0700</bug_when>
    <thetext>Created attachment 254252
the best approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099425</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-03 23:26:42 -0700</bug_when>
    <thetext>Attachment 254252 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2099:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099575</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-04 13:06:00 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 254252 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2099:  When wrapping
&gt; a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; Total errors found: 1 in 16 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099585</commentid>
    <comment_count>8</comment_count>
      <attachid>254252</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-06-04 13:32:52 -0700</bug_when>
    <thetext>Comment on attachment 254252
the best approach

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099596</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-04 13:53:46 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/185216</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099639</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-04 15:07:46 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 145666</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099742</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-04 20:53:04 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Re-opened since this is blocked by bug 145666

Looks like it was an incorrect JIT assertion.  Removing the assertion is the right fix.  I&apos;ll reland shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099746</commentid>
    <comment_count>12</comment_count>
      <attachid>254338</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-04 21:12:37 -0700</bug_when>
    <thetext>Created attachment 254338
patch for relanding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099761</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-04 22:00:10 -0700</bug_when>
    <thetext>Relanded in http://trac.webkit.org/changeset/185239</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254211</attachid>
            <date>2015-06-03 14:45:53 -0700</date>
            <delta_ts>2015-06-03 21:49:44 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11249</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4NTE2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzc4LDYgKzM3OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKIAogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICBjYXNlIE51bWJl
clVzZToKKyAgICAgICAgY2FzZSBEb3VibGVSZWFsVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTg1MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyMyw2ICsxNzIzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3Byb2ZpdGFiaWxpdHlDaGFuZ2VkIHw9IHZh
cmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIGNhc2UgRG91YmxlUmVhbFVzZToK
ICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVz
ZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+ZG91YmxlRm9ybWF0U3RhdGUoKSA9PSBVc2lu
Z0RvdWJsZUZvcm1hdCkKQEAgLTIxMDIsNiArMjEwMywxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGVkZ2Uuc2V0VXNlS2luZChJbnQ1MlJlcFVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlYWxVc2U6CisgICAgICAgICAgICBp
ZiAoZWRnZS0+aGFzRG91YmxlUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgZWRnZS5zZXRVc2VL
aW5kKERvdWJsZVJlcFJlYWxVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAoZWRnZS0+aGFzSW50
NTJSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoSW50NTJSZXBVc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMTI4LDkgKzIxMzYsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91Ymxl
LCBEb3VibGVSZXAsIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdl
Lm5vZGUoKSwgSW50NTJSZXBVc2UpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgVXNlS2luZCB1c2VLaW5kID0gTm90Q2VsbFVzZTsKLSAgICAgICAgICAgICAgICBpZiAo
ZWRnZS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgVXNlS2luZCB1
c2VLaW5kOworICAgICAgICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVEb3VibGVS
ZWFsKCkpCisgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQgPSBEb3VibGVSZWFsVXNlOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAg
ICAgICAgICAgICAgICAgICB1c2VLaW5kID0gTnVtYmVyVXNlOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgdXNlS2luZCA9IE5vdENlbGxVc2U7CiAKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVSZXAsIG5v
ZGUtPm9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxODUxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2Miw2ICsxNzYyLDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIGlzRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCisgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVSZWFsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0RvdWJsZVJlYWxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcigpCiAgICAgewogICAgICAgICByZXR1cm4gaXNGdWxs
TnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODUxNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToK
ICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAg
ICAgIGNhc2UgRG91YmxlUmVhbFVzZToKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAg
ICBjYXNlIENlbGxVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4
NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDY2LDYgKzIwNjYsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZURvdWJsZUFzSW50Mwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJs
ZVJlcChOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgY2FzZSBEb3VibGVSZWFsVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWVS
ZWdzIG9wMVJlZ3MgPSBvcDEuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgRlBSUmVnIHJlc3VsdEZQ
UiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDFSZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICAg
ICAgdW5ib3hEb3VibGUodGVtcEdQUiwgcmVzdWx0RlBSKTsKKyNlbHNlCisgICAgICAgIEZQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7
CisgICAgICAgIHVuYm94RG91YmxlKG9wMVJlZ3MudGFnR1BSKCksIG9wMVJlZ3MucGF5bG9hZEdQ
UigpLCByZXN1bHRGUFIsIHRlbXBGUFIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgIG9wMVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCBTcGVjRG91
YmxlUmVhbCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShKSVRDb21waWxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgcmVzdWx0RlBSLCByZXN1bHRGUFIpKTsKKyAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdEZQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgICAgICAKICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgY2FzZSBOdW1iZXJVc2U6IHsK
ICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKS0+aXNOdW1iZXJDb25zdGFudCgpKTsgLy8g
VGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnN0YW50IGZvbGRlZC4KQEAgLTUzNzcsNiArNTQwMiwz
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVEb3VibGVSZWFsCiAgICAgaWYgKCFu
ZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjRG91YmxlUmVhbCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKKyAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIEpTVmFs
dWVSZWdzIG9wMVJlZ3MgPSBvcDEuanNWYWx1ZVJlZ3MoKTsKKyAgICBGUFJSZWcgcmVzdWx0RlBS
ID0gcmVzdWx0LmZwcigpOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIG1f
aml0Lm1vdmUob3AxUmVncy5ncHIoKSwgdGVtcEdQUik7CisgICAgdW5ib3hEb3VibGUodGVtcEdQ
UiwgcmVzdWx0RlBSKTsKKyNlbHNlCisgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAg
RlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgIHVuYm94RG91YmxlKG9wMVJlZ3MudGFn
R1BSKCksIG9wMVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRGUFIsIHRlbXBGUFIpOworI2VuZGlm
CisgICAgCisgICAgdHlwZUNoZWNrKAorICAgICAgICBvcDFSZWdzLCBlZGdlLCBTcGVjRG91Ymxl
UmVhbCwKKyAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKEpJVENvbXBpbGVyOjpEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkLCByZXN1bHRGUFIsIHJlc3VsdEZQUikpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAo
IW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNEb3VibGVSZWFsKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKICAg
ICBGUFJSZWcgZnByID0gb3BlcmFuZC5mcHIoKTsKICAgICB0eXBlQ2hlY2soCkBAIC01NjQxLDkg
KzU2OTMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAg
IGNhc2UgTnVtYmVyVXNlOgogICAgICAgICBzcGVjdWxhdGVOdW1iZXIoZWRnZSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKKyAgICBjYXNlIERvdWJsZVJlYWxV
c2U6CiAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlYWwoZWRnZSk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKKyAgICAgICAgc3BlY3VsYXRlRG91YmxlUmVwUmVh
bChlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIE1h
Y2hpbmVJbnRVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU1hY2hpbmVJbnQoZWRnZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxODUxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNzMsNiArMjM3Myw3IEBAIHB1YmxpYzoKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKEVkZ2UpOwogICAgIHZv
aWQgc3BlY3VsYXRlRG91YmxlUmVhbChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJl
cFJlYWwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UpOwogICAgIHZvaWQg
c3BlY3VsYXRlQ2VsbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTg1
MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01NSw2ICs1NSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBVc2UKICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgb3V0LnByaW50KCJOdW1i
ZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlUmVhbFVzZToKKyAgICAgICAg
b3V0LnByaW50KCJEb3VibGVSZWFsIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIERvdWJs
ZVJlcFVzZToKICAgICAgICAgb3V0LnByaW50KCJEb3VibGVSZXAiKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4
NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ2LDYgKzQ2LDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkludDMy
VXNlLAogICAgIE1hY2hpbmVJbnRVc2UsCiAgICAgTnVtYmVyVXNlLAorICAgIERvdWJsZVJlYWxV
c2UsCiAgICAgQm9vbGVhblVzZSwKICAgICBDZWxsVXNlLAogICAgIEtub3duQ2VsbFVzZSwKQEAg
LTkwLDYgKzkxLDggQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwog
ICAgICAgICByZXR1cm4gU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGU7CiAgICAgY2FzZSBO
dW1iZXJVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgY2FzZSBE
b3VibGVSZWFsVXNlOgorICAgICAgICByZXR1cm4gU3BlY0RvdWJsZVJlYWw7CiAgICAgY2FzZSBE
b3VibGVSZXBVc2U6CiAgICAgICAgIHJldHVybiBTcGVjRnVsbERvdWJsZTsKICAgICBjYXNlIERv
dWJsZVJlcFJlYWxVc2U6CkBAIC0xNTgsNiArMTYxLDcgQEAgaW5saW5lIGJvb2wgaXNOdW1lcmlj
YWwoVXNlS2luZCBraW5kKQogICAgIGNhc2UgSW50MzJVc2U6CiAgICAgY2FzZSBLbm93bkludDMy
VXNlOgogICAgIGNhc2UgTnVtYmVyVXNlOgorICAgIGNhc2UgRG91YmxlUmVhbFVzZToKICAgICBj
YXNlIEludDUyUmVwVXNlOgogICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgIGNhc2UgRG91Ymxl
UmVwUmVhbFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDE4NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBA
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAg
ICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToK
ICAgICAgICAgICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgICAgICBjYXNlIERv
dWJsZVJlYWxVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQm9v
bGVhblVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODUxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU4LDYgKzk1OCwx
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZURvdWJsZVJlcCgpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgRG91
YmxlUmVhbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNEb3VibGVSZWFsLAorICAg
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQoZG91YmxlVmFsdWUs
IGRvdWJsZVZhbHVlKSk7CisgICAgICAgICAgICBzZXREb3VibGUoZG91YmxlVmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
b3RDZWxsVXNlOgogICAgICAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICAgICAgYm9vbCBz
aG91bGRDb252ZXJ0Tm9uTnVtYmVyID0gbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTm90
Q2VsbFVzZTsKQEAgLTc1OTAsOSArNzYwMiwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE51
bWJlclVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6CisgICAgICAgIGNhc2UgRG91
YmxlUmVhbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlYWwoZWRnZSk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgorICAgICAgICAg
ICAgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVE
b3VibGVSZXBNYWNoaW5lSW50KGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03OTIzLDYg
Kzc5MzgsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlw
ZUNoZWNrKGVkZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlKTsKKyAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVl
ID0gdW5ib3hEb3VibGUodmFsdWUpOworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNEb3VibGVSZWFsLAorICAgICAgICAg
ICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChkb3VibGVWYWx1ZSwgZG91YmxlVmFs
dWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIC8vIERvIGFuIGVhcmx5IHJldHVybiBoZXJlIGJlY2F1c2Ug
bG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxvdCBvZiBjb250cm9sIGZsb3cuCisgICAgICAgIGlm
ICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShlZGdlKTsKICAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soCiAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGVk
Z2UsIFNwZWNEb3VibGVSZWFsLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254243</attachid>
            <date>2015-06-03 21:49:44 -0700</date>
            <delta_ts>2015-06-03 23:25:16 -0700</delta_ts>
            <desc>the fully speculative approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11275</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4NTE2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzc4LDYgKzM3OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKIAogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICBjYXNlIE51bWJl
clVzZToKKyAgICAgICAgY2FzZSBEb3VibGVSZWFsVXNlOgogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgZGVmYXVsdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTg1MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyMyw2ICsxNzIzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3Byb2ZpdGFiaWxpdHlDaGFuZ2VkIHw9IHZh
cmlhYmxlLT5tZXJnZUlzUHJvZml0YWJsZVRvVW5ib3godHJ1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIGNhc2UgRG91YmxlUmVhbFVzZToK
ICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVz
ZToKICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+ZG91YmxlRm9ybWF0U3RhdGUoKSA9PSBVc2lu
Z0RvdWJsZUZvcm1hdCkKQEAgLTIxMDIsNiArMjEwMywxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGVkZ2Uuc2V0VXNlS2luZChJbnQ1MlJlcFVzZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlYWxVc2U6CisgICAgICAgICAgICBp
ZiAoZWRnZS0+aGFzRG91YmxlUmVzdWx0KCkpCisgICAgICAgICAgICAgICAgZWRnZS5zZXRVc2VL
aW5kKERvdWJsZVJlcFJlYWxVc2UpOworICAgICAgICAgICAgZWxzZSBpZiAoZWRnZS0+aGFzSW50
NTJSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoSW50NTJSZXBVc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMTI4LDkgKzIxMzYsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91Ymxl
LCBEb3VibGVSZXAsIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdl
Lm5vZGUoKSwgSW50NTJSZXBVc2UpKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgVXNlS2luZCB1c2VLaW5kID0gTm90Q2VsbFVzZTsKLSAgICAgICAgICAgICAgICBpZiAo
ZWRnZS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgVXNlS2luZCB1
c2VLaW5kOworICAgICAgICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVEb3VibGVS
ZWFsKCkpCisgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQgPSBEb3VibGVSZWFsVXNlOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAg
ICAgICAgICAgICAgICAgICB1c2VLaW5kID0gTnVtYmVyVXNlOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgdXNlS2luZCA9IE5vdENlbGxVc2U7CiAKICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVSZXAsIG5v
ZGUtPm9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxODUxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTc2Miw2ICsxNzYyLDExIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0
dXJuIGlzRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCisgICAg
Ym9vbCBzaG91bGRTcGVjdWxhdGVEb3VibGVSZWFsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0RvdWJsZVJlYWxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOworICAgIH0KKyAgICAKICAgICBi
b29sIHNob3VsZFNwZWN1bGF0ZU51bWJlcigpCiAgICAgewogICAgICAgICByZXR1cm4gaXNGdWxs
TnVtYmVyU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODUxNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToK
ICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAg
ICAgIGNhc2UgRG91YmxlUmVhbFVzZToKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAg
ICBjYXNlIENlbGxVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4
NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDY2LDYgKzIwNjYsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZURvdWJsZUFzSW50Mwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJs
ZVJlcChOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7CisgICAgY2FzZSBEb3VibGVSZWFsVXNlOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWVS
ZWdzIG9wMVJlZ3MgPSBvcDEuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgRlBSUmVnIHJlc3VsdEZQ
UiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5n
cHIoKTsKKyAgICAgICAgbV9qaXQubW92ZShvcDFSZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICAg
ICAgdW5ib3hEb3VibGUodGVtcEdQUiwgcmVzdWx0RlBSKTsKKyNlbHNlCisgICAgICAgIEZQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7
CisgICAgICAgIHVuYm94RG91YmxlKG9wMVJlZ3MudGFnR1BSKCksIG9wMVJlZ3MucGF5bG9hZEdQ
UigpLCByZXN1bHRGUFIsIHRlbXBGUFIpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBERkdf
VFlQRV9DSEVDSygKKyAgICAgICAgICAgIG9wMVJlZ3MsIG5vZGUtPmNoaWxkMSgpLCBTcGVjRG91
YmxlUmVhbCwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaERvdWJsZShKSVRDb21waWxlcjo6RG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCwgcmVzdWx0RlBSLCByZXN1bHRGUFIpKTsKKyAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdEZQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgICAgICAKICAgICBjYXNlIE5vdENlbGxVc2U6CiAgICAgY2FzZSBOdW1iZXJVc2U6IHsK
ICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKS0+aXNOdW1iZXJDb25zdGFudCgpKTsgLy8g
VGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnN0YW50IGZvbGRlZC4KQEAgLTUzNzcsNiArNTQwMiwz
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVEb3VibGVSZWFsCiAgICAgaWYgKCFu
ZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjRG91YmxlUmVhbCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKKyAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKKyAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIAorICAgIEpTVmFs
dWVSZWdzIG9wMVJlZ3MgPSBvcDEuanNWYWx1ZVJlZ3MoKTsKKyAgICBGUFJSZWcgcmVzdWx0RlBS
ID0gcmVzdWx0LmZwcigpOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgIG1f
aml0Lm1vdmUob3AxUmVncy5ncHIoKSwgdGVtcEdQUik7CisgICAgdW5ib3hEb3VibGUodGVtcEdQ
UiwgcmVzdWx0RlBSKTsKKyNlbHNlCisgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAg
RlBSUmVnIHRlbXBGUFIgPSB0ZW1wLmZwcigpOworICAgIHVuYm94RG91YmxlKG9wMVJlZ3MudGFn
R1BSKCksIG9wMVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRGUFIsIHRlbXBGUFIpOworI2VuZGlm
CisgICAgCisgICAgdHlwZUNoZWNrKAorICAgICAgICBvcDFSZWdzLCBlZGdlLCBTcGVjRG91Ymxl
UmVhbCwKKyAgICAgICAgbV9qaXQuYnJhbmNoRG91YmxlKEpJVENvbXBpbGVyOjpEb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkLCByZXN1bHRGUFIsIHJlc3VsdEZQUikpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAo
IW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNEb3VibGVSZWFsKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKICAg
ICBGUFJSZWcgZnByID0gb3BlcmFuZC5mcHIoKTsKICAgICB0eXBlQ2hlY2soCkBAIC01NjQxLDkg
KzU2OTMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAg
IGNhc2UgTnVtYmVyVXNlOgogICAgICAgICBzcGVjdWxhdGVOdW1iZXIoZWRnZSk7CiAgICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKKyAgICBjYXNlIERvdWJsZVJlYWxV
c2U6CiAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlYWwoZWRnZSk7CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKKyAgICAgICAgc3BlY3VsYXRlRG91YmxlUmVwUmVh
bChlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIE1h
Y2hpbmVJbnRVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU1hY2hpbmVJbnQoZWRnZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxODUxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNzMsNiArMjM3Myw3IEBAIHB1YmxpYzoKICNlbmRpZiAv
LyBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKEVkZ2UpOwogICAgIHZv
aWQgc3BlY3VsYXRlRG91YmxlUmVhbChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJl
cFJlYWwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UpOwogICAgIHZvaWQg
c3BlY3VsYXRlQ2VsbChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMTg1
MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01NSw2ICs1NSw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBVc2UKICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgb3V0LnByaW50KCJOdW1i
ZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlUmVhbFVzZToKKyAgICAgICAg
b3V0LnByaW50KCJEb3VibGVSZWFsIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIERvdWJs
ZVJlcFVzZToKICAgICAgICAgb3V0LnByaW50KCJEb3VibGVSZXAiKTsKICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4
NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTQ2LDYgKzQ2LDcgQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93bkludDMy
VXNlLAogICAgIE1hY2hpbmVJbnRVc2UsCiAgICAgTnVtYmVyVXNlLAorICAgIERvdWJsZVJlYWxV
c2UsCiAgICAgQm9vbGVhblVzZSwKICAgICBDZWxsVXNlLAogICAgIEtub3duQ2VsbFVzZSwKQEAg
LTkwLDYgKzkxLDggQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwog
ICAgICAgICByZXR1cm4gU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGU7CiAgICAgY2FzZSBO
dW1iZXJVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQnl0ZWNvZGVOdW1iZXI7CisgICAgY2FzZSBE
b3VibGVSZWFsVXNlOgorICAgICAgICByZXR1cm4gU3BlY0RvdWJsZVJlYWw7CiAgICAgY2FzZSBE
b3VibGVSZXBVc2U6CiAgICAgICAgIHJldHVybiBTcGVjRnVsbERvdWJsZTsKICAgICBjYXNlIERv
dWJsZVJlcFJlYWxVc2U6CkBAIC0xNTgsNiArMTYxLDcgQEAgaW5saW5lIGJvb2wgaXNOdW1lcmlj
YWwoVXNlS2luZCBraW5kKQogICAgIGNhc2UgSW50MzJVc2U6CiAgICAgY2FzZSBLbm93bkludDMy
VXNlOgogICAgIGNhc2UgTnVtYmVyVXNlOgorICAgIGNhc2UgRG91YmxlUmVhbFVzZToKICAgICBj
YXNlIEludDUyUmVwVXNlOgogICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgIGNhc2UgRG91Ymxl
UmVwUmVhbFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDE4NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCw3IEBA
IENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAg
ICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToK
ICAgICAgICAgICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgICAgICBjYXNlIERv
dWJsZVJlYWxVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgQm9v
bGVhblVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODUxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTU4LDYgKzk1OCwx
OCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZURvdWJsZVJlcCgpCiAgICAgewogICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgRG91
YmxlUmVhbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNEb3VibGVSZWFsLAorICAg
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQoZG91YmxlVmFsdWUs
IGRvdWJsZVZhbHVlKSk7CisgICAgICAgICAgICBzZXREb3VibGUoZG91YmxlVmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBO
b3RDZWxsVXNlOgogICAgICAgICBjYXNlIE51bWJlclVzZTogewogICAgICAgICAgICAgYm9vbCBz
aG91bGRDb252ZXJ0Tm9uTnVtYmVyID0gbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTm90
Q2VsbFVzZTsKQEAgLTc1OTAsOSArNzYwMiwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE51
bWJlclVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6CisgICAgICAgIGNhc2UgRG91
YmxlUmVhbFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlYWwoZWRnZSk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgorICAgICAgICAg
ICAgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVE
b3VibGVSZXBNYWNoaW5lSW50KGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03OTIzLDYg
Kzc5MzgsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlw
ZUNoZWNrKGVkZ2UpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7CisgICAgICAg
IEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwg
U3BlY0RvdWJsZVJlYWwsCisgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNw
ZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgLy8gRG8gYW4g
ZWFybHkgcmV0dXJuIGhlcmUgYmVjYXVzZSBsb3dEb3VibGUoKSBjYW4gY3JlYXRlIGEgbG90IG9m
IGNvbnRyb2wgZmxvdy4KKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNr
KGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93RG91YmxlKGVkZ2UpOwogICAgICAgICBGVExfVFlQRV9DSEVDSygKICAgICAgICAg
ICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0RvdWJsZVJlYWwsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254252</attachid>
            <date>2015-06-03 23:25:16 -0700</date>
            <delta_ts>2015-06-04 21:12:37 -0700</delta_ts>
            <desc>the best approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29546</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDE1LTA2LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2ltcGxpZnkgdW5ib3hpbmcgb2YgZG91YmxlIEpTVmFsdWVzIGtub3duIHRvIGJlIG5vdCBOYU4g
YW5kIG5vdCBJbnQzMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ1NjE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBJbiBtYW55IGNhc2VzIHdlIGtub3cgdGhhdCB3ZSBtb3N0IGxpa2VseSBs
b2FkZWQgYSBub24tTmFOIGRvdWJsZSB2YWx1ZSBmcm9tIHRoZSBoZWFwLgorICAgICAgICBQcmlv
ciB0byB0aGlzIHBhdGNoLCB3ZSB3b3VsZCBkbyB0d28gYnJhbmNoZXMgYmVmb3JlIHVuYm94aW5n
IHRoZSBkb3VibGUuIFRoaXMgcGF0Y2gKKyAgICAgICAgcmVkdWNlcyB0aGlzIHRvIG9uZSBicmFu
Y2ggaW4gdGhlIGNvbW1vbiBjYXNlLiBCZWZvcmU6CisgICAgICAgIAorICAgICAgICAgICAgaWYg
KGlzIGludDMyKQorICAgICAgICAgICAgICAgIHVuYm94IGludDMyIGFuZCBjb252ZXJ0IHRvIGRv
dWJsZQorICAgICAgICAgICAgZWxzZSBpZiAoaXMgbnVtYmVyKQorICAgICAgICAgICAgICAgIHVu
Ym94IGRvdWJsZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4aXQKKyAgICAg
ICAgCisgICAgICAgIEFmdGVyOgorCisgICAgICAgICAgICB0bXAgPSB1bmJveCBkb3VibGUKKyAg
ICAgICAgICAgIGlmICh0bXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzIGludDMyKQorICAgICAgICAgICAgICAgIHVuYm94IGludDMyIGFuZCBj
b252ZXJ0IHRvIGRvdWJsZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4aXQK
KyAgICAgICAgCisgICAgICAgIFdlIG9ubHkgdXNlIHRoZSBuZXcgc3R5bGUgaWYgd2UgaGF2ZSBw
cm9maWxpbmcgdGhhdCB0ZWxscyB1cyB0aGF0IHdlIGFyZSB1bmxpa2VseSB0byBzZWUKKyAgICAg
ICAgZWl0aGVyIEludDMyIG9yIE5hTiAtIHNpbmNlIHdlIHdpbGwgbm93IGV4aXQgb24gTmFOIGFu
ZCBpbnQzMiByZXF1aXJlcyBhbiBleHRyYSBicmFuY2guCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIGEgOCUgc3BlZWQtdXAgb24gT2N0YW5lL2JveDJkLiBPbiBvbmUgbWljcm9iZW5jaG1hcmsg
dGhpcyBpcyBhIDI1JSBzcGVlZC11cC4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6Om9ic2VydmVVc2VL
aW5kT25Ob2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhFZGdlUmVwcmVz
ZW50YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdFR5cGVDb252
ZXJzaW9uc0ZvckVkZ2UpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpzaG91bGRTcGVjdWxhdGVEb3VibGVSZWFsKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpzaG91bGRTcGVjdWxhdGVOdW1iZXIpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZVRvRXhlY3V0ZUVkZ2U6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVSZXApOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVSZWFsTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlRG91YmxlUmVwUmVhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZURvdWJsZVJlYWwpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmNwcDoKKyAgICAgICAg
KFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjppc051bWVy
aWNhbCk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZURvdWJsZVJlcCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJveERvdWJsZSk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmpzVmFsdWVUb1N0cmljdEludDUyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6c3BlY3VsYXRlUmVhbE51bWJlcik6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZURvdWJsZVJlcFJlYWwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpqc1ZhbHVlVG9Eb3VibGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVEb3VibGVSZWFsKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5
SGVscGVyczo6YnJhbmNoSWZOb3RPdGhlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVy
czo6YnJhbmNoSWZJbnQzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNo
SWZOb3RJbnQzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZOdW1i
ZXIpOgorCiAyMDE1LTA2LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQ2FsbExpbmtTdGF0dXMgc2hvdWxkIHJldHVybiB0YWtlc1Nsb3dQYXRoIGlmIHRoZSBH
QyBvZnRlbiBjbGVhcmVkIHRoZSBJQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24g
MTg1MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgsNiArMzc4LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogCiAgICAgICAgIGNhc2UgSW50NTJSZXBV
c2U6CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODUxNjgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzIzLDYgKzE3MjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fcHJv
Zml0YWJpbGl0eUNoYW5nZWQgfD0gdmFyaWFibGUtPm1lcmdlSXNQcm9maXRhYmxlVG9VbmJveCh0
cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAg
ICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAg
ICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5kb3Vi
bGVGb3JtYXRTdGF0ZSgpID09IFVzaW5nRG91YmxlRm9ybWF0KQpAQCAtMjEwMiw2ICsyMTAzLDEz
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEludDUyUmVwVXNl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUmVhbE51
bWJlclVzZToKKyAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkKKyAgICAg
ICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91YmxlUmVwUmVhbFVzZSk7CisgICAgICAgICAg
ICBlbHNlIGlmIChlZGdlLT5oYXNJbnQ1MlJlc3VsdCgpKQorICAgICAgICAgICAgICAgIGVkZ2Uu
c2V0VXNlS2luZChJbnQ1MlJlcFVzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIx
MjgsOSArMjEzNiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAg
ICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVzZSkpOwogICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSBOb3RDZWxsVXNl
OwotICAgICAgICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAg
ICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQ7CisgICAgICAgICAgICAgICAgaWYgKGVkZ2Ut
PnNob3VsZFNwZWN1bGF0ZURvdWJsZVJlYWwoKSkKKyAgICAgICAgICAgICAgICAgICAgdXNlS2lu
ZCA9IFJlYWxOdW1iZXJVc2U7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZWRnZS0+c2hvdWxk
U3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQgPSBOdW1iZXJV
c2U7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB1c2VLaW5kID0g
Tm90Q2VsbFVzZTsKIAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNv
ZGVEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYyLDYgKzE3NjIsMTEgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNEb3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9u
KCkpOwogICAgIH0KICAgICAKKyAgICBib29sIHNob3VsZFNwZWN1bGF0ZURvdWJsZVJlYWwoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRG91YmxlUmVhbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24o
KSk7CisgICAgfQorICAgIAogICAgIGJvb2wgc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKICAgICB7
CiAgICAgICAgIHJldHVybiBpc0Z1bGxOdW1iZXJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJl
dmlzaW9uIDE4NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAg
Y2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAg
ICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICBj
YXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKICAgICAgICAgY2FzZSBPYmpl
Y3RVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTg1MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNjYsNiArMjA2Niwz
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQXNJbnQzCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRG91YmxlUmVwKE5vZGUqIG5vZGUpCiB7CiAgICAgc3dpdGNoIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAg
ICAgICAKKyAgICAgICAgSlNWYWx1ZVJlZ3Mgb3AxUmVncyA9IG9wMS5qc1ZhbHVlUmVncygpOwor
ICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOworICAgICAgICAKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAg
R1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICBtX2ppdC5tb3ZlKG9wMVJlZ3Mu
Z3ByKCksIHRlbXBHUFIpOworICAgICAgICB1bmJveERvdWJsZSh0ZW1wR1BSLCByZXN1bHRGUFIp
OworI2Vsc2UKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEZQUlJl
ZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICAgICAgdW5ib3hEb3VibGUob3AxUmVncy50YWdH
UFIoKSwgb3AxUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdEZQUiwgdGVtcEZQUik7CisjZW5kaWYK
KyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hE
b3VibGUoCisgICAgICAgICAgICBKSVRDb21waWxlcjo6RG91YmxlRXF1YWwsIHJlc3VsdEZQUiwg
cmVzdWx0RlBSKTsKKyAgICAgICAgCisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAg
ICAgb3AxUmVncywgbm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZVJlYWxOdW1iZXIsIG1faml0
LmJyYW5jaElmTm90SW50MzIob3AxUmVncykpOworICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJU
b0RvdWJsZShvcDFSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0RlBSKTsKKyAgICAgICAgCisgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdEZQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgICAgICAKICAg
ICBjYXNlIE5vdENlbGxVc2U6CiAgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgQVNTRVJU
KCFub2RlLT5jaGlsZDEoKS0+aXNOdW1iZXJDb25zdGFudCgpKTsgLy8gVGhpcyBzaG91bGQgaGF2
ZSBiZWVuIGNvbnN0YW50IGZvbGRlZC4KQEAgLTUzNzIsNyArNTQwMywzNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVOdW1iZXIoRWRnCiAjZW5kaWYKIH0KIAotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlRG91YmxlUmVhbChFZGdlIGVkZ2UpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlw
ZUNoZWNrKGVkZ2UsIFNwZWNEb3VibGVSZWFsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgCisgICAgSlNWYWx1ZVJlZ3Mg
b3AxUmVncyA9IG9wMS5qc1ZhbHVlUmVncygpOworICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1
bHQuZnByKCk7CisgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgbV9qaXQubW92
ZShvcDFSZWdzLmdwcigpLCB0ZW1wR1BSKTsKKyAgICB1bmJveERvdWJsZSh0ZW1wR1BSLCByZXN1
bHRGUFIpOworI2Vsc2UKKyAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBGUFJSZWcg
dGVtcEZQUiA9IHRlbXAuZnByKCk7CisgICAgdW5ib3hEb3VibGUob3AxUmVncy50YWdHUFIoKSwg
b3AxUmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdEZQUiwgdGVtcEZQUik7CisjZW5kaWYKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoRG91YmxlKAorICAgICAg
ICBKSVRDb21waWxlcjo6RG91YmxlRXF1YWwsIHJlc3VsdEZQUiwgcmVzdWx0RlBSKTsKKworICAg
IHR5cGVDaGVjayhvcDFSZWdzLCBlZGdlLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVyLCBtX2ppdC5i
cmFuY2hJZk5vdEludDMyKG9wMVJlZ3MpKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlIGVk
Z2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjRG91YmxlUmVhbCkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTU2NDEsOCArNTcwMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBOdW1iZXJVc2U6CiAgICAgICAgIHNwZWN1
bGF0ZU51bWJlcihlZGdlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgorICAgICAgICBzcGVjdWxhdGVSZWFsTnVtYmVyKGVkZ2UpOworICAgICAgICBicmVhazsKICAg
ICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6Ci0gICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlYWwoZWRn
ZSk7CisgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoZWRnZSk7CiAgICAgICAgIGJyZWFr
OwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTg1MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzcyLDcgKzIzNzIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
cGVjdWxhdGVEb3VibGVSZXBNYWNoaW5lSW50KEVkZ2UpOwogI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCiAgICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoRWRnZSk7Ci0gICAgdm9pZCBzcGVjdWxhdGVE
b3VibGVSZWFsKEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdlKTsKKyAg
ICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVC
b29sZWFuKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChFZGdlKTsKICAgICB2b2lkIHNw
ZWN1bGF0ZU9iamVjdChFZGdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
c2VLaW5kLmNwcAkocmV2aXNpb24gMTg1MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw2ICs1NSw5IEBAIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIE51bWJlclVzZToK
ICAgICAgICAgb3V0LnByaW50KCJOdW1iZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
UmVhbE51bWJlclVzZToKKyAgICAgICAgb3V0LnByaW50KCJSZWFsTnVtYmVyIik7CisgICAgICAg
IHJldHVybjsKICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgb3V0LnByaW50KCJEb3Vi
bGVSZXAiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdVc2VLaW5kLmgJKHJldmlzaW9uIDE4NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDYgKzQ2LDcgQEAgZW51bSBV
c2VLaW5kIHsKICAgICBLbm93bkludDMyVXNlLAogICAgIE1hY2hpbmVJbnRVc2UsCiAgICAgTnVt
YmVyVXNlLAorICAgIFJlYWxOdW1iZXJVc2UsCiAgICAgQm9vbGVhblVzZSwKICAgICBDZWxsVXNl
LAogICAgIEtub3duQ2VsbFVzZSwKQEAgLTkwLDYgKzkxLDggQEAgaW5saW5lIFNwZWN1bGF0ZWRU
eXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwogICAgICAgICByZXR1cm4gU3BlY0ludDMyIHwgU3BlY0lu
dDUyQXNEb3VibGU7CiAgICAgY2FzZSBOdW1iZXJVc2U6CiAgICAgICAgIHJldHVybiBTcGVjQnl0
ZWNvZGVOdW1iZXI7CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICByZXR1cm4gU3Bl
Y0J5dGVjb2RlUmVhbE51bWJlcjsKICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgcmV0
dXJuIFNwZWNGdWxsRG91YmxlOwogICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKQEAgLTE1OCw2
ICsxNjEsNyBAQCBpbmxpbmUgYm9vbCBpc051bWVyaWNhbChVc2VLaW5kIGtpbmQpCiAgICAgY2Fz
ZSBJbnQzMlVzZToKICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgY2FzZSBOdW1iZXJVc2U6
CisgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgY2Fz
ZSBEb3VibGVSZXBVc2U6CiAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTg1
MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVt
YmVyVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgICAg
ICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcFJl
YWxVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4
NTE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NTgsMTIgKzk1OCwxMTMgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNvbXBpbGVEb3VibGVSZXAoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKKyAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGRvdWJs
ZVZhbHVlID0gdW5ib3hEb3VibGUodmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBM
QmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAgUmVh
bE51bWJlclVzZSBpbnQgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlUmVwIGNvbnRpbnVhdGlvbiIpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwK
KyAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaW50Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwg
bV9ub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwKKyAgICAgICAgICAgICAg
ICBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNG
dWxsRG91YmxlKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmludFRvRG91YmxlKHVuYm94SW50MzIodmFsdWUpKSk7CisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGZhc3RSZXN1
bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgTm90Q2VsbFVzZToKICAgICAgICAgY2FzZSBOdW1iZXJVc2U6
IHsKICAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udmVydE5vbk51bWJlciA9IG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IE5vdENlbGxVc2U7Ci0KKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgc2V0RG91YmxlKGpzVmFsdWVUb0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpLCB2YWx1ZSwgc2hvdWxkQ29udmVydE5vbk51bWJlcikpOworCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1Zh
bHVlVG9Eb3VibGUgdW5ib3hpbmcgaW50IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBkb3VibGVUZXN0aW5nID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUg
dGVzdGluZyBkb3VibGUgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBkb3Vi
bGUgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vbkRvdWJsZUNhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIHVuZGVmaW5lZCBjYXNl
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hpbmcgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNO
b3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAg
ICAgICAgdW5zdXJlKGRvdWJsZVRlc3RpbmcpLCB1bnN1cmUoaW50Q2FzZSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlu
dENhc2UsIGRvdWJsZVRlc3RpbmcpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBpbnRUb0RvdWJsZSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICBtX291
dC5pbnRUb0RvdWJsZSh1bmJveEludDMyKHZhbHVlKSkpOworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhkb3VibGVUZXN0aW5nLCBkb3VibGVDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlz
TnVtYmVyID0gaXNOdW1iZXIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNOdW1iZXIsIHVzdWFsbHkoZG91YmxlQ2Fz
ZSksIHJhcmVseShub25Eb3VibGVDYXNlKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGRvdWJsZUNhc2UsIG5vbkRvdWJsZUNhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
dW5ib3hlZERvdWJsZSA9IG1fb3V0LmFuY2hvcih1bmJveERvdWJsZSh2YWx1ZSkpOworICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBpZiAoc2hvdWxk
Q29udmVydE5vbk51bWJlcikgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5l
ZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5n
IHVuZGVmaW5lZCBjYXNlIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHRlc3ROdWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgbnVs
bCBjYXNlIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG51bGxDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydGluZyBudWxsIGNhc2UiKSk7
CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdGVzdEJvb2xlYW5UcnVlQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgYm9vbGVhbiB0cnVlIGNh
c2UiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udmVydEJvb2xlYW5UcnVlQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnQgYm9vbGVh
biB0cnVlIGNhc2UiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udmVydEJvb2xl
YW5GYWxzZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252
ZXJ0IGJvb2xlYW4gZmFsc2UgY2FzZSIpKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vbkRvdWJsZUNhc2UsIHVuZGVmaW5lZENhc2UpOworICAgICAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZUlzVW5kZWZpbmVkID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQo
VmFsdWVVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc1Vu
ZGVmaW5lZCwgdW5zdXJlKHVuZGVmaW5lZENhc2UpLCB1bnN1cmUodGVzdE51bGxDYXNlKSk7CisK
KyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh1bmRlZmluZWRDYXNlLCB0ZXN0TnVsbENh
c2UpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZFVuZGVmaW5lZCA9
IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZShQTmFOKSk7CisgICAgICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8odGVzdE51bGxDYXNlLCBudWxsQ2FzZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVl
SXNOdWxsID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNOdWxsLCB1bnN1cmUobnVsbENh
c2UpLCB1bnN1cmUodGVzdEJvb2xlYW5UcnVlQ2FzZSkpOworCisgICAgICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obnVsbENhc2UsIHRlc3RCb29sZWFuVHJ1ZUNhc2UpOworICAgICAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZE51bGwgPSBtX291dC5hbmNob3IobV9vdXQuY29u
c3REb3VibGUoMCkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRlc3RCb29sZWFuVHJ1ZUNhc2UsIGNv
bnZlcnRCb29sZWFuVHJ1ZUNhc2UpOworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzQm9v
bGVhblRydWUgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZVRydWUp
KTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc0Jvb2xlYW5UcnVlLCB1bnN1
cmUoY29udmVydEJvb2xlYW5UcnVlQ2FzZSksIHVuc3VyZShjb252ZXJ0Qm9vbGVhbkZhbHNlQ2Fz
ZSkpOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udmVydEJvb2xlYW5UcnVl
Q2FzZSwgY29udmVydEJvb2xlYW5GYWxzZUNhc2UpOworICAgICAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGNvbnZlcnRlZFRydWUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMSkp
OworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlLCBjb250aW51YXRp
b24pOworCisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNOb3RCb29sZWFuRmFsc2UgPSBt
X291dC5ub3RFcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7CisgICAg
ICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5j
aGlsZDEoKSwgflNwZWNDZWxsLCB2YWx1ZUlzTm90Qm9vbGVhbkZhbHNlKTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRGYWxzZSA9IG1fb3V0LmFuY2hvcihtX291dC5j
b25zdERvdWJsZSgwKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CisgICAgICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBl
LCBpbnRUb0RvdWJsZSwgdW5ib3hlZERvdWJsZSwgY29udmVydGVkVW5kZWZpbmVkLCBjb252ZXJ0
ZWROdWxsLCBjb252ZXJ0ZWRUcnVlLCBjb252ZXJ0ZWRGYWxzZSkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRv
dWJsZUNhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIsIG1f
b3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworCisgICAg
ICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91Ymxl
LCB1bmJveGVkRG91YmxlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtNzI5Myw4NyArNzM5NCw2IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9vdXQuc3ViKG1fb3V0LmJpdENhc3QoZG91YmxlVmFsdWUsIG1fb3V0LmludDY0KSwg
bV90YWdUeXBlTnVtYmVyKTsKICAgICB9Ci0gICAgTFZhbHVlIGpzVmFsdWVUb0RvdWJsZShFZGdl
IGVkZ2UsIExWYWx1ZSBib3hlZFZhbHVlLCBib29sIHNob3VsZENvbnZlcnROb25OdW1iZXIpCi0g
ICAgewotICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hpbmcgaW50IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGRvdWJsZVRlc3RpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJs
ZSB0ZXN0aW5nIGRvdWJsZSBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hpbmcgZG91Ymxl
IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vbkRvdWJsZUNhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIHVuZGVmaW5lZCBjYXNlIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgTFZhbHVlIGlzTm90SW50MzI7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKQotICAgICAgICAgICAgaXNOb3RJbnQzMiA9
IG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoIW1faW50ZXJwcmV0ZXIubmVl
ZHNUeXBlQ2hlY2soZWRnZSwgflNwZWNJbnQzMikpCi0gICAgICAgICAgICBpc05vdEludDMyID0g
bV9vdXQuYm9vbGVhblRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlzTm90SW50MzIg
PSB0aGlzLT5pc05vdEludDMyKGJveGVkVmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2goaXNO
b3RJbnQzMiwgdW5zdXJlKGRvdWJsZVRlc3RpbmcpLCB1bnN1cmUoaW50Q2FzZSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50
Q2FzZSwgZG91YmxlVGVzdGluZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgaW50VG9Eb3VibGUgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5pbnRUb0Rv
dWJsZSh1bmJveEludDMyKGJveGVkVmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVUZXN0
aW5nLCBkb3VibGVDYXNlKTsKLSAgICAgICAgTFZhbHVlIHZhbHVlSXNOdW1iZXIgPSBpc051bWJl
cihib3hlZFZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNOdW1iZXIsIHVzdWFs
bHkoZG91YmxlQ2FzZSksIHJhcmVseShub25Eb3VibGVDYXNlKSk7Ci0KLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZG91YmxlQ2FzZSwgbm9uRG91YmxlQ2FzZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIHVuYm94ZWREb3VibGUgPSBtX291dC5hbmNob3IodW5ib3hEb3VibGUoYm94ZWRWYWx1ZSkp
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgaWYgKHNob3Vs
ZENvbnZlcnROb25OdW1iZXIpIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5nIHVu
ZGVmaW5lZCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgdGVzdE51bGxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBudWxsIGNhc2Ui
KSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBudWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgbnVsbCBjYXNlIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgdGVzdEJvb2xlYW5UcnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgYm9vbGVhbiB0cnVlIGNhc2UiKSk7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVhblRydWVDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIHRydWUgY2FzZSIpKTsKLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIGZhbHNlIGNhc2Ui
KSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2UsIHVuZGVmaW5l
ZENhc2UpOwotICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNVbmRlZmluZWQgPSBtX291dC5lcXVh
bChib3hlZFZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7Ci0gICAgICAg
ICAgICBtX291dC5icmFuY2godmFsdWVJc1VuZGVmaW5lZCwgdW5zdXJlKHVuZGVmaW5lZENhc2Up
LCB1bnN1cmUodGVzdE51bGxDYXNlKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVu
ZGVmaW5lZENhc2UsIHRlc3ROdWxsQ2FzZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBj
b252ZXJ0ZWRVbmRlZmluZWQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5hTikp
OwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyh0ZXN0TnVsbENhc2UsIG51bGxDYXNlKTsKLSAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZUlzTnVsbCA9IG1fb3V0LmVxdWFsKGJveGVkVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQo
VmFsdWVOdWxsKSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc051bGwsIHVuc3Vy
ZShudWxsQ2FzZSksIHVuc3VyZSh0ZXN0Qm9vbGVhblRydWVDYXNlKSk7Ci0KLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG51bGxDYXNlLCB0ZXN0Qm9vbGVhblRydWVDYXNlKTsKLSAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZE51bGwgPSBtX291dC5hbmNob3IobV9vdXQuY29u
c3REb3VibGUoMCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0g
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0ZXN0Qm9vbGVhblRydWVDYXNlLCBjb252ZXJ0Qm9v
bGVhblRydWVDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzQm9vbGVhblRydWUgPSBt
X291dC5lcXVhbChib3hlZFZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVHJ1ZSkpOwotICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNCb29sZWFuVHJ1ZSwgdW5zdXJlKGNvbnZlcnRC
b29sZWFuVHJ1ZUNhc2UpLCB1bnN1cmUoY29udmVydEJvb2xlYW5GYWxzZUNhc2UpKTsKLQotICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udmVydEJvb2xlYW5UcnVlQ2FzZSwgY29udmVydEJv
b2xlYW5GYWxzZUNhc2UpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkVHJ1
ZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgxKSk7Ci0gICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnZl
cnRCb29sZWFuRmFsc2VDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBMVmFsdWUg
dmFsdWVJc05vdEJvb2xlYW5GYWxzZSA9IG1fb3V0Lm5vdEVxdWFsKGJveGVkVmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpOwotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNW
YWx1ZVZhbHVlKGJveGVkVmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIHZhbHVlSXNOb3RCb29sZWFu
RmFsc2UpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkRmFsc2UgPSBtX291
dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuZG91YmxlVHlw
ZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNvbnZlcnRlZFVuZGVmaW5lZCwgY29udmVy
dGVkTnVsbCwgY29udmVydGVkVHJ1ZSwgY29udmVydGVkRmFsc2UpOwotICAgICAgICB9Ci0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShib3hlZFZhbHVlKSwgZWRnZSwgU3BlY0J5dGVj
b2RlTnVtYmVyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0K
LSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0RvdWJsZSwg
dW5ib3hlZERvdWJsZSk7Ci0gICAgfQogICAgIAogICAgIExWYWx1ZSBqc1ZhbHVlVG9TdHJpY3RJ
bnQ1MihFZGdlIGVkZ2UsIExWYWx1ZSBib3hlZFZhbHVlKQogICAgIHsKQEAgLTc1OTAsOCArNzYx
MCwxMSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgICAgIHNw
ZWN1bGF0ZU51bWJlcihlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJl
YWxOdW1iZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVSZWFsTnVtYmVyKGVkZ2UpOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZURvdWJsZVJlYWwoZWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGVEb3Vi
bGVSZXBSZWFsKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRG91Ymxl
UmVwTWFjaGluZUludFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlcE1hY2hpbmVJ
bnQoZWRnZSk7CkBAIC03OTE3LDcgKzc5NDAsMzMgQEAgcHJpdmF0ZToKICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBp
c05vdE51bWJlcih2YWx1ZSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZURvdWJs
ZVJlYWwoRWRnZSBlZGdlKQorICAgIHZvaWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICAvLyBEbyBhbiBlYXJseSByZXR1cm4gaGVyZSBiZWNhdXNlIGxvd0Rv
dWJsZSgpIGNhbiBjcmVhdGUgYSBsb3Qgb2YgY29udHJvbCBmbG93LgorICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVuYm94RG91
YmxlKHZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZVJlYWxOdW1iZXIgaW50IGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3Bl
Y3VsYXRlUmVhbE51bWJlciBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1ZSwgZG91
YmxlVmFsdWUpLAorICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaW50
Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhpbnRDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgdHlwZUNo
ZWNrKAorICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwg
U3BlY0J5dGVjb2RlUmVhbE51bWJlciwKKyAgICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHBy
b3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkgJiB+U3BlY0Z1bGxEb3VibGUpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZURvdWJs
ZVJlcFJlYWwoRWRnZSBlZGdlKQogICAgIHsKICAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJu
IGhlcmUgYmVjYXVzZSBsb3dEb3VibGUoKSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxv
dy4KICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAxODUxNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NTcsNiArNDU3LDI0IEBAIHB1YmxpYzoKICNlbmRpZgogICAg
IH0KICAgICAKKyAgICBKdW1wIGJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEFib3ZlT3JFcXVh
bCwgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyNlbHNlCisg
ICAgICAgIHJldHVybiBicmFuY2gzMihFcXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSk7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgSnVtcCBicmFu
Y2hJZk5vdEludDMyKEpTVmFsdWVSZWdzIHJlZ3MpCisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIHJldHVybiBicmFuY2g2NChCZWxvdywgcmVncy5ncHIoKSwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBicmFuY2gzMihOb3RF
cXVhbCwgcmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Cisj
ZW5kaWYKKyAgICB9CisKICAgICAvLyBOb3RlIHRoYXQgdGhlIHRlbXBHUFIgaXMgbm90IHVzZWQg
aW4gNjQtYml0IG1vZGUuCiAgICAgSnVtcCBicmFuY2hJZk51bWJlcihKU1ZhbHVlUmVncyByZWdz
LCBHUFJSZWcgdGVtcEdQUikKICAgICB7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODUxOTEpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
NS0wNi0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFNpbXBs
aWZ5IHVuYm94aW5nIG9mIGRvdWJsZSBKU1ZhbHVlcyBrbm93biB0byBiZSBub3QgTmFOIGFuZCBu
b3QgSW50MzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTYxOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICoganMvcmVncmVzcy9kb3VibGUtcmVhbC11c2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2RvdWJsZS1yZWFsLXVzZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9kb3VibGUtcmVhbC11c2UuanM6IEFkZGVkLgorICAgICAg
ICAoZm9vKToKKwogMjAxNS0wNi0wMyAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW0VGTF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcgb24gNHRoIEp1bmUu
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2RvdWJsZS1yZWFsLXVzZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kb3VibGUtcmVhbC11c2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9kb3Vi
bGUtcmVhbC11c2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9kb3VibGUtcmVhbC11c2UKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZG91
YmxlLXJlYWwtdXNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9k
b3VibGUtcmVhbC11c2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvZG91YmxlLXJlYWwtdXNlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZG91YmxlLXJl
YWwtdXNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2RvdWJsZS1yZWFsLXVzZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9kb3VibGUtcmVhbC11c2UuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9kb3Vi
bGUtcmVhbC11c2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24g
Zm9vKGEpIHsKKyAgICB2YXIgcmVzdWx0ID0gMC4wOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDsgKytpKSB7CisgICAgICAgIHZhciBvID0gYVtpXTsKKyAgICAgICAgcmVzdWx0ICs9IG8u
eCArIG8ueTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsK
KwordmFyIGFycmF5ID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICBh
cnJheS5wdXNoKHt4OjEuNSwgeToyLjV9KTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkKKyAgICBmb28oYXJyYXkpOwo=
</data>
<flag name="review"
          id="279226"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254338</attachid>
            <date>2015-06-04 21:12:37 -0700</date>
            <delta_ts>2015-06-04 21:12:37 -0700</delta_ts>
            <desc>patch for relanding</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30492</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1MjM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg0IEBA
CisyMDE1LTA2LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2ltcGxpZnkgdW5ib3hpbmcgb2YgZG91YmxlIEpTVmFsdWVzIGtub3duIHRvIGJlIG5vdCBOYU4g
YW5kIG5vdCBJbnQzMgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQ1NjE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisgICAg
ICAgIAorICAgICAgICBJbiBtYW55IGNhc2VzIHdlIGtub3cgdGhhdCB3ZSBtb3N0IGxpa2VseSBs
b2FkZWQgYSBub24tTmFOIGRvdWJsZSB2YWx1ZSBmcm9tIHRoZSBoZWFwLgorICAgICAgICBQcmlv
ciB0byB0aGlzIHBhdGNoLCB3ZSB3b3VsZCBkbyB0d28gYnJhbmNoZXMgYmVmb3JlIHVuYm94aW5n
IHRoZSBkb3VibGUuIFRoaXMgcGF0Y2gKKyAgICAgICAgcmVkdWNlcyB0aGlzIHRvIG9uZSBicmFu
Y2ggaW4gdGhlIGNvbW1vbiBjYXNlLiBCZWZvcmU6CisgICAgICAgIAorICAgICAgICAgICAgaWYg
KGlzIGludDMyKQorICAgICAgICAgICAgICAgIHVuYm94IGludDMyIGFuZCBjb252ZXJ0IHRvIGRv
dWJsZQorICAgICAgICAgICAgZWxzZSBpZiAoaXMgbnVtYmVyKQorICAgICAgICAgICAgICAgIHVu
Ym94IGRvdWJsZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4aXQKKyAgICAg
ICAgCisgICAgICAgIEFmdGVyOgorCisgICAgICAgICAgICB0bXAgPSB1bmJveCBkb3VibGUKKyAg
ICAgICAgICAgIGlmICh0bXAgPT0gdG1wKQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGlzIGludDMyKQorICAgICAgICAgICAgICAgIHVuYm94IGludDMyIGFuZCBj
b252ZXJ0IHRvIGRvdWJsZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV4aXQK
KyAgICAgICAgCisgICAgICAgIFdlIG9ubHkgdXNlIHRoZSBuZXcgc3R5bGUgaWYgd2UgaGF2ZSBw
cm9maWxpbmcgdGhhdCB0ZWxscyB1cyB0aGF0IHdlIGFyZSB1bmxpa2VseSB0byBzZWUKKyAgICAg
ICAgZWl0aGVyIEludDMyIG9yIE5hTiAtIHNpbmNlIHdlIHdpbGwgbm93IGV4aXQgb24gTmFOIGFu
ZCBpbnQzMiByZXF1aXJlcyBhbiBleHRyYSBicmFuY2guCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIGEgOCUgc3BlZWQtdXAgb24gT2N0YW5lL2JveDJkLiBPbiBvbmUgbWljcm9iZW5jaG1hcmsg
dGhpcyBpcyBhIDI1JSBzcGVlZC11cC4KKyAgICAgICAgCisgICAgICAgIFJvbGxpbmcgdGhpcyBi
YWNrIGluIGFmdGVyIEkgbWFkZSBERkc6OlNwZWN1bGF0aXZlSklUIGNhbGwgYSBuZXcgdmVyc2lv
biBvZiB1bmJveERvdWJsZSgpCisgICAgICAgIHRoYXQgZG9lc24ndCBhc3NlcnQgdGhhdCB0aGUg
SlNWYWx1ZSBpcyBhIGRvdWJsZSwgc2luY2Ugd2UgYXJlIGludGVudGlvbmFsbHkgdXNpbmcgaXQK
KyAgICAgICAgYmVmb3JlIGRvaW5nIHRoZSAiaXMgYSBkb3VibGUiIHRlc3QuIFRoaXMgd2Fzbid0
IGEgcHJvYmxlbSBvbiAzMi1iaXQgc2luY2UgdW5ib3hEb3VibGUoKQorICAgICAgICBkb2VzIG5v
IHN1Y2ggYXNzZXJ0aW9uIG9uIDMyLWJpdC4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6Om9ic2VydmVV
c2VLaW5kT25Ob2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXhFZGdlUmVw
cmVzZW50YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdFR5cGVD
b252ZXJzaW9uc0ZvckVkZ2UpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6c2hvdWxkU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpzaG91bGRTcGVjdWxhdGVEb3VibGVSZWFsKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZVRvRXhlY3V0ZUVkZ2U6Om9wZXJhdG9yKCkp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVSZXApOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVSZWFsTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlRG91YmxlUmVwUmVhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZURvdWJsZVJlYWwpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmNwcDoKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjppc051
bWVyaWNhbCk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZURvdWJsZVJlcCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJveERvdWJsZSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmpzVmFsdWVUb1N0cmljdEludDUyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlUmVhbE51bWJlcik6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZURvdWJsZVJlcFJlYWwpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpqc1ZhbHVlVG9Eb3VibGUpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVEb3VibGVSZWFsKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
Ymx5SGVscGVyczo6YnJhbmNoSWZOb3RPdGhlcik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVs
cGVyczo6YnJhbmNoSWZJbnQzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJh
bmNoSWZOb3RJbnQzMik6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6YnJhbmNoSWZO
dW1iZXIpOgorCiAyMDE1LTA2LTA0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0
Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTg1MjE2LgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg1MjM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzgsNiArMzc4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogCiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgor
ICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAg
ICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxODUyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIzLDYgKzE3MjMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIG1fcHJvZml0YWJpbGl0eUNoYW5nZWQgfD0gdmFyaWFibGUt
Pm1lcmdlSXNQcm9maXRhYmxlVG9VbmJveCh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAg
ICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5kb3VibGVGb3JtYXRTdGF0ZSgpID09IFVzaW5nRG91Ymxl
Rm9ybWF0KQpAQCAtMjEwMiw2ICsyMTAzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ZWRnZS5zZXRVc2VLaW5kKEludDUyUmVwVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgICAgIGlmIChlZGdl
LT5oYXNEb3VibGVSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoRG91
YmxlUmVwUmVhbFVzZSk7CisgICAgICAgICAgICBlbHNlIGlmIChlZGdlLT5oYXNJbnQ1MlJlc3Vs
dCgpKQorICAgICAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChJbnQ1MlJlcFVzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIxMjgsOSArMjEzNiwxMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJs
ZVJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgp
LCBJbnQ1MlJlcFVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBV
c2VLaW5kIHVzZUtpbmQgPSBOb3RDZWxsVXNlOwotICAgICAgICAgICAgICAgIGlmIChlZGdlLT5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQ7
CisgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZURvdWJsZVJlYWwoKSkK
KyAgICAgICAgICAgICAgICAgICAgdXNlS2luZCA9IFJlYWxOdW1iZXJVc2U7CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHVzZUtpbmQgPSBOdW1iZXJVc2U7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICB1c2VLaW5kID0gTm90Q2VsbFVzZTsKIAogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3Jp
Z2luLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4NTIz
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzYyLDYgKzE3NjIsMTEgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gaXNE
b3VibGVTcGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOwogICAgIH0KICAgICAKKyAgICBib29sIHNo
b3VsZFNwZWN1bGF0ZURvdWJsZVJlYWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRG91Ymxl
UmVhbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24oKSk7CisgICAgfQorICAgIAogICAgIGJvb2wgc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCkKICAgICB7CiAgICAgICAgIHJldHVybiBpc0Z1bGxOdW1iZXJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4NTIzNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAg
ICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgY2Fz
ZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAgICAgIGNhc2Ug
Q2VsbFVzZToKICAgICAgICAgY2FzZSBPYmplY3RVc2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg1MjM1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwNjYsNiArMjA2NiwzNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRG91YmxlQXNJbnQzCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUmVwKE5v
ZGUqIG5vZGUpCiB7CiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAg
ICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBGUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZVJlZ3Mgb3Ax
UmVncyA9IG9wMS5qc1ZhbHVlUmVncygpOworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVz
dWx0LmZwcigpOworICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwor
ICAgICAgICBtX2ppdC5tb3ZlKG9wMVJlZ3MuZ3ByKCksIHRlbXBHUFIpOworICAgICAgICBtX2pp
dC51bmJveERvdWJsZVdpdGhvdXRBc3NlcnRpb25zKHRlbXBHUFIsIHJlc3VsdEZQUik7CisjZWxz
ZQorICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBG
UFIgPSB0ZW1wLmZwcigpOworICAgICAgICB1bmJveERvdWJsZShvcDFSZWdzLnRhZ0dQUigpLCBv
cDFSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0RlBSLCB0ZW1wRlBSKTsKKyNlbmRpZgorICAgICAg
ICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5jaERvdWJsZSgK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpEb3VibGVFcXVhbCwgcmVzdWx0RlBSLCByZXN1bHRG
UFIpOworICAgICAgICAKKyAgICAgICAgREZHX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBvcDFS
ZWdzLCBub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwgbV9qaXQuYnJhbmNo
SWZOb3RJbnQzMihvcDFSZWdzKSk7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KG9wMVJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRGUFIpOworICAgICAgICAKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0RlBS
LCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBjYXNlIE5vdENlbGxV
c2U6CiAgICAgY2FzZSBOdW1iZXJVc2U6IHsKICAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEo
KS0+aXNOdW1iZXJDb25zdGFudCgpKTsgLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnN0YW50
IGZvbGRlZC4KQEAgLTUzNzIsNyArNTQwMywzNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGVOdW1iZXIoRWRnCiAjZW5kaWYKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlRG91YmxlUmVhbChFZGdlIGVkZ2UpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVS
ZWFsTnVtYmVyKEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNw
ZWNEb3VibGVSZWFsKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEpTVmFsdWVPcGVyYW5k
IG9wMSh0aGlzLCBlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgCisgICAgSlNWYWx1ZVJlZ3Mgb3AxUmVncyA9IG9wMS5q
c1ZhbHVlUmVncygpOworICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7CisgICAg
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBH
UFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisgICAgbV9qaXQubW92ZShvcDFSZWdzLmdwcigp
LCB0ZW1wR1BSKTsKKyAgICBtX2ppdC51bmJveERvdWJsZVdpdGhvdXRBc3NlcnRpb25zKHRlbXBH
UFIsIHJlc3VsdEZQUik7CisjZWxzZQorICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAg
IEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKKyAgICB1bmJveERvdWJsZShvcDFSZWdzLnRh
Z0dQUigpLCBvcDFSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0RlBSLCB0ZW1wRlBSKTsKKyNlbmRp
ZgorICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5icmFuY2hEb3VibGUo
CisgICAgICAgIEpJVENvbXBpbGVyOjpEb3VibGVFcXVhbCwgcmVzdWx0RlBSLCByZXN1bHRGUFIp
OworCisgICAgdHlwZUNoZWNrKG9wMVJlZ3MsIGVkZ2UsIFNwZWNCeXRlY29kZVJlYWxOdW1iZXIs
IG1faml0LmJyYW5jaElmTm90SW50MzIob3AxUmVncykpOworICAgIAorICAgIGRvbmUubGluaygm
bV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVEb3VibGVSZXBSZWFs
KEVkZ2UgZWRnZSkKIHsKICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNEb3VibGVS
ZWFsKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTY0MSw4ICs1NzAyLDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQKICAgICBjYXNlIE51bWJlclVzZToKICAgICAg
ICAgc3BlY3VsYXRlTnVtYmVyKGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlYWxO
dW1iZXJVc2U6CisgICAgICAgIHNwZWN1bGF0ZVJlYWxOdW1iZXIoZWRnZSk7CisgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKLSAgICAgICAgc3BlY3VsYXRlRG91Ymxl
UmVhbChlZGdlKTsKKyAgICAgICAgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChlZGdlKTsKICAgICAg
ICAgYnJlYWs7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShy
ZXZpc2lvbiAxODUyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNzIsNyArMjM3Miw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcE1hY2hpbmVJbnQoRWRnZSk7CiAjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKICAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihFZGdlKTsKLSAgICB2b2lkIHNw
ZWN1bGF0ZURvdWJsZVJlYWwoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVSZWFsTnVtYmVyKEVk
Z2UpOworICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlKTsKICAgICB2b2lkIHNw
ZWN1bGF0ZUJvb2xlYW4oRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UpOwogICAg
IHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAxODUyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDYgKzU1LDkg
QEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgTnVt
YmVyVXNlOgogICAgICAgICBvdXQucHJpbnQoIk51bWJlciIpOwogICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBSZWFsTnVtYmVyVXNlOgorICAgICAgICBvdXQucHJpbnQoIlJlYWxOdW1iZXIiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICBvdXQucHJp
bnQoIkRvdWJsZVJlcCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMTg1MjM1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsNiArNDYsNyBA
QCBlbnVtIFVzZUtpbmQgewogICAgIEtub3duSW50MzJVc2UsCiAgICAgTWFjaGluZUludFVzZSwK
ICAgICBOdW1iZXJVc2UsCisgICAgUmVhbE51bWJlclVzZSwKICAgICBCb29sZWFuVXNlLAogICAg
IENlbGxVc2UsCiAgICAgS25vd25DZWxsVXNlLApAQCAtOTAsNiArOTEsOCBAQCBpbmxpbmUgU3Bl
Y3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgICAgIHJldHVybiBTcGVjSW50MzIg
fCBTcGVjSW50NTJBc0RvdWJsZTsKICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAgcmV0dXJu
IFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgIHJl
dHVybiBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVyOwogICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAg
ICAgICByZXR1cm4gU3BlY0Z1bGxEb3VibGU7CiAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgpA
QCAtMTU4LDYgKzE2MSw3IEBAIGlubGluZSBib29sIGlzTnVtZXJpY2FsKFVzZUtpbmQga2luZCkK
ICAgICBjYXNlIEludDMyVXNlOgogICAgIGNhc2UgS25vd25JbnQzMlVzZToKICAgICBjYXNlIE51
bWJlclVzZToKKyAgICBjYXNlIFJlYWxOdW1iZXJVc2U6CiAgICAgY2FzZSBJbnQ1MlJlcFVzZToK
ICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZp
c2lvbiAxODUyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAsNyBAQCBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkludDMy
VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICAgICAg
Y2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgRG91
YmxlUmVwUmVhbFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTg1MjM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1OCwxMiArOTU4LDExMyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY29tcGlsZURvdWJsZVJlcCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZTogewor
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFs
dWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJs
ZVJlcCBSZWFsTnVtYmVyVXNlIGludCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAgY29udGludWF0
aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1ZSwgZG91Ymxl
VmFsdWUpLAorICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KGlu
dENhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVyLAorICAgICAg
ICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkg
JiB+U3BlY0Z1bGxEb3VibGUpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMih2YWx1ZSkpKTsK
KyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgogICAgICAgICBjYXNlIE51
bWJlclVzZTogewogICAgICAgICAgICAgYm9vbCBzaG91bGRDb252ZXJ0Tm9uTnVtYmVyID0gbV9u
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTm90Q2VsbFVzZTsKLQorICAgICAgICAgICAgCiAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBzZXREb3VibGUoanNWYWx1ZVRv
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCksIHZhbHVlLCBzaG91bGRDb252ZXJ0Tm9uTnVtYmVyKSk7
CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBpbnQgY2FzZSIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGRvdWJsZVRlc3RpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVU
b0RvdWJsZSB0ZXN0aW5nIGRvdWJsZSBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
ZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94
aW5nIGRvdWJsZSBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm9uRG91YmxlQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgdW5kZWZp
bmVkIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24i
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
ICAgICBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAg
ICAgICAgICAgICAgICB1bnN1cmUoZG91YmxlVGVzdGluZyksIHVuc3VyZShpbnRDYXNlKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaW50Q2FzZSwgZG91YmxlVGVzdGluZyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGludFRvRG91YmxlID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmludFRvRG91YmxlKHVuYm94SW50MzIodmFsdWUpKSk7CisgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGRvdWJsZVRlc3RpbmcsIGRvdWJsZUNhc2UpOworICAgICAgICAgICAgTFZhbHVl
IHZhbHVlSXNOdW1iZXIgPSBpc051bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc051bWJlciwgdXN1YWxseShk
b3VibGVDYXNlKSwgcmFyZWx5KG5vbkRvdWJsZUNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZG91YmxlQ2FzZSwgbm9uRG91YmxlQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayB1bmJveGVkRG91YmxlID0gbV9vdXQuYW5jaG9yKHVuYm94RG91YmxlKHZhbHVlKSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIGlm
IChzaG91bGRDb252ZXJ0Tm9uTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
dW5kZWZpbmVkQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNv
bnZlcnRpbmcgdW5kZWZpbmVkIGNhc2UiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
dGVzdE51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVz
dGluZyBudWxsIGNhc2UiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbnVsbENhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5nIG51bGwg
Y2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB0ZXN0Qm9vbGVhblRydWVDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBib29sZWFu
IHRydWUgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVh
blRydWVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVy
dCBib29sZWFuIHRydWUgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb252
ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91
YmxlIGNvbnZlcnQgYm9vbGVhbiBmYWxzZSBjYXNlIikpOworCisgICAgICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm9uRG91YmxlQ2FzZSwgdW5kZWZpbmVkQ2FzZSk7CisgICAgICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlSXNVbmRlZmluZWQgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NChWYWx1ZVVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2
YWx1ZUlzVW5kZWZpbmVkLCB1bnN1cmUodW5kZWZpbmVkQ2FzZSksIHVuc3VyZSh0ZXN0TnVsbENh
c2UpKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5lZENhc2UsIHRl
c3ROdWxsQ2FzZSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkVW5k
ZWZpbmVkID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyh0ZXN0TnVsbENhc2UsIG51bGxDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgdmFsdWVJc051bGwgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1
ZU51bGwpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc051bGwsIHVuc3Vy
ZShudWxsQ2FzZSksIHVuc3VyZSh0ZXN0Qm9vbGVhblRydWVDYXNlKSk7CisKKyAgICAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhudWxsQ2FzZSwgdGVzdEJvb2xlYW5UcnVlQ2FzZSk7CisgICAg
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkTnVsbCA9IG1fb3V0LmFuY2hvciht
X291dC5jb25zdERvdWJsZSgwKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8odGVzdEJvb2xlYW5UcnVl
Q2FzZSwgY29udmVydEJvb2xlYW5UcnVlQ2FzZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZh
bHVlSXNCb29sZWFuVHJ1ZSA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZh
bHVlVHJ1ZSkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzQm9vbGVhblRy
dWUsIHVuc3VyZShjb252ZXJ0Qm9vbGVhblRydWVDYXNlKSwgdW5zdXJlKGNvbnZlcnRCb29sZWFu
RmFsc2VDYXNlKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9v
bGVhblRydWVDYXNlLCBjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSk7CisgICAgICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgY29udmVydGVkVHJ1ZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERv
dWJsZSgxKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udmVydEJvb2xlYW5GYWxzZUNhc2UsIGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc05vdEJvb2xlYW5G
YWxzZSA9IG1fb3V0Lm5vdEVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2Up
KTsKKyAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBt
X25vZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsIHZhbHVlSXNOb3RCb29sZWFuRmFsc2UpOworICAg
ICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZEZhbHNlID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0RG91YmxlKDApKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRv
dWJsZVR5cGUsIGludFRvRG91YmxlLCB1bmJveGVkRG91YmxlLCBjb252ZXJ0ZWRVbmRlZmluZWQs
IGNvbnZlcnRlZE51bGwsIGNvbnZlcnRlZFRydWUsIGNvbnZlcnRlZEZhbHNlKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm9uRG91YmxlQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NI
RUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51
bWJlciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUo
KTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50
VG9Eb3VibGUsIHVuYm94ZWREb3VibGUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC03MjkzLDg3ICs3Mzk0LDYgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX291dC5zdWIobV9vdXQuYml0Q2FzdChkb3VibGVWYWx1ZSwgbV9vdXQu
aW50NjQpLCBtX3RhZ1R5cGVOdW1iZXIpOwogICAgIH0KLSAgICBMVmFsdWUganNWYWx1ZVRvRG91
YmxlKEVkZ2UgZWRnZSwgTFZhbHVlIGJveGVkVmFsdWUsIGJvb2wgc2hvdWxkQ29udmVydE5vbk51
bWJlcikKLSAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBpbnQgY2FzZSIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgZG91YmxlVGVzdGluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1
ZVRvRG91YmxlIHRlc3RpbmcgZG91YmxlIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGRv
dWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGlu
ZyBkb3VibGUgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm9uRG91YmxlQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgdW5kZWZpbmVkIGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBMVmFsdWUgaXNOb3RJbnQzMjsKLSAgICAgICAgaWYgKCFtX2ludGVy
cHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikpCi0gICAgICAgICAgICBpc05v
dEludDMyID0gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAgICBlbHNlIGlmICghbV9pbnRlcnBy
ZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY0ludDMyKSkKLSAgICAgICAgICAgIGlzTm90
SW50MzIgPSBtX291dC5ib29sZWFuVHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXNO
b3RJbnQzMiA9IHRoaXMtPmlzTm90SW50MzIoYm94ZWRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJy
YW5jaChpc05vdEludDMyLCB1bnN1cmUoZG91YmxlVGVzdGluZyksIHVuc3VyZShpbnRDYXNlKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpbnRDYXNlLCBkb3VibGVUZXN0aW5nKTsKLSAgICAgICAgICAgIAotICAgICAgICBWYWx1
ZUZyb21CbG9jayBpbnRUb0RvdWJsZSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0
LmludFRvRG91YmxlKHVuYm94SW50MzIoYm94ZWRWYWx1ZSkpKTsKLSAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGRv
dWJsZVRlc3RpbmcsIGRvdWJsZUNhc2UpOwotICAgICAgICBMVmFsdWUgdmFsdWVJc051bWJlciA9
IGlzTnVtYmVyKGJveGVkVmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2godmFsdWVJc051bWJl
ciwgdXN1YWxseShkb3VibGVDYXNlKSwgcmFyZWx5KG5vbkRvdWJsZUNhc2UpKTsKLQotICAgICAg
ICBtX291dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBub25Eb3VibGVDYXNlKTsKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgdW5ib3hlZERvdWJsZSA9IG1fb3V0LmFuY2hvcih1bmJveERvdWJsZShib3hl
ZFZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBp
ZiAoc2hvdWxkQ29udmVydE5vbk51bWJlcikgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgdW5k
ZWZpbmVkQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZl
cnRpbmcgdW5kZWZpbmVkIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayB0ZXN0TnVs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIG51
bGwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG51bGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydGluZyBudWxsIGNhc2UiKSk7Ci0g
ICAgICAgICAgICBMQmFzaWNCbG9jayB0ZXN0Qm9vbGVhblRydWVDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBib29sZWFuIHRydWUgY2FzZSIpKTsK
LSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0IGJvb2xlYW4gdHJ1ZSBjYXNl
IikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udmVydEJvb2xlYW5GYWxzZUNhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0IGJvb2xlYW4gZmFs
c2UgY2FzZSIpKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRG91YmxlQ2FzZSwg
dW5kZWZpbmVkQ2FzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWVJc1VuZGVmaW5lZCA9IG1f
b3V0LmVxdWFsKGJveGVkVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVVbmRlZmluZWQpKTsK
LSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzVW5kZWZpbmVkLCB1bnN1cmUodW5kZWZp
bmVkQ2FzZSksIHVuc3VyZSh0ZXN0TnVsbENhc2UpKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8odW5kZWZpbmVkQ2FzZSwgdGVzdE51bGxDYXNlKTsKLSAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGNvbnZlcnRlZFVuZGVmaW5lZCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJs
ZShQTmFOKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHRlc3ROdWxsQ2FzZSwgbnVsbENhc2UpOwotICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlSXNOdWxsID0gbV9vdXQuZXF1YWwoYm94ZWRWYWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NChWYWx1ZU51bGwpKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVs
bCwgdW5zdXJlKG51bGxDYXNlKSwgdW5zdXJlKHRlc3RCb29sZWFuVHJ1ZUNhc2UpKTsKLQotICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obnVsbENhc2UsIHRlc3RCb29sZWFuVHJ1ZUNhc2UpOwot
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkTnVsbCA9IG1fb3V0LmFuY2hvciht
X291dC5jb25zdERvdWJsZSgwKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRlc3RCb29sZWFuVHJ1ZUNhc2UsIGNv
bnZlcnRCb29sZWFuVHJ1ZUNhc2UpOwotICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNCb29sZWFu
VHJ1ZSA9IG1fb3V0LmVxdWFsKGJveGVkVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVl
KSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc0Jvb2xlYW5UcnVlLCB1bnN1cmUo
Y29udmVydEJvb2xlYW5UcnVlQ2FzZSksIHVuc3VyZShjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSkp
OwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9vbGVhblRydWVDYXNlLCBj
b252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252
ZXJ0ZWRUcnVlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKLSAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udmVydEJvb2xlYW5GYWxzZUNhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZUlzTm90Qm9vbGVhbkZhbHNlID0gbV9vdXQubm90RXF1YWwoYm94ZWRWYWx1
ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7Ci0gICAgICAgICAgICBGVExfVFlQRV9D
SEVDSyhqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSksIGVkZ2UsIH5TcGVjQ2VsbCwgdmFsdWVJc05v
dEJvb2xlYW5GYWxzZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRGYWxz
ZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgwKSk7Ci0gICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5k
b3VibGVUeXBlLCBpbnRUb0RvdWJsZSwgdW5ib3hlZERvdWJsZSwgY29udmVydGVkVW5kZWZpbmVk
LCBjb252ZXJ0ZWROdWxsLCBjb252ZXJ0ZWRUcnVlLCBjb252ZXJ0ZWRGYWxzZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRG91YmxlQ2FzZSwgY29udGludWF0aW9uKTsK
LSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGJveGVkVmFsdWUpLCBlZGdlLCBT
cGVjQnl0ZWNvZGVOdW1iZXIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKLSAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLQotICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRv
RG91YmxlLCB1bmJveGVkRG91YmxlKTsKLSAgICB9CiAgICAgCiAgICAgTFZhbHVlIGpzVmFsdWVU
b1N0cmljdEludDUyKEVkZ2UgZWRnZSwgTFZhbHVlIGJveGVkVmFsdWUpCiAgICAgewpAQCAtNzU5
MCw4ICs3NjEwLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgogICAgICAg
ICAgICAgc3BlY3VsYXRlTnVtYmVyKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUmVhbE51bWJlclVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZVJlYWxOdW1iZXIoZWRn
ZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgot
ICAgICAgICAgICAgc3BlY3VsYXRlRG91YmxlUmVhbChlZGdlKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZURvdWJsZVJlcFJlYWwoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBEb3VibGVSZXBNYWNoaW5lSW50VXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlRG91YmxlUmVw
TWFjaGluZUludChlZGdlKTsKQEAgLTc5MTcsNyArNzk0MCwzMyBAQCBwcml2YXRlOgogICAgICAg
ICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQnl0ZWNvZGVO
dW1iZXIsIGlzTm90TnVtYmVyKHZhbHVlKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3Vs
YXRlRG91YmxlUmVhbChFZGdlIGVkZ2UpCisgICAgdm9pZCBzcGVjdWxhdGVSZWFsTnVtYmVyKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIC8vIERvIGFuIGVhcmx5IHJldHVybiBoZXJlIGJlY2F1
c2UgbG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxvdCBvZiBjb250cm9sIGZsb3cuCisgICAgICAg
IGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0g
dW5ib3hEb3VibGUodmFsdWUpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlUmVhbE51bWJlciBpbnQgY2FzZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzcGVjdWxhdGVSZWFsTnVtYmVyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZh
bHVlLCBkb3VibGVWYWx1ZSksCisgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJh
cmVseShpbnRDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAg
ICB0eXBlQ2hlY2soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNo
aWxkMSgpLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVyLAorICAgICAgICAgICAgaXNOb3RJbnQzMih2
YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSAmIH5TcGVjRnVsbERvdWJsZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3Vs
YXRlRG91YmxlUmVwUmVhbChFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICAvLyBEbyBhbiBlYXJs
eSByZXR1cm4gaGVyZSBiZWNhdXNlIGxvd0RvdWJsZSgpIGNhbiBjcmVhdGUgYSBsb3Qgb2YgY29u
dHJvbCBmbG93LgogICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRn
ZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJ
KHJldmlzaW9uIDE4NTIzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nyw2ICs0NTcsMjQgQEAgcHVibGljOgogI2Vu
ZGlmCiAgICAgfQogICAgIAorICAgIEp1bXAgYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyByZWdz
KQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1cm4gYnJhbmNoNjQoQWJv
dmVPckVxdWFsLCByZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwor
I2Vsc2UKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICBK
dW1wIGJyYW5jaElmTm90SW50MzIoSlNWYWx1ZVJlZ3MgcmVncykKKyAgICB7CisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIGJyYW5jaDY0KEJlbG93LCByZWdzLmdwcigpLCBHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJU
YWcpKTsKKyNlbmRpZgorICAgIH0KKwogICAgIC8vIE5vdGUgdGhhdCB0aGUgdGVtcEdQUiBpcyBu
b3QgdXNlZCBpbiA2NC1iaXQgbW9kZS4KICAgICBKdW1wIGJyYW5jaElmTnVtYmVyKEpTVmFsdWVS
ZWdzIHJlZ3MsIEdQUlJlZyB0ZW1wR1BSKQogICAgIHsKQEAgLTczNiwxMyArNzU0LDE3IEBAIHB1
YmxpYzoKICAgICAgICAgaml0QXNzZXJ0SXNKU0RvdWJsZShncHIpOwogICAgICAgICByZXR1cm4g
Z3ByOwogICAgIH0KLSAgICBGUFJSZWcgdW5ib3hEb3VibGUoR1BSUmVnIGdwciwgRlBSUmVnIGZw
cikKKyAgICBGUFJSZWcgdW5ib3hEb3VibGVXaXRob3V0QXNzZXJ0aW9ucyhHUFJSZWcgZ3ByLCBG
UFJSZWcgZnByKQogICAgIHsKLSAgICAgICAgaml0QXNzZXJ0SXNKU0RvdWJsZShncHIpOwogICAg
ICAgICBhZGQ2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGdwcik7CiAgICAgICAg
IG1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgcmV0dXJuIGZwcjsKICAgICB9Cisg
ICAgRlBSUmVnIHVuYm94RG91YmxlKEdQUlJlZyBncHIsIEZQUlJlZyBmcHIpCisgICAgeworICAg
ICAgICBqaXRBc3NlcnRJc0pTRG91YmxlKGdwcik7CisgICAgICAgIHJldHVybiB1bmJveERvdWJs
ZVdpdGhvdXRBc3NlcnRpb25zKGdwciwgZnByKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBib3hE
b3VibGUoRlBSUmVnIGZwciwgSlNWYWx1ZVJlZ3MgcmVncykKICAgICB7CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxODUyMzUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxNS0wNi0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIFNpbXBsaWZ5IHVuYm94aW5nIG9mIGRvdWJsZSBKU1ZhbHVlcyBrbm93biB0
byBiZSBub3QgTmFOIGFuZCBub3QgSW50MzIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTYxOAorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5
IEdhcmVuLgorCisgICAgICAgICoganMvcmVncmVzcy9kb3VibGUtcmVhbC11c2UtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2RvdWJsZS1yZWFsLXVzZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9kb3VibGUtcmVhbC11c2Uu
anM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNS0wNi0wNCAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBMYXRjaGluZyBhbGdvcml0aG0gaW4gZmlu
ZEVuY2xvc2luZ092ZXJmbG93U2Nyb2xsIGlzIGJyb2tlbgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9kb3VibGUtcmVhbC11c2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZG91YmxlLXJlYWwtdXNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZG91YmxlLXJlYWwtdXNlLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZG91YmxlLXJlYWwt
dXNlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0
aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2RvdWJsZS1yZWFsLXVzZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZG91YmxlLXJlYWwtdXNlLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2RvdWJsZS1yZWFsLXVzZS5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2RvdWJsZS1yZWFsLXVzZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9kb3VibGUtcmVhbC11c2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvZG91YmxlLXJlYWwtdXNlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZG91YmxlLXJlYWwtdXNlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHJlc3Vs
dCA9IDAuMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgICB2
YXIgbyA9IGFbaV07CisgICAgICAgIHJlc3VsdCArPSBvLnggKyBvLnk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBhcnJheSA9IFtdOworZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpCisgICAgYXJyYXkucHVzaCh7eDoxLjUsIHk6Mi41
fSk7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgZm9vKGFycmF5KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>