<?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>149575</bug_id>
          
          <creation_ts>2015-09-25 15:53:56 -0700</creation_ts>
          <short_desc>DFG should use PhantomLocal instead of Flush as liveness preservation mechanism in LiveCatchVariablesPreservationPhase</short_desc>
          <delta_ts>2016-03-09 15:47:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=155271</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1128807</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-25 15:53:56 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128828</commentid>
    <comment_count>1</comment_count>
      <attachid>261956</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-25 17:43:03 -0700</bug_when>
    <thetext>Created attachment 261956
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128830</commentid>
    <comment_count>2</comment_count>
      <attachid>261956</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-25 17:44:43 -0700</bug_when>
    <thetext>Comment on attachment 261956
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128831</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-25 17:45:19 -0700</bug_when>
    <thetext>Attachment 261956 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGLiveCatchVariablePreservationPhase.cpp:133:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 6 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>1128835</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-25 18:24:08 -0700</bug_when>
    <thetext>perf results:
Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on Saams-Mac-Pro (MacPro6,1).

VMs tested:
&quot;og&quot; at /Volumes/Data/WK/os-a/OpenSource/WebKitBuild/Release/jsc (r190248)
&quot;phantomLocal&quot; at /Volumes/Data/WK/os-b/OpenSource/WebKitBuild/Release/jsc (r190248)

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

                                                            og                   phantomLocal                                   
SunSpider:
   3d-cube                                            6.7830+-0.3832            6.4853+-0.7601          might be 1.0459x faster
   3d-morph                                           6.3361+-0.1708     ?      6.5338+-0.3053        ? might be 1.0312x slower
   3d-raytrace                                        7.2212+-0.2336     ?      7.3068+-0.4078        ? might be 1.0119x slower
   access-binary-trees                                2.6205+-0.1190            2.5699+-0.0528          might be 1.0197x faster
   access-fannkuch                                    6.6960+-0.1004     ?      6.8255+-0.4411        ? might be 1.0193x slower
   access-nbody                                       3.3254+-0.0601     ?      3.3710+-0.1623        ? might be 1.0137x slower
   access-nsieve                                      3.9267+-0.1965     ?      3.9525+-0.1675        ?
   bitops-3bit-bits-in-byte                           1.5272+-0.0512            1.5072+-0.0474          might be 1.0133x faster
   bitops-bits-in-byte                                4.0008+-0.1805     ?      4.0101+-0.1922        ?
   bitops-bitwise-and                                 2.4876+-0.2425            2.4762+-0.1088        
   bitops-nsieve-bits                                 3.4848+-0.1611     ?      3.5872+-0.1848        ? might be 1.0294x slower
   controlflow-recursive                              2.9440+-0.0667            2.9412+-0.0078        
   crypto-aes                                         5.0655+-0.2676     ?      5.0773+-0.0479        ?
   crypto-md5                                         3.0983+-0.1153     ?      3.0995+-0.0727        ?
   crypto-sha1                                        2.9670+-0.0469     ?      3.0283+-0.1083        ? might be 1.0207x slower
   date-format-tofte                                 10.9083+-0.3736           10.4737+-0.5550          might be 1.0415x faster
   date-format-xparb                                  6.0055+-0.2197     ?      6.0447+-0.3109        ?
   math-cordic                                        3.4888+-0.1568            3.4172+-0.1646          might be 1.0209x faster
   math-partial-sums                                  6.0840+-0.1492     ?      6.2947+-0.4529        ? might be 1.0346x slower
   math-spectral-norm                                 2.4152+-0.0235     ?      2.4666+-0.1209        ? might be 1.0213x slower
   regexp-dna                                         7.7105+-0.1703     ?      7.7920+-0.3504        ? might be 1.0106x slower
   string-base64                                      5.5222+-0.1663            5.4530+-0.3384          might be 1.0127x faster
   string-fasta                                       7.1288+-0.4307     ?      7.2224+-0.4913        ? might be 1.0131x slower
   string-tagcloud                                    9.9579+-0.5599     ?     10.2413+-0.5580        ? might be 1.0285x slower
   string-unpack-code                                22.4950+-1.5427           22.0331+-1.4384          might be 1.0210x faster
   string-validate-input                              5.2720+-0.2234     ?      5.4365+-0.2727        ? might be 1.0312x slower

   &lt;arithmetic&gt;                                       5.7489+-0.0379     ?      5.7557+-0.0877        ? might be 1.0012x slower

                                                            og                   phantomLocal                                   
LongSpider:
   3d-cube                                          995.1690+-5.2894     ?   1003.2005+-16.5793       ?
   3d-morph                                        1638.7191+-4.3973     ?   1655.2408+-59.6665       ? might be 1.0101x slower
   3d-raytrace                                      725.8655+-32.0370         720.4252+-7.1212        
   access-binary-trees                              996.7866+-7.2000     ?    999.9755+-5.1169        ?
   access-fannkuch                                  358.6088+-0.6476     ?    360.5553+-5.9411        ?
   access-nbody                                     631.1301+-0.7256          631.1243+-1.7775        
   access-nsieve                                    459.9489+-8.1596     ?    460.4989+-0.6563        ?
   bitops-3bit-bits-in-byte                          40.6688+-0.1546     ?     40.8152+-1.2976        ?
   bitops-bits-in-byte                              104.2453+-2.4124          103.7510+-2.9566        
   bitops-nsieve-bits                               462.1160+-7.3028          461.1508+-3.1161        
   controlflow-recursive                            498.2258+-1.0750     ?    498.5378+-0.8676        ?
   crypto-aes                                       696.7296+-3.1196     ?    701.6171+-14.6179       ?
   crypto-md5                                       562.3287+-11.7746         559.3610+-6.2450        
   crypto-sha1                                      735.5182+-1.4546     ?    737.0443+-4.8028        ?
   date-format-tofte                                795.3148+-19.6797    ?    812.3568+-10.5458       ? might be 1.0214x slower
   date-format-xparb                                843.5358+-37.1273         815.3307+-48.4751         might be 1.0346x faster
   hash-map                                         178.2350+-2.4400          176.6217+-1.1563        
   math-cordic                                      571.9465+-2.5331          571.9229+-2.6224        
   math-partial-sums                                579.1987+-2.5754          579.1325+-1.9791        
   math-spectral-norm                               605.3888+-1.8361     ?    606.8770+-1.2959        ?
   string-base64                                    417.0050+-9.0777     ?    418.2147+-2.1867        ?
   string-fasta                                     440.5049+-4.5861          436.6574+-4.7355        
   string-tagcloud                                  215.3395+-2.6049          212.1108+-3.3190          might be 1.0152x faster

   &lt;geometric&gt;                                      472.6825+-2.2737          472.2855+-2.0118          might be 1.0008x faster

                                                            og                   phantomLocal                                   
V8Spider:
   crypto                                            59.2897+-2.1333     ?     59.9818+-1.2831        ? might be 1.0117x slower
   deltablue                                         79.7887+-2.1891           79.0189+-2.7864        
   earley-boyer                                      51.5917+-1.1117     ?     52.1211+-0.5701        ? might be 1.0103x slower
   raytrace                                          36.5885+-0.1816     ?     37.5602+-1.6270        ? might be 1.0266x slower
   regexp                                            79.6131+-1.6829     ?     80.0903+-2.0777        ?
   richards                                          63.9956+-1.2026     ?     64.7351+-1.8699        ? might be 1.0116x slower
   splay                                             40.8007+-0.6504     ?     41.6306+-1.3150        ? might be 1.0203x slower

   &lt;geometric&gt;                                       56.5764+-0.4819     ?     57.1904+-0.5347        ? might be 1.0109x slower

                                                            og                   phantomLocal                                   
Octane:
   encrypt                                           0.20076+-0.00945    ?     0.20699+-0.01128       ? might be 1.0310x slower
   decrypt                                           3.58022+-0.01844    ?     3.58539+-0.03660       ?
   deltablue                                x2       0.17182+-0.01136          0.16595+-0.00212         might be 1.0354x faster
   earley                                            0.39435+-0.00845    ?     0.39845+-0.01041       ? might be 1.0104x slower
   boyer                                             5.66843+-0.02361          5.65243+-0.02343       
   navier-stokes                            x2       5.43975+-0.02692          5.43078+-0.01257       
   raytrace                                 x2       1.11680+-0.01064          1.09055+-0.02125         might be 1.0241x faster
   richards                                 x2       0.10745+-0.00097    ?     0.10798+-0.00135       ?
   splay                                    x2       0.38894+-0.00382          0.38814+-0.00258       
   regexp                                   x2      28.95412+-0.14112    ?    28.97086+-0.19349       ?
   pdfjs                                    x2      45.81082+-0.17801    ?    46.02808+-0.18739       ?
   mandreel                                 x2      51.63942+-0.62964         51.62462+-0.38625       
   gbemu                                    x2      45.45321+-6.48763    ?    47.08038+-7.39745       ? might be 1.0358x slower
   closure                                           0.77958+-0.01027    ?     0.78816+-0.00628       ? might be 1.0110x slower
   jquery                                           10.03742+-0.07604    ?    10.06999+-0.02974       ?
   box2d                                    x2      12.44230+-0.27147         12.43141+-0.21186       
   zlib                                     x2     438.98142+-1.22942    ?   439.64958+-1.40635       ?
   typescript                               x2     912.66302+-2.94169    ?   929.97974+-26.77291      ? might be 1.0190x slower

   &lt;geometric&gt;                                       6.68737+-0.09452    ?     6.70009+-0.06346       ? might be 1.0019x slower

                                                            og                   phantomLocal                                   
Kraken:
   ai-astar                                          176.718+-4.762      ?     177.064+-3.916         ?
   audio-beat-detection                               61.683+-0.554      ?      62.034+-1.108         ?
   audio-dft                                         112.278+-0.707      ?     113.280+-1.448         ?
   audio-fft                                          43.798+-1.248             43.729+-1.534         
   audio-oscillator                                   71.310+-0.833      ?      71.343+-0.955         ?
   imaging-darkroom                                   74.675+-0.901      ?      75.347+-1.480         ?
   imaging-desaturate                                 69.180+-7.961             66.505+-0.476           might be 1.0402x faster
   imaging-gaussian-blur                             116.604+-0.698            116.027+-1.429         
   json-parse-financial                               51.087+-1.072             50.590+-1.360         
   json-stringify-tinderbox                           30.680+-2.231             30.466+-1.119         
   stanford-crypto-aes                                49.887+-2.555             49.727+-1.513         
   stanford-crypto-ccm                                47.201+-2.629      ?      49.402+-4.007         ? might be 1.0466x slower
   stanford-crypto-pbkdf2                            112.303+-2.192            110.542+-2.052           might be 1.0159x faster
   stanford-crypto-sha256-iterative                   44.871+-0.856             44.522+-0.624         

   &lt;arithmetic&gt;                                       75.877+-0.870             75.755+-0.488           might be 1.0016x faster

                                                            og                   phantomLocal                                   
JSRegress:
   abc-forward-loop-equal                            50.4807+-0.6155     ?     51.9702+-2.4775        ? might be 1.0295x slower
   abc-postfix-backward-loop                         49.7468+-0.9552     ?     49.8506+-0.7765        ?
   abc-simple-backward-loop                          50.0425+-1.1615           49.6185+-0.6273        
   abc-simple-forward-loop                           49.3458+-0.5300     ?     49.6545+-0.5499        ?
   abc-skippy-loop                                   34.6163+-2.1854           34.0964+-0.6765          might be 1.0152x faster
   abs-boolean                                        3.0067+-0.1098            2.9849+-0.0764        
   adapt-to-double-divide                            18.2025+-0.6679           17.7605+-0.3181          might be 1.0249x faster
   aliased-arguments-getbyval                         1.3962+-0.0683     ?      1.4188+-0.1112        ? might be 1.0162x slower
   allocate-big-object                                2.5590+-0.0972     ?      2.6570+-0.1157        ? might be 1.0383x slower
   arguments-named-and-reflective                    12.3737+-1.4558           12.0560+-0.3637          might be 1.0263x faster
   arguments-out-of-bounds                           13.9905+-0.9178           13.5995+-0.4778          might be 1.0288x faster
   arguments-strict-mode                             11.1714+-0.0732     ?     11.3721+-0.3388        ? might be 1.0180x slower
   arguments                                         10.0507+-0.1821            9.9294+-0.2923          might be 1.0122x faster
   arity-mismatch-inlining                            1.1508+-0.0358     ?      1.1553+-0.0129        ?
   array-access-polymorphic-structure                 8.1410+-0.6634            7.9767+-0.3157          might be 1.0206x faster
   array-nonarray-polymorhpic-access                 32.6409+-1.7713     ?     32.7286+-0.7874        ?
   array-prototype-every                             87.1470+-1.8056     ?     87.6613+-2.1337        ?
   array-prototype-forEach                           85.4806+-1.4003     ?     85.8767+-1.1976        ?
   array-prototype-map                               96.3327+-2.5286           95.6449+-3.6022        
   array-prototype-reduce                            88.3518+-9.4779           85.1472+-0.9975          might be 1.0376x faster
   array-prototype-reduceRight                       85.4485+-2.3690           84.5385+-1.3149          might be 1.0108x faster
   array-prototype-some                              88.1397+-1.5947           86.9542+-1.3748          might be 1.0136x faster
   array-splice-contiguous                           28.1544+-1.2906     ?     28.7753+-3.3101        ? might be 1.0221x slower
   array-with-double-add                              4.4730+-0.0636     ?      4.5955+-0.1419        ? might be 1.0274x slower
   array-with-double-increment                        3.7032+-0.1269            3.6425+-0.0450          might be 1.0167x faster
   array-with-double-mul-add                          5.5482+-0.1664     ?      5.5763+-0.3373        ?
   array-with-double-sum                              3.6077+-0.0500     ?      3.7217+-0.2372        ? might be 1.0316x slower
   array-with-int32-add-sub                           7.5594+-0.4096            7.4492+-0.2152          might be 1.0148x faster
   array-with-int32-or-double-sum                     3.7885+-0.2188     ?      3.7910+-0.1202        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.1072+-1.4990     ?     34.2743+-1.3692        ?
   ArrayBuffer-DataView-alloc-long-lived             15.2000+-1.3969           14.6890+-0.2369          might be 1.0348x faster
   ArrayBuffer-Int32Array-byteOffset                  4.2591+-0.2741     ?      4.3445+-0.1800        ? might be 1.0200x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     34.4227+-1.9801     ?     34.8102+-0.7962        ? might be 1.0113x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.2394+-1.3544           23.5635+-1.0321          might be 1.0287x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.7421+-0.6526           13.7415+-0.7450        
   ArrayBuffer-Int8Array-alloc                       11.6696+-1.6514           11.5072+-0.1939          might be 1.0141x faster
   arrowfunction-call                                12.7073+-0.2320     ?     12.9260+-0.4650        ? might be 1.0172x slower
   asmjs_bool_bug                                     8.6703+-0.1493     ?      8.7538+-0.4376        ?
   assign-custom-setter-polymorphic                   3.7023+-0.1724            3.6748+-0.1530        
   assign-custom-setter                               5.0510+-0.0803     ?      5.1198+-0.1629        ? might be 1.0136x slower
   basic-set                                          9.4329+-0.2617     ?      9.5958+-0.3819        ? might be 1.0173x slower
   big-int-mul                                        4.8045+-0.2224            4.6801+-0.2585          might be 1.0266x faster
   boolean-test                                       3.4917+-0.1065     ?      3.5695+-0.1834        ? might be 1.0223x slower
   branch-fold                                        4.3040+-0.1403     ?      4.3475+-0.1024        ? might be 1.0101x slower
   branch-on-string-as-boolean                       21.3526+-0.5167           21.2180+-0.4276        
   by-val-generic                                     3.0706+-0.2320            2.9187+-0.1607          might be 1.0520x faster
   call-spread-apply                                 33.6036+-0.9892           32.7103+-1.3027          might be 1.0273x faster
   call-spread-call                                  27.0262+-1.1275           26.7151+-1.2434          might be 1.0116x faster
   captured-assignments                               0.6879+-0.0246            0.6772+-0.0605          might be 1.0157x faster
   cast-int-to-double                                 6.0092+-0.4088            5.9014+-0.1800          might be 1.0183x faster
   cell-argument                                      7.7662+-0.9590            7.6957+-0.1478        
   cfg-simplify                                       3.2501+-0.2042     ?      3.2545+-0.2017        ?
   chain-getter-access                               10.2560+-0.5389           10.0513+-0.3110          might be 1.0204x faster
   cmpeq-obj-to-obj-other                            11.7449+-0.0987     ?     11.8721+-0.2744        ? might be 1.0108x slower
   constant-test                                      5.5312+-0.2938     ?      5.6412+-0.5336        ? might be 1.0199x slower
   create-lots-of-functions                          11.6765+-0.7783     ?     11.7947+-0.4205        ? might be 1.0101x slower
   cse-new-array-buffer                               2.5627+-0.1248     ?      2.5961+-0.1019        ? might be 1.0130x slower
   cse-new-array                                      2.7069+-0.0546            2.6605+-0.1798          might be 1.0174x faster
   DataView-custom-properties                        40.1562+-1.7045     ?     40.4814+-1.1849        ?
   delay-tear-off-arguments-strictmode               14.8610+-0.2364           14.5200+-0.1263          might be 1.0235x faster
   deltablue-varargs                                249.0156+-5.8325          242.5291+-14.9716         might be 1.0267x faster
   destructuring-arguments                          194.5117+-1.4226     ?    195.6561+-4.0490        ?
   destructuring-parameters-overridden-by-function   
                                                      0.7295+-0.0158            0.6998+-0.0460          might be 1.0425x faster
   destructuring-swap                                 6.0668+-0.5294            5.7629+-0.2344          might be 1.0527x faster
   direct-arguments-getbyval                          1.3669+-0.0426     ?      1.4976+-0.1961        ? might be 1.0956x slower
   div-boolean-double                                 5.7341+-0.2524     ?      5.8464+-0.3133        ? might be 1.0196x slower
   div-boolean                                        8.6464+-0.1826            8.3813+-0.1144          might be 1.0316x faster
   double-get-by-val-out-of-bounds                    5.0355+-0.1345            5.0080+-0.1435        
   double-pollution-getbyval                          9.7864+-0.5484     ?      9.9634+-1.1382        ? might be 1.0181x slower
   double-pollution-putbyoffset                       4.4658+-0.4630            4.2590+-0.1075          might be 1.0486x faster
   double-real-use                                   31.5891+-1.1429           31.5690+-1.2921        
   double-to-int32-typed-array-no-inline              2.7896+-0.0602     ?      2.8303+-0.0103        ? might be 1.0146x slower
   double-to-int32-typed-array                        2.5875+-0.1019     ?      2.5901+-0.0720        ?
   double-to-uint32-typed-array-no-inline             2.9250+-0.0800            2.8680+-0.0636          might be 1.0199x faster
   double-to-uint32-typed-array                       2.5898+-0.1305     ?      2.5974+-0.1115        ?
   elidable-new-object-dag                           42.7906+-1.7137           42.2966+-1.5843          might be 1.0117x faster
   elidable-new-object-roflcopter                    39.2335+-1.5348           39.1088+-1.9258        
   elidable-new-object-then-call                     40.6292+-1.8694           38.9144+-1.4445          might be 1.0441x faster
   elidable-new-object-tree                          46.4763+-2.2365     ?     47.2136+-0.9203        ? might be 1.0159x slower
   empty-string-plus-int                              5.9246+-0.6640            5.8568+-0.3349          might be 1.0116x faster
   emscripten-cube2hash                              42.8198+-2.4485           42.0680+-1.1352          might be 1.0179x faster
   exit-length-on-plain-object                       17.7307+-0.5179           16.8792+-0.5064          might be 1.0504x faster
   external-arguments-getbyval                        1.4895+-0.0428     ?      1.5096+-0.0845        ? might be 1.0135x slower
   external-arguments-putbyval                        2.6100+-0.1101            2.6085+-0.1228        
   fixed-typed-array-storage-var-index                1.5858+-0.0418            1.5544+-0.0940          might be 1.0201x faster
   fixed-typed-array-storage                          1.1931+-0.0692            1.1625+-0.0872          might be 1.0263x faster
   Float32Array-matrix-mult                           5.3799+-0.3670            5.2957+-0.1505          might be 1.0159x faster
   Float32Array-to-Float64Array-set                  55.6170+-1.0954     ?     56.7512+-1.2121        ? might be 1.0204x slower
   Float64Array-alloc-long-lived                     71.3162+-1.5577           70.8919+-1.1277        
   Float64Array-to-Int16Array-set                    72.1053+-1.4644           71.5990+-1.3823        
   fold-double-to-int                                14.8178+-0.4955           14.6653+-0.2405          might be 1.0104x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.3863+-0.3864           11.3619+-0.0768        
   fold-get-by-id-to-multi-get-by-offset             10.1307+-0.1397            9.8912+-0.3092          might be 1.0242x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.2853+-0.1188     ?      7.5450+-0.7046        ? might be 1.0356x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.5931+-0.5677     ?      8.6777+-0.5795        ?
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.3758+-0.6168     ?     10.7222+-0.0558        ? might be 1.0334x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      9.8660+-0.0838            9.5323+-0.6285          might be 1.0350x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     13.6292+-0.9267     ?     13.6357+-1.2095        ?
   fold-put-by-id-to-multi-put-by-offset             12.0139+-0.8142     ?     12.1995+-0.7394        ? might be 1.0154x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     12.1133+-0.5878           12.0453+-0.5636        
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.9088+-0.8005           11.7870+-0.6499          might be 1.0103x faster
   fold-put-structure                                 7.8798+-0.1472            7.8563+-0.0604        
   for-of-iterate-array-entries                      13.1877+-0.1332           13.0764+-0.4666        
   for-of-iterate-array-keys                          4.4933+-0.4110            4.4759+-0.1642        
   for-of-iterate-array-values                        4.0715+-0.1638     ?      4.0801+-0.1029        ?
   fround                                            20.3069+-1.1687           19.8871+-0.8022          might be 1.0211x faster
   ftl-library-inlining-dataview                     71.2395+-2.4438     !     77.8915+-0.7501        ! definitely 1.0934x slower
   ftl-library-inlining                              81.2292+-6.0282     ?     81.8480+-3.3233        ?
   function-call                                     12.6325+-0.4031     ?     12.6782+-0.2913        ?
   function-dot-apply                                 2.7764+-0.0963            2.6805+-0.0757          might be 1.0357x faster
   function-test                                      3.3190+-0.2289            3.2503+-0.1084          might be 1.0211x faster
   function-with-eval                               114.8011+-0.4738          113.8310+-1.6474        
   gcse-poly-get-less-obvious                        30.5235+-0.9119           30.2373+-0.4864        
   gcse-poly-get                                     31.7330+-0.3540     ?     31.8442+-1.1520        ?
   gcse                                               4.5626+-0.1828            4.4175+-0.0982          might be 1.0328x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.1427+-0.1304            3.0820+-0.2130          might be 1.0197x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0903+-0.3868            6.0391+-0.2767        
   get-by-id-chain-from-try-block                     2.8782+-0.0790     ?      2.9064+-0.0604        ?
   get-by-id-check-structure-elimination              5.3395+-0.1148     ?      5.3880+-0.3101        ?
   get-by-id-proto-or-self                           21.0682+-0.8530     ?     21.2369+-3.1521        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.3729+-0.0697            3.3658+-0.1103        
   get-by-id-self-or-proto                           21.2897+-3.4754           20.7778+-0.9158          might be 1.0246x faster
   get-by-val-out-of-bounds                           5.1308+-0.2323            4.9322+-0.0928          might be 1.0403x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.9863+-0.0347     ?      2.9954+-0.0371        ?
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      7.4360+-0.1998     ?      7.5450+-0.5305        ? might be 1.0147x slower
   get-by-val-with-string-chain-from-try-block   
                                                      2.8144+-0.0878     ?      2.9163+-0.0839        ? might be 1.0362x slower
   get-by-val-with-string-check-structure-elimination   
                                                      6.6960+-0.5739            6.6910+-0.3900        
   get-by-val-with-string-proto-or-self              22.5809+-3.5996           21.7016+-3.2769          might be 1.0405x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.9769+-0.1960            3.9691+-0.1068        
   get-by-val-with-string-self-or-proto              21.2088+-0.6109     ?     21.5447+-2.9678        ? might be 1.0158x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.6367+-0.4029            3.4757+-0.0718          might be 1.0463x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     14.6107+-0.0580     ?     14.6954+-0.1362        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.8787+-0.0608            2.8058+-0.0358          might be 1.0260x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     13.9278+-0.2648           13.8002+-0.2486        
   get-by-val-with-symbol-proto-or-self              20.9577+-0.1883     ?     22.8482+-1.9706        ? might be 1.0902x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.9243+-0.2040     ?      4.9606+-0.1897        ?
   get-by-val-with-symbol-self-or-proto              24.0768+-2.9116           22.0077+-3.0344          might be 1.0940x faster
   get_callee_monomorphic                             2.7645+-0.1197            2.7599+-0.1320        
   get_callee_polymorphic                             3.7922+-0.3261     ?      3.7965+-0.1621        ?
   getter-no-activation                               5.5901+-0.0894     ?      5.5994+-0.0595        ?
   getter-prototype                                  11.6425+-0.5810     ?     11.7352+-0.7168        ?
   getter-richards-try-catch                       1437.4664+-119.4799       1388.0031+-74.5500         might be 1.0356x faster
   getter-richards                                  111.5959+-0.6322          111.0009+-0.5777        
   getter                                             6.0010+-0.1309     ?      6.0624+-0.0692        ? might be 1.0102x slower
   global-object-access-with-mutating-structure   
                                                      6.5920+-0.1681     ?      6.6823+-0.3893        ? might be 1.0137x slower
   global-var-const-infer-fire-from-opt               1.0076+-0.1197     ?      1.0333+-0.0441        ? might be 1.0254x slower
   global-var-const-infer                             1.0435+-0.0723     ?      1.1052+-0.1443        ? might be 1.0592x slower
   hard-overflow-check-equal                         40.7341+-1.9170     ?     41.2020+-1.4300        ? might be 1.0115x slower
   hard-overflow-check                               40.6744+-0.8074     ?     40.9095+-1.2188        ?
   HashMap-put-get-iterate-keys                      28.6140+-0.3493     ?     28.6322+-0.4142        ?
   HashMap-put-get-iterate                           28.3518+-0.1053     ?     28.7054+-0.9019        ? might be 1.0125x slower
   HashMap-string-put-get-iterate                    30.9283+-0.7271           30.5272+-0.4886          might be 1.0131x faster
   hoist-make-rope                                   11.3125+-2.2128           11.0900+-1.3773          might be 1.0201x faster
   hoist-poly-check-structure-effectful-loop   
                                                      4.8405+-0.2052            4.7465+-0.1481          might be 1.0198x faster
   hoist-poly-check-structure                         3.9843+-0.4996            3.6922+-0.1473          might be 1.0791x faster
   imul-double-only                                   9.0640+-1.5335            8.2963+-0.1970          might be 1.0925x faster
   imul-int-only                                     10.4963+-0.7203           10.4907+-1.3151        
   imul-mixed                                         8.6722+-0.9012            8.3992+-0.8930          might be 1.0325x faster
   in-four-cases                                     25.0721+-0.6115     ?     25.3100+-0.8511        ?
   in-one-case-false                                 12.4410+-0.2951           12.3536+-0.4135        
   in-one-case-true                                  12.2638+-0.2037     ?     12.6268+-0.3217        ? might be 1.0296x slower
   in-two-cases                                      13.3892+-0.5974     ?     13.3961+-0.3974        ?
   indexed-properties-in-objects                      3.2952+-0.1342     ?      3.3073+-0.1145        ?
   infer-closure-const-then-mov-no-inline             4.7725+-0.1040            4.6808+-0.0814          might be 1.0196x faster
   infer-closure-const-then-mov                      21.0889+-0.3159     ?     21.5737+-0.9307        ? might be 1.0230x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.7031+-0.8758           14.2352+-0.5641          might be 1.0329x faster
   infer-closure-const-then-put-to-scope             24.3699+-0.7363           24.1450+-1.0844        
   infer-closure-const-then-reenter-no-inline   
                                                     61.6265+-1.7620           61.4047+-0.8904        
   infer-closure-const-then-reenter                  24.4992+-1.3143     ?     25.4229+-1.1708        ? might be 1.0377x slower
   infer-constant-global-property                     3.9778+-0.2763            3.9312+-0.0950          might be 1.0119x faster
   infer-constant-property                            3.0107+-0.0548     ?      3.0435+-0.0458        ? might be 1.0109x slower
   infer-one-time-closure-ten-vars                   10.8889+-0.2243     ?     11.0977+-0.3526        ? might be 1.0192x slower
   infer-one-time-closure-two-vars                   10.4924+-0.4878           10.4635+-0.1640        
   infer-one-time-closure                            10.2039+-0.1279     ?     10.2357+-0.2913        ?
   infer-one-time-deep-closure                       17.0092+-0.3919           16.7399+-0.3652          might be 1.0161x faster
   inline-arguments-access                            4.3417+-0.2112     ?      4.3800+-0.2948        ?
   inline-arguments-aliased-access                    4.5618+-0.4029            4.4020+-0.1460          might be 1.0363x faster
   inline-arguments-local-escape                      4.5079+-0.3947            4.4038+-0.2279          might be 1.0236x faster
   inline-get-scoped-var                              5.6860+-0.6308            5.4698+-0.0934          might be 1.0395x faster
   inlined-put-by-id-transition                      10.9634+-0.2167     ?     11.1090+-0.4519        ? might be 1.0133x slower
   inlined-put-by-val-with-string-transition   
                                                     52.1788+-1.0295     ?     53.1327+-1.8747        ? might be 1.0183x slower
   inlined-put-by-val-with-symbol-transition   
                                                     51.5060+-1.1517     ?     52.4377+-4.5621        ? might be 1.0181x slower
   int-or-other-abs-then-get-by-val                   5.3298+-0.1191            5.2643+-0.1206          might be 1.0124x faster
   int-or-other-abs-zero-then-get-by-val             17.8122+-0.7846     ?     18.0202+-0.8424        ? might be 1.0117x slower
   int-or-other-add-then-get-by-val                   4.9334+-0.0708            4.8618+-0.1855          might be 1.0147x faster
   int-or-other-add                                   6.0210+-0.1607            5.9335+-0.0877          might be 1.0148x faster
   int-or-other-div-then-get-by-val                   4.5700+-0.2249            4.5377+-0.2576        
   int-or-other-max-then-get-by-val                   4.7822+-0.1704            4.6772+-0.1887          might be 1.0224x faster
   int-or-other-min-then-get-by-val                   4.6970+-0.1930            4.5339+-0.1260          might be 1.0360x faster
   int-or-other-mod-then-get-by-val                   4.0862+-0.1018     ?      4.1119+-0.1708        ?
   int-or-other-mul-then-get-by-val                   4.3414+-0.2715            4.3276+-0.1747        
   int-or-other-neg-then-get-by-val                   4.8633+-0.1837            4.8299+-0.0819        
   int-or-other-neg-zero-then-get-by-val             18.1469+-1.2674           17.9778+-0.2759        
   int-or-other-sub-then-get-by-val                   4.9380+-0.1320     ?      4.9637+-0.1341        ?
   int-or-other-sub                                   3.9926+-0.2306            3.9534+-0.1127        
   int-overflow-local                                 4.9230+-0.2213     ?      4.9805+-0.1851        ? might be 1.0117x slower
   Int16Array-alloc-long-lived                       51.1118+-1.2348           50.8647+-1.5948        
   Int16Array-bubble-sort-with-byteLength            20.9001+-0.9209     ?     20.9254+-0.8478        ?
   Int16Array-bubble-sort                            20.5023+-0.5599     ?     20.6920+-0.6173        ?
   Int16Array-load-int-mul                            1.7955+-0.0397     ?      1.8067+-0.0154        ?
   Int16Array-to-Int32Array-set                      52.5043+-0.9095           52.1089+-1.0586        
   Int32Array-alloc-large                            20.3118+-0.4022     ?     21.3558+-2.2416        ? might be 1.0514x slower
   Int32Array-alloc-long-lived                       57.8478+-1.5481           57.7720+-1.6790        
   Int32Array-alloc                                   2.8137+-0.1422            2.7114+-0.0628          might be 1.0377x faster
   Int32Array-Int8Array-view-alloc                    7.3928+-0.5594            6.9706+-0.1422          might be 1.0606x faster
   int52-spill                                        6.1468+-0.5191            6.0633+-0.0889          might be 1.0138x faster
   Int8Array-alloc-long-lived                        45.5129+-2.2378           45.4295+-2.0213        
   Int8Array-load-with-byteLength                     3.7635+-0.1839            3.7252+-0.0338          might be 1.0103x faster
   Int8Array-load                                     3.7342+-0.1234            3.7161+-0.1226        
   integer-divide                                    12.9578+-0.4804           12.7557+-0.3224          might be 1.0158x faster
   integer-modulo                                     2.3130+-0.0892     ?      2.3241+-0.1955        ?
   is-boolean-fold-tricky                             4.6600+-0.2944            4.5763+-0.2264          might be 1.0183x faster
   is-boolean-fold                                    3.1569+-0.1153     ?      3.1837+-0.2297        ?
   is-function-fold-tricky-internal-function   
                                                     12.4658+-0.2850     ?     12.7757+-0.5022        ? might be 1.0249x slower
   is-function-fold-tricky                            4.6867+-0.2278     ?      4.9158+-0.5943        ? might be 1.0489x slower
   is-function-fold                                   3.2228+-0.1750            3.1594+-0.0556          might be 1.0201x faster
   is-number-fold-tricky                              4.6310+-0.0565            4.5857+-0.1939        
   is-number-fold                                     3.2330+-0.1142            3.1662+-0.0980          might be 1.0211x faster
   is-object-or-null-fold-functions                   3.2811+-0.0945     ?      3.2834+-0.0551        ?
   is-object-or-null-fold-less-tricky                 4.6031+-0.1064     ?      4.8200+-0.1602        ? might be 1.0471x slower
   is-object-or-null-fold-tricky                      6.3698+-0.1318     ?      6.5181+-0.3354        ? might be 1.0233x slower
   is-object-or-null-fold                             3.2490+-0.1622            3.2479+-0.1913        
   is-object-or-null-trickier-function                4.8929+-0.4034            4.8387+-0.2448          might be 1.0112x faster
   is-object-or-null-trickier-internal-function   
                                                     13.2820+-0.2123     ^     12.8987+-0.1512        ^ definitely 1.0297x faster
   is-object-or-null-tricky-function                  4.8423+-0.1886            4.7681+-0.1795          might be 1.0156x faster
   is-object-or-null-tricky-internal-function   
                                                      9.7083+-0.5421     ?      9.8297+-0.4305        ? might be 1.0125x slower
   is-string-fold-tricky                              4.6873+-0.2832            4.6274+-0.1742          might be 1.0129x faster
   is-string-fold                                     3.2072+-0.1551            3.1527+-0.0956          might be 1.0173x faster
   is-undefined-fold-tricky                           4.0317+-0.5991            3.8437+-0.2408          might be 1.0489x faster
   is-undefined-fold                                  3.1298+-0.0602     ?      3.1320+-0.0424        ?
   JSONP-negative-0                                   0.3896+-0.0213            0.3873+-0.0121        
   large-int-captured                                 5.3466+-1.1812            4.9410+-0.4612          might be 1.0821x faster
   large-int-neg                                     17.2028+-0.4942           17.0248+-1.0457          might be 1.0105x faster
   large-int                                         15.8226+-1.2923           15.0232+-0.6856          might be 1.0532x faster
   load-varargs-elimination                          24.0800+-0.6826           23.7244+-0.6940          might be 1.0150x faster
   logical-not-weird-types                            3.8811+-0.1505            3.8790+-0.1838        
   logical-not                                        5.3961+-0.1602            5.2324+-0.1681          might be 1.0313x faster
   lots-of-fields                                    12.7251+-0.3830     ?     12.7637+-0.6092        ?
   make-indexed-storage                               3.3694+-0.3967            3.3530+-0.0697        
   make-rope-cse                                      3.8423+-0.3354     ?      3.9523+-0.2901        ? might be 1.0286x slower
   marsaglia-larger-ints                             39.9406+-1.3854     ?     40.1823+-1.0690        ?
   marsaglia-osr-entry                               24.3996+-0.9530     ?     24.8452+-0.6741        ? might be 1.0183x slower
   math-with-out-of-bounds-array-values              30.7537+-3.4251           26.9024+-1.2121          might be 1.1432x faster
   max-boolean                                        2.7802+-0.1375            2.7268+-0.0265          might be 1.0196x faster
   method-on-number                                  18.9675+-0.1158     ?     19.2905+-1.0644        ? might be 1.0170x slower
   min-boolean                                        2.8732+-0.1110            2.8628+-0.1462        
   minus-boolean-double                               3.5848+-0.1877            3.5307+-0.1101          might be 1.0153x faster
   minus-boolean                                      2.6108+-0.0650     ?      2.6542+-0.0931        ? might be 1.0166x slower
   misc-strict-eq                                    36.9059+-1.9882           36.6077+-1.4267        
   mod-boolean-double                                11.8485+-0.3918           11.7377+-0.5669        
   mod-boolean                                        8.5353+-0.1565     ?      8.6157+-0.3203        ?
   mul-boolean-double                                 4.1372+-0.3635            4.0099+-0.0696          might be 1.0317x faster
   mul-boolean                                        3.2445+-0.1625            3.2377+-0.1162        
   neg-boolean                                        3.5368+-0.1326            3.5098+-0.1003        
   negative-zero-divide                               0.5315+-0.0126     ?      0.5394+-0.0179        ? might be 1.0149x slower
   negative-zero-modulo                               0.5200+-0.0256     ?      0.5593+-0.1176        ? might be 1.0756x slower
   negative-zero-negate                               0.5081+-0.0335     ?      0.5084+-0.0195        ?
   nested-function-parsing                           53.0413+-2.1421     ?     53.5939+-0.8230        ? might be 1.0104x slower
   new-array-buffer-dead                            106.7675+-1.0461     ?    106.7715+-0.3179        ?
   new-array-buffer-push                              6.8672+-0.5614            6.6743+-0.3037          might be 1.0289x faster
   new-array-dead                                    20.1002+-1.0625     ?     20.1331+-0.4923        ?
   new-array-push                                     4.2153+-0.2089     ?      4.2514+-0.2916        ?
   no-inline-constructor                             38.9362+-1.5693     ?     39.4053+-1.4628        ? might be 1.0120x slower
   number-test                                        3.5891+-0.1825            3.4482+-0.0885          might be 1.0409x faster
   object-closure-call                                6.1154+-0.3733            5.9866+-0.3157          might be 1.0215x faster
   object-get-own-property-symbols-on-large-array   
                                                      3.9006+-0.2721     ?      3.9251+-0.1791        ?
   object-test                                        3.2328+-0.0542     ?      3.2740+-0.1205        ? might be 1.0127x slower
   obvious-sink-pathology-taken                     127.1765+-6.6546          124.3535+-0.9152          might be 1.0227x faster
   obvious-sink-pathology                           117.5277+-1.0081          117.0722+-0.8962        
   obviously-elidable-new-object                     35.2533+-0.5287     ?     35.6986+-1.8551        ? might be 1.0126x slower
   plus-boolean-arith                                 2.8947+-0.1879            2.8372+-0.1211          might be 1.0203x faster
   plus-boolean-double                                3.5705+-0.1419            3.5652+-0.1041        
   plus-boolean                                       2.7448+-0.1616            2.6805+-0.0804          might be 1.0240x faster
   poly-chain-access-different-prototypes-simple   
                                                      4.4847+-0.1432     ?      4.4968+-0.1367        ?
   poly-chain-access-different-prototypes             4.6389+-0.2768     ?      4.6625+-0.4778        ?
   poly-chain-access-simpler                          4.4643+-0.1172     ?      4.4671+-0.0453        ?
   poly-chain-access                                  4.6581+-0.1804            4.5917+-0.2164          might be 1.0144x faster
   poly-stricteq                                     66.0199+-1.1890           65.6978+-1.0154        
   polymorphic-array-call                             1.6819+-0.0863     ?      1.6851+-0.1793        ?
   polymorphic-get-by-id                              3.7662+-0.1635     ?      3.8188+-0.0816        ? might be 1.0140x slower
   polymorphic-put-by-id                             38.3441+-1.6897           38.1809+-1.7527        
   polymorphic-put-by-val-with-string                38.5975+-0.6989     ?     39.4490+-2.8293        ? might be 1.0221x slower
   polymorphic-put-by-val-with-symbol                39.8008+-2.5245           38.7797+-0.8365          might be 1.0263x faster
   polymorphic-structure                             14.6068+-0.7265           14.4883+-0.3331        
   polyvariant-monomorphic-get-by-id                  9.5970+-0.3620     ?      9.6537+-0.3004        ?
   proto-getter-access                                9.8460+-0.3872     ?     10.3524+-1.3277        ? might be 1.0514x slower
   prototype-access-with-mutating-prototype           6.4175+-0.3201            6.3743+-0.1470        
   put-by-id-replace-and-transition                   9.5237+-0.2159     ?      9.8403+-0.5137        ? might be 1.0332x slower
   put-by-id-slightly-polymorphic                     3.1675+-0.0601     ?      3.2705+-0.1600        ? might be 1.0325x slower
   put-by-id                                         13.1760+-0.6301           13.0427+-0.6242          might be 1.0102x faster
   put-by-val-direct                                  0.5359+-0.0368            0.5313+-0.0406        
   put-by-val-large-index-blank-indexing-type   
                                                      5.9662+-0.7260            5.9355+-0.7490        
   put-by-val-machine-int                             2.7843+-0.0546     ?      2.8264+-0.0750        ? might be 1.0151x slower
   put-by-val-with-string-replace-and-transition   
                                                     14.2992+-0.4049           14.1657+-0.3061        
   put-by-val-with-string-slightly-polymorphic   
                                                      4.1407+-0.0848     ?      4.1597+-0.2010        ?
   put-by-val-with-string                            13.6752+-0.6394           13.4653+-0.5177          might be 1.0156x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     15.2172+-0.4595           14.7712+-0.3503          might be 1.0302x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      4.5153+-0.1775     ?      4.5960+-0.2928        ? might be 1.0179x slower
   put-by-val-with-symbol                            13.3300+-0.2469     ?     13.6071+-0.7950        ? might be 1.0208x slower
   rare-osr-exit-on-local                            16.2824+-1.1717           15.5988+-0.3097          might be 1.0438x faster
   raytrace-with-empty-try-catch                      7.2545+-0.3623            7.2373+-0.3459        
   raytrace-with-try-catch                           13.4263+-0.3014           13.3728+-0.9096        
   register-pressure-from-osr                        21.5527+-0.5198     ?     21.6995+-0.9763        ?
   repeat-multi-get-by-offset                        25.3914+-1.3789     ?     25.4221+-0.6637        ?
   richards-empty-try-catch                          89.9979+-1.3300           87.5125+-1.7827          might be 1.0284x faster
   richards-try-catch                               306.0444+-32.0478         291.3298+-1.3574          might be 1.0505x faster
   setter-prototype                                   9.6205+-0.5039            9.2464+-0.2301          might be 1.0405x faster
   setter                                             6.1883+-0.0635            6.1322+-0.0704        
   simple-activation-demo                            27.3993+-0.8852     ?     27.7748+-1.5080        ? might be 1.0137x slower
   simple-getter-access                              12.7701+-0.2867           12.5665+-0.1784          might be 1.0162x faster
   simple-poly-call-nested                            9.7952+-0.1061     ?      9.8048+-0.0805        ?
   simple-poly-call                                   1.7719+-0.1523            1.7106+-0.1739          might be 1.0358x faster
   sin-boolean                                       21.0829+-1.5119     !     24.4258+-1.7665        ! definitely 1.1586x slower
   singleton-scope                                   72.5163+-1.0639     ?     73.3935+-2.1333        ? might be 1.0121x slower
   sink-function                                     12.4796+-0.1928     ?     12.5211+-0.5748        ?
   sink-huge-activation                              19.4522+-1.2737           18.8803+-0.4682          might be 1.0303x faster
   sinkable-new-object-dag                           70.2852+-2.3945           69.7735+-2.4289        
   sinkable-new-object-taken                         54.9490+-1.7820           54.7825+-1.5456        
   sinkable-new-object                               40.0225+-3.2867           39.9723+-1.1196        
   slow-array-profile-convergence                     3.1410+-0.2068            3.1201+-0.2043        
   slow-convergence                                   3.0505+-0.0955            3.0040+-0.0510          might be 1.0155x faster
   slow-ternaries                                    19.2057+-0.3332     ?     20.6110+-4.4844        ? might be 1.0732x slower
   sorting-benchmark                                 20.8076+-0.4217           20.7422+-0.6874        
   sparse-conditional                                 1.5191+-0.0524     ?      1.5406+-0.0898        ? might be 1.0141x slower
   splice-to-remove                                  16.6583+-2.0959           15.7484+-0.3585          might be 1.0578x faster
   string-char-code-at                               17.5560+-0.3210     ?     17.8452+-0.8903        ? might be 1.0165x slower
   string-concat-object                               2.2440+-0.0618     ?      2.4177+-0.5893        ? might be 1.0774x slower
   string-concat-pair-object                          2.1519+-0.1032     ?      2.1960+-0.2227        ? might be 1.0205x slower
   string-concat-pair-simple                         12.1471+-0.7431           11.8618+-0.5966          might be 1.0241x faster
   string-concat-simple                              12.1670+-0.1793           12.0970+-0.2646        
   string-cons-repeat                                 8.0433+-0.4364            7.7067+-0.2301          might be 1.0437x faster
   string-cons-tower                                  7.7321+-0.2473     ?      8.0881+-0.5530        ? might be 1.0460x slower
   string-equality                                   19.3437+-0.7808           18.7211+-0.1901          might be 1.0333x faster
   string-get-by-val-big-char                         7.6119+-0.0769     ?      7.7253+-0.1276        ? might be 1.0149x slower
   string-get-by-val-out-of-bounds-insane             4.0444+-0.1440     ?      4.1841+-0.3481        ? might be 1.0345x slower
   string-get-by-val-out-of-bounds                    5.6548+-0.3505            5.5724+-0.0375          might be 1.0148x faster
   string-get-by-val                                  3.5792+-0.1480     ?      3.6215+-0.2296        ? might be 1.0118x slower
   string-hash                                        2.4141+-0.0527            2.3876+-0.0119          might be 1.0111x faster
   string-long-ident-equality                        15.5921+-0.3191     ?     15.6154+-0.2870        ?
   string-out-of-bounds                              14.6423+-0.7683     ?     14.6473+-0.5114        ?
   string-repeat-arith                               33.8577+-0.3406           33.4918+-0.3911          might be 1.0109x faster
   string-sub                                        68.8278+-0.6923     ?     70.1570+-2.6741        ? might be 1.0193x slower
   string-test                                        3.4428+-0.1530            3.3481+-0.0849          might be 1.0283x faster
   string-var-equality                               34.4645+-0.2492     ?     35.5968+-3.8137        ? might be 1.0329x slower
   structure-hoist-over-transitions                   2.7648+-0.1165            2.7253+-0.1186          might be 1.0145x faster
   substring-concat-weird                            43.8209+-0.3588     ?     43.8577+-0.9296        ?
   substring-concat                                  49.1011+-1.8357           48.4488+-1.3943          might be 1.0135x faster
   substring                                         52.9537+-0.8007           52.6049+-0.7461        
   switch-char-constant                               3.1198+-0.0635     ?      3.1758+-0.1518        ? might be 1.0180x slower
   switch-char                                        6.7997+-0.0727     ?      6.8403+-0.0770        ?
   switch-constant                                    8.7664+-0.7019     ?      8.8555+-0.4766        ? might be 1.0102x slower
   switch-string-basic-big-var                       20.9836+-0.6047           20.4933+-0.6584          might be 1.0239x faster
   switch-string-basic-big                           18.5901+-0.6803     ?     19.2252+-0.7517        ? might be 1.0342x slower
   switch-string-basic-var                           16.6987+-0.4410     ?     16.8331+-1.3814        ?
   switch-string-basic                               15.6969+-1.4530           15.3980+-1.0156          might be 1.0194x faster
   switch-string-big-length-tower-var                21.6177+-0.2236     ?     21.7990+-0.5619        ?
   switch-string-length-tower-var                    16.5663+-0.4839           16.4417+-0.3352        
   switch-string-length-tower                        13.9261+-0.3476           13.7688+-0.4820          might be 1.0114x faster
   switch-string-short                               13.5933+-0.2046     ?     13.6095+-0.1132        ?
   switch                                            12.6405+-0.6559           12.3850+-0.4621          might be 1.0206x faster
   tear-off-arguments-simple                          3.4858+-0.1911            3.3854+-0.1482          might be 1.0296x faster
   tear-off-arguments                                 4.6145+-0.1357     ?      4.7300+-0.2876        ? might be 1.0250x slower
   temporal-structure                                14.5856+-0.3067           14.3990+-0.2093          might be 1.0130x faster
   to-int32-boolean                                  14.7468+-0.4467           14.5997+-0.6211          might be 1.0101x faster
   try-catch-get-by-val-cloned-arguments             11.5637+-0.7742           10.8420+-0.9444          might be 1.0666x faster
   try-catch-get-by-val-direct-arguments              2.4727+-0.1459            2.2646+-0.1124          might be 1.0919x faster
   try-catch-get-by-val-scoped-arguments              5.1967+-0.2213     ^      4.8865+-0.0756        ^ definitely 1.0635x faster
   typed-array-get-set-by-val-profiling              31.6438+-1.8257     ?     32.0215+-1.4363        ? might be 1.0119x slower
   undefined-property-access                        380.5200+-6.4264          378.3598+-0.4952        
   undefined-test                                     3.4659+-0.1371     ?      3.5015+-0.1514        ? might be 1.0103x slower
   unprofiled-licm                                   14.1095+-0.4123     ?     14.2274+-0.2364        ?
   v8-raytrace-with-empty-try-catch                  61.4449+-1.5058     ^     39.5670+-1.0833        ^ definitely 1.5529x faster
   v8-raytrace-with-try-catch                        87.3553+-1.6551           86.0248+-0.9704          might be 1.0155x faster
   varargs-call                                      15.5865+-0.3340     ?     15.7041+-0.6479        ?
   varargs-construct-inline                          28.2786+-0.9482           27.9060+-1.7218          might be 1.0134x faster
   varargs-construct                                 24.0090+-0.6924           23.6688+-0.6508          might be 1.0144x faster
   varargs-inline                                    10.7490+-0.3001           10.6975+-0.4498        
   varargs-strict-mode                               11.9528+-0.6407           11.7523+-0.3885          might be 1.0171x faster
   varargs                                           11.7971+-0.4513     ?     11.8673+-0.6268        ?
   weird-inlining-const-prop                          2.6830+-0.1319            2.6118+-0.0256          might be 1.0272x faster

   &lt;geometric&gt;                                        9.9618+-0.0266     ^      9.9123+-0.0207        ^ definitely 1.0050x faster

                                                            og                   phantomLocal                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   30.3211+-0.1290     ?     30.3537+-0.1686        ? might be 1.0011x slower



The more interesting ones:

VMs tested:
&quot;og&quot; at /Volumes/Data/WK/os-a/OpenSource/WebKitBuild/Release/jsc (r190248)
&quot;phantomLocal&quot; at /Volumes/Data/WK/os-b/OpenSource/WebKitBuild/Release/jsc (r190248)

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

                                                   og                   phantomLocal                                   

getter-richards-try-catch                 1413.1754+-36.4767    ?   1470.3582+-117.1004      ? might be 1.0405x slower
raytrace-with-empty-try-catch                7.3626+-0.4660            7.2405+-0.1630          might be 1.0169x faster
raytrace-with-try-catch                     13.6687+-0.4131     ^     13.0393+-0.1894        ^ definitely 1.0483x faster
richards-empty-try-catch                    90.1163+-1.1523           88.2468+-1.1668          might be 1.0212x faster
richards-try-catch                         297.2260+-5.4593          290.9877+-1.0317          might be 1.0214x faster
v8-raytrace-with-empty-try-catch            62.6953+-2.5283     ^     39.8740+-0.8292        ^ definitely 1.5723x faster
v8-raytrace-with-try-catch                  88.2933+-1.9607           85.1863+-2.5237          might be 1.0365x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128838</commentid>
    <comment_count>5</comment_count>
      <attachid>261956</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-25 19:11:54 -0700</bug_when>
    <thetext>Comment on attachment 261956
patch

Clearing flags on attachment: 261956

Committed r190261: &lt;http://trac.webkit.org/changeset/190261&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128839</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-25 19:11:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128851</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-09-25 23:12:52 -0700</bug_when>
    <thetext>The new test js/regress/getter-richards-try-catch.html times out on all Mac debug bots.

I will just skip it, and not roll out the patch, however could you please take a look soon?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128907</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-09-26 14:06:19 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The new test js/regress/getter-richards-try-catch.html times out on all Mac
&gt; debug bots.
&gt; 
&gt; I will just skip it, and not roll out the patch, however could you please
&gt; take a look soon?

Thanks. I&apos;ll take a look at this tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130640</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-05 10:03:40 -0700</bug_when>
    <thetext>Looks like the test got skipped on debug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261956</attachid>
            <date>2015-09-25 17:43:03 -0700</date>
            <delta_ts>2015-09-25 19:11:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>43360</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjYwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDE1LTA5LTI1ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgdXNlIFBoYW50b21Mb2NhbCBpbnN0ZWFkIG9mIEZsdXNoIGFzIGxpdmVuZXNz
IHByZXNlcnZhdGlvbiBtZWNoYW5pc20gaW4gTGl2ZUNhdGNoVmFyaWFibGVzUHJlc2VydmF0aW9u
UGhhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
OTU3NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIExp
dmVDYXRjaFZhcmlhYmxlc1ByZXNlcnZhdGlvblBoYXNlIGlzIG5vIGxvbmdlciBmb3JjaW5nIGFs
bCBsaXZlLWF0LWNhdGNoIAorICAgICAgICB2YXJpYWJsZXMgdG8gYmUgZmx1c2hlZCB0byB0aGUg
c3RhY2suIFRoZXkgYXJlIG5vdyBrZXB0IGFsaXZlIHRvIE9TUiBleGl0IAorICAgICAgICB0aHJv
dWdoIFBoYW50b21Mb2NhbC4gVGhpcyBnaXZlcyB1cyBhIHNwZWVkIGltcHJvdmVtZW50IGZvciB0
cnktY2F0Y2ggCisgICAgICAgIHByb2dyYW1zIChlc3BlY2lhbGx5IHRob3NlIHRoYXQgZG9uJ3Qg
dGhyb3cgZXJyb3JzIHZlcnkgb2Z0ZW4pIGJlY2F1c2UKKyAgICAgICAgd2UgY2FuIGtlZXAgbG9j
YWxzIGluIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIGZvcmNpbmcgdGhlbSBvbnRvIHRoZSBzdGFjay4K
KworICAgICAgICAqIGRmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
OjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlOjpoYW5kbGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6cGVyZm9ybUxpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZUNhdGNoVmFyaWFibGVzSW5zZXJ0aW9uUGhh
c2U6OkZsdXNoTGl2ZUNhdGNoVmFyaWFibGVzSW5zZXJ0aW9uUGhhc2UpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkZsdXNoTGl2ZUNhdGNoVmFyaWFibGVzSW5zZXJ0aW9uUGhhc2U6Omhh
bmRsZUJsb2NrKTogRGVsZXRlZC4KKwogMjAxNS0wOS0yNSAgTWljaGFlbCBTYWJvZmYgIDxtc2Fi
b2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBGVExPU1JFeGl0Q29tcGlsZXIgaW5jb3JyZWN0bHkg
ZXhjbHVkZXMgRlBSIHJlZ2lzdGVycyBpbiBjYWxsZWUgc2F2ZXMgbG9vcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTAyNDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw5ICszNyw5IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotY2xhc3MgRmx1c2hMaXZlQ2F0Y2hWYXJpYWJsZXNJbnNlcnRp
b25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitjbGFzcyBMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZh
dGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKLSAgICBGbHVzaExpdmVDYXRjaFZh
cmlhYmxlc0luc2VydGlvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICBMaXZlQ2F0Y2hWYXJpYWJs
ZVByZXNlcnZhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwg
ImxpdmUgY2F0Y2ggdmFyaWFibGUgcHJlc2VydmF0aW9uIHBoYXNlIikKICAgICB7CiAgICAgfQpA
QCAtMTEzLDEyICsxMTMsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoKG9w
ZXJhbmQuaXNMb2NhbCgpICYmIG1fY3VycmVudEJsb2NrTGl2ZW5lc3MuZ2V0KG9wZXJhbmQudG9M
b2NhbCgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChvcGVyYW5kLm9mZnNldCgpID09
IHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSkpIHsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBmbHVzaEFjY2Vzc0RhdGEg
PSBjdXJyZW50QmxvY2tBY2Nlc3NEYXRhLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZsdXNoQWNjZXNzRGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbHVzaEFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNz
RGF0YSA9IGN1cnJlbnRCbG9ja0FjY2Vzc0RhdGEub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShv
cGVyYW5kKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoaSwgU3BlY05vbmUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsdXNoLCBub2Rl
LT5vcmlnaW4sIE9wSW5mbyhmbHVzaEFjY2Vzc0RhdGEpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQaGFudG9tTG9jYWwsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCkBAIC0x
MjcsMTcgKzEyNywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICAvLyBGbHVzaCBldmVyeXRoaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLgotICAgICAg
ICAvLyBGSVhNRTogSSB0aGluayB0aGlzIHdpbGwgb25seSBiZSBuZWNlc3NhcnkgaWYgd2UgaGF2
ZSBhbnkgc3VjY2Vzc29yCi0gICAgICAgIC8vIGJsb2NrcyB3aG8gYXJlbid0IGluc2lkZSB0aGlz
ICJ0cnkiIHN0YXRlbWVudC4gSWYgYWxsIG91ciBzdWNjZXNzb3IncwotICAgICAgICAvLyBhcmUg
aW4gdGhpcyB0cnkgc3RhdGVtZW50LCB0aGV5IHdpbGwgaGF2ZSBGbHVzaGVzIGZvciBhbnkgbGl2
ZSAiY2F0Y2giCi0gICAgICAgIC8vIHZhcmlhYmxlcy4KKyAgICAgICAgLy8gSW5zZXJ0IFBoYW50
b21Mb2NhbHMgZm9yIGV2ZXJ5dGhpbmcgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suCiAgICAgICAg
IHsKICAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gYmxvY2stPmF0KGJsb2NrLT5zaXpl
KCkgLSAxKS0+b3JpZ2luOwotICAgICAgICAgICAgYXV0byBpbnNlcnRGbHVzaEF0RW5kID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgYm9vbCBhbHdheXNGbHVzaCkgeworICAgICAgICAg
ICAgYXV0byBpbnNlcnRQaGFudG9tTG9jYWxBdEVuZCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIGJvb2wgYWx3YXlzSW5zZXJ0KSB7CiAgICAgICAgICAgICAgICAgaWYgKChvcGVyYW5k
LmlzTG9jYWwoKSAmJiBtX2N1cnJlbnRCbG9ja0xpdmVuZXNzLmdldChvcGVyYW5kLnRvTG9jYWwo
KSkpIAogICAgICAgICAgICAgICAgICAgICB8fCBvcGVyYW5kLmlzQXJndW1lbnQoKQotICAgICAg
ICAgICAgICAgICAgICB8fCBhbHdheXNGbHVzaCkgeworICAgICAgICAgICAgICAgICAgICB8fCBh
bHdheXNJbnNlcnQpIHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBh
Y2Nlc3NEYXRhID0gY3VycmVudEJsb2NrQWNjZXNzRGF0YS5vcGVyYW5kKG9wZXJhbmQpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzc0RhdGEpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBhY2Nlc3NEYXRhID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpOwpAQCAtMTQ1LDE0
ICsxNDEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjdXJyZW50QmxvY2tBY2Nl
c3NEYXRhLm9wZXJhbmQob3BlcmFuZCkgPSBhY2Nlc3NEYXRhOwogCiAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKGJsb2NrLT5zaXplKCksIFNwZWNOb25lLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEZsdXNoLCBvcmlnaW4sIE9wSW5mbyhhY2Nlc3NEYXRhKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBQaGFudG9tTG9jYWwsIG9yaWdpbiwgT3BJbmZvKGFj
Y2Vzc0RhdGEpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9OwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkxvY2FscygpOyBsb2NhbCsrKQotICAgICAgICAgICAgICAgIGluc2VydEZsdXNo
QXRFbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWwpLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgaW5zZXJ0UGhhbnRvbUxvY2FsQXRFbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9j
YWwpLCBmYWxzZSk7CiAgICAgICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lIDogc2VlbklubGluZUNhbGxGcmFtZXMpCi0gICAgICAgICAgICAgICAgaW5zZXJ0Rmx1
c2hBdEVuZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENh
bGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkpLCB0cnVlKTsKLSAgICAgICAgICAgIGluc2Vy
dEZsdXNoQXRFbmQoVmlydHVhbFJlZ2lzdGVyKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0
KCkpLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRQaGFudG9tTG9jYWxBdEVuZChWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZTo6dGhp
c0FyZ3VtZW50T2Zmc2V0KCkpLCB0cnVlKTsKKyAgICAgICAgICAgIGluc2VydFBoYW50b21Mb2Nh
bEF0RW5kKFZpcnR1YWxSZWdpc3RlcihDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpKSwg
dHJ1ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MCw3ICsxNjYsNyBAQCBwdWJsaWM6CiBi
b29sIHBlcmZvcm1MaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlKEdyYXBoJiBncmFw
aCkKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIExpdmUgQ2F0Y2gg
VmFyaWFibGVzIFByZXNlcnZhdGlvbiBQaGFzZSIpOwotICAgIHJldHVybiBydW5QaGFzZTxGbHVz
aExpdmVDYXRjaFZhcmlhYmxlc0luc2VydGlvblBoYXNlPihncmFwaCk7CisgICAgcmV0dXJuIHJ1
blBoYXNlPExpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2U+KGdyYXBoKTsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjYwKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTMgQEAKKzIw
MTUtMDktMjUgIFNhYW0gYmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgREZH
IHNob3VsZCB1c2UgUGhhbnRvbUxvY2FsIGluc3RlYWQgb2YgRmx1c2ggYXMgbGl2ZW5lc3MgcHJl
c2VydmF0aW9uIG1lY2hhbmlzbSBpbiBMaXZlQ2F0Y2hWYXJpYWJsZXNQcmVzZXJ2YXRpb25QaGFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NTc1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2dldHRlci1yaWNoYXJkcy10cnktY2F0Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2dldHRlci1yaWNoYXJkcy10cnktY2F0Y2guaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0dGVyLXJpY2hhcmRzLXRyeS1j
YXRjaC5qczogQWRkZWQuCisgICAgICAgIChyYW5kb21FeGNlcHRpb24pOgorICAgICAgICAocnVu
UmljaGFyZHMpOgorICAgICAgICAoU2NoZWR1bGVyKToKKyAgICAgICAgKFNjaGVkdWxlci5wcm90
b3R5cGUuYWRkSWRsZVRhc2spOgorICAgICAgICAoU2NoZWR1bGVyLnByb3RvdHlwZS5hZGRXb3Jr
ZXJUYXNrKToKKyAgICAgICAgKFNjaGVkdWxlci5wcm90b3R5cGUuYWRkSGFuZGxlclRhc2spOgor
ICAgICAgICAoU2NoZWR1bGVyLnByb3RvdHlwZS5hZGREZXZpY2VUYXNrKToKKyAgICAgICAgKFNj
aGVkdWxlci5wcm90b3R5cGUuYWRkUnVubmluZ1Rhc2spOgorICAgICAgICAoU2NoZWR1bGVyLnBy
b3RvdHlwZS5hZGRUYXNrKToKKyAgICAgICAgKFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUp
OgorICAgICAgICAoU2NoZWR1bGVyLnByb3RvdHlwZS5yZWxlYXNlKToKKyAgICAgICAgKFNjaGVk
dWxlci5wcm90b3R5cGUuaG9sZEN1cnJlbnQpOgorICAgICAgICAoU2NoZWR1bGVyLnByb3RvdHlw
ZS5zdXNwZW5kQ3VycmVudCk6CisgICAgICAgIChTY2hlZHVsZXIucHJvdG90eXBlLnF1ZXVlKToK
KyAgICAgICAgKFRhc2tDb250cm9sQmxvY2spOgorICAgICAgICAoVGFza0NvbnRyb2xCbG9jay5w
cm90b3R5cGUuc2V0UnVubmluZyk6CisgICAgICAgIChUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlw
ZS5tYXJrQXNOb3RIZWxkKToKKyAgICAgICAgKFRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLm1h
cmtBc0hlbGQpOgorICAgICAgICAoVGFza0NvbnRyb2xCbG9jay5wcm90b3R5cGUuaXNIZWxkT3JT
dXNwZW5kZWQpOgorICAgICAgICAoVGFza0NvbnRyb2xCbG9jay5wcm90b3R5cGUubWFya0FzU3Vz
cGVuZGVkKToKKyAgICAgICAgKFRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLm1hcmtBc1J1bm5h
YmxlKToKKyAgICAgICAgKFRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLnJ1bik6CisgICAgICAg
IChUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5jaGVja1ByaW9yaXR5QWRkKToKKyAgICAgICAg
KFRhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKElkbGVUYXNr
KToKKyAgICAgICAgKElkbGVUYXNrLnByb3RvdHlwZS5ydW4pOgorICAgICAgICAoSWRsZVRhc2su
cHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKERldmljZVRhc2spOgorICAgICAgICAoRGV2
aWNlVGFzay5wcm90b3R5cGUucnVuKToKKyAgICAgICAgKERldmljZVRhc2sucHJvdG90eXBlLnRv
U3RyaW5nKToKKyAgICAgICAgKFdvcmtlclRhc2spOgorICAgICAgICAoV29ya2VyVGFzay5wcm90
b3R5cGUucnVuKToKKyAgICAgICAgKFdvcmtlclRhc2sucHJvdG90eXBlLnRvU3RyaW5nKToKKyAg
ICAgICAgKEhhbmRsZXJUYXNrKToKKyAgICAgICAgKEhhbmRsZXJUYXNrLnByb3RvdHlwZS5ydW4p
OgorICAgICAgICAoSGFuZGxlclRhc2sucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKFBh
Y2tldCk6CisgICAgICAgIChQYWNrZXQucHJvdG90eXBlLmFkZFRvKToKKyAgICAgICAgKFBhY2tl
dC5wcm90b3R5cGUudG9TdHJpbmcpOgorCiAyMDE1LTA5LTI1ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1MgV0syXSBBZGQgdmlld3BvcnQgdGVz
dHMgYW5kIGZpeCBydW5VSVNjcmlwdCgpIHRpbWluZyBpc3N1ZXMKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2V0dGVyLXJpY2hhcmRzLXRyeS1jYXRjaC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXR0ZXItcmljaGFyZHMtdHJ5LWNhdGNo
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0
dGVyLXJpY2hhcmRzLXRyeS1jYXRjaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMCBAQAorSlNSZWdyZXNzL2dldHRlci1yaWNoYXJkcy10cnktY2F0Y2gKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0dGVyLXJpY2hhcmRzLXRyeS1jYXRjaC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0dGVyLXJpY2hhcmRzLXRyeS1jYXRjaC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXR0ZXItcmljaGFy
ZHMtdHJ5LWNhdGNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0dGVyLXJpY2hhcmRz
LXRyeS1jYXRjaC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXR0ZXItcmljaGFyZHMtdHJ5LWNhdGNoLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldHRl
ci1yaWNoYXJkcy10cnktY2F0Y2guanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXR0ZXItcmljaGFyZHMtdHJ5LWNhdGNoLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTE1MSBAQAorLy9AIGRlZmF1bHRRdWlja1J1bgorCisvLyBDb3B5
cmlnaHQgMjAwNi0yMDA4IHRoZSBWOCBwcm9qZWN0IGF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBDb3B5cmlnaHQgMjAxNCBBcHBsZSBJbmMuCisvLyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKy8vIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKy8vIG1ldDoKKy8vCisvLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorLy8gICAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorLy8g
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorLy8gICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKy8vICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorLy8gICAgICAgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworLy8gICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisvLyAgICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisvLworLy8g
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKy8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorLy8gQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
Ky8vIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisvLyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKy8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKy8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorLy8gT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CisvLyBUaGlzIGlzIGEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUmljaGFyZHMK
Ky8vIGJlbmNobWFyayBmcm9tOgorLy8KKy8vICAgIGh0dHA6Ly93d3cuY2wuY2FtLmFjLnVrL35t
cjEwL0JlbmNoLmh0bWwKKy8vCisvLyBUaGUgYmVuY2htYXJrIHdhcyBvcmlnaW5hbGx5IGltcGxl
bWVudGVkIGluIEJDUEwgYnkKKy8vIE1hcnRpbiBSaWNoYXJkcy4gSXQgd2FzIHRoZW4gcG9ydGVk
IHRvIEphdmFTY3JpcHQgYnkgdGhlCisvLyBWOCBwcm9qZWN0IGF1dGhvcnMsIGFuZCB0aGVuIHN1
YnNlcXVlbnRseSBpdCB3YXMgbW9kaWZpZWQKKy8vIHRvIHVzZSBnZXR0ZXJzIGFuZCBzZXR0ZXJz
IGJ5IFdlYktpdCBhdXRob3JzLgorCitsZXQgX19leGNlcHRpb25Db3VudGVyID0gMDsKK2Z1bmN0
aW9uIHJhbmRvbUV4Y2VwdGlvbigpIHsKKyAgICBfX2V4Y2VwdGlvbkNvdW50ZXIrKzsKKyAgICBp
ZiAoX19leGNlcHRpb25Db3VudGVyICUgMjUwMCA9PT0gMCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJibGFoIik7Cit9Citub0lubGluZShyYW5kb21FeGNlcHRpb24pOworCisvKioKKyAqIFRo
ZSBSaWNoYXJkcyBiZW5jaG1hcmsgc2ltdWxhdGVzIHRoZSB0YXNrIGRpc3BhdGNoZXIgb2YgYW4K
KyAqIG9wZXJhdGluZyBzeXN0ZW0uCisgKiovCitmdW5jdGlvbiBydW5SaWNoYXJkcygpIHsKKyAg
ICB2YXIgc2NoZWR1bGVyID0gbmV3IFNjaGVkdWxlcigpOworICAgIHNjaGVkdWxlci5hZGRJZGxl
VGFzayhJRF9JRExFLCAwLCBudWxsLCBDT1VOVCk7CisKKyAgICB2YXIgcXVldWUgPSBuZXcgUGFj
a2V0KG51bGwsIElEX1dPUktFUiwgS0lORF9XT1JLKTsKKyAgICBxdWV1ZSA9IG5ldyBQYWNrZXQo
cXVldWUsICBJRF9XT1JLRVIsIEtJTkRfV09SSyk7CisgICAgc2NoZWR1bGVyLmFkZFdvcmtlclRh
c2soSURfV09SS0VSLCAxMDAwLCBxdWV1ZSk7CisKKyAgICBxdWV1ZSA9IG5ldyBQYWNrZXQobnVs
bCwgSURfREVWSUNFX0EsIEtJTkRfREVWSUNFKTsKKyAgICBxdWV1ZSA9IG5ldyBQYWNrZXQocXVl
dWUsICBJRF9ERVZJQ0VfQSwgS0lORF9ERVZJQ0UpOworICAgIHF1ZXVlID0gbmV3IFBhY2tldChx
dWV1ZSwgIElEX0RFVklDRV9BLCBLSU5EX0RFVklDRSk7CisgICAgc2NoZWR1bGVyLmFkZEhhbmRs
ZXJUYXNrKElEX0hBTkRMRVJfQSwgMjAwMCwgcXVldWUpOworCisgICAgcXVldWUgPSBuZXcgUGFj
a2V0KG51bGwsIElEX0RFVklDRV9CLCBLSU5EX0RFVklDRSk7CisgICAgcXVldWUgPSBuZXcgUGFj
a2V0KHF1ZXVlLCAgSURfREVWSUNFX0IsIEtJTkRfREVWSUNFKTsKKyAgICBxdWV1ZSA9IG5ldyBQ
YWNrZXQocXVldWUsICBJRF9ERVZJQ0VfQiwgS0lORF9ERVZJQ0UpOworICAgIHNjaGVkdWxlci5h
ZGRIYW5kbGVyVGFzayhJRF9IQU5ETEVSX0IsIDMwMDAsIHF1ZXVlKTsKKworICAgIHNjaGVkdWxl
ci5hZGREZXZpY2VUYXNrKElEX0RFVklDRV9BLCA0MDAwLCBudWxsKTsKKworICAgIHNjaGVkdWxl
ci5hZGREZXZpY2VUYXNrKElEX0RFVklDRV9CLCA1MDAwLCBudWxsKTsKKworICAgIHNjaGVkdWxl
ci5zY2hlZHVsZSgpOworICAgIGxldCBxdWV1ZUNvdW50OworICAgIHRyeSB7CisgICAgICAgIHF1
ZXVlQ291bnQgPSBzY2hlZHVsZXIucXVldWVDb3VudDsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAg
ICAgcXVldWVDb3VudCA9IHNjaGVkdWxlci5xdWV1ZUNvdW50OworICAgIH0KKyAgICBsZXQgaG9s
ZENvdW50OworICAgIHRyeSB7CisgICAgICAgIGhvbGRDb3VudCA9IHNjaGVkdWxlci5ob2xkQ291
bnQ7CisgICAgfSBjYXRjaChlKSB7IAorICAgICAgICBob2xkQ291bnQgPSBzY2hlZHVsZXIuaG9s
ZENvdW50OworICAgIH0KKworICAgIGlmIChxdWV1ZUNvdW50ICE9IEVYUEVDVEVEX1FVRVVFX0NP
VU5UIHx8CisgICAgICAgIGhvbGRDb3VudCAhPSBFWFBFQ1RFRF9IT0xEX0NPVU5UKSB7CisgICAg
ICAgIHZhciBtc2cgPQorICAgICAgICAgICAgIkVycm9yIGR1cmluZyBleGVjdXRpb246IHF1ZXVl
Q291bnQgPSAiICsgcXVldWVDb3VudCArCisgICAgICAgICAgICAiLCBob2xkQ291bnQgPSAiICsg
aG9sZENvdW50ICsgIi4iOworICAgICAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTsKKyAgICB9Cit9
CisKK3ZhciBDT1VOVCA9IDEwMDA7CisKKy8qKgorICogVGhlc2UgdHdvIGNvbnN0YW50cyBzcGVj
aWZ5IGhvdyBtYW55IHRpbWVzIGEgcGFja2V0IGlzIHF1ZXVlZCBhbmQKKyAqIGhvdyBtYW55IHRp
bWVzIGEgdGFzayBpcyBwdXQgb24gaG9sZCBpbiBhIGNvcnJlY3QgcnVuIG9mIHJpY2hhcmRzLgor
ICogVGhleSBkb24ndCBoYXZlIGFueSBtZWFuaW5nIGEgc3VjaCBidXQgYXJlIGNoYXJhY3Rlcmlz
dGljIG9mIGEKKyAqIGNvcnJlY3QgcnVuIHNvIGlmIHRoZSBhY3R1YWwgcXVldWUgb3IgaG9sZCBj
b3VudCBpcyBkaWZmZXJlbnQgZnJvbQorICogdGhlIGV4cGVjdGVkIHRoZXJlIG11c3QgYmUgYSBi
dWcgaW4gdGhlIGltcGxlbWVudGF0aW9uLgorICoqLwordmFyIEVYUEVDVEVEX1FVRVVFX0NPVU5U
ID0gMjMyMjsKK3ZhciBFWFBFQ1RFRF9IT0xEX0NPVU5UID0gOTI4OworCisKKy8qKgorICogQSBz
Y2hlZHVsZXIgY2FuIGJlIHVzZWQgdG8gc2NoZWR1bGUgYSBzZXQgb2YgdGFza3MgYmFzZWQgb24g
dGhlaXIgcmVsYXRpdmUKKyAqIHByaW9yaXRpZXMuICBTY2hlZHVsaW5nIGlzIGRvbmUgYnkgbWFp
bnRhaW5pbmcgYSBsaXN0IG9mIHRhc2sgY29udHJvbCBibG9ja3MKKyAqIHdoaWNoIGhvbGRzIHRh
c2tzIGFuZCB0aGUgZGF0YSBxdWV1ZSB0aGV5IGFyZSBwcm9jZXNzaW5nLgorICogQGNvbnN0cnVj
dG9yCisgKi8KK2Z1bmN0aW9uIFNjaGVkdWxlcigpIHsKKyAgICB0aGlzLl9xdWV1ZUNvdW50ID0g
MDsKKyAgICB0aGlzLl9ob2xkQ291bnQgPSAwOworICAgIHRoaXMuX2Jsb2NrcyA9IG5ldyBBcnJh
eShOVU1CRVJfT0ZfSURTKTsKKyAgICB0aGlzLl9saXN0ID0gbnVsbDsKKyAgICB0aGlzLl9jdXJy
ZW50VGNiID0gbnVsbDsKKyAgICB0aGlzLl9jdXJyZW50SWQgPSBudWxsOworfQorCit2YXIgSURf
SURMRSAgICAgICA9IDA7Cit2YXIgSURfV09SS0VSICAgICA9IDE7Cit2YXIgSURfSEFORExFUl9B
ICA9IDI7Cit2YXIgSURfSEFORExFUl9CICA9IDM7Cit2YXIgSURfREVWSUNFX0EgICA9IDQ7Cit2
YXIgSURfREVWSUNFX0IgICA9IDU7Cit2YXIgTlVNQkVSX09GX0lEUyA9IDY7CisKK3ZhciBLSU5E
X0RFVklDRSAgID0gMDsKK3ZhciBLSU5EX1dPUksgICAgID0gMTsKKworU2NoZWR1bGVyLnByb3Rv
dHlwZS5fX2RlZmluZUdldHRlcl9fKCJxdWV1ZUNvdW50IiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4
Y2VwdGlvbigpOyByZXR1cm4gdGhpcy5fcXVldWVDb3VudDsgfSk7CitTY2hlZHVsZXIucHJvdG90
eXBlLl9fZGVmaW5lU2V0dGVyX18oInF1ZXVlQ291bnQiLCBmdW5jdGlvbih2YWx1ZSkgeyB0aGlz
Ll9xdWV1ZUNvdW50ID0gdmFsdWU7IH0pOworU2NoZWR1bGVyLnByb3RvdHlwZS5fX2RlZmluZUdl
dHRlcl9fKCJob2xkQ291bnQiLCBmdW5jdGlvbigpIHsgcmFuZG9tRXhjZXB0aW9uKCk7IHJldHVy
biB0aGlzLl9ob2xkQ291bnQ7IH0pOworU2NoZWR1bGVyLnByb3RvdHlwZS5fX2RlZmluZVNldHRl
cl9fKCJob2xkQ291bnQiLCBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLl9ob2xkQ291bnQgPSB2YWx1
ZTsgfSk7CitTY2hlZHVsZXIucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oImJsb2NrcyIsIGZ1
bmN0aW9uKCkgeyByYW5kb21FeGNlcHRpb24oKTsgcmV0dXJuIHRoaXMuX2Jsb2NrczsgfSk7CitT
Y2hlZHVsZXIucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oImJsb2NrcyIsIGZ1bmN0aW9uKHZh
bHVlKSB7IHRoaXMuX2Jsb2NrcyA9IHZhbHVlOyB9KTsKK1NjaGVkdWxlci5wcm90b3R5cGUuX19k
ZWZpbmVHZXR0ZXJfXygibGlzdCIsIGZ1bmN0aW9uKCkgeyByYW5kb21FeGNlcHRpb24oKTsgcmV0
dXJuIHRoaXMuX2xpc3Q7IH0pOworU2NoZWR1bGVyLnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9f
KCJsaXN0IiwgZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5fbGlzdCA9IHZhbHVlOyB9KTsKK1NjaGVk
dWxlci5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiY3VycmVudFRjYiIsIGZ1bmN0aW9uKCkg
eyByYW5kb21FeGNlcHRpb24oKTsgcmV0dXJuIHRoaXMuX2N1cnJlbnRUY2I7IH0pOworU2NoZWR1
bGVyLnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKCJjdXJyZW50VGNiIiwgZnVuY3Rpb24odmFs
dWUpIHsgdGhpcy5fY3VycmVudFRjYiA9IHZhbHVlOyB9KTsKK1NjaGVkdWxlci5wcm90b3R5cGUu
X19kZWZpbmVHZXR0ZXJfXygiY3VycmVudElkIiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2VwdGlv
bigpOyByZXR1cm4gdGhpcy5fY3VycmVudElkOyB9KTsKK1NjaGVkdWxlci5wcm90b3R5cGUuX19k
ZWZpbmVTZXR0ZXJfXygiY3VycmVudElkIiwgZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5fY3VycmVu
dElkID0gdmFsdWU7IH0pOworCisvKioKKyAqIEFkZCBhbiBpZGxlIHRhc2sgdG8gdGhpcyBzY2hl
ZHVsZXIuCisgKiBAcGFyYW0ge2ludH0gaWQgdGhlIGlkZW50aXR5IG9mIHRoZSB0YXNrCisgKiBA
cGFyYW0ge2ludH0gcHJpb3JpdHkgdGhlIHRhc2sncyBwcmlvcml0eQorICogQHBhcmFtIHtQYWNr
ZXR9IHF1ZXVlIHRoZSBxdWV1ZSBvZiB3b3JrIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgdGFzawor
ICogQHBhcmFtIHtpbnR9IGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gc2NoZWR1bGUgdGhl
IHRhc2sKKyAqLworU2NoZWR1bGVyLnByb3RvdHlwZS5hZGRJZGxlVGFzayA9IGZ1bmN0aW9uIChp
ZCwgcHJpb3JpdHksIHF1ZXVlLCBjb3VudCkgeworICAgIHRoaXMuYWRkUnVubmluZ1Rhc2soaWQs
IHByaW9yaXR5LCBxdWV1ZSwgbmV3IElkbGVUYXNrKHRoaXMsIDEsIGNvdW50KSk7Cit9OworCisv
KioKKyAqIEFkZCBhIHdvcmsgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KKyAqIEBwYXJhbSB7aW50
fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0
aGUgdGFzaydzIHByaW9yaXR5CisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9m
IHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCisgKi8KK1NjaGVkdWxlci5wcm90b3R5
cGUuYWRkV29ya2VyVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3JpdHksIHF1ZXVlKSB7CisgICAg
dGhpcy5hZGRUYXNrKGlkLCBwcmlvcml0eSwgcXVldWUsIG5ldyBXb3JrZXJUYXNrKHRoaXMsIElE
X0hBTkRMRVJfQSwgMCkpOworfTsKKworLyoqCisgKiBBZGQgYSBoYW5kbGVyIHRhc2sgdG8gdGhp
cyBzY2hlZHVsZXIuCisgKiBAcGFyYW0ge2ludH0gaWQgdGhlIGlkZW50aXR5IG9mIHRoZSB0YXNr
CisgKiBAcGFyYW0ge2ludH0gcHJpb3JpdHkgdGhlIHRhc2sncyBwcmlvcml0eQorICogQHBhcmFt
IHtQYWNrZXR9IHF1ZXVlIHRoZSBxdWV1ZSBvZiB3b3JrIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUg
dGFzaworICovCitTY2hlZHVsZXIucHJvdG90eXBlLmFkZEhhbmRsZXJUYXNrID0gZnVuY3Rpb24g
KGlkLCBwcmlvcml0eSwgcXVldWUpIHsKKyAgICB0aGlzLmFkZFRhc2soaWQsIHByaW9yaXR5LCBx
dWV1ZSwgbmV3IEhhbmRsZXJUYXNrKHRoaXMpKTsKK307CisKKy8qKgorICogQWRkIGEgaGFuZGxl
ciB0YXNrIHRvIHRoaXMgc2NoZWR1bGVyLgorICogQHBhcmFtIHtpbnR9IGlkIHRoZSBpZGVudGl0
eSBvZiB0aGUgdGFzaworICogQHBhcmFtIHtpbnR9IHByaW9yaXR5IHRoZSB0YXNrJ3MgcHJpb3Jp
dHkKKyAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0aGUgcXVldWUgb2Ygd29yayB0byBiZSBwcm9j
ZXNzZWQgYnkgdGhlIHRhc2sKKyAqLworU2NoZWR1bGVyLnByb3RvdHlwZS5hZGREZXZpY2VUYXNr
ID0gZnVuY3Rpb24gKGlkLCBwcmlvcml0eSwgcXVldWUpIHsKKyAgICB0aGlzLmFkZFRhc2soaWQs
IHByaW9yaXR5LCBxdWV1ZSwgbmV3IERldmljZVRhc2sodGhpcykpCit9OworCisvKioKKyAqIEFk
ZCB0aGUgc3BlY2lmaWVkIHRhc2sgYW5kIG1hcmsgaXQgYXMgcnVubmluZy4KKyAqIEBwYXJhbSB7
aW50fSBpZCB0aGUgaWRlbnRpdHkgb2YgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBwcmlvcml0
eSB0aGUgdGFzaydzIHByaW9yaXR5CisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVl
IG9mIHdvcmsgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCisgKiBAcGFyYW0ge1Rhc2t9IHRh
c2sgdGhlIHRhc2sgdG8gYWRkCisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUuYWRkUnVubmluZ1Rh
c2sgPSBmdW5jdGlvbiAoaWQsIHByaW9yaXR5LCBxdWV1ZSwgdGFzaykgeworICAgIHRoaXMuYWRk
VGFzayhpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKTsKKyAgICBsZXQgY3VycmVudFRjYjsKKyAg
ICB0cnkgeworICAgICAgICBjdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0gY2F0
Y2goZSkgeworICAgICAgICBjdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0KKyAg
ICBjdXJyZW50VGNiLnNldFJ1bm5pbmcoKTsKK307CisKKy8qKgorICogQWRkIHRoZSBzcGVjaWZp
ZWQgdGFzayB0byB0aGlzIHNjaGVkdWxlci4KKyAqIEBwYXJhbSB7aW50fSBpZCB0aGUgaWRlbnRp
dHkgb2YgdGhlIHRhc2sKKyAqIEBwYXJhbSB7aW50fSBwcmlvcml0eSB0aGUgdGFzaydzIHByaW9y
aXR5CisgKiBAcGFyYW0ge1BhY2tldH0gcXVldWUgdGhlIHF1ZXVlIG9mIHdvcmsgdG8gYmUgcHJv
Y2Vzc2VkIGJ5IHRoZSB0YXNrCisgKiBAcGFyYW0ge1Rhc2t9IHRhc2sgdGhlIHRhc2sgdG8gYWRk
CisgKi8KK1NjaGVkdWxlci5wcm90b3R5cGUuYWRkVGFzayA9IGZ1bmN0aW9uIChpZCwgcHJpb3Jp
dHksIHF1ZXVlLCB0YXNrKSB7CisgICAgbGV0IGxpc3Q7CisgICAgdHJ5IHsKKyAgICAgICAgbGlz
dCA9IHRoaXMubGlzdDsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgbGlzdCA9IHRoaXMubGlz
dDsKKyAgICB9CisKKyAgICB0aGlzLmN1cnJlbnRUY2IgPSBuZXcgVGFza0NvbnRyb2xCbG9jayhs
aXN0LCBpZCwgcHJpb3JpdHksIHF1ZXVlLCB0YXNrKTsKKyAgICBsZXQgY3VycmVudFRjYjsKKyAg
ICB0cnkgeworICAgICAgICBjdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0gY2F0
Y2goZSkgeworICAgICAgICBjdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0KKyAg
ICB0aGlzLmxpc3QgPSBjdXJyZW50VGNiOworICAgIGxldCBibG9ja3M7CisgICAgdHJ5IHsKKyAg
ICAgICAgYmxvY2tzID0gdGhpcy5ibG9ja3M7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGJs
b2NrcyA9IHRoaXMuYmxvY2tzOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGN1cnJlbnRU
Y2IgPSB0aGlzLmN1cnJlbnRUY2I7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGN1cnJlbnRU
Y2IgPSB0aGlzLmN1cnJlbnRUY2I7CisgICAgfQorICAgIGJsb2Nrc1tpZF0gPSBjdXJyZW50VGNi
OworfTsKKworLyoqCisgKiBFeGVjdXRlIHRoZSB0YXNrcyBtYW5hZ2VkIGJ5IHRoaXMgc2NoZWR1
bGVyLgorICovCitTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKCkgewor
ICAgIGxldCBsaXN0OworICAgIHRyeSB7CisgICAgICAgIGxpc3QgPSB0aGlzLmxpc3Q7CisgICAg
fSBjYXRjaChlKSB7CisgICAgICAgIGxpc3QgPSB0aGlzLmxpc3Q7CisgICAgfQorICAgIHRoaXMu
Y3VycmVudFRjYiA9IGxpc3Q7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgbGV0IGN1cnJl
bnRUY2I7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGN1cnJlbnRUY2IgPSB0aGlzLmN1
cnJlbnRUY2I7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgY3VycmVudFRjYiA9
IHRoaXMuY3VycmVudFRjYjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJyZW50VGNiID09
IG51bGwpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAg
Y3VycmVudFRjYiA9IHRoaXMuY3VycmVudFRjYjsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAg
ICAgICAgICBjdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGN1cnJlbnRUY2IuaXNIZWxkT3JTdXNwZW5kZWQoKSkgeworICAgICAgICAgICAgbGV0
IGxpbms7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGxpbmsgPSBjdXJyZW50
VGNiLmxpbms7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICBsaW5r
ID0gY3VycmVudFRjYi5saW5rOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5jdXJy
ZW50VGNiID0gbGluazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxldCBpZDsKKyAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWQgPSBjdXJyZW50VGNiLmlkOworICAg
ICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgaWQgPSBjdXJyZW50VGNiLmlk
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5jdXJyZW50SWQgPSBpZDsKKyAgICAg
ICAgICAgIHRoaXMuY3VycmVudFRjYiA9IGN1cnJlbnRUY2IucnVuKCk7CisgICAgICAgIH0KKyAg
ICB9Cit9OworCisvKioKKyAqIFJlbGVhc2UgYSB0YXNrIHRoYXQgaXMgY3VycmVudGx5IGJsb2Nr
ZWQgYW5kIHJldHVybiB0aGUgbmV4dCBibG9jayB0byBydW4uCisgKiBAcGFyYW0ge2ludH0gaWQg
dGhlIGlkIG9mIHRoZSB0YXNrIHRvIHN1c3BlbmQKKyAqLworU2NoZWR1bGVyLnByb3RvdHlwZS5y
ZWxlYXNlID0gZnVuY3Rpb24gKGlkKSB7CisgICAgbGV0IGJsb2NrczsKKyAgICB0cnkgeworICAg
ICAgICBibG9ja3MgPSB0aGlzLmJsb2NrczsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgYmxv
Y2tzID0gdGhpcy5ibG9ja3M7CisgICAgfQorICAgIHZhciB0Y2IgPSBibG9ja3NbaWRdOworICAg
IGlmICh0Y2IgPT0gbnVsbCkgcmV0dXJuIHRjYjsKKyAgICB0Y2IubWFya0FzTm90SGVsZCgpOwor
CisgICAgbGV0IGN1cnJlbnRUY2I7CisgICAgdHJ5IHsKKyAgICAgICAgY3VycmVudFRjYiA9IHRo
aXMuY3VycmVudFRjYjsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgY3VycmVudFRjYiA9IHRo
aXMuY3VycmVudFRjYjsKKyAgICB9CisKKyAgICBpZiAodGNiLnByaW9yaXR5ID4gY3VycmVudFRj
Yi5wcmlvcml0eSkgeworICAgICAgICByZXR1cm4gdGNiOworICAgIH0gZWxzZSB7CisgICAgICAg
IGxldCBjdXJyZW50VGNiOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY3VycmVudFRjYiA9
IHRoaXMuY3VycmVudFRjYjsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBjdXJy
ZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjdXJy
ZW50VGNiOworICAgIH0KK307CisKKy8qKgorICogQmxvY2sgdGhlIGN1cnJlbnRseSBleGVjdXRp
bmcgdGFzayBhbmQgcmV0dXJuIHRoZSBuZXh0IHRhc2sgY29udHJvbCBibG9jaworICogdG8gcnVu
LiAgVGhlIGJsb2NrZWQgdGFzayB3aWxsIG5vdCBiZSBtYWRlIHJ1bm5hYmxlIHVudGlsIGl0IGlz
IGV4cGxpY2l0bHkKKyAqIHJlbGVhc2VkLCBldmVuIGlmIG5ldyB3b3JrIGlzIGFkZGVkIHRvIGl0
LgorICovCitTY2hlZHVsZXIucHJvdG90eXBlLmhvbGRDdXJyZW50ID0gZnVuY3Rpb24gKCkgewor
ICAgIGxldCBob2xkQ291bnQ7CisgICAgdHJ5IHsKKyAgICAgICAgaG9sZENvdW50ID0gdGhpcy5o
b2xkQ291bnQ7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGhvbGRDb3VudCA9IHRoaXMuaG9s
ZENvdW50OworICAgIH0KKyAgICBob2xkQ291bnQrKzsKKyAgICB0aGlzLmhvbGRDb3VudCA9IGhv
bGRDb3VudDsKKyAgICBsZXQgY3VycmVudFRjYjsKKyAgICB0cnkgeworICAgICAgICBjdXJyZW50
VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjdXJyZW50
VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0KKyAgICBjdXJyZW50VGNiLm1hcmtBc0hlbGQo
KTsKKworICAgIHRyeSB7CisgICAgICAgIGN1cnJlbnRUY2IgPSB0aGlzLmN1cnJlbnRUY2I7Cisg
ICAgfSBjYXRjaChlKSB7CisgICAgICAgIGN1cnJlbnRUY2IgPSB0aGlzLmN1cnJlbnRUY2I7Cisg
ICAgfQorCisgICAgbGV0IGxpbms7CisgICAgdHJ5IHsKKyAgICAgICAgbGluayA9IGN1cnJlbnRU
Y2IubGluazsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgbGluayA9IGN1cnJlbnRUY2IubGlu
azsKKyAgICB9CisgICAgcmV0dXJuIGxpbms7Cit9OworCisvKioKKyAqIFN1c3BlbmQgdGhlIGN1
cnJlbnRseSBleGVjdXRpbmcgdGFzayBhbmQgcmV0dXJuIHRoZSBuZXh0IHRhc2sgY29udHJvbCBi
bG9jaworICogdG8gcnVuLiAgSWYgbmV3IHdvcmsgaXMgYWRkZWQgdG8gdGhlIHN1c3BlbmRlZCB0
YXNrIGl0IHdpbGwgYmUgbWFkZSBydW5uYWJsZS4KKyAqLworU2NoZWR1bGVyLnByb3RvdHlwZS5z
dXNwZW5kQ3VycmVudCA9IGZ1bmN0aW9uICgpIHsKKyAgICBsZXQgY3VycmVudFRjYjsKKyAgICB0
cnkgeworICAgICAgICBjdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0gY2F0Y2go
ZSkgeworICAgICAgICBjdXJyZW50VGNiID0gdGhpcy5jdXJyZW50VGNiOworICAgIH0KKyAgICBj
dXJyZW50VGNiLm1hcmtBc1N1c3BlbmRlZCgpOworICAgIHRyeSB7CisgICAgICAgIGN1cnJlbnRU
Y2IgPSB0aGlzLmN1cnJlbnRUY2I7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGN1cnJlbnRU
Y2IgPSB0aGlzLmN1cnJlbnRUY2I7CisgICAgfQorICAgIHJldHVybiBjdXJyZW50VGNiOworfTsK
KworLyoqCisgKiBBZGQgdGhlIHNwZWNpZmllZCBwYWNrZXQgdG8gdGhlIGVuZCBvZiB0aGUgd29y
a2xpc3QgdXNlZCBieSB0aGUgdGFzaworICogYXNzb2NpYXRlZCB3aXRoIHRoZSBwYWNrZXQgYW5k
IG1ha2UgdGhlIHRhc2sgcnVubmFibGUgaWYgaXQgaXMgY3VycmVudGx5CisgKiBzdXNwZW5kZWQu
CisgKiBAcGFyYW0ge1BhY2tldH0gcGFja2V0IHRoZSBwYWNrZXQgdG8gYWRkCisgKi8KK1NjaGVk
dWxlci5wcm90b3R5cGUucXVldWUgPSBmdW5jdGlvbiAocGFja2V0KSB7CisgICAgbGV0IGJsb2Nr
czsKKyAgICB0cnkgeworICAgICAgICBibG9ja3MgPSB0aGlzLmJsb2NrczsKKyAgICB9IGNhdGNo
KGUpIHsKKyAgICAgICAgYmxvY2tzID0gdGhpcy5ibG9ja3M7CisgICAgfQorICAgIGxldCBpZDsK
KyAgICB0cnkgeworICAgICAgICBpZCA9IHBhY2tldC5pZDsKKyAgICB9IGNhdGNoKGUpIHsKKyAg
ICAgICAgaWQgPSBwYWNrZXQuaWQ7CisgICAgfQorICAgIHZhciB0ID0gYmxvY2tzW2lkXTsKKyAg
ICBpZiAodCA9PSBudWxsKSByZXR1cm4gdDsKKyAgICBsZXQgcXVldWVDb3VudDsKKyAgICB0cnkg
eworICAgICAgICBxdWV1ZUNvdW50ID0gdGhpcy5xdWV1ZUNvdW50OworICAgIH0gY2F0Y2goZSkg
eworICAgICAgICBxdWV1ZUNvdW50ID0gdGhpcy5xdWV1ZUNvdW50OworICAgIH0KKyAgICBxdWV1
ZUNvdW50Kys7CisgICAgdGhpcy5xdWV1ZUNvdW50ID0gcXVldWVDb3VudDsKKyAgICB0cnkgewor
ICAgICAgICBwYWNrZXQubGluayA9IG51bGw7CisgICAgfSBjYXRjaChlKSB7IH0KKyAgICBsZXQg
Y3VycmVudElkOworICAgIHRyeSB7CisgICAgICAgIGN1cnJlbnRJZCA9IHRoaXMuY3VycmVudElk
OworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjdXJyZW50SWQgPSB0aGlzLmN1cnJlbnRJZDsK
KyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgcGFja2V0LmlkID0gY3VycmVudElkOworICAgIH0g
Y2F0Y2goZSkgeyB9CisgICAgbGV0IGN1cnJlbnRUY2I7CisgICAgdHJ5IHsKKyAgICAgICAgY3Vy
cmVudFRjYiA9IHRoaXMuY3VycmVudFRjYjsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgY3Vy
cmVudFRjYiA9IHRoaXMuY3VycmVudFRjYjsKKyAgICB9CisgICAgcmV0dXJuIHQuY2hlY2tQcmlv
cml0eUFkZChjdXJyZW50VGNiLCBwYWNrZXQpOworfTsKKworLyoqCisgKiBBIHRhc2sgY29udHJv
bCBibG9jayBtYW5hZ2VzIGEgdGFzayBhbmQgdGhlIHF1ZXVlIG9mIHdvcmsgcGFja2FnZXMgYXNz
b2NpYXRlZAorICogd2l0aCBpdC4KKyAqIEBwYXJhbSB7VGFza0NvbnRyb2xCbG9ja30gbGluayB0
aGUgcHJlY2VkaW5nIGJsb2NrIGluIHRoZSBsaW5rZWQgYmxvY2sgbGlzdAorICogQHBhcmFtIHtp
bnR9IGlkIHRoZSBpZCBvZiB0aGlzIGJsb2NrCisgKiBAcGFyYW0ge2ludH0gcHJpb3JpdHkgdGhl
IHByaW9yaXR5IG9mIHRoaXMgYmxvY2sKKyAqIEBwYXJhbSB7UGFja2V0fSBxdWV1ZSB0aGUgcXVl
dWUgb2YgcGFja2FnZXMgdG8gYmUgcHJvY2Vzc2VkIGJ5IHRoZSB0YXNrCisgKiBAcGFyYW0ge1Rh
c2t9IHRhc2sgdGhlIHRhc2sKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBUYXNrQ29u
dHJvbEJsb2NrKGxpbmssIGlkLCBwcmlvcml0eSwgcXVldWUsIHRhc2spIHsKKyAgICB0aGlzLl9s
aW5rID0gbGluazsKKyAgICB0aGlzLl9pZCA9IGlkOworICAgIHRoaXMuX3ByaW9yaXR5ID0gcHJp
b3JpdHk7CisgICAgdGhpcy5fcXVldWUgPSBxdWV1ZTsKKyAgICB0aGlzLl90YXNrID0gdGFzazsK
KyAgICBpZiAocXVldWUgPT0gbnVsbCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhp
cy5zdGF0ZSA9IFNUQVRFX1NVU1BFTkRFRDsKKyAgICAgICAgfSBjYXRjaChlKSB7IH0KKyAgICB9
IGVsc2UgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1NV
U1BFTkRFRF9SVU5OQUJMRTsKKyAgICAgICAgfSBjYXRjaChlKSB7IH0KKyAgICB9Cit9CisKKy8q
KgorICogVGhlIHRhc2sgaXMgcnVubmluZyBhbmQgaXMgY3VycmVudGx5IHNjaGVkdWxlZC4KKyAq
LwordmFyIFNUQVRFX1JVTk5JTkcgPSAwOworCisvKioKKyAqIFRoZSB0YXNrIGhhcyBwYWNrZXRz
IGxlZnQgdG8gcHJvY2Vzcy4KKyAqLwordmFyIFNUQVRFX1JVTk5BQkxFID0gMTsKKworLyoqCisg
KiBUaGUgdGFzayBpcyBub3QgY3VycmVudGx5IHJ1bm5pbmcuICBUaGUgdGFzayBpcyBub3QgYmxv
Y2tlZCBhcyBzdWNoIGFuZCBtYXkKKyAqIGJlIHN0YXJ0ZWQgYnkgdGhlIHNjaGVkdWxlci4KKyAq
LwordmFyIFNUQVRFX1NVU1BFTkRFRCA9IDI7CisKKy8qKgorICogVGhlIHRhc2sgaXMgYmxvY2tl
ZCBhbmQgY2Fubm90IGJlIHJ1biB1bnRpbCBpdCBpcyBleHBsaWNpdGx5IHJlbGVhc2VkLgorICov
Cit2YXIgU1RBVEVfSEVMRCA9IDQ7CisKK3ZhciBTVEFURV9TVVNQRU5ERURfUlVOTkFCTEUgPSBT
VEFURV9TVVNQRU5ERUQgfCBTVEFURV9SVU5OQUJMRTsKK3ZhciBTVEFURV9OT1RfSEVMRCA9IH5T
VEFURV9IRUxEOworCitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9f
KCJsaW5rIiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2VwdGlvbigpOyByZXR1cm4gdGhpcy5fbGlu
azsgfSk7CitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJpZCIs
IGZ1bmN0aW9uKCkgeyByYW5kb21FeGNlcHRpb24oKTsgcmV0dXJuIHRoaXMuX2lkOyB9KTsKK1Rh
c2tDb250cm9sQmxvY2sucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oInByaW9yaXR5IiwgZnVu
Y3Rpb24oKSB7IHJldHVybiB0aGlzLl9wcmlvcml0eTsgfSk7CitUYXNrQ29udHJvbEJsb2NrLnBy
b3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJxdWV1ZSIsIGZ1bmN0aW9uKCkgeyByYW5kb21FeGNl
cHRpb24oKTsgcmV0dXJuIHRoaXMuX3F1ZXVlOyB9KTsKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90
eXBlLl9fZGVmaW5lU2V0dGVyX18oInF1ZXVlIiwgZnVuY3Rpb24odmFsdWUpIHsgdGhpcy5fcXVl
dWUgPSB2YWx1ZTsgfSk7CitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5fX2RlZmluZUdldHRl
cl9fKCJ0YXNrIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLl90YXNrOyB9KTsKK1Rhc2tDb250
cm9sQmxvY2sucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oInN0YXRlIiwgZnVuY3Rpb24oKSB7
IHJhbmRvbUV4Y2VwdGlvbigpOyByZXR1cm4gdGhpcy5fc3RhdGU7IH0pOworVGFza0NvbnRyb2xC
bG9jay5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXygic3RhdGUiLCBmdW5jdGlvbih2YWx1ZSkg
eyB0aGlzLl9zdGF0ZSA9IHZhbHVlOyByYW5kb21FeGNlcHRpb24oKTsgfSk7CisKK1Rhc2tDb250
cm9sQmxvY2sucHJvdG90eXBlLnNldFJ1bm5pbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgdHJ5IHsK
KyAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JVTk5JTkc7CisgICAgfSBjYXRjaChlKSB7IH0K
K307CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLm1hcmtBc05vdEhlbGQgPSBmdW5jdGlv
biAoKSB7CisgICAgbGV0IHN0YXRlOworICAgIHRyeSB7CisgICAgICAgIHN0YXRlID0gdGhpcy5z
dGF0ZTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlOworICAg
IH0KKyAgICB0cnkgeworICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGUgJiBTVEFURV9OT1RfSEVM
RDsKKyAgICB9IGNhdGNoKGUpe30KK307CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBlLm1h
cmtBc0hlbGQgPSBmdW5jdGlvbiAoKSB7CisgICAgbGV0IHN0YXRlOworICAgIHRyeSB7CisgICAg
ICAgIHN0YXRlID0gdGhpcy5zdGF0ZTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgc3RhdGUg
PSB0aGlzLnN0YXRlOworICAgIH0KKyAgICB0cnkgeworICAgICAgICB0aGlzLnN0YXRlID0gc3Rh
dGUgfCBTVEFURV9IRUxEOworICAgIH0gY2F0Y2goZSkge30KK307CisKK1Rhc2tDb250cm9sQmxv
Y2sucHJvdG90eXBlLmlzSGVsZE9yU3VzcGVuZGVkID0gZnVuY3Rpb24gKCkgeworICAgIGxldCBz
dGF0ZTsKKyAgICB0cnkgeworICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGU7CisgICAgfSBjYXRj
aChlKSB7CisgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZTsKKyAgICB9CisgICAgcmV0dXJuIChz
dGF0ZSAmIFNUQVRFX0hFTEQpICE9IDAgfHwgKHN0YXRlID09IFNUQVRFX1NVU1BFTkRFRCk7Cit9
OworCitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5tYXJrQXNTdXNwZW5kZWQgPSBmdW5jdGlv
biAoKSB7CisgICAgbGV0IHN0YXRlOworICAgIHRyeSB7CisgICAgICAgIHN0YXRlID0gdGhpcy5z
dGF0ZTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlOworICAg
IH0KKyAgICB0cnkgeworICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGUgfCBTVEFURV9TVVNQRU5E
RUQ7CisgICAgfSBjYXRjaChlKSB7IH0KK307CisKK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBl
Lm1hcmtBc1J1bm5hYmxlID0gZnVuY3Rpb24gKCkgeworICAgIGxldCBzdGF0ZTsKKyAgICB0cnkg
eworICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGU7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAg
IHN0YXRlID0gdGhpcy5zdGF0ZTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgdGhpcy5zdGF0
ZSA9IHN0YXRlIHwgU1RBVEVfUlVOTkFCTEU7CisgICAgfSBjYXRjaChlKSB7IH0KK307CisKKy8q
KgorICogUnVucyB0aGlzIHRhc2ssIGlmIGl0IGlzIHJlYWR5IHRvIGJlIHJ1biwgYW5kIHJldHVy
bnMgdGhlIG5leHQgdGFzayB0byBydW4uCisgKi8KK1Rhc2tDb250cm9sQmxvY2sucHJvdG90eXBl
LnJ1biA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgcGFja2V0OworICAgIGxldCBzdGF0ZTsKKyAg
ICB0cnkgeworICAgICAgICBzdGF0ZSA9IHRoaXMuc3RhdGU7CisgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZTsKKyAgICB9CisgICAgaWYgKHN0YXRlID09IFNUQVRF
X1NVU1BFTkRFRF9SVU5OQUJMRSkgeworICAgICAgICBsZXQgcXVldWU7CisgICAgICAgIHRyeSB7
CisgICAgICAgICAgICBxdWV1ZSA9IHRoaXMucXVldWU7CisgICAgICAgIH0gY2F0Y2goZSkgewor
ICAgICAgICAgICAgcXVldWUgPSB0aGlzLnF1ZXVlOworICAgICAgICB9CisgICAgICAgIHBhY2tl
dCA9IHF1ZXVlOworICAgICAgICBsZXQgbGluazsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IGxpbmsgPSBwYWNrZXQubGluazsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBs
aW5rID0gcGFja2V0Lmxpbms7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5xdWV1ZSA9IGxpbms7
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBxdWV1ZSA9IHRoaXMucXVldWU7CisgICAgICAg
IH0gY2F0Y2goZSkgeworICAgICAgICAgICAgcXVldWUgPSB0aGlzLnF1ZXVlOworICAgICAgICB9
CisgICAgICAgIGlmIChxdWV1ZSA9PSBudWxsKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9SVU5OSU5HOworICAgICAgICAgICAgfSBjYXRj
aChlKSB7IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JVTk5BQkxFOworICAgICAgICAgICAgfSBjYXRjaChl
KSB7IH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHBhY2tldCA9IG51bGw7Cisg
ICAgfQorICAgIHJldHVybiB0aGlzLnRhc2sucnVuKHBhY2tldCk7Cit9OworCisvKioKKyAqIEFk
ZHMgYSBwYWNrZXQgdG8gdGhlIHdvcmtsaXN0IG9mIHRoaXMgYmxvY2sncyB0YXNrLCBtYXJrcyB0
aGlzIGFzIHJ1bm5hYmxlIGlmCisgKiBuZWNlc3NhcnksIGFuZCByZXR1cm5zIHRoZSBuZXh0IHJ1
bm5hYmxlIG9iamVjdCB0byBydW4gKHRoZSBvbmUKKyAqIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3Jp
dHkpLgorICovCitUYXNrQ29udHJvbEJsb2NrLnByb3RvdHlwZS5jaGVja1ByaW9yaXR5QWRkID0g
ZnVuY3Rpb24gKHRhc2ssIHBhY2tldCkgeworICAgIGxldCBxdWV1ZTsKKyAgICB0cnkgeworICAg
ICAgICBxdWV1ZSA9IHRoaXMucXVldWU7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHF1ZXVl
ID0gdGhpcy5xdWV1ZTsKKyAgICB9CisgICAgaWYgKHF1ZXVlID09IG51bGwpIHsKKyAgICAgICAg
dGhpcy5xdWV1ZSA9IHBhY2tldDsKKyAgICAgICAgdGhpcy5tYXJrQXNSdW5uYWJsZSgpOworICAg
ICAgICBpZiAodGhpcy5wcmlvcml0eSA+IHRhc2sucHJpb3JpdHkpIHJldHVybiB0aGlzOworICAg
IH0gZWxzZSB7CisgICAgICAgIGxldCBxdWV1ZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHF1ZXVlID0gdGhpcy5xdWV1ZTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBx
dWV1ZSA9IHRoaXMucXVldWU7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5xdWV1ZSA9IHBhY2tl
dC5hZGRUbyhxdWV1ZSk7CisgICAgfQorICAgIHJldHVybiB0YXNrOworfTsKKworVGFza0NvbnRy
b2xCbG9jay5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgbGV0IHN0YXRl
OworICAgIHRyeSB7CisgICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZTsKKyAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlOworICAgIH0KKyAgICByZXR1cm4gInRjYiB7
ICIgKyB0aGlzLnRhc2sgKyAiQCIgKyBzdGF0ZSArICIgfSI7Cit9OworCisvKioKKyAqIEFuIGlk
bGUgdGFzayBkb2Vzbid0IGRvIGFueSB3b3JrIGl0c2VsZiBidXQgY3ljbGVzIGNvbnRyb2wgYmV0
d2VlbiB0aGUgdHdvCisgKiBkZXZpY2UgdGFza3MuCisgKiBAcGFyYW0ge1NjaGVkdWxlcn0gc2No
ZWR1bGVyIHRoZSBzY2hlZHVsZXIgdGhhdCBtYW5hZ2VzIHRoaXMgdGFzaworICogQHBhcmFtIHtp
bnR9IHYxIGEgc2VlZCB2YWx1ZSB0aGF0IGNvbnRyb2xzIGhvdyB0aGUgZGV2aWNlIHRhc2tzIGFy
ZSBzY2hlZHVsZWQKKyAqIEBwYXJhbSB7aW50fSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRo
aXMgdGFzayBzaG91bGQgYmUgc2NoZWR1bGVkCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rp
b24gSWRsZVRhc2soc2NoZWR1bGVyLCB2MSwgY291bnQpIHsKKyAgICB0aGlzLl9zY2hlZHVsZXIg
PSBzY2hlZHVsZXI7CisgICAgdGhpcy5fdjEgPSB2MTsKKyAgICB0aGlzLl9jb3VudCA9IGNvdW50
OworfQorCitJZGxlVGFzay5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygic2NoZWR1bGVyIiwg
ZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2VwdGlvbigpOyByZXR1cm4gdGhpcy5fc2NoZWR1bGVyOyB9
KTsKK0lkbGVUYXNrLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJ2MSIsIGZ1bmN0aW9uKCkg
eyByYW5kb21FeGNlcHRpb24oKTsgcmV0dXJuIHRoaXMuX3YxOyB9KTsKK0lkbGVUYXNrLnByb3Rv
dHlwZS5fX2RlZmluZVNldHRlcl9fKCJ2MSIsIGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuX3YxID0g
dmFsdWU7IHJhbmRvbUV4Y2VwdGlvbigpOyB9KTsKK0lkbGVUYXNrLnByb3RvdHlwZS5fX2RlZmlu
ZUdldHRlcl9fKCJjb3VudCIsIGZ1bmN0aW9uKCkgeyByYW5kb21FeGNlcHRpb24oKTsgcmV0dXJu
IHRoaXMuX2NvdW50OyB9KTsKK0lkbGVUYXNrLnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKCJj
b3VudCIsIGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuX2NvdW50ID0gdmFsdWU7IHJhbmRvbUV4Y2Vw
dGlvbigpOyB9KTsKKworSWRsZVRhc2sucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChwYWNrZXQp
IHsKKyAgICBsZXQgY291bnQ7CisgICAgdHJ5IHsKKyAgICAgICAgY291bnQgPSB0aGlzLmNvdW50
OworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBjb3VudCA9IHRoaXMuY291bnQ7CisgICAgfQor
ICAgIHRyeSB7CisgICAgICAgIHRoaXMuY291bnQgPSBjb3VudCAtIDE7CisgICAgfSBjYXRjaChl
KSB7IH0KKyAgICBsZXQgc2NoZWR1bGVyOworICAgIHRyeSB7CisgICAgICAgIHNjaGVkdWxlciA9
IHRoaXMuc2NoZWR1bGVyOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBzY2hlZHVsZXIgPSB0
aGlzLnNjaGVkdWxlcjsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICBjb3VudCA9IHRoaXMu
Y291bnQ7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGNvdW50ID0gdGhpcy5jb3VudDsKKyAg
ICB9CisgICAgaWYgKGNvdW50ID09IDApIHJldHVybiBzY2hlZHVsZXIuaG9sZEN1cnJlbnQoKTsK
KyAgICBsZXQgdjE7CisgICAgdHJ5IHsKKyAgICAgICAgdjEgPSB0aGlzLnYxOworICAgIH0gY2F0
Y2goZSkgeworICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgfQorICAgIGlmICgodjEgJiAxKSA9
PSAwKSB7CisgICAgICAgIGxldCB2MTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHYxID0g
dGhpcy52MTsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB2MSA9IHRoaXMudjE7
CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMudjEgPSB2MSA+PiAx
OworICAgICAgICB9IGNhdGNoKGUpIHsgfQorICAgICAgICBsZXQgc2NoZWR1bGVyOworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7CisgICAgICAg
IH0gY2F0Y2goZSkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5yZWxlYXNlKElEX0RFVklDRV9BKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBsZXQgdjE7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICB2MSA9IHRoaXMudjE7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgdjEgPSB0
aGlzLnYxOworICAgICAgICB9CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLnYxID0g
KHYxID4+IDEpIF4gMHhEMDA4OworICAgICAgICB9IGNhdGNoKGUpIHsgfQorICAgICAgICBsZXQg
c2NoZWR1bGVyOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0gdGhpcy5z
Y2hlZHVsZXI7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0g
dGhpcy5zY2hlZHVsZXI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5yZWxl
YXNlKElEX0RFVklDRV9CKTsKKyAgICB9Cit9OworCitJZGxlVGFzay5wcm90b3R5cGUudG9TdHJp
bmcgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICJJZGxlVGFzayIKK307CisKKy8qKgorICog
QSB0YXNrIHRoYXQgc3VzcGVuZHMgaXRzZWxmIGFmdGVyIGVhY2ggdGltZSBpdCBoYXMgYmVlbiBy
dW4gdG8gc2ltdWxhdGUKKyAqIHdhaXRpbmcgZm9yIGRhdGEgZnJvbSBhbiBleHRlcm5hbCBkZXZp
Y2UuCisgKiBAcGFyYW0ge1NjaGVkdWxlcn0gc2NoZWR1bGVyIHRoZSBzY2hlZHVsZXIgdGhhdCBt
YW5hZ2VzIHRoaXMgdGFzaworICogQGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIERldmljZVRh
c2soc2NoZWR1bGVyKSB7CisgICAgdGhpcy5fc2NoZWR1bGVyID0gc2NoZWR1bGVyOworICAgIHRo
aXMuX3YxID0gbnVsbDsKK30KKworRGV2aWNlVGFzay5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJf
Xygic2NoZWR1bGVyIiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2VwdGlvbigpOyByZXR1cm4gdGhp
cy5fc2NoZWR1bGVyOyB9KTsKK0RldmljZVRhc2sucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18o
InYxIiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2VwdGlvbigpOyByZXR1cm4gdGhpcy5fdjE7IH0p
OworRGV2aWNlVGFzay5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXygidjEiLCBmdW5jdGlvbih2
YWx1ZSkgeyB0aGlzLl92MSA9IHZhbHVlOyByYW5kb21FeGNlcHRpb24oKTsgfSk7CisKK0Rldmlj
ZVRhc2sucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIChwYWNrZXQpIHsKKyAgICBpZiAocGFja2V0
ID09IG51bGwpIHsKKyAgICAgICAgbGV0IHNjaGVkdWxlcjsKKyAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyOworICAgICAgICB9IGNhdGNoKGUpIHsK
KyAgICAgICAgICAgIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyOworICAgICAgICB9CisgICAg
ICAgIGxldCB2MTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHYxID0gdGhpcy52MTsKKyAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHYxID09IG51bGwpIHJldHVybiBzY2hlZHVsZXIuc3VzcGVuZEN1cnJlbnQo
KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHYxID0gdGhpcy52MTsKKyAgICAgICAgfSBj
YXRjaChlKSB7CisgICAgICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgIH0KKyAgICAgICAg
dmFyIHYgPSB2MTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHRoaXMudjEgPSBudWxsOwor
ICAgICAgICB9IGNhdGNoKGUpIHsgfQorCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzY2hl
ZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAg
ICBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjsKKyAgICAgICAgfQorICAgICAgICBsZXQgcXVl
dWU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBxdWV1ZSA9IHNjaGVkdWxlci5xdWV1ZTsK
KyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBxdWV1ZSA9IHNjaGVkdWxlci5xdWV1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcXVldWUuYmluZChzY2hlZHVsZXIpKHYpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLnYxID0gcGFja2V0
OworICAgICAgICB9IGNhdGNoKGUpIHsgfQorICAgICAgICBsZXQgc2NoZWR1bGVyOworICAgICAg
ICB0cnkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7CisgICAgICAg
IH0gY2F0Y2goZSkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5ob2xkQ3VycmVudCgpOworICAgIH0K
K307CisKK0RldmljZVRhc2sucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAg
IHJldHVybiAiRGV2aWNlVGFzayI7Cit9OworCisvKioKKyAqIEEgdGFzayB0aGF0IG1hbmlwdWxh
dGVzIHdvcmsgcGFja2V0cy4KKyAqIEBwYXJhbSB7U2NoZWR1bGVyfSBzY2hlZHVsZXIgdGhlIHNj
aGVkdWxlciB0aGF0IG1hbmFnZXMgdGhpcyB0YXNrCisgKiBAcGFyYW0ge2ludH0gdjEgYSBzZWVk
IHVzZWQgdG8gc3BlY2lmeSBob3cgd29yayBwYWNrZXRzIGFyZSBtYW5pcHVsYXRlZAorICogQHBh
cmFtIHtpbnR9IHYyIGFub3RoZXIgc2VlZCB1c2VkIHRvIHNwZWNpZnkgaG93IHdvcmsgcGFja2V0
cyBhcmUgbWFuaXB1bGF0ZWQKKyAqIEBjb25zdHJ1Y3RvcgorICovCitmdW5jdGlvbiBXb3JrZXJU
YXNrKHNjaGVkdWxlciwgdjEsIHYyKSB7CisgICAgdGhpcy5fc2NoZWR1bGVyID0gc2NoZWR1bGVy
OworICAgIHRoaXMuX3YxID0gdjE7CisgICAgdGhpcy5fdjIgPSB2MjsKK30KKworV29ya2VyVGFz
ay5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygic2NoZWR1bGVyIiwgZnVuY3Rpb24oKSB7IHJh
bmRvbUV4Y2VwdGlvbigpOyByZXR1cm4gdGhpcy5fc2NoZWR1bGVyOyB9KTsKK1dvcmtlclRhc2su
cHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oInYxIiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2Vw
dGlvbigpOyByZXR1cm4gdGhpcy5fdjE7IH0pOworV29ya2VyVGFzay5wcm90b3R5cGUuX19kZWZp
bmVTZXR0ZXJfXygidjEiLCBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLl92MSA9IHZhbHVlOyByYW5k
b21FeGNlcHRpb24oKTsgfSk7CitXb3JrZXJUYXNrLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9f
KCJ2MiIsIGZ1bmN0aW9uKCkgeyByYW5kb21FeGNlcHRpb24oKTsgcmV0dXJuIHRoaXMuX3YyOyB9
KTsKK1dvcmtlclRhc2sucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oInYyIiwgZnVuY3Rpb24o
dmFsdWUpIHsgdGhpcy5fdjIgPSB2YWx1ZTsgcmFuZG9tRXhjZXB0aW9uKCk7IH0pOworCitXb3Jr
ZXJUYXNrLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAocGFja2V0KSB7CisgICAgaWYgKHBhY2tl
dCA9PSBudWxsKSB7CisgICAgICAgIGxldCBzY2hlZHVsZXI7CisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjsKKyAgICAgICAgfSBjYXRjaChlKSB7
CisgICAgICAgICAgICBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gc2NoZWR1bGVyLnN1c3BlbmRDdXJyZW50KCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbGV0IHYxOworICAgICAgICB0cnkgeworICAgICAgICAgICAgdjEgPSB0aGlzLnYxOwor
ICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgIHYxID0gdGhpcy52MTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodjEgPT0gSURfSEFORExFUl9BKSB7CisgICAgICAgICAgICB0cnkgewor
ICAgICAgICAgICAgICAgIHRoaXMudjEgPSBJRF9IQU5ETEVSX0I7CisgICAgICAgICAgICB9IGNh
dGNoKGUpe30KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgdGhpcy52MSA9IElEX0hBTkRMRVJfQTsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9
CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHYxID0gdGhpcy52MTsKKyAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgIH0K
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHBhY2tldC5pZCA9IHYxOworICAgICAgICB9IGNh
dGNoKGUpIHsgfQorICAgICAgICB0cnkgeworICAgICAgICAgICAgcGFja2V0LmExID0gMDsKKyAg
ICAgICAgfSBjYXRjaChlKSB7IH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBEQVRBX1NJ
WkU7IGkrKykgeworICAgICAgICAgICAgbGV0IHYyOworICAgICAgICAgICAgdHJ5IHsKKyAgICAg
ICAgICAgICAgICB2MiA9IHRoaXMudjI7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAg
ICAgICAgICAgICB2MiA9IHRoaXMudjI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2Misr
OworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB0aGlzLnYyID0gdjI7CisgICAg
ICAgICAgICB9IGNhdGNoKGUpIHsgfQorICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICB2MiA9IHRoaXMudjI7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAg
ICB2MiA9IHRoaXMudjI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodjIgPiAyNikg
eworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudjIgPSAx
OworICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeyB9CisgICAgICAgICAgICB9IAorICAgICAg
ICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2MiA9IHRoaXMudjI7CisgICAgICAgICAgICB9
IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICB2MiA9IHRoaXMudjI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBwYWNrZXQuYTJbaV0gPSB2MjsKKyAgICAgICAgfQorICAgICAgICBsZXQg
c2NoZWR1bGVyOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0gdGhpcy5z
Y2hlZHVsZXI7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgc2NoZWR1bGVyID0g
dGhpcy5zY2hlZHVsZXI7CisgICAgICAgIH0KKyAgICAgICAgbGV0IHF1ZXVlOworICAgICAgICB0
cnkgeworICAgICAgICAgICAgcXVldWUgPSBzY2hlZHVsZXIucXVldWU7CisgICAgICAgIH0gY2F0
Y2goZSkgeworICAgICAgICAgICAgcXVldWUgPSBzY2hlZHVsZXIucXVldWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHF1ZXVlLmJpbmQoc2NoZWR1bGVyKShwYWNrZXQpOworICAgIH0KK307
CisKK1dvcmtlclRhc2sucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJl
dHVybiAiV29ya2VyVGFzayI7Cit9OworCisvKioKKyAqIEEgdGFzayB0aGF0IG1hbmlwdWxhdGVz
IHdvcmsgcGFja2V0cyBhbmQgdGhlbiBzdXNwZW5kcyBpdHNlbGYuCisgKiBAcGFyYW0ge1NjaGVk
dWxlcn0gc2NoZWR1bGVyIHRoZSBzY2hlZHVsZXIgdGhhdCBtYW5hZ2VzIHRoaXMgdGFzaworICog
QGNvbnN0cnVjdG9yCisgKi8KK2Z1bmN0aW9uIEhhbmRsZXJUYXNrKHNjaGVkdWxlcikgeworICAg
IHRoaXMuX3NjaGVkdWxlciA9IHNjaGVkdWxlcjsKKyAgICB0aGlzLl92MSA9IG51bGw7CisgICAg
dGhpcy5fdjIgPSBudWxsOworfQorCitIYW5kbGVyVGFzay5wcm90b3R5cGUuX19kZWZpbmVHZXR0
ZXJfXygic2NoZWR1bGVyIiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2VwdGlvbigpOyByZXR1cm4g
dGhpcy5fc2NoZWR1bGVyOyB9KTsKK0hhbmRsZXJUYXNrLnByb3RvdHlwZS5fX2RlZmluZUdldHRl
cl9fKCJ2MSIsIGZ1bmN0aW9uKCkgeyByYW5kb21FeGNlcHRpb24oKTsgcmV0dXJuIHRoaXMuX3Yx
OyB9KTsKK0hhbmRsZXJUYXNrLnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKCJ2MSIsIGZ1bmN0
aW9uKHZhbHVlKSB7IHRoaXMuX3YxID0gdmFsdWU7IHJhbmRvbUV4Y2VwdGlvbigpOyB9KTsKK0hh
bmRsZXJUYXNrLnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKCJ2MiIsIGZ1bmN0aW9uKCkgeyBy
YW5kb21FeGNlcHRpb24oKTsgcmV0dXJuIHRoaXMuX3YyOyB9KTsKK0hhbmRsZXJUYXNrLnByb3Rv
dHlwZS5fX2RlZmluZVNldHRlcl9fKCJ2MiIsIGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuX3YyID0g
dmFsdWU7IHJhbmRvbUV4Y2VwdGlvbigpOyB9KTsKKworSGFuZGxlclRhc2sucHJvdG90eXBlLnJ1
biA9IGZ1bmN0aW9uIChwYWNrZXQpIHsKKyAgICBpZiAocGFja2V0ICE9IG51bGwpIHsKKyAgICAg
ICAgbGV0IGtpbmQ7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBraW5kID0gcGFja2V0Lmtp
bmQ7CisgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAga2luZCA9IHBhY2tldC5raW5k
OworICAgICAgICB9CisgICAgICAgIGlmIChraW5kID09IEtJTkRfV09SSykgeworICAgICAgICAg
ICAgbGV0IHYxOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2MSA9IHRoaXMu
djE7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICB2MSA9IHRoaXMu
djE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHRo
aXMudjEgPSBwYWNrZXQuYWRkVG8odjEpOworICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxldCB2MjsKKyAgICAgICAgICAgIHRyeSB7Cisg
ICAgICAgICAgICAgICAgdjIgPSB0aGlzLnYyOworICAgICAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICAgICAgdjIgPSB0aGlzLnYyOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
dHJ5IHsKKyAgICAgICAgICAgICAgICB0aGlzLnYyID0gcGFja2V0LmFkZFRvKHYyKTsKKyAgICAg
ICAgICAgIH0gY2F0Y2goZSkgeyB9CisgICAgICAgIH0KKyAgICB9CisgICAgbGV0IHYxOworICAg
IHRyeSB7CisgICAgICAgIHYxID0gdGhpcy52MTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAg
djEgPSB0aGlzLnYxOworICAgIH0KKyAgICBpZiAodjEgIT0gbnVsbCkgeworICAgICAgICBsZXQg
djE7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICAgICAgdjEgPSB0aGlzLnYxOworICAgICAgICB9CisgICAgICAg
IHZhciBjb3VudCA9IHYxLmExOworICAgICAgICB2YXIgdjsKKyAgICAgICAgaWYgKGNvdW50IDwg
REFUQV9TSVpFKSB7CisgICAgICAgICAgICBsZXQgdjI7CisgICAgICAgICAgICB0cnkgeworICAg
ICAgICAgICAgICAgIHYyID0gdGhpcy52MjsKKyAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICAgICAgICAgIHYyID0gdGhpcy52MjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh2MiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgbGV0IHYyOworICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHYyID0gdGhpcy52MjsKKyAgICAgICAgICAgICAg
ICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdjIgPSB0aGlzLnYyOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2ID0gdjI7CisgICAgICAgICAgICAgICAgbGV0
IGxpbms7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdjIgPSB0
aGlzLnYyOworICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgICAg
ICB2MiA9IHRoaXMudjI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgICAgIGxpbmsgPSB2Mi5saW5rOworICAgICAgICAgICAgICAgIH0g
Y2F0Y2goZSkgeworICAgICAgICAgICAgICAgICAgICBsaW5rID0gdjIubGluazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy52MiA9IGxpbms7CisgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KKyAgICAgICAgICAg
ICAgICBsZXQgdjE7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAg
djEgPSB0aGlzLnYxOworICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAg
ICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHYuYTEgPSB2MS5hMltjb3VudF07CisgICAgICAg
ICAgICAgICAgfSBjYXRjaChlKSB7IH0KKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAg
ICAgICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHYxID0gdGhpcy52MTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgdjEuYTEgPSBjb3VudCArIDE7
CisgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7IH0KKyAgICAgICAgICAgICAgICBsZXQgc2No
ZWR1bGVyOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHNjaGVk
dWxlciA9IHRoaXMuc2NoZWR1bGVyOworICAgICAgICAgICAgICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICAgICAgICAgICAgICBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbGV0IHF1ZXVlOworICAgICAgICAgICAgICAgIHRyeSB7
CisgICAgICAgICAgICAgICAgICAgIHF1ZXVlID0gc2NoZWR1bGVyLnF1ZXVlOworICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSkgeworICAgICAgICAgICAgICAgICAgICBxdWV1ZSA9IHNjaGVkdWxl
ci5xdWV1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXVl
LmJpbmQoc2NoZWR1bGVyKSh2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGxldCB2MTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgdjEg
PSB0aGlzLnYxOworICAgICAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgdjEg
PSB0aGlzLnYxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IHYxOworICAgICAgICAg
ICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgICAgICB9IGNh
dGNoKGUpIHsKKyAgICAgICAgICAgICAgICB2MSA9IHRoaXMudjE7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBsZXQgbGluazsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg
bGluayA9IHYxLmxpbms7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgICAgICAg
ICBsaW5rID0gdjEubGluazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgdGhpcy52MSA9IGxpbms7CisgICAgICAgICAgICB9IGNhdGNoKGUpIHsgfQor
ICAgICAgICAgICAgbGV0IHNjaGVkdWxlcjsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAgICAgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7CisgICAgICAgICAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgICAgICAgICBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGxldCBxdWV1ZTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAgICAgcXVldWUgPSBzY2hlZHVsZXIucXVldWU7CisgICAgICAgICAgICB9IGNhdGNoKGUp
IHsKKyAgICAgICAgICAgICAgICBxdWV1ZSA9IHNjaGVkdWxlci5xdWV1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBxdWV1ZS5iaW5kKHNjaGVkdWxlcikodik7CisgICAgICAg
IH0KKyAgICB9CisgICAgbGV0IHNjaGVkdWxlcjsKKyAgICB0cnkgeworICAgICAgICBzY2hlZHVs
ZXIgPSB0aGlzLnNjaGVkdWxlcjsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgc2NoZWR1bGVy
ID0gdGhpcy5zY2hlZHVsZXI7CisgICAgfQorICAgIHJldHVybiBzY2hlZHVsZXIuc3VzcGVuZEN1
cnJlbnQoKTsKK307CisKK0hhbmRsZXJUYXNrLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9u
ICgpIHsKKyAgICByZXR1cm4gIkhhbmRsZXJUYXNrIjsKK307CisKKy8qIC0tLSAqCisgKiBQIGEg
YyBrIGUgdAorICogLS0tICovCisKK3ZhciBEQVRBX1NJWkUgPSA0OworCisvKioKKyAqIEEgc2lt
cGxlIHBhY2thZ2Ugb2YgZGF0YSB0aGF0IGlzIG1hbmlwdWxhdGVkIGJ5IHRoZSB0YXNrcy4gIFRo
ZSBleGFjdCBsYXlvdXQKKyAqIG9mIHRoZSBwYXlsb2FkIGRhdGEgY2FycmllZCBieSBhIHBhY2tl
dCBpcyBub3QgaW1wb3J0YWludCwgYW5kIG5laXRoZXIgaXMgdGhlCisgKiBuYXR1cmUgb2YgdGhl
IHdvcmsgcGVyZm9ybWVkIG9uIHBhY2tldHMgYnkgdGhlIHRhc2tzLgorICoKKyAqIEJlc2lkZXMg
Y2FycnlpbmcgZGF0YSwgcGFja2V0cyBmb3JtIGxpbmtlZCBsaXN0cyBhbmQgYXJlIGhlbmNlIHVz
ZWQgYm90aCBhcworICogZGF0YSBhbmQgd29ya2xpc3RzLgorICogQHBhcmFtIHtQYWNrZXR9IGxp
bmsgdGhlIHRhaWwgb2YgdGhlIGxpbmtlZCBsaXN0IG9mIHBhY2tldHMKKyAqIEBwYXJhbSB7aW50
fSBpZCBhbiBJRCBmb3IgdGhpcyBwYWNrZXQKKyAqIEBwYXJhbSB7aW50fSBraW5kIHRoZSB0eXBl
IG9mIHRoaXMgcGFja2V0CisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gUGFja2V0KGxp
bmssIGlkLCBraW5kKSB7CisgICAgdGhpcy5fbGluayA9IGxpbms7CisgICAgdGhpcy5faWQgPSBp
ZDsKKyAgICB0aGlzLl9raW5kID0ga2luZDsKKyAgICB0aGlzLl9hMSA9IDA7CisgICAgdGhpcy5f
YTIgPSBuZXcgQXJyYXkoREFUQV9TSVpFKTsKK30KKworUGFja2V0LnByb3RvdHlwZS5fX2RlZmlu
ZUdldHRlcl9fKCJsaW5rIiwgZnVuY3Rpb24oKSB7IHJhbmRvbUV4Y2VwdGlvbigpOyByZXR1cm4g
dGhpcy5fbGluazsgfSk7CitQYWNrZXQucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oImxpbmsi
LCBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLl9saW5rID0gdmFsdWU7IHJhbmRvbUV4Y2VwdGlvbigp
OyB9KTsKK1BhY2tldC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiaWQiLCBmdW5jdGlvbigp
IHsgcmV0dXJuIHRoaXMuX2lkOyB9KTsKK1BhY2tldC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJf
XygiaWQiLCBmdW5jdGlvbih2YWx1ZSkgeyB0aGlzLl9pZCA9IHZhbHVlOyByYW5kb21FeGNlcHRp
b24oKTsgfSk7CitQYWNrZXQucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oImtpbmQiLCBmdW5j
dGlvbigpIHsgcmFuZG9tRXhjZXB0aW9uKCk7IHJldHVybiB0aGlzLl9raW5kOyB9KTsKK1BhY2tl
dC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygiYTEiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRo
aXMuX2ExOyB9KTsKK1BhY2tldC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXygiYTEiLCBmdW5j
dGlvbih2YWx1ZSkgeyB0aGlzLl9hMSA9IHZhbHVlOyByYW5kb21FeGNlcHRpb24oKTsgfSk7CitQ
YWNrZXQucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oImEyIiwgZnVuY3Rpb24oKSB7IHJldHVy
biB0aGlzLl9hMjsgfSk7CisKKy8qKgorICogQWRkIHRoaXMgcGFja2V0IHRvIHRoZSBlbmQgb2Yg
YSB3b3JrbGlzdCwgYW5kIHJldHVybiB0aGUgd29ya2xpc3QuCisgKiBAcGFyYW0ge1BhY2tldH0g
cXVldWUgdGhlIHdvcmtsaXN0IHRvIGFkZCB0aGlzIHBhY2tldCB0bworICovCitQYWNrZXQucHJv
dG90eXBlLmFkZFRvID0gZnVuY3Rpb24gKHF1ZXVlKSB7CisgICAgdHJ5IHsKKyAgICAgICAgdGhp
cy5saW5rID0gbnVsbDsKKyAgICB9IGNhdGNoKGUpIHsgfQorICAgIGlmIChxdWV1ZSA9PSBudWxs
KSByZXR1cm4gdGhpczsKKyAgICB2YXIgcGVlaywgbmV4dCA9IHF1ZXVlOworICAgIHdoaWxlICh0
cnVlKSB7CisgICAgICAgIGxldCBsaW5rOworICAgICAgICB0cnkgeworICAgICAgICAgICAgbGlu
ayA9IG5leHQubGluazsKKyAgICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICBsaW5rID0g
bmV4dC5saW5rOworICAgICAgICB9CisgICAgICAgIGlmIChsaW5rID09IG51bGwpCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgcGVlayA9IGxpbms7CisgICAgICAgIG5leHQgPSBwZWVrOwor
ICAgIH0KKyAgICB0cnkgeworICAgICAgICBuZXh0LmxpbmsgPSB0aGlzOworICAgIH0gY2F0Y2go
ZSkgeyB9CisgICAgcmV0dXJuIHF1ZXVlOworfTsKKworUGFja2V0LnByb3RvdHlwZS50b1N0cmlu
ZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gIlBhY2tldCI7Cit9OworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDM1MDsgKytpKQorICAgIHJ1blJpY2hhcmRzKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>