<?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>136724</bug_id>
          
          <creation_ts>2014-09-10 16:37:48 -0700</creation_ts>
          <short_desc>Eliminate Scope slot from JavaScript CallFrame</short_desc>
          <delta_ts>2015-01-21 13:43:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>136725</dependson>
    
    <dependson>136785</dependson>
    
    <dependson>136800</dependson>
    
    <dependson>136840</dependson>
    
    <dependson>136894</dependson>
    
    <dependson>136901</dependson>
    
    <dependson>137839</dependson>
    
    <dependson>137906</dependson>
    
    <dependson>137907</dependson>
    
    <dependson>138252</dependson>
    
    <dependson>138253</dependson>
    
    <dependson>138254</dependson>
    
    <dependson>138326</dependson>
    
    <dependson>138587</dependson>
    
    <dependson>138588</dependson>
    
    <dependson>138637</dependson>
    
    <dependson>138651</dependson>
    
    <dependson>138706</dependson>
    
    <dependson>138707</dependson>
    
    <dependson>138793</dependson>
    
    <dependson>139166</dependson>
    
    <dependson>139167</dependson>
    
    <dependson>139202</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmirman</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1034458</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-09-10 16:37:48 -0700</bug_when>
    <thetext>This bug is to track the removal of the JSScope slot from the CallFrame and use alternative means to access the appropriate JSScope.

The current use cases for JSScope are:
 A. VM Helper functions that do dynamic resolution
 B. The opcodes op_create_activation, op_push_with_scope, op_push_name_scope, op_pop_scope, op_catch, op_call_eval and op_new_func_* store the scope, including to have a reference so the scope doesn&apos;t get GC&apos;ed.
 C. JSObject uses JSScope to get the VM.
 D. Debugger uses JSScope to walk the tree and display variables at every scope level.
 E. API access methods use JSScope to get the global object.
 F. Helper functions use JSScope to  to access global object.

Proposed steps to eliminate using a call frame header slot to store the JSScope.

 1A. Create a new base class to JSFunction that only contains a JSScope.  Tentative name is JSCallee, but is open to be changed.
 1B. Add a JSCallee for program and eval call frames.
 1C. Add a JSCallee to GlobalExec.
 2A. Change CallFrame::lexicalGlobalObject() to use JSCallee -&gt; struct -&gt; GlobalObject
 2B. Change C++ code to load the call, mask and load the VM for the VM.
 3. Add scope register to CodeBlock and fill it in with JSStack::ScopeChain.
 4A. Change CallFrame::scope() to use a CodeBlock scope register or to with the scope via the JSCallee in the Callee slot.
 4B. Edit op codes to use the new register
 5. Actually allocate a register in the CodeBlock and eliminate the JSStack::ScopeChain slot

&lt;rdar://problem/18024006&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062981</commentid>
    <comment_count>1</comment_count>
      <attachid>245041</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-01-20 18:54:09 -0800</bug_when>
    <thetext>Created attachment 245041
Draft Patch.  Testing now.

Builds and runs 32 and 64 bit JS tests.  Runs 64 bit WK tests.  Will test with 32 bit and run perf tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063145</commentid>
    <comment_count>2</comment_count>
      <attachid>245079</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-01-21 13:00:40 -0800</bug_when>
    <thetext>Created attachment 245079
Patch

Performance seems to be neutral to slight improvement overall.  Noticeable highlights from the performance tests
 - LongSpider version of access-binary-trees is 5.5% slower
 - LongSpider version of bitops-bits-in-byte is 2% faster
 - LongSpider version of controlflow-recursive is 1.6% slower
 - Kraken audio-oscillator is 4% faster, which raises Kraken&apos;s total by almost 1%
 - The JSRegress test Int16Array-to-Int32Array-set is 5-6% faster (two runs)
 - The JSRegress test switch-string-basic-big is 13-19% faster (two runs)

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSBench, JSRegress, and CompressionBench on msaboff-pro (MacPro5,1).

VMs tested:
&quot;Baseline&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r178757)
&quot;NoScopeSlot&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/DumpRenderTree (r178795)

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.

                                                         Baseline                NoScopeSlot                                    
SunSpider:
   3d-cube                                            8.2032+-0.2899            7.9053+-0.2968          might be 1.0377x faster
   3d-morph                                           8.0392+-0.1823            7.8415+-0.1010          might be 1.0252x faster
   3d-raytrace                                        8.7214+-0.2592     ?      8.9064+-0.1817        ? might be 1.0212x slower
   access-binary-trees                                3.7053+-0.2704            3.6841+-0.3725        
   access-fannkuch                                    7.5298+-0.9632            7.3582+-0.7566          might be 1.0233x faster
   access-nbody                                       3.9158+-0.1831     ?      3.9573+-0.2015        ? might be 1.0106x slower
   access-nsieve                                      4.5915+-0.1547     ?      4.6581+-0.1089        ? might be 1.0145x slower
   bitops-3bit-bits-in-byte                           1.6822+-0.0672     ?      1.7286+-0.0764        ? might be 1.0276x slower
   bitops-bits-in-byte                                5.2422+-0.0918            5.2346+-0.1390        
   bitops-bitwise-and                                 2.6332+-0.0759     ?      2.7415+-0.3232        ? might be 1.0411x slower
   bitops-nsieve-bits                                 4.8501+-0.2205     ?      4.9033+-0.2393        ? might be 1.0110x slower
   controlflow-recursive                              3.0684+-0.1397            2.9452+-0.0823          might be 1.0418x faster
   crypto-aes                                         6.1458+-0.2799            6.0269+-0.2132          might be 1.0197x faster
   crypto-md5                                         3.2868+-0.1644     ?      3.3893+-0.2812        ? might be 1.0312x slower
   crypto-sha1                                        3.2078+-0.1097     ?      3.2418+-0.1247        ? might be 1.0106x slower
   date-format-tofte                                 15.2903+-0.5102           15.1601+-0.3911        
   date-format-xparb                                  8.7455+-0.1723     ?      9.0962+-0.1986        ? might be 1.0401x slower
   math-cordic                                        4.0781+-0.0972            4.0076+-0.0972          might be 1.0176x faster
   math-partial-sums                                  8.7215+-0.2080            8.6214+-0.1028          might be 1.0116x faster
   math-spectral-norm                                 2.7054+-0.1086     ?      2.7239+-0.2807        ?
   regexp-dna                                        10.6263+-0.2739     ?     10.7648+-0.2934        ? might be 1.0130x slower
   string-base64                                      7.1027+-0.2807            7.0259+-0.1806          might be 1.0109x faster
   string-fasta                                       9.6738+-0.3309     ?      9.7151+-0.4681        ?
   string-tagcloud                                   13.3876+-0.4241     ?     13.8761+-1.4442        ? might be 1.0365x slower
   string-unpack-code                                29.9473+-0.9851     ?     29.9525+-1.8803        ?
   string-validate-input                              8.4226+-0.2104            8.3911+-0.1447        

   &lt;arithmetic&gt; *                                     7.4432+-0.0746     ?      7.4560+-0.1255        ? might be 1.0017x slower
   &lt;geometric&gt;                                        6.0409+-0.0721     ?      6.0536+-0.0620        ? might be 1.0021x slower
   &lt;harmonic&gt;                                         5.0102+-0.0896     ?      5.0336+-0.0644        ? might be 1.0047x slower

                                                         Baseline                NoScopeSlot                                    
LongSpider:
   3d-cube                                         1574.4730+-156.0459       1539.5296+-22.1580         might be 1.0227x faster
   3d-morph                                        1872.7057+-3.7387     ?   1875.9737+-12.6079       ?
   3d-raytrace                                     1075.2107+-20.3410        1059.1740+-5.5601          might be 1.0151x faster
   access-binary-trees                             1302.5200+-4.6336     !   1374.1434+-1.1430        ! definitely 1.0550x slower
   access-fannkuch                                  437.6233+-21.8829    ?    453.3674+-22.3888       ? might be 1.0360x slower
   access-nbody                                    1001.2140+-15.7581         996.2579+-2.3865        
   access-nsieve                                   1334.8472+-31.7991        1320.9979+-12.6117         might be 1.0105x faster
   bitops-3bit-bits-in-byte                          49.8621+-0.4460     ?     50.1541+-1.0543        ?
   bitops-bits-in-byte                              331.0018+-3.4097     ^    324.5901+-2.3129        ^ definitely 1.0198x faster
   bitops-nsieve-bits                               961.4368+-5.6038          961.1949+-6.8003        
   controlflow-recursive                            717.4920+-0.4511     !    729.0785+-1.9996        ! definitely 1.0161x slower
   crypto-aes                                       916.8375+-7.8799          913.3093+-6.8440        
   crypto-md5                                       803.9736+-2.7834     ?    812.3015+-8.7357        ? might be 1.0104x slower
   crypto-sha1                                      935.3741+-26.9900    ?    946.0521+-28.5589       ? might be 1.0114x slower
   date-format-tofte                               1022.6110+-12.1339    ?   1026.6420+-36.2162       ?
   date-format-xparb                                992.2853+-77.7880         963.0093+-10.0564         might be 1.0304x faster
   math-cordic                                      676.3646+-8.2845     ?    678.7476+-2.3903        ?
   math-partial-sums                               1040.9702+-5.5986         1033.7117+-10.8287       
   math-spectral-norm                              1080.3638+-6.8771         1077.9869+-2.9742        
   string-base64                                    633.9053+-12.0274    ?    637.8085+-4.2267        ?
   string-fasta                                     579.6824+-10.7183    ?    584.8298+-3.4992        ?
   string-tagcloud                                  307.3727+-3.9998          304.6969+-3.3272        

   &lt;arithmetic&gt;                                     893.0967+-10.4458    ?    893.7980+-1.0704        ? might be 1.0008x slower
   &lt;geometric&gt; *                                    747.3029+-6.0469     ?    748.4658+-1.3076        ? might be 1.0016x slower
   &lt;harmonic&gt;                                       460.9535+-1.0284     ?    462.3796+-4.1344        ? might be 1.0031x slower

                                                         Baseline                NoScopeSlot                                    
V8Spider:
   crypto                                            71.9127+-0.8322     ?     72.0225+-1.1899        ?
   deltablue                                        125.8665+-7.0826          123.9465+-2.8463          might be 1.0155x faster
   earley-boyer                                      68.0761+-0.2396           67.6390+-1.4670        
   raytrace                                          59.3583+-1.1646           58.7692+-1.5841          might be 1.0100x faster
   regexp                                           100.8847+-0.3759     ?    101.6783+-1.3250        ?
   richards                                         111.7941+-7.5246     ?    112.1810+-6.1481        ?
   splay                                             48.2245+-4.0661     ?     48.9276+-3.5370        ? might be 1.0146x slower

   &lt;arithmetic&gt;                                      83.7310+-2.1078           83.5949+-1.7541          might be 1.0016x faster
   &lt;geometric&gt; *                                     79.3809+-2.0667           79.3359+-1.7337          might be 1.0006x faster
   &lt;harmonic&gt;                                        75.2497+-2.2242     ?     75.2905+-1.8056        ? might be 1.0005x slower

                                                         Baseline                NoScopeSlot                                    
Octane:
   encrypt                                           0.32726+-0.00102    ?     0.32876+-0.00402       ?
   decrypt                                           5.78146+-0.04155          5.78100+-0.01055       
   deltablue                                x2       0.30442+-0.00534    ?     0.30756+-0.00403       ? might be 1.0103x slower
   earley                                            0.98696+-0.01353          0.97345+-0.01368         might be 1.0139x faster
   boyer                                             8.31711+-0.14855          8.30948+-0.14397       
   navier-stokes                            x2       6.73514+-0.03104    ?     6.73908+-0.05434       ?
   raytrace                                 x2       2.47481+-0.21376    ?     2.51517+-0.12158       ? might be 1.0163x slower
   richards                                 x2       0.17465+-0.00475    ?     0.17872+-0.00576       ? might be 1.0233x slower
   splay                                    x2       0.54940+-0.02769          0.53971+-0.00567         might be 1.0179x faster
   regexp                                   x2      45.44029+-0.90509         44.91104+-0.49773         might be 1.0118x faster
   pdfjs                                    x2      72.29432+-0.75924         71.50624+-1.36602         might be 1.0110x faster
   mandreel                                 x2      72.93277+-0.90470         71.91960+-1.85316         might be 1.0141x faster
   gbemu                                    x2      61.34221+-1.40704         60.90043+-0.41778       
   closure                                           0.46076+-0.00243    ?     0.46110+-0.00246       ?
   jquery                                            5.36328+-0.02562          5.34835+-0.05259       
   box2d                                    x2      21.53933+-0.25305    ?    21.69466+-0.63522       ?
   zlib                                     x2     632.76849+-67.91501   ?   633.74131+-64.83702      ?
   typescript                               x2    1121.48395+-15.03705   ?  1122.90735+-23.48857      ?

   &lt;arithmetic&gt;                                    136.57721+-5.46327        136.56413+-5.84924         might be 1.0001x faster
   &lt;geometric&gt; *                                     9.74148+-0.03885          9.73743+-0.13809         might be 1.0004x faster
   &lt;harmonic&gt;                                        1.00938+-0.01403    ?     1.01895+-0.01595       ? might be 1.0095x slower

                                                         Baseline                NoScopeSlot                                    
Kraken:
   ai-astar                                          471.673+-1.278            471.255+-7.297         
   audio-beat-detection                              178.746+-4.920            177.260+-4.317         
   audio-dft                                         213.524+-3.651            212.253+-4.287         
   audio-fft                                         110.618+-1.863            110.571+-1.282         
   audio-oscillator                                  306.033+-6.982      ^     293.601+-1.077         ^ definitely 1.0423x faster
   imaging-darkroom                                  266.917+-2.160            263.464+-1.561           might be 1.0131x faster
   imaging-desaturate                                 95.817+-0.838      ?      95.911+-1.197         ?
   imaging-gaussian-blur                             159.034+-1.250      ?     160.028+-3.336         ?
   json-parse-financial                               71.893+-1.035             70.646+-1.086           might be 1.0177x faster
   json-stringify-tinderbox                           86.201+-1.199      ?      86.271+-0.844         ?
   stanford-crypto-aes                               100.552+-3.779            100.133+-0.749         
   stanford-crypto-ccm                               115.690+-3.441            114.767+-3.143         
   stanford-crypto-pbkdf2                            222.043+-5.476            218.909+-1.713           might be 1.0143x faster
   stanford-crypto-sha256-iterative                  100.467+-1.457      ?     100.727+-1.822         ?

   &lt;arithmetic&gt; *                                    178.515+-0.507      ^     176.843+-0.546         ^ definitely 1.0095x faster
   &lt;geometric&gt;                                       153.366+-0.482      ^     152.241+-0.298         ^ definitely 1.0074x faster
   &lt;harmonic&gt;                                        134.946+-0.441      ^     134.169+-0.277         ^ definitely 1.0058x faster

                                                         Baseline                NoScopeSlot                                    
JSBench:
   amazon                                             9.0000+-0.0000            8.7500+-0.7956          might be 1.0286x faster
   facebook                                          28.0000+-0.0000     ?     28.5000+-0.9187        ? might be 1.0179x slower
   google                                            67.0000+-2.2503           66.2500+-4.5704          might be 1.0113x faster
   twitter                                            8.5000+-0.9187     ?      8.7500+-0.7956        ? might be 1.0294x slower
   yahoo                                              4.2500+-0.7956            4.2500+-0.7956        

   &lt;arithmetic&gt; *                                    23.3500+-0.7057           23.3000+-1.4113          might be 1.0021x faster
   &lt;geometric&gt;                                       14.3441+-0.8102     ?     14.3663+-1.0938        ? might be 1.0015x slower
   &lt;harmonic&gt;                                         9.6921+-0.9600     ?      9.7048+-1.0318        ? might be 1.0013x slower

                                                         Baseline                NoScopeSlot                                    
JSRegress:
   abs-boolean                                        3.4542+-0.0729            3.3915+-0.1133          might be 1.0185x faster
   adapt-to-double-divide                            17.5408+-0.4550           17.5165+-0.4709        
   aliased-arguments-getbyval                         1.5623+-0.1619     ?      1.6787+-0.1127        ? might be 1.0745x slower
   allocate-big-object                                7.1093+-0.1182     ?      7.1248+-0.2569        ?
   arity-mismatch-inlining                            1.0256+-0.1699     ?      1.0652+-0.0832        ? might be 1.0386x slower
   array-access-polymorphic-structure                14.6903+-0.3349           14.4827+-0.6025          might be 1.0143x faster
   array-nonarray-polymorhpic-access                 47.4214+-0.7990           47.3215+-0.4533        
   array-prototype-every                            100.5305+-2.7635     ?    101.3437+-2.7165        ?
   array-prototype-forEach                          100.1848+-2.6702           98.3315+-3.1401          might be 1.0188x faster
   array-prototype-map                              127.3467+-1.2082          126.8830+-1.0034        
   array-prototype-some                             101.5084+-1.7991           99.9865+-3.1116          might be 1.0152x faster
   array-splice-contiguous                           58.1848+-2.4269           57.3477+-0.4833          might be 1.0146x faster
   array-with-double-add                              5.4409+-0.2135            5.3070+-0.0264          might be 1.0252x faster
   array-with-double-increment                        3.9053+-0.0653     ?      3.9782+-0.0720        ? might be 1.0187x slower
   array-with-double-mul-add                          6.4068+-0.2136     ?      6.7242+-0.1490        ? might be 1.0495x slower
   array-with-double-sum                              4.0811+-0.0677     ?      4.1300+-0.1052        ? might be 1.0120x slower
   array-with-int32-add-sub                           9.6481+-0.4592            9.4267+-0.2770          might be 1.0235x faster
   array-with-int32-or-double-sum                     4.1700+-0.0574            4.1642+-0.0451        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     51.3513+-0.5858           50.7825+-0.8006          might be 1.0112x faster
   ArrayBuffer-DataView-alloc-long-lived             31.5009+-0.3330     ?     31.8835+-0.9985        ? might be 1.0121x slower
   ArrayBuffer-Int32Array-byteOffset                  4.3252+-0.1311     ?      4.4708+-0.1518        ? might be 1.0337x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     55.3112+-1.0254           54.2675+-1.0708          might be 1.0192x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     69.3191+-0.6857     ?     70.4846+-3.5550        ? might be 1.0168x slower
   ArrayBuffer-Int8Array-alloc-long-lived            30.2581+-0.2924           29.9061+-0.9336          might be 1.0118x faster
   ArrayBuffer-Int8Array-alloc                       26.8705+-0.1679     ?     27.0865+-0.8112        ?
   asmjs_bool_bug                                     8.3607+-0.1625     ?      8.3728+-0.2379        ?
   assign-custom-setter-polymorphic                   3.9429+-0.1085            3.9417+-0.0604        
   assign-custom-setter                               5.2842+-0.2462     ?      5.3106+-0.2533        ?
   basic-set                                         13.3769+-0.3600     ?     13.6317+-0.6532        ? might be 1.0190x slower
   big-int-mul                                        5.5565+-0.0833            5.5127+-0.0570        
   boolean-test                                       3.9595+-0.1249            3.9500+-0.1656        
   branch-fold                                        4.4081+-0.1735     ?      4.4779+-0.0162        ? might be 1.0158x slower
   by-val-generic                                     0.2393+-0.0293            0.2374+-0.0244        
   call-spread-apply                                 32.8936+-0.6352     ?     33.2365+-0.5149        ? might be 1.0104x slower
   call-spread-call                                  26.5762+-0.6399     ?     26.6685+-1.2480        ?
   captured-assignments                               0.5092+-0.0606            0.4595+-0.0284          might be 1.1081x faster
   cast-int-to-double                                 7.7692+-0.1374     ?      7.7861+-0.1522        ?
   cell-argument                                      9.6448+-0.2604            9.4088+-0.5887          might be 1.0251x faster
   cfg-simplify                                       3.4280+-0.0808            3.3640+-0.0314          might be 1.0190x faster
   chain-getter-access                                0.2650+-0.0256            0.2532+-0.0172          might be 1.0465x faster
   cmpeq-obj-to-obj-other                            11.6712+-0.5585     ?     12.3151+-0.4151        ? might be 1.0552x slower
   constant-test                                      7.1918+-0.1537     ?      7.2083+-0.1297        ?
   DataView-custom-properties                        57.5146+-0.5036     ?     58.0009+-0.9892        ?
   delay-tear-off-arguments-strictmode               16.7756+-0.2252           16.7728+-0.3869        
   destructuring-arguments                            9.3093+-0.3336            9.1873+-0.1958          might be 1.0133x faster
   destructuring-swap                                 7.4265+-0.1278            7.4042+-0.2346        
   direct-arguments-getbyval                          1.6462+-0.4347     ?      1.6689+-0.0690        ? might be 1.0138x slower
   div-boolean-double                                 5.3215+-0.2312            5.2555+-0.1518          might be 1.0126x faster
   div-boolean                                        9.4293+-0.1417            9.3566+-0.1299        
   double-get-by-val-out-of-bounds                    0.2236+-0.0224     ?      0.2339+-0.0306        ? might be 1.0464x slower
   double-pollution-getbyval                          9.3403+-0.0605     ?      9.5897+-0.3028        ? might be 1.0267x slower
   double-pollution-putbyoffset                       7.1025+-0.3463            6.8701+-0.0483          might be 1.0338x faster
   double-to-int32-typed-array-no-inline              0.2612+-0.0387            0.2414+-0.0066          might be 1.0819x faster
   double-to-int32-typed-array                        2.5609+-0.1090            2.4972+-0.0789          might be 1.0255x faster
   double-to-uint32-typed-array-no-inline             0.2516+-0.0102     ?      0.2554+-0.0167        ? might be 1.0153x slower
   double-to-uint32-typed-array                       2.5780+-0.2158     ?      2.5797+-0.0217        ?
   elidable-new-object-dag                           53.5561+-1.6509           53.0840+-1.2694        
   elidable-new-object-roflcopter                   202.3112+-1.7847          200.9690+-1.2554        
   elidable-new-object-then-call                     48.8707+-1.1485     ?     49.5015+-1.3856        ? might be 1.0129x slower
   elidable-new-object-tree                          63.0620+-1.5539     ?     63.1932+-1.8075        ?
   empty-string-plus-int                             10.9376+-0.3285           10.7739+-0.3053          might be 1.0152x faster
   emscripten-cube2hash                              50.3442+-1.4181           50.3218+-1.4364        
   external-arguments-getbyval                        2.2531+-0.3108            2.2450+-0.2092        
   external-arguments-putbyval                        3.5611+-0.1134     ?      3.5877+-0.2248        ?
   fixed-typed-array-storage-var-index                1.3302+-0.1373     ?      1.3435+-0.1555        ? might be 1.0100x slower
   fixed-typed-array-storage                          1.0346+-0.0113     ?      1.0835+-0.0904        ? might be 1.0473x slower
   Float32Array-matrix-mult                           6.1818+-0.2179            6.1236+-0.3344        
   Float32Array-to-Float64Array-set                  85.0519+-0.3248     ^     81.1888+-1.2765        ^ definitely 1.0476x faster
   Float64Array-alloc-long-lived                    103.5242+-0.6125          102.8075+-0.2909        
   Float64Array-to-Int16Array-set                   104.7207+-1.0987          103.7360+-1.7484        
   fold-double-to-int                                17.4785+-0.3646           17.4666+-0.6364        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     23.5547+-1.8383     ?     23.9290+-1.5250        ? might be 1.0159x slower
   fold-get-by-id-to-multi-get-by-offset             23.7888+-4.5294           22.4717+-1.7944          might be 1.0586x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     15.0367+-0.6337     ?     15.3668+-0.2306        ? might be 1.0219x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     15.3752+-0.6374           15.2784+-0.0732        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     15.4628+-0.2555           14.9527+-0.3014          might be 1.0341x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     13.9325+-0.3452           13.7766+-0.5476          might be 1.0113x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     31.8361+-0.8306     ?     32.2525+-2.2717        ? might be 1.0131x slower
   fold-put-by-id-to-multi-put-by-offset             24.7879+-2.0148     ?     24.9612+-1.6476        ?
   fold-put-structure                                14.6821+-0.4078           14.3984+-0.4342          might be 1.0197x faster
   for-of-iterate-array-entries                       8.7819+-0.1862     ?      8.7952+-0.3273        ?
   for-of-iterate-array-keys                          3.4620+-0.2258            3.4570+-0.2158        
   for-of-iterate-array-values                        3.0780+-0.1840            3.0455+-0.2210          might be 1.0107x faster
   fround                                            21.9169+-0.8129     ?     22.3768+-0.7345        ? might be 1.0210x slower
   ftl-library-inlining-dataview                     97.6334+-13.9020          91.1820+-3.6005          might be 1.0708x faster
   ftl-library-inlining                              87.7455+-1.3387     ^     84.2312+-1.1440        ^ definitely 1.0417x faster
   function-dot-apply                                 2.3295+-0.2285            2.2363+-0.0481          might be 1.0417x faster
   function-test                                      4.3125+-0.2161     ?      4.4629+-0.1328        ? might be 1.0349x slower
   function-with-eval                                 0.2273+-0.0161     ?      0.2323+-0.0239        ? might be 1.0220x slower
   gcse-poly-get-less-obvious                        24.2917+-0.0117     ?     24.3627+-0.2181        ?
   gcse-poly-get                                     24.4299+-0.3110     ?     24.5392+-0.6252        ?
   gcse                                               6.2377+-0.0358     ?      6.3342+-0.1653        ? might be 1.0155x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.0977+-0.1171     ?      3.1304+-0.0542        ? might be 1.0106x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      7.9970+-0.2329     ?      8.0140+-0.1808        ?
   get-by-id-chain-from-try-block                    15.7795+-0.5866           15.4267+-0.2120          might be 1.0229x faster
   get-by-id-check-structure-elimination              7.6320+-0.1034     ^      7.1916+-0.1335        ^ definitely 1.0612x faster
   get-by-id-proto-or-self                           22.0463+-1.3290           21.9203+-0.7725        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.7403+-0.1115            3.7307+-0.0658        
   get-by-id-self-or-proto                           22.8207+-3.3434           22.3673+-1.3969          might be 1.0203x faster
   get-by-val-out-of-bounds                           0.2125+-0.0058     ?      0.2227+-0.0173        ? might be 1.0480x slower
   get_callee_monomorphic                            10.3707+-0.4156           10.0630+-0.2468          might be 1.0306x faster
   get_callee_polymorphic                             8.8898+-0.5836            8.6242+-0.2755          might be 1.0308x faster
   getter-no-activation                               5.4658+-0.0567     ?      5.4681+-0.1211        ?
   getter-richards                                  168.8679+-21.7458         167.4086+-16.5685       
   getter                                             6.0655+-0.1141     !      6.4492+-0.2219        ! definitely 1.0633x slower
   global-var-const-infer-fire-from-opt               0.2673+-0.0236     ?      0.2983+-0.0640        ? might be 1.1158x slower
   global-var-const-infer                             0.2424+-0.0276            0.2403+-0.0206        
   HashMap-put-get-iterate-keys                      35.9313+-0.3536     ?     35.9897+-0.3169        ?
   HashMap-put-get-iterate                           35.6966+-0.5061           35.4632+-0.7137        
   HashMap-string-put-get-iterate                    47.4545+-1.1546     ?     48.1389+-1.6754        ? might be 1.0144x slower
   hoist-make-rope                                    0.2440+-0.0132            0.2347+-0.0208          might be 1.0398x faster
   hoist-poly-check-structure-effectful-loop   
                                                      0.2415+-0.0086     ?      0.2483+-0.0184        ? might be 1.0283x slower
   hoist-poly-check-structure                         0.2595+-0.0178     ?      0.2862+-0.0536        ? might be 1.1030x slower
   imul-double-only                                   9.8333+-0.6621     ?      9.8620+-0.2266        ?
   imul-int-only                                     12.3770+-0.3508           12.2061+-0.7587          might be 1.0140x faster
   imul-mixed                                         9.2681+-0.0616     ?      9.4933+-1.0369        ? might be 1.0243x slower
   in-four-cases                                     23.3472+-0.1547     ?     23.6968+-0.7706        ? might be 1.0150x slower
   in-one-case-false                                 12.0992+-0.1695     ?     12.1506+-0.3490        ?
   in-one-case-true                                  12.1198+-0.4693           12.0572+-0.3217        
   in-two-cases                                      12.5514+-0.2502     ?     12.6693+-0.2903        ?
   indexed-properties-in-objects                      3.5935+-0.0774            3.5931+-0.1270        
   infer-closure-const-then-mov-no-inline             0.2498+-0.0372            0.2480+-0.0290        
   infer-closure-const-then-mov                      24.5153+-0.9249           24.2491+-0.1419          might be 1.0110x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                      0.2419+-0.0088     ?      0.2564+-0.0429        ? might be 1.0598x slower
   infer-closure-const-then-put-to-scope             27.8485+-0.4273     !     29.3968+-0.1611        ! definitely 1.0556x slower
   infer-closure-const-then-reenter-no-inline   
                                                      0.2490+-0.0153     ?      0.2510+-0.0209        ?
   infer-closure-const-then-reenter                  27.6063+-0.2315     !     30.2597+-2.2329        ! definitely 1.0961x slower
   infer-constant-global-property                     4.4399+-0.1261     ?      4.4744+-0.1006        ?
   infer-constant-property                            3.0505+-0.1551     ?      3.1290+-0.1407        ? might be 1.0258x slower
   infer-one-time-closure-ten-vars                    0.2666+-0.0384            0.2479+-0.0281          might be 1.0753x faster
   infer-one-time-closure-two-vars                    0.2653+-0.0223            0.2510+-0.0239          might be 1.0569x faster
   infer-one-time-closure                             0.2602+-0.0203            0.2397+-0.0138          might be 1.0853x faster
   infer-one-time-deep-closure                        0.2531+-0.0138     ?      0.2738+-0.0302        ? might be 1.0817x slower
   inline-arguments-access                            2.4382+-0.0882     ?      2.4847+-0.1022        ? might be 1.0191x slower
   inline-arguments-aliased-access                    2.2936+-0.0298            2.2642+-0.2789          might be 1.0130x faster
   inline-arguments-local-escape                     26.5897+-0.3181           26.5228+-0.9932        
   inline-get-scoped-var                              5.3210+-0.1755     ?      5.3307+-0.1784        ?
   inlined-put-by-id-transition                      15.5064+-0.4422           15.1963+-0.3117          might be 1.0204x faster
   int-or-other-abs-then-get-by-val                   6.8350+-0.8192            6.6097+-0.1263          might be 1.0341x faster
   int-or-other-abs-zero-then-get-by-val             26.0873+-0.4794           26.0544+-0.0906        
   int-or-other-add-then-get-by-val                   5.6198+-0.1566     ?      5.6537+-0.1131        ?
   int-or-other-add                                   7.5157+-0.2988            7.4751+-0.0977        
   int-or-other-div-then-get-by-val                   4.8347+-0.0772            4.8127+-0.1157        
   int-or-other-max-then-get-by-val                   6.4015+-0.2622            6.1430+-0.4286          might be 1.0421x faster
   int-or-other-min-then-get-by-val                   4.9316+-0.1409            4.9187+-0.1253        
   int-or-other-mod-then-get-by-val                   4.7227+-0.0973     ?      4.7500+-0.0694        ?
   int-or-other-mul-then-get-by-val                   4.6553+-0.1403     ?      4.7925+-0.0748        ? might be 1.0295x slower
   int-or-other-neg-then-get-by-val                   5.8820+-0.1967            5.7906+-0.0561          might be 1.0158x faster
   int-or-other-neg-zero-then-get-by-val             26.1895+-0.3502           26.0696+-0.1628        
   int-or-other-sub-then-get-by-val                   5.8198+-0.2024            5.5692+-0.0907          might be 1.0450x faster
   int-or-other-sub                                   4.7819+-0.1301            4.7817+-0.1727        
   int-overflow-local                                 5.5121+-0.0832     ?      5.5703+-0.2592        ? might be 1.0106x slower
   Int16Array-alloc-long-lived                       71.1764+-0.7234           70.6401+-0.4835        
   Int16Array-bubble-sort-with-byteLength            37.9695+-0.5916           37.9189+-0.1631        
   Int16Array-bubble-sort                            37.8939+-0.3115     ^     37.0815+-0.1193        ^ definitely 1.0219x faster
   Int16Array-load-int-mul                            1.8816+-0.0678     ?      1.9124+-0.1472        ? might be 1.0163x slower
   Int16Array-to-Int32Array-set                      86.0366+-2.1753     ^     82.0542+-1.0517        ^ definitely 1.0485x faster
   Int32Array-alloc-large                            36.4352+-1.0438           35.7793+-2.1383          might be 1.0183x faster
   Int32Array-alloc-long-lived                       81.2216+-4.5011           79.6853+-1.0992          might be 1.0193x faster
   Int32Array-alloc                                  12.7860+-0.2839     ?     12.8952+-0.4089        ?
   Int32Array-Int8Array-view-alloc                   17.3110+-0.5847     ?     18.4865+-1.8868        ? might be 1.0679x slower
   int52-spill                                        0.2369+-0.0116     ?      0.2385+-0.0231        ?
   Int8Array-alloc-long-lived                        77.6231+-0.5065           77.4640+-0.4847        
   Int8Array-load-with-byteLength                     4.5579+-0.0718            4.4895+-0.1181          might be 1.0152x faster
   Int8Array-load                                     4.5347+-0.1007     ?      4.6025+-0.1592        ? might be 1.0150x slower
   integer-divide                                    13.8557+-0.0689     ?     13.9360+-0.1518        ?
   integer-modulo                                     2.6899+-0.0675            2.6467+-0.1748          might be 1.0164x faster
   large-int-captured                                17.8251+-0.2694           17.6544+-0.1382        
   large-int-neg                                     20.7984+-0.3417           19.9078+-0.5824          might be 1.0447x faster
   large-int                                         18.4465+-0.8692           17.7535+-0.1437          might be 1.0390x faster
   logical-not                                        0.2624+-0.0267            0.2358+-0.0251          might be 1.1126x faster
   lots-of-fields                                    22.1841+-1.4316     ?     22.4330+-1.2993        ? might be 1.0112x slower
   make-indexed-storage                               5.6183+-0.1585            5.5817+-0.4806        
   make-rope-cse                                     23.8163+-0.7922           23.2128+-0.5367          might be 1.0260x faster
   marsaglia-larger-ints                             54.5433+-0.8627     ?     55.0475+-0.4130        ?
   marsaglia-osr-entry                               27.2485+-0.1974     ?     27.5062+-0.6756        ?
   max-boolean                                        3.0844+-0.0368            3.0503+-0.0710          might be 1.0112x faster
   method-on-number                                  22.9607+-0.3571           21.7967+-1.0411          might be 1.0534x faster
   min-boolean                                        3.1432+-0.1491            3.1046+-0.1060          might be 1.0124x faster
   minus-boolean-double                               3.9583+-0.1584            3.9283+-0.0200        
   minus-boolean                                      3.0431+-0.0751            3.0150+-0.1377        
   misc-strict-eq                                    52.9973+-6.4981           52.0708+-2.5347          might be 1.0178x faster
   mod-boolean-double                                11.2240+-0.1336     ?     11.2655+-0.1860        ?
   mod-boolean                                        8.5846+-0.0625            8.5778+-0.1050        
   mul-boolean-double                                 4.6167+-0.1287            4.5633+-0.0414          might be 1.0117x faster
   mul-boolean                                        3.2467+-0.0273     ?      3.2981+-0.1451        ? might be 1.0158x slower
   neg-boolean                                        4.0328+-0.1383     ?      4.0515+-0.1432        ?
   negative-zero-divide                               0.3108+-0.0435            0.2996+-0.0367          might be 1.0373x faster
   negative-zero-modulo                               0.3348+-0.0212     ^      0.2875+-0.0124        ^ definitely 1.1648x faster
   negative-zero-negate                               0.2880+-0.0220     ?      0.2968+-0.0497        ? might be 1.0303x slower
   nested-function-parsing                           33.4007+-0.2582           33.3918+-0.4465        
   new-array-buffer-dead                              3.9115+-0.0300     ?      3.9705+-0.0960        ? might be 1.0151x slower
   new-array-buffer-push                             17.3077+-0.3745     ?     17.5266+-0.3548        ? might be 1.0126x slower
   new-array-dead                                    13.9325+-0.5998     ?     14.3504+-0.7494        ? might be 1.0300x slower
   new-array-push                                     9.5721+-0.3941     ?      9.6812+-0.7460        ? might be 1.0114x slower
   number-test                                        3.8532+-0.1139     ?      3.9048+-0.0737        ? might be 1.0134x slower
   object-closure-call                                7.9401+-0.1916            7.8430+-0.2360          might be 1.0124x faster
   object-test                                        4.1279+-0.1521            4.0922+-0.1580        
   obvious-sink-pathology-taken                       0.2469+-0.0253            0.2172+-0.0085          might be 1.1372x faster
   obvious-sink-pathology                             0.2534+-0.0243            0.2360+-0.0165          might be 1.0740x faster
   obviously-elidable-new-object                     48.0651+-5.1934     ?     49.2616+-3.6023        ? might be 1.0249x slower
   plus-boolean-arith                                 3.1301+-0.0922     ?      3.1385+-0.0985        ?
   plus-boolean-double                                3.9547+-0.0082     ?      3.9741+-0.0880        ?
   plus-boolean                                       3.0219+-0.1658            3.0107+-0.1332        
   poly-chain-access-different-prototypes-simple   
                                                      3.5337+-0.1206     ?      3.5760+-0.0499        ? might be 1.0120x slower
   poly-chain-access-different-prototypes             2.3384+-0.1088     ?      2.4642+-0.3405        ? might be 1.0538x slower
   poly-chain-access-simpler                          3.5417+-0.0848     ?      3.5984+-0.0279        ? might be 1.0160x slower
   poly-chain-access                                  2.5496+-0.5796            2.4802+-0.4618          might be 1.0280x faster
   poly-stricteq                                     68.6611+-0.6370           68.5103+-0.1569        
   polymorphic-array-call                             2.0096+-0.2276     ?      2.0428+-0.1541        ? might be 1.0165x slower
   polymorphic-get-by-id                              0.2595+-0.0335     ?      0.2618+-0.0174        ?
   polymorphic-put-by-id                              0.2693+-0.0165            0.2500+-0.0072          might be 1.0771x faster
   polymorphic-structure                             24.7728+-0.5618           24.4200+-0.1897          might be 1.0144x faster
   polyvariant-monomorphic-get-by-id                 11.0450+-0.5693           10.9480+-0.2767        
   proto-getter-access                                0.2753+-0.0241            0.2444+-0.0106          might be 1.1263x faster
   put-by-id-replace-and-transition                  13.3404+-0.5094     ?     13.4011+-0.2940        ?
   put-by-id-slightly-polymorphic                     3.2745+-0.0706     ?      3.2777+-0.0377        ?
   put-by-id                                         18.9371+-0.5085           18.9326+-0.3241        
   put-by-val-direct                                  0.4913+-0.0112     ?      0.5998+-0.1260        ? might be 1.2209x slower
   put-by-val-large-index-blank-indexing-type   
                                                     18.5578+-0.7679           18.3607+-0.5523          might be 1.0107x faster
   put-by-val-machine-int                             0.2349+-0.0212            0.2275+-0.0135          might be 1.0322x faster
   rare-osr-exit-on-local                            17.6470+-0.3699     ?     17.8953+-0.5918        ? might be 1.0141x slower
   register-pressure-from-osr                        26.0347+-0.0762     !     26.4014+-0.0721        ! definitely 1.0141x slower
   setter                                             6.1022+-0.1167     ?      6.2406+-0.2100        ? might be 1.0227x slower
   simple-activation-demo                            32.9685+-0.1820     !     33.6638+-0.2825        ! definitely 1.0211x slower
   simple-getter-access                               0.2495+-0.0106            0.2477+-0.0218        
   simple-poly-call-nested                           21.2905+-1.5243           19.8680+-1.3574          might be 1.0716x faster
   simple-poly-call                                   1.4833+-0.2132            1.4833+-0.0962        
   sin-boolean                                       24.1517+-3.9516           24.0224+-3.8140        
   sinkable-new-object-dag                            0.2454+-0.0222            0.2449+-0.0289        
   sinkable-new-object-taken                          0.2442+-0.0211            0.2325+-0.0197          might be 1.0501x faster
   sinkable-new-object                                0.2444+-0.0264     ?      0.2457+-0.0553        ?
   slow-array-profile-convergence                     4.4097+-0.1627            4.3945+-0.0351        
   slow-convergence                                   4.2502+-0.0725            4.1985+-0.3524          might be 1.0123x faster
   sparse-conditional                                 1.4303+-0.1092     ?      1.4368+-0.0883        ?
   splice-to-remove                                  24.4368+-0.3417     ?     24.5098+-0.4902        ?
   string-char-code-at                               19.4059+-0.5406           19.2150+-0.1409        
   string-concat-object                               7.4014+-0.0828     ?      7.4473+-0.3875        ?
   string-concat-pair-object                          7.3344+-0.1346     ?      7.3927+-0.5684        ?
   string-concat-pair-simple                         17.4913+-1.2325           16.7617+-0.2918          might be 1.0435x faster
   string-concat-simple                              17.2352+-1.0948           17.0576+-0.8160          might be 1.0104x faster
   string-cons-repeat                                15.4330+-0.1925     ?     15.4747+-0.1406        ?
   string-cons-tower                                 14.8141+-0.3253           14.7337+-0.2703        
   string-equality                                   21.8012+-0.3125     ?     21.8328+-0.2825        ?
   string-get-by-val-big-char                        12.5673+-0.0436           12.4478+-0.2199        
   string-get-by-val-out-of-bounds-insane             4.7772+-0.2248            4.7267+-0.1675          might be 1.0107x faster
   string-get-by-val-out-of-bounds                    6.4821+-0.3024            6.4552+-0.1109        
   string-get-by-val                                  4.4248+-0.0392     ?      4.5516+-0.1692        ? might be 1.0287x slower
   string-hash                                        2.6035+-0.0814     ?      2.6288+-0.2050        ?
   string-long-ident-equality                        17.6720+-0.1614           17.6400+-0.0863        
   string-repeat-arith                               41.7766+-1.0751           41.5447+-1.0898        
   string-sub                                        80.0786+-0.9901     ?     80.6357+-2.5462        ?
   string-test                                        3.8956+-0.0779     ?      3.9683+-0.1920        ? might be 1.0187x slower
   string-var-equality                               43.4115+-0.2989           43.2240+-0.5156        
   structure-hoist-over-transitions                   4.8917+-0.2397            4.8053+-0.2555          might be 1.0180x faster
   substring-concat-weird                            58.2903+-1.0086           58.2480+-0.7759        
   substring-concat                                  61.0762+-0.7921     ^     59.4862+-0.4142        ^ definitely 1.0267x faster
   substring                                         64.9676+-0.3649     ^     63.8892+-0.1570        ^ definitely 1.0169x faster
   switch-char-constant                               3.0585+-0.0417     ?      3.1542+-0.0546        ? might be 1.0313x slower
   switch-char                                        7.5651+-0.2516     ?      7.5681+-0.0942        ?
   switch-constant                                   16.1133+-1.0542           14.4796+-2.8365          might be 1.1128x faster
   switch-string-basic-big-var                       21.5296+-1.5167     ?     22.0024+-0.3796        ? might be 1.0220x slower
   switch-string-basic-big                           22.7742+-1.3652     ^     19.1885+-1.7025        ^ definitely 1.1869x faster
   switch-string-basic-var                           27.8944+-2.6998           25.4636+-0.7013          might be 1.0955x faster
   switch-string-basic                               21.3986+-1.4836     ?     24.0374+-1.2139        ? might be 1.1233x slower
   switch-string-big-length-tower-var                24.7288+-0.0966           24.5129+-0.2820        
   switch-string-length-tower-var                    19.4232+-0.2337           19.1766+-0.1346          might be 1.0129x faster
   switch-string-length-tower                        14.5271+-0.3925           13.9438+-0.1962          might be 1.0418x faster
   switch-string-short                               14.3741+-0.3410           14.0987+-0.2634          might be 1.0195x faster
   switch                                            16.9108+-1.6135           16.3278+-1.3126          might be 1.0357x faster
   tear-off-arguments-simple                          3.7186+-0.1911     ?      3.8213+-0.0328        ? might be 1.0276x slower
   tear-off-arguments                                 5.6592+-0.3287            5.5958+-0.1299          might be 1.0113x faster
   temporal-structure                                16.9746+-0.2692           16.9684+-0.3803        
   to-int32-boolean                                  20.3023+-0.1021     ?     20.3277+-0.0744        ?
   undefined-property-access                        470.6154+-9.0534          469.0316+-4.4670        
   undefined-test                                     4.0234+-0.0553            4.0094+-0.1838        
   unprofiled-licm                                   27.2519+-0.4702           26.9634+-0.7625          might be 1.0107x faster
   weird-inlining-const-prop                          0.2595+-0.0397            0.2430+-0.0121          might be 1.0681x faster

   &lt;arithmetic&gt;                                      20.5485+-0.0917           20.4066+-0.0825          might be 1.0070x faster
   &lt;geometric&gt; *                                      7.1961+-0.0072            7.1655+-0.0310          might be 1.0043x faster
   &lt;harmonic&gt;                                         1.5651+-0.0160            1.5436+-0.0213          might be 1.0139x faster

                                                         Baseline                NoScopeSlot                                    
CompressionBench:
   huffman                                          660.0046+-7.3562          650.7327+-25.8774         might be 1.0142x faster
   arithmetic-simple                                477.4927+-2.3457     ?    480.0530+-4.4076        ?
   arithmetic-precise                               375.3723+-4.8880     ?    381.0594+-6.6050        ? might be 1.0152x slower
   arithmetic-complex-precise                       369.9243+-4.4479     ?    372.9713+-8.0771        ?
   arithmetic-precise-order-0                       504.2570+-4.2365          500.7062+-6.5221        
   arithmetic-precise-order-1                       425.0126+-1.7420          423.9067+-2.7859        
   arithmetic-precise-order-2                       479.3879+-4.0981     ?    482.2355+-5.8851        ?
   arithmetic-simple-order-1                        550.8484+-1.6498     ^    546.8333+-1.7591        ^ definitely 1.0073x faster
   arithmetic-simple-order-2                        622.9067+-0.4728     ^    615.8660+-2.9565        ^ definitely 1.0114x faster
   lz-string                                        436.4780+-17.0656         419.4864+-5.0468          might be 1.0405x faster

   &lt;arithmetic&gt;                                     490.1685+-1.3620          487.3850+-3.4858          might be 1.0057x faster
   &lt;geometric&gt; *                                    481.7387+-1.5122          479.4427+-3.2032          might be 1.0048x faster
   &lt;harmonic&gt;                                       473.6674+-1.7002          471.8562+-3.1296          might be 1.0038x faster

                                                         Baseline                NoScopeSlot                                    
All benchmarks:
   &lt;arithmetic&gt;                                      96.3143+-0.8613           96.1191+-0.3975          might be 1.0020x faster
   &lt;geometric&gt;                                       12.3523+-0.0269           12.3127+-0.0381          might be 1.0032x faster
   &lt;harmonic&gt;                                         1.8376+-0.0146            1.8191+-0.0231          might be 1.0102x faster

                                                         Baseline                NoScopeSlot                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   52.9874+-0.4022           52.8637+-0.5274          might be 1.0023x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063146</commentid>
    <comment_count>3</comment_count>
      <attachid>245079</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-01-21 13:13:16 -0800</bug_when>
    <thetext>Comment on attachment 245079
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1063152</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-01-21 13:43:49 -0800</bug_when>
    <thetext>Committed r178856: &lt;http://trac.webkit.org/changeset/178856&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245041</attachid>
            <date>2015-01-20 18:54:09 -0800</date>
            <delta_ts>2015-01-21 13:00:40 -0800</delta_ts>
            <desc>Draft Patch.  Testing now.</desc>
            <filename>136724-wip1.patch</filename>
            <type>text/plain</type>
            <size>32243</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE3ODc1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTk3LDggKzE5Nyw2IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMK
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBq
aXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJs
b2NrKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDb2RlQmxvY2spKSk7Ci0gICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgaml0LnN0
b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpLT5zY29wZSgpKSkpLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7CiAgICAgICAgIGppdC5zdG9yZTY0
KGNhbGxlckZyYW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwogICAgICAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9uOjplbmNvZGVBc0J5dGVjb2RlT2Zmc2V0
KGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFn
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0
YWNrOjpBcmd1bWVudENvdW50KSkpOwpAQCAtMjExLDkgKzIwOSw2IEBAIHZvaWQgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihiYXNlbGluZUNvZGVCbG9j
ay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkub2Zmc2V0KCkpKSwgR1BSSW5mbzo6cmVnVDMpOwogI2Vs
c2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKICAgICAg
ICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNv
ZGVCbG9jayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShp
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q29kZUJsb2NrKSkpOwotICAg
ICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKSk7Ci0gICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQotICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZUNvbnN0YW50KCktPnNjb3BlKCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OlNj
b3BlQ2hhaW4pKSk7CiAgICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZy
YW1lT2Zmc2V0KCkpKTsKICAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxp
bmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBjb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXg7CiAgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxGcmFtZTo6TG9jYXRp
b246OmVuY29kZUFzQnl0ZWNvZGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaAkocmV2aXNpb24gMTc4NzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMCArMTMxLDgg
QEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZy
YW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxs
RnJhbWUpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpIHsKLSAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lz
dGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSk7
CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKQogICAgICAg
ICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIEpTU3RhY2s6OkNhbGxlZSkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNzg3NTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTYsOSArNjk2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9k
ZQogICAgIAogICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hOb3RDZWxsKGNhbGxlZS5qc1ZhbHVl
UmVncygpKSk7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRhcmdldFRvQ2hlY2sp
KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZVBheWxv
YWRHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSksIHJlc3VsdFBheWxv
YWRHUFIpOwotICAgIG1faml0LnN0b3JlUHRyKHJlc3VsdFBheWxvYWRHUFIsIGNhbGxlZUZyYW1l
UGF5bG9hZFNsb3QoSlNTdGFjazo6U2NvcGVDaGFpbikpOwotICAgIG1faml0LnN0b3JlUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIGNhbGxlZUZyYW1l
VGFnU2xvdChKU1N0YWNrOjpTY29wZUNoYWluKSk7CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBm
YXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTc4NzU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjc2LDkgKzY3Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKE5vZGUqIG5vZGUKIAogICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNo
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7CiAKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24s
IG1fc2NvcGUpKSwgcmVzdWx0R1BSKTsKLSAgICBtX2ppdC5zdG9yZTY0KHJlc3VsdEdQUiwgY2Fs
bGVlRnJhbWVTbG90KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKLQogICAgIEpJVENvbXBpbGVyOjpD
YWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGwuY3BwCShyZXZpc2lvbiAxNzg3NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE1ICs1Nyw2IEBAIHZvaWQgSlND
YWxsOjplbWl0KENDYWxsSGVscGVycyYgaml0KQogICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVx
dWFsLCBHUFJJbmZvOjpyZWdUMCwgbV90YXJnZXRUb0NoZWNrLAogICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoMCkpOwogICAgIAotICAgIGppdC5sb2FkUHRyKAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwotICAgIGppdC5zdG9yZTY0
KAotICAgICAgICBHUFJJbmZvOjpyZWdUMSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKLSAgICAg
ICAgICAgIHNpemVvZihSZWdpc3RlcikgKiAoSlNTdGFjazo6U2NvcGVDaGFpbiAtIEpTU3RhY2s6
OkNhbGxlckZyYW1lQW5kUENTaXplKSkpOwotICAgIAogICAgIG1fZmFzdENhbGwgPSBqaXQubmVh
ckNhbGwoKTsKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTc4NzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MjcsMTAgKzM2MjcsOCBAQCBw
cml2YXRlOgogICAgICAgICBpZiAoKG5vdElubGluYWJsZSA9ICFjYWxsZWUpKQogICAgICAgICAg
ICAgY2FsbGVlID0gbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKTsKIAotICAgICAgICBKU1Njb3Bl
KiBzY29wZSA9IGtub3duRnVuY3Rpb24tPnNjb3BlVW5jaGVja2VkKCk7CiAgICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fY2FsbEZyYW1lLCBtX2V4ZWNTdG9yYWdlLCBtX2hlYXBzLkNhbGxGcmFtZV9j
YWxsZXJGcmFtZSk7CiAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGNvbnN0TnVsbChtX291dC5pbnRQ
dHIpLCBhZGRyZXNzRm9yKG1fZXhlY1N0b3JhZ2UsIEpTU3RhY2s6OkNvZGVCbG9jaykpOwotICAg
ICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRlcihzY29wZSksIGFkZHJlc3NGb3IobV9leGVj
U3RvcmFnZSwgSlNTdGFjazo6U2NvcGVDaGFpbikpOwogICAgICAgICBtX291dC5zdG9yZVB0cih3
ZWFrUG9pbnRlcihrbm93bkZ1bmN0aW9uKSwgYWRkcmVzc0ZvcihtX2V4ZWNTdG9yYWdlLCBKU1N0
YWNrOjpDYWxsZWUpKTsKIAogICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmNvbnN0SW50NjQo
bnVtQXJncyksIGFkZHJlc3NGb3IobV9leGVjU3RvcmFnZSwgSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOwpAQCAtMzY3OCw3ICszNjc2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChtX291dC5jb25zdEludDMyKDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplIC0g
SlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgKyBudW1BcmdzKSk7CiAgICAgICAgIGFyZ3Vt
ZW50cy5hcHBlbmQoanNDYWxsZWUpOyAvLyBjYWxsZWUgLT4gJXJheAogICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGdldFVuZGVmKG1fb3V0LmludDY0KSk7IC8vIGNvZGUgYmxvY2sKLSAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBzY29wZSBjaGFpbgog
ICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGpzQ2FsbGVlKTsgLy8gY2FsbGVlIC0+IHN0YWNrCiAg
ICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9vdXQuY29uc3RJbnQ2NChudW1BcmdzKSk7IC8vIGFy
Z3VtZW50IGNvdW50IGFuZCB6ZXJvcyBmb3IgdGhlIHRhZwogICAgICAgICBpZiAoZHVtbXlUaGlz
QXJndW1lbnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lQ2xvc3VyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgJKHJldmlzaW9uIDE3ODc1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWVDbG9zdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDExICs0OSw2IEBAIHN0cnVjdCBDYWxsRnJhbWVDbG9zdXJlIHsKICAgICB7CiAgICAg
ICAgIHByb3RvQ2FsbEZyYW1lLT5zZXRBcmd1bWVudChhcmd1bWVudCwgdmFsdWUpOwogICAgIH0K
LQotICAgIHZvaWQgcmVzZXRDYWxsRnJhbWUoKQotICAgIHsKLSAgICAgICAgcHJvdG9DYWxsRnJh
bWUtPnNldFNjb3BlKHNjb3BlKTsKLSAgICB9CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE3
ODc1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkwMCw3ICs5MDAsNyBAQCBmYWlsZWRKU09OUDoKICAgICBB
U1NFUlQoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVyIGZv
ciAndGhpcycuCiAKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKLSAgICBwcm90
b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgc2NvcGUsIEpTQ2FsbGVlOjpjcmVhdGUodm0sIHNj
b3BlLT5nbG9iYWxPYmplY3QoKSwgc2NvcGUpLCB0aGlzT2JqLCAxKTsKKyAgICBwcm90b0NhbGxG
cmFtZS5pbml0KGNvZGVCbG9jaywgSlNDYWxsZWU6OmNyZWF0ZSh2bSwgc2NvcGUtPmdsb2JhbE9i
amVjdCgpLCBzY29wZSksIHRoaXNPYmosIDEpOwogCiAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBw
cm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4
ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCks
IHByb2dyYW0tPnN0YXJ0Q29sdW1uKCkpOwpAQCAtOTYzLDcgKzk2Myw3IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICAgICAgcmV0dXJuIHRocm93VGVybWlu
YXRlZEV4ZWN1dGlvbkV4Y2VwdGlvbihjYWxsRnJhbWUpOwogCiAgICAgUHJvdG9DYWxsRnJhbWUg
cHJvdG9DYWxsRnJhbWU7Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIHNj
b3BlLCBmdW5jdGlvbiwgdGhpc1ZhbHVlLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKKyAgICBw
cm90b0NhbGxGcmFtZS5pbml0KG5ld0NvZGVCbG9jaywgZnVuY3Rpb24sIHRoaXNWYWx1ZSwgYXJn
c0NvdW50LCBhcmdzLmRhdGEoKSk7CiAKICAgICBpZiAoTGVnYWN5UHJvZmlsZXIqIHByb2ZpbGVy
ID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxsRXhlY3V0ZShj
YWxsRnJhbWUsIGZ1bmN0aW9uKTsKQEAgLTEwMzQsNyArMTAzNCw3IEBAIEpTT2JqZWN0KiBJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAgICAgcmV0dXJuIHRocm93VGVybWluYXRl
ZEV4ZWN1dGlvbkV4Y2VwdGlvbihjYWxsRnJhbWUpOwogCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJv
dG9DYWxsRnJhbWU7Ci0gICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIHNjb3Bl
LCBjb25zdHJ1Y3RvciwganNVbmRlZmluZWQoKSwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7Cisg
ICAgcHJvdG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGNvbnN0cnVjdG9yLCBqc1VuZGVm
aW5lZCgpLCBhcmdzQ291bnQsIGFyZ3MuZGF0YSgpKTsKIAogICAgIGlmIChMZWdhY3lQcm9maWxl
ciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndp
bGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwpAQCAtMTA4Myw3ICsxMDgzLDcgQEAg
Q2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogCiAgICAgc2l6ZV90IGFy
Z3NDb3VudCA9IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOwogCi0gICAgcHJvdG9DYWxsRnJh
bWUtPmluaXQobmV3Q29kZUJsb2NrLCBzY29wZSwgZnVuY3Rpb24sIGpzVW5kZWZpbmVkKCksIGFy
Z3NDb3VudCwgYXJncyk7CisgICAgcHJvdG9DYWxsRnJhbWUtPmluaXQobmV3Q29kZUJsb2NrLCBm
dW5jdGlvbiwganNVbmRlZmluZWQoKSwgYXJnc0NvdW50LCBhcmdzKTsKICAgICAvLyBSZXR1cm4g
dGhlIHN1Y2Nlc3NmdWwgY2xvc3VyZToKICAgICBDYWxsRnJhbWVDbG9zdXJlIHJlc3VsdCA9IHsg
Y2FsbEZyYW1lLCBwcm90b0NhbGxGcmFtZSwgZnVuY3Rpb24sIGZ1bmN0aW9uRXhlY3V0YWJsZSwg
JnZtLCBzY29wZSwgbmV3Q29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzIH07CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMDAsNyArMTEwMCw2IEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2wKICAgICAgICAgcmV0dXJu
IGpzTnVsbCgpOwogCiAgICAgU3RhY2tTdGF0czo6Q2hlY2tQb2ludCBzdGFja0NoZWNrUG9pbnQ7
Ci0gICAgY2xvc3VyZS5yZXNldENhbGxGcmFtZSgpOwogCiAgICAgaWYgKExlZ2FjeVByb2ZpbGVy
KiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2ls
bEV4ZWN1dGUoY2xvc3VyZS5vbGRDYWxsRnJhbWUsIGNsb3N1cmUuZnVuY3Rpb24pOwpAQCAtMTE4
Nyw3ICsxMTg2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0YQog
ICAgIEFTU0VSVChjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSA9PSAxKTsgLy8gMSBwYXJhbWV0
ZXIgZm9yICd0aGlzJy4KIAogICAgIFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwotICAg
IHByb3RvQ2FsbEZyYW1lLmluaXQoY29kZUJsb2NrLCBzY29wZSwgSlNDYWxsZWU6OmNyZWF0ZSh2
bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLCBzY29wZSksIHRoaXNWYWx1ZSwgMSk7CisgICAgcHJv
dG9DYWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIEpTQ2FsbGVlOjpjcmVhdGUodm0sIHNjb3BlLT5n
bG9iYWxPYmplY3QoKSwgc2NvcGUpLCB0aGlzVmFsdWUsIDEpOwogCiAgICAgaWYgKExlZ2FjeVBy
b2ZpbGVyKiBwcm9maWxlciA9IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxl
ci0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5v
KCksIGV2YWwtPnN0YXJ0Q29sdW1uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0pTU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSlNTdGFjay5oCShyZXZpc2lvbiAxNzg3NTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSlNTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1
OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBlbnVtIENhbGxGcmFtZUhlYWRlckVudHJ5
IHsKICAgICAgICAgICAgIENhbGxlckZyYW1lQW5kUENTaXplID0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKSwKICAgICAgICAgICAgIENvZGVCbG9jayA9IENhbGxl
ckZyYW1lQW5kUENTaXplLAotICAgICAgICAgICAgU2NvcGVDaGFpbiwKICAgICAgICAgICAgIENh
bGxlZSwKICAgICAgICAgICAgIEFyZ3VtZW50Q291bnQsCiAgICAgICAgICAgICBDYWxsRnJhbWVI
ZWFkZXJTaXplLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3Rv
Q2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUHJvdG9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxNzg3NTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxMSArMzIsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgUHJvdG9DYWxs
RnJhbWU6OmluaXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBKU09iamVj
dCogY2FsbGVlLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgaW50IGFyZ0NvdW50SW5jbHVkaW5nVGhpcywg
SlNWYWx1ZSogb3RoZXJBcmdzKQordm9pZCBQcm90b0NhbGxGcmFtZTo6aW5pdChDb2RlQmxvY2sq
IGNvZGVCbG9jaywgSlNPYmplY3QqIGNhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGludCBhcmdD
b3VudEluY2x1ZGluZ1RoaXMsIEpTVmFsdWUqIG90aGVyQXJncykKIHsKICAgICB0aGlzLT5hcmdz
ID0gb3RoZXJBcmdzOwogICAgIHRoaXMtPnNldENvZGVCbG9jayhjb2RlQmxvY2spOwotICAgIHRo
aXMtPnNldFNjb3BlKHNjb3BlKTsKICAgICB0aGlzLT5zZXRDYWxsZWUoY2FsbGVlKTsKICAgICB0
aGlzLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhhcmdDb3VudEluY2x1ZGluZ1RoaXMp
OwogICAgIGlmIChjb2RlQmxvY2sgJiYgYXJnQ291bnRJbmNsdWRpbmdUaGlzIDwgY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvUHJvdG9DYWxsRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUHJvdG9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTc4NzU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHN0cnVjdCBQcm90b0NhbGxG
cmFtZSB7CiAgICAgUmVnaXN0ZXIgY29kZUJsb2NrVmFsdWU7Ci0gICAgUmVnaXN0ZXIgc2NvcGVD
aGFpblZhbHVlOwogICAgIFJlZ2lzdGVyIGNhbGxlZVZhbHVlOwogICAgIFJlZ2lzdGVyIGFyZ0Nv
dW50QW5kQ29kZU9yaWdpblZhbHVlOwogICAgIFJlZ2lzdGVyIHRoaXNBcmc7CkBAIC00MCwxNCAr
MzksMTEgQEAgc3RydWN0IFByb3RvQ2FsbEZyYW1lIHsKICAgICBib29sIGFyaXR5TWlzc01hdGNo
OwogICAgIEpTVmFsdWUgKmFyZ3M7CiAKLSAgICB2b2lkIGluaXQoQ29kZUJsb2NrKiwgSlNTY29w
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgaW50LCBKU1ZhbHVlKiBvdGhlckFyZ3MgPSAwKTsKKyAg
ICB2b2lkIGluaXQoQ29kZUJsb2NrKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBpbnQsIEpTVmFsdWUq
IG90aGVyQXJncyA9IDApOwogCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiBjb2RlQmxvY2tWYWx1ZS5SZWdpc3Rlcjo6Y29kZUJsb2NrKCk7IH0KICAgICB2b2lkIHNl
dENvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykgeyBjb2RlQmxvY2tWYWx1ZSA9IGNvZGVC
bG9jazsgfQogCi0gICAgSlNTY29wZSogc2NvcGUoKSBjb25zdCB7IHJldHVybiBzY29wZUNoYWlu
VmFsdWUuUmVnaXN0ZXI6OnNjb3BlKCk7IH0KLSAgICB2b2lkIHNldFNjb3BlKEpTU2NvcGUqIHNj
b3BlKSB7IHNjb3BlQ2hhaW5WYWx1ZSA9IHNjb3BlOyB9Ci0KICAgICBKU09iamVjdCogY2FsbGVl
KCkgY29uc3QgeyByZXR1cm4gY2FsbGVlVmFsdWUuUmVnaXN0ZXI6OmZ1bmN0aW9uKCk7IH0KICAg
ICB2b2lkIHNldENhbGxlZShKU09iamVjdCogY2FsbGVlKSB7IGNhbGxlZVZhbHVlID0gUmVnaXN0
ZXI6OndpdGhDYWxsZWUoY2FsbGVlKTsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9WTUluc3BlY3Rvci5jcHAJKHJldmlzaW9uIDE3ODc1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9WTUluc3BlY3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTczLDE0ICs3MywxMiBAQCB2b2lkIFZNSW5zcGVjdG9yOjpkdW1wRnJhbWUo
Q2FsbEZyYW1lKiBmCiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgcHJpbnRmKCIlcyAiLCBwcmVm
aXgpOwogCi0gICAgcHJpbnRmKCJmcmFtZSBbJWRdICVwIHsgY2IgJXA6JXMsIHJldFBDICVwOiVz
LCBzY29wZSAlcDolcywgY2FsbGVlICVwOiVzLCBjYWxsZXJGcmFtZSAlcDolcywgYXJnYyAlZCwg
dlBDICVwIH0iLAorICAgIHByaW50ZigiZnJhbWUgWyVkXSAlcCB7IGNiICVwOiVzLCByZXRQQyAl
cDolcywgY2FsbGVlICVwOiVzLCBjYWxsZXJGcmFtZSAlcDolcywgYXJnYyAlZCwgdlBDICVwIH0i
LAogICAgICAgICBmcmFtZUNvdW50LCBmcmFtZSwKICAgICAgICAgQ0FTVDx2b2lkKj4oZnJhbWVb
SlNTdGFjazo6Q29kZUJsb2NrXS5wYXlsb2FkKCkpLAogICAgICAgICBnZXRUeXBlTmFtZShmcmFt
ZVtKU1N0YWNrOjpDb2RlQmxvY2tdLmpzVmFsdWUoKSksCiAgICAgICAgIENBU1Q8dm9pZCo+KGZy
YW1lW0pTU3RhY2s6OlJldHVyblBDXS5wYXlsb2FkKCkpLAogICAgICAgICBnZXRUeXBlTmFtZShm
cmFtZVtKU1N0YWNrOjpSZXR1cm5QQ10uanNWYWx1ZSgpKSwKLSAgICAgICAgQ0FTVDx2b2lkKj4o
ZnJhbWVbSlNTdGFjazo6U2NvcGVDaGFpbl0ucGF5bG9hZCgpKSwKLSAgICAgICAgZ2V0VHlwZU5h
bWUoZnJhbWVbSlNTdGFjazo6U2NvcGVDaGFpbl0uanNWYWx1ZSgpKSwKICAgICAgICAgQ0FTVDx2
b2lkKj4oZnJhbWVbSlNTdGFjazo6Q2FsbGVlXS5wYXlsb2FkKCkpLAogICAgICAgICBnZXRUeXBl
TmFtZShmcmFtZVtKU1N0YWNrOjpDYWxsZWVdLmpzVmFsdWUoKSksCiAgICAgICAgIENBU1Q8dm9p
ZCo+KGZyYW1lW0pTU3RhY2s6OkNhbGxlckZyYW1lXS5jYWxsRnJhbWUoKSksCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNzg3NTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2NCwxMiArMjY0LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29k
ZUlEIG9wY29kZUkKICAgICAgICAgLSBJbml0aWFsaXplcyBBcmd1bWVudENvdW50OyBDYWxsZXJG
cmFtZTsgQ2FsbGVlLgogCiAgICAgICAgRm9yIGEgSlMgY2FsbDoKLSAgICAgICAgLSBDYWxsZXIg
aW5pdGlhbGl6ZXMgU2NvcGVDaGFpbi4KICAgICAgICAgLSBDYWxsZWUgaW5pdGlhbGl6ZXMgUmV0
dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZWUgcmVzdG9yZXMgY2FsbEZyYW1lUmVn
aXN0ZXIgYmVmb3JlIHJldHVybi4KIAogICAgICAgIEZvciBhIG5vbi1KUyBjYWxsOgotICAgICAg
ICAtIENhbGxlciBpbml0aWFsaXplcyBTY29wZUNoYWluOyBSZXR1cm5QQzsgQ29kZUJsb2NrLgor
ICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAg
ICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAg
Ki8KICAgICAKQEAgLTMyNywxMCArMzI2LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSQogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2Nh
bGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87
CiAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9u
LCBtX3Njb3BlKSksIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6U2NvcGVDaGFpbiAqIHNpemVv
ZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7
Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFkZHJlc3Moc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2YoUmVnaXN0ZXIp
ICsgVGFnT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0KICAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE3ODc1NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Nywx
MiArMTc3LDExIEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAg
ICAgICAgLSBJbml0aWFsaXplcyBBcmd1bWVudENvdW50OyBDYWxsZXJGcmFtZTsgQ2FsbGVlLgog
CiAgICAgICAgRm9yIGEgSlMgY2FsbDoKLSAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgU2Nv
cGVDaGFpbi4KICAgICAgICAgLSBDYWxsZWUgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9j
ay4KICAgICAgICAgLSBDYWxsZWUgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYmVmb3JlIHJl
dHVybi4KIAogICAgICAgIEZvciBhIG5vbi1KUyBjYWxsOgotICAgICAgICAtIENhbGxlciBpbml0
aWFsaXplcyBTY29wZUNoYWluOyBSZXR1cm5QQzsgQ29kZUJsb2NrLgorICAgICAgICAtIENhbGxl
ciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgICAgICAtIENhbGxlciByZXN0
b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCiAgICAgKi8KICAgICBDT01QSUxF
X0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3Ry
dWN0KSwgY2FsbF9hbmRfY29uc3RydWN0X29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CkBA
IC0yMzYsOSArMjM1LDYgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SQogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJl
Z2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlv
bkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX3Njb3BlKSks
IHJlZ1QyKTsKLSAgICBzdG9yZTY0KHJlZ1QyLCBBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgSlNTdGFjazo6U2NvcGVDaGFpbiAqIHNpemVvZihSZWdpc3Rlcikg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwogCiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2sp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCShyZXZpc2lvbiAxNzg3NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEyICs1Nyw2IEBAIEpJVDo6
Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICBzdG9yZVB0cihjYWxsRnJh
bWVSZWdpc3RlciwgJm1fdm0tPnRvcENhbGxGcmFtZSk7CiAKICNpZiBDUFUoWDg2KQotICAgIC8v
IExvYWQgY2FsbGVyIGZyYW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0
aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCi0gICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4K
LSAgICBlbWl0R2V0Q2FsbGVyRnJhbWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QwKTsKLSAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdU
MSwgcmVnVDApOwotICAgIGVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3Rh
Y2s6OlNjb3BlQ2hhaW4pOwotCiAgICAgLy8gQ2FsbGluZyBjb252ZW50aW9uOiAgICAgIGYoZWN4
LCBlZHgsIC4uLik7CiAgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRl
Kik7CiAgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjplY3gpOwpAQCAt
NzYsMTEgKzcwLDYgQEAgSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoOCksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2Vs
aWYgQ1BVKEFSTSkgfHwgQ1BVKFNINCkgfHwgQ1BVKE1JUFMpCi0gICAgLy8gTG9hZCBjYWxsZXIg
ZnJhbWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIg
d2UgY2FsbCBjYW4gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBlbWl0R2V0Q2FsbGVyRnJh
bWVGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKHJlZ1QyKTsKLSAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpTY29wZUNoYWluLCByZWdUMSwgcmVnVDIpOwotICAgIGVtaXRQ
dXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIocmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCiAj
aWYgQ1BVKE1JUFMpCiAgICAgLy8gQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yICh1bnVzZWQpIDE2
IGJ5dGVzICg4LWJ5dGUgYWxpZ25lZCkgZm9yIDQgYXJndW1lbnRzLgogICAgIHN1YlB0cihUcnVz
dGVkSW1tMzIoMTYpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE3ODc1NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMSwxMyArNTExLDYg
QEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVCeUlkU3R1YigKICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIGxvYWRlZFZhbHVlR1BSLCBhZGRyZXNzT2ZMaW5rRnVuY3Rpb25D
aGVjaywKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGxvYWRlZFZhbHVlR1BSIGlzIGFscmVhZHkg
YnVybmVkLiBXZSBjYW4gcmV1c2UgaXQuIEZyb20gaGVyZSBvbiB3ZSBhc3N1bWUgdGhhdAotICAg
ICAgICAgICAgLy8gYW55IHZvbGF0aWxlIHJlZ2lzdGVyIHdpbGwgYmUgY2xvYmJlcmVkIGFueXdh
eS4KLSAgICAgICAgICAgIHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhsb2FkZWRWYWx1ZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLAotICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSKTsKLSAgICAgICAgICAg
IHN0dWJKaXQuc3RvcmVDZWxsKAotICAgICAgICAgICAgICAgIGxvYWRlZFZhbHVlR1BSLCBjYWxs
ZWVGcmFtZS53aXRoT2Zmc2V0KEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2YoUmVnaXN0ZXIp
KSk7CiAgICAgICAgICAgICBmYXN0UGF0aENhbGwgPSBzdHViSml0Lm5lYXJDYWxsKCk7CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIHN0dWJKaXQuYWRkUHRyKApAQCAtMTY4NSwyMyArMTY3OCw2
IEBAIHZvaWQgbGlua0Nsb3N1cmVDYWxsKAogICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZFeGVjdXRhYmxlKCkpLAogICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKSk7CiAgICAgCi0g
ICAgc3R1YkppdC5sb2FkUHRyKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVl
R1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0dWJKaXQu
c3RvcmU2NCgKLSAgICAgICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgIENDYWxs
SGVscGVyczo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pICsgb2Zmc2V0VG9GcmFtZSkpOwotI2Vsc2UKLSAgICBzdHViSml0LnN0b3JlUHRyKAotICAg
ICAgICBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6U2NvcGVDaGFpbikgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpICsgb2Zmc2V0
VG9GcmFtZSkpOwotICAgIHN0dWJKaXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRk
cmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpICsgb2Zmc2V0VG9G
cmFtZSkpOwotI2VuZGlmCi0gICAgCiAgICAgQXNzZW1ibHlIZWxwZXJzOjpDYWxsIGNhbGwgPSBz
dHViSml0Lm5lYXJDYWxsKCk7CiAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGRvbmUgPSBzdHVi
Sml0Lmp1bXAoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDE3ODc1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDE3ICsy
MTQsNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHZpcnR1YWxGb3JUCiAgICAgLy8g
Tm93IHdlIGtub3cgdGhhdCB3ZSBoYXZlIGEgQ29kZUJsb2NrLCBhbmQgd2UncmUgY29tbWl0dGVk
IHRvIG1ha2luZyBhIGZhc3QKICAgICAvLyBjYWxsLgogICAgIAotICAgIGppdC5sb2FkUHRyKAot
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIEpTRnVuY3Rpb246
Om9mZnNldE9mU2NvcGVDaGFpbigpKSwKLSAgICAgICAgR1BSSW5mbzo6cmVnVDEpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgaml0LmVtaXRQdXRUb0NhbGxGcmFtZUhlYWRlckJlZm9yZVByb2xv
Z3VlKEdQUkluZm86OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLSNlbHNlCi0gICAgaml0
LmVtaXRQdXRQYXlsb2FkVG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1ZShHUFJJbmZvOjpy
ZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0gICAgaml0LmVtaXRQdXRUYWdUb0NhbGxGcmFt
ZUhlYWRlckJlZm9yZVByb2xvZ3VlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLAotICAgICAgICBKU1N0YWNrOjpTY29wZUNoYWluKTsKLSNlbmRpZgotICAgIAog
ICAgIC8vIE1ha2UgYSB0YWlsIGNhbGwuIFRoaXMgd2lsbCByZXR1cm4gYmFjayB0byBKSVQgY29k
ZS4KICAgICBlbWl0UG9pbnRlclZhbGlkYXRpb24oaml0LCBHUFJJbmZvOjpyZWdUNCk7CiAgICAg
aml0Lmp1bXAoR1BSSW5mbzo6cmVnVDQpOwpAQCAtMjc2LDEyICsyNjUsNiBAQCBzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaml0LnN0b3JlUHRyKEpTSW50ZXJm
YWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BV
KFg4NikKLSAgICAvLyBMb2FkIGNhbGxlZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJh
bWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgotICAgIC8vIGdldCB0byBpdHMgZ2xvYmFs
IGRhdGEuCi0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNh
bGxlZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBqaXQubG9hZFB0cihKU0ludGVyZmFj
ZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTQ2FsbGVlOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQdXRDZWxs
VG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNo
YWluKTsKLQogICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKGVjeCwgZWR4LCAuLi4p
OwogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwogICAgIGpp
dC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpjYWxsRnJhbWVSZWdpc3RlciwgWDg2UmVnaXN0ZXJzOjpl
Y3gpOwpAQCAtMjk2LDExICsyNzksNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5h
dGl2ZUZvckdlCiAgICAgaml0LmFkZFB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDgp
LCBKU0ludGVyZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCiAjZWxpZiBDUFUoWDg2
XzY0KQotICAgIC8vIExvYWQgY2FsbGVlJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFt
ZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNhbGwgY2FuCi0gICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwg
ZGF0YS4KLSAgICBqaXQuZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2Fs
bGVlLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNl
SklUOjpBZGRyZXNzKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNDYWxsZWU6Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBqaXQuZW1pdFB1dENlbGxU
b0NhbGxGcmFtZUhlYWRlcihKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hh
aW4pOwogI2lmICFPUyhXSU5ET1dTKQogICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBm
KGVkaSwgZXNpLCBlZHgsIGVjeCwgLi4uKTsKICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVy
ZTogZihFeGVjU3RhdGUqKTsKQEAgLTMzMywxMiArMzExLDYgQEAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIENPTVBJTEVfQVNTRVJUKEFSTTY0UmVnaXN0ZXJz
Ojp4MSAhPSBKU0ludGVyZmFjZUpJVDo6cmVnVDMsIFQzX25vdF90cmFtcGxlZF9ieV9hcmdfMSk7
CiAgICAgQ09NUElMRV9BU1NFUlQoQVJNNjRSZWdpc3RlcnM6OngyICE9IEpTSW50ZXJmYWNlSklU
OjpyZWdUMywgVDNfbm90X3RyYW1wbGVkX2J5X2FyZ18yKTsKIAotICAgIC8vIExvYWQgY2FsbGVl
J3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdlIGNh
bGwgY2FuCi0gICAgLy8gZ2V0IHRvIGl0cyBnbG9iYWwgZGF0YS4KLSAgICBqaXQuZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVlLCBKU0ludGVyZmFjZUpJVDo6cmVn
VDEpOwotICAgIGppdC5sb2FkUHRyKEpTSW50ZXJmYWNlSklUOjpBZGRyZXNzKEpTSW50ZXJmYWNl
SklUOjpyZWdUMSwgSlNDYWxsZWU6Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgSlNJbnRlcmZhY2VK
SVQ6OnJlZ1QxKTsKLSAgICBqaXQuZW1pdFB1dENlbGxUb0NhbGxGcmFtZUhlYWRlcihKU0ludGVy
ZmFjZUpJVDo6cmVnVDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotCiAgICAgLy8gSG9zdCBmdW5j
dGlvbiBzaWduYXR1cmU6IGYoRXhlY1N0YXRlKik7CiAgICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VK
SVQ6OmNhbGxGcmFtZVJlZ2lzdGVyLCBBUk02NFJlZ2lzdGVyczo6eDApOwogCkBAIC0zNDYsMTIg
KzMxOCw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBq
aXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhBUk02NFJlZ2lzdGVyczo6eDEsIEpT
RnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwgQVJNNjRSZWdpc3RlcnM6OngyKTsKICAg
ICBqaXQuY2FsbChKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhBUk02NFJlZ2lzdGVyczo6eDIsIGV4
ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uKSk7CiAjZWxpZiBDUFUoQVJNKSB8fCBDUFUoU0g0KSB8
fCBDUFUoTUlQUykKLSAgICAvLyBMb2FkIGNhbGxlZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBj
YWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgotICAgIC8vIGdldCB0byBpdHMg
Z2xvYmFsIGRhdGEuCi0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3Rh
Y2s6OkNhbGxlZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBqaXQubG9hZFB0cihKU0lu
dGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTQ2FsbGVlOjpvZmZz
ZXRPZlNjb3BlQ2hhaW4oKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQ
dXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpT
Y29wZUNoYWluKTsKLQogI2lmIENQVShNSVBTKQogICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNwYWNl
IGZvciAodW51c2VkKSAxNiBieXRlcyAoOC1ieXRlIGFsaWduZWQpIGZvciA0IGFyZ3VtZW50cy4K
ICAgICBqaXQuc3ViUHRyKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMTYpLCBKU0ludGVy
ZmFjZUpJVDo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDE3ODc1NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMCAr
NzMsMTAgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAjaWZuZGVmIE5E
RUJVRwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY29uc3QgcHRyZGlmZl90IFB0clNpemUgPSA4
OwotICAgIGNvbnN0IHB0cmRpZmZfdCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDY7CisgICAgY29u
c3QgcHRyZGlmZl90IENhbGxGcmFtZUhlYWRlclNsb3RzID0gNTsKICNlbHNlIC8vIFVTRShKU1ZB
TFVFNjQpIC8vIGkuZS4gMzItYml0IHZlcnNpb24KICAgICBjb25zdCBwdHJkaWZmX3QgUHRyU2l6
ZSA9IDQ7Ci0gICAgY29uc3QgcHRyZGlmZl90IENhbGxGcmFtZUhlYWRlclNsb3RzID0gNTsKKyAg
ICBjb25zdCBwdHJkaWZmX3QgQ2FsbEZyYW1lSGVhZGVyU2xvdHMgPSA0OwogI2VuZGlmCiAgICAg
Y29uc3QgcHRyZGlmZl90IFNsb3RTaXplID0gODsKICNlbmRpZgpAQCAtODksOCArODksNyBAQCB2
b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAgICBBU1NFUlQoSlNTdGFjazo6
Q2FsbGVyRnJhbWVBbmRQQ1NpemUgPT0gKFB0clNpemUgKiAyKSAvIFNsb3RTaXplKTsKICAgICBB
U1NFUlQoQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpID09IENhbGxGcmFtZTo6Y2FsbGVyRnJh
bWVPZmZzZXQoKSArIFB0clNpemUpOwogICAgIEFTU0VSVChKU1N0YWNrOjpDb2RlQmxvY2sgKiBz
aXplb2YoUmVnaXN0ZXIpID09IENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSArIFB0clNpemUp
OwotICAgIEFTU0VSVChKU1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9mKFJlZ2lzdGVyKSA9PSBK
U1N0YWNrOjpDb2RlQmxvY2sgKiBzaXplb2YoUmVnaXN0ZXIpICsgU2xvdFNpemUpOwotICAgIEFT
U0VSVChKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpID09IEpTU3RhY2s6OlNjb3Bl
Q2hhaW4gKiBzaXplb2YoUmVnaXN0ZXIpICsgU2xvdFNpemUpOworICAgIEFTU0VSVChKU1N0YWNr
OjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIpID09IEpTU3RhY2s6OkNvZGVCbG9jayAqIHNpemVv
ZihSZWdpc3RlcikgKyBTbG90U2l6ZSk7CiAgICAgQVNTRVJUKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQgKiBzaXplb2YoUmVnaXN0ZXIpID09IEpTU3RhY2s6OkNhbGxlZSAqIHNpemVvZihSZWdpc3Rl
cikgKyBTbG90U2l6ZSk7CiAgICAgQVNTRVJUKEpTU3RhY2s6OlRoaXNBcmd1bWVudCAqIHNpemVv
ZihSZWdpc3RlcikgPT0gSlNTdGFjazo6QXJndW1lbnRDb3VudCAqIHNpemVvZihSZWdpc3Rlcikg
KyBTbG90U2l6ZSk7CiAgICAgQVNTRVJUKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgPT0g
SlNTdGFjazo6VGhpc0FyZ3VtZW50KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
Nzg3NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIG1hY3JvIGRvVk1F
bnRyeShtYWtlQ2FsbCkKIAogLnN0YWNrSGVpZ2h0T0s6CiAgICAgbW92ZSB0ZW1wMSwgc3AKLSAg
ICBtb3ZlIDUsIHRlbXAxCisgICAgbW92ZSA0LCB0ZW1wMQogCiAuY29weUhlYWRlckxvb3A6CiAg
ICAgc3ViaSAxLCB0ZW1wMQpAQCAtMTk0MCwxNCArMTk0MCwxMSBAQCBtYWNybyBkb0NhbGwoc2xv
d1BhdGgpCiAgICAgbHNoaWZ0aSAzLCB0MwogICAgIG5lZ2kgdDMKICAgICBhZGRwIGNmciwgdDMg
ICMgdDMgY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBjZnIKLSAgICBsb2FkcCBKU0Z1bmN0aW9u
OjptX3Njb3BlW3QyXSwgdDAKICAgICBzdG9yZWkgdDIsIENhbGxlZSArIFBheWxvYWRPZmZzZXRb
dDNdCi0gICAgc3RvcmVpIHQwLCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFt0M10KICAgICBs
b2FkaSAxMltQQ10sIHQyCiAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0
W2Nmcl0KICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQog
ICAgIHN0b3JlaSBDZWxsVGFnLCBDYWxsZWUgKyBUYWdPZmZzZXRbdDNdCi0gICAgc3RvcmVpIENl
bGxUYWcsIFNjb3BlQ2hhaW4gKyBUYWdPZmZzZXRbdDNdCiAgICAgYWRkcCBDYWxsZXJGcmFtZUFu
ZFBDU2l6ZSwgdDMKICAgICBjYWxsVGFyZ2V0RnVuY3Rpb24odDEsIHQzKQogCkBAIC0yMDI5LDQx
ICsyMDI2LDYgQEAgX2xsaW50X29wX2NhdGNoOgogICAgIHRyYWNlRXhlY3V0aW9uKCkgICMgVGhp
cyBuZWVkcyB0byBiZSBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjbG9iYmVyIHQwLCB0
MSwgdDIsIHQzIGFib3ZlLgogICAgIGRpc3BhdGNoKDIpCiAKLQotIyBHaXZlcyB5b3UgdGhlIHNj
b3BlIGluIHQwLCB3aGlsZSBhbGxvd2luZyB5b3UgdG8gb3B0aW9uYWxseSBwZXJmb3JtIGFkZGl0
aW9uYWwgY2hlY2tzIG9uIHRoZQotIyBzY29wZXMgYXMgdGhleSBhcmUgdHJhdmVyc2VkLiBzY29w
ZUNoZWNrKCkgaXMgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogdGhlIHJlZ2lzdGVyCi0jIGhv
bGRpbmcgdGhlIHNjb3BlLCBhbmQgYSByZWdpc3RlciB0aGF0IGNhbiBiZSB1c2VkIGZvciBzY3Jh
dGNoLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdAotIyB1c2UgdDMsIHNvIHlvdSBjYW4gaG9sZCBz
dHVmZiBpbiB0MyBpZiBuZWVkIGJlLgotbWFjcm8gZ2V0RGVCcnVpam5TY29wZShkZUJydWlqaW5J
bmRleE9wZXJhbmQsIHNjb3BlQ2hlY2spCi0gICAgbG9hZHAgU2NvcGVDaGFpbiArIFBheWxvYWRP
ZmZzZXRbY2ZyXSwgdDAKLSAgICBsb2FkaSBkZUJydWlqaW5JbmRleE9wZXJhbmQsIHQyCi0KLSAg
ICBidGl6IHQyLCAuZG9uZQotCi0gICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCi0gICAgYmlu
ZXEgQ29kZUJsb2NrOjptX2NvZGVUeXBlW3QxXSwgRnVuY3Rpb25Db2RlLCAubG9vcAotICAgIGJ0
YnogQ29kZUJsb2NrOjptX25lZWRzQWN0aXZhdGlvblt0MV0sIC5sb29wCi0KLSAgICBsb2FkaSBD
b2RlQmxvY2s6Om1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXJbdDFdLCB0MQotCi0gICAgIyBO
ZWVkIHRvIGNvbmRpdGlvbmFsbHkgc2tpcCBvdmVyIG9uZSBzY29wZS4KLSAgICBiaWVxIFRhZ09m
ZnNldFtjZnIsIHQxLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm5vQWN0aXZhdGlvbgotICAgIHNjb3Bl
Q2hlY2sodDAsIHQxKQotICAgIGxvYWRwIEpTU2NvcGU6Om1fbmV4dFt0MF0sIHQwCi0ubm9BY3Rp
dmF0aW9uOgotICAgIHN1YmkgMSwgdDIKLQotICAgIGJ0aXogdDIsIC5kb25lCi0ubG9vcDoKLSAg
ICBzY29wZUNoZWNrKHQwLCB0MSkKLSAgICBsb2FkcCBKU1Njb3BlOjptX25leHRbdDBdLCB0MAot
ICAgIHN1YmkgMSwgdDIKLSAgICBidGlueiB0MiwgLmxvb3AKLQotLmRvbmU6Ci0KLWVuZAotCiBf
bGxpbnRfb3BfZW5kOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjaGVja1N3aXRjaFRvSklU
Rm9yRXBpbG9ndWUoKQpAQCAtMjA5NSw5ICsyMDU3LDYgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1w
b2xpbmUoZXhlY3V0YWJsZU9mZgogICAgIGZ1bmN0aW9uUHJvbG9ndWUoKQogICAgIHN0b3JlcCAw
LCBDb2RlQmxvY2tbY2ZyXQogICAgIGxvYWRpIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwg
dDEKLSAgICBsb2FkaSBKU0NhbGxlZTo6bV9zY29wZVt0MV0sIHQwCi0gICAgc3RvcmVpIENlbGxU
YWcsIFNjb3BlQ2hhaW4gKyBUYWdPZmZzZXRbY2ZyXQotICAgIHN0b3JlaSB0MCwgU2NvcGVDaGFp
biArIFBheWxvYWRPZmZzZXRbY2ZyXQogICAgIC8vIENhbGxlZSBpcyBzdGlsbCBpbiB0MSBmb3Ig
Y29kZSBiZWxvdwogICAgIGlmIFg4NiBvciBYODZfV0lOCiAgICAgICAgIHN1YnAgOCwgc3AgIyBh
bGlnbiBzdGFjayBwb2ludGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTc4NzU3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCBtYWNybyBkb1ZNRW50cnkobWFrZUNhbGwp
CiAKIC5zdGFja0hlaWdodE9LOgogICAgIG1vdmUgdGVtcDEsIHNwCi0gICAgbW92ZSA1LCB0ZW1w
MQorICAgIG1vdmUgNCwgdGVtcDEKIAogLmNvcHlIZWFkZXJMb29wOgogICAgIHN1YmkgMSwgdGVt
cDEKQEAgLTE3OTksOSArMTc5OSw3IEBAIG1hY3JvIGRvQ2FsbChzbG93UGF0aCkKICAgICBsc2hp
ZnRpIDMsIHQzCiAgICAgbmVncCB0MwogICAgIGFkZHAgY2ZyLCB0MwotICAgIGxvYWRwIEpTRnVu
Y3Rpb246Om1fc2NvcGVbdDJdLCB0MAogICAgIHN0b3JlcSB0MiwgQ2FsbGVlW3QzXQotICAgIHN0
b3JlcSB0MCwgU2NvcGVDaGFpblt0M10KICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDIp
CiAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KICAgICBzdG9y
ZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQpAQCAtMTkzMCw5ICsxOTI4
LDYgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgICAgICBh
bmRwIE1hcmtlZEJsb2NrTWFzaywgdDAsIHQxCiAgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjpt
X3dlYWtTZXQgKyBXZWFrU2V0OjptX3ZtW3QxXSwgdDEKICAgICAgICAgc3RvcmVwIGNmciwgVk06
OnRvcENhbGxGcmFtZVt0MV0KLSAgICAgICAgLy8gQ2FsbGVlIHN0aWxsIGluIHQwCi0gICAgICAg
IGxvYWRwIEpTQ2FsbGVlOjptX3Njb3BlW3QwXSwgdDEKLSAgICAgICAgc3RvcmVxIHQxLCBTY29w
ZUNoYWluW2Nmcl0KICAgICAgICAgbW92ZSBjZnIsIGFyZzEKICAgICAgICAgbG9hZHAgQ2FsbGVl
W2Nmcl0sIGFyZzIKICAgICAgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9leGVjdXRhYmxlW2FyZzJd
LCB0ZW1wCkBAIC0xOTUyLDkgKzE5NDcsNiBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShl
eGVjdXRhYmxlT2ZmCiAgICAgICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MCwgdDEKICAgICAg
ICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fd2Vha1NldCArIFdlYWtTZXQ6Om1fdm1bdDFdLCB0MQog
ICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QxXQotICAgICAgICAvLyBDYWxs
ZWUgc3RpbGwgaW4gdDAKLSAgICAgICAgbG9hZHAgSlNDYWxsZWU6Om1fc2NvcGVbdDBdLCB0MQot
ICAgICAgICBzdG9yZXAgdDEsIFNjb3BlQ2hhaW5bY2ZyXQogICAgICAgICBwcmVzZXJ2ZVJldHVy
bkFkZHJlc3NBZnRlckNhbGwodDMpCiAgICAgICAgIHN0b3JlcCB0MywgUmV0dXJuUENbY2ZyXQog
ICAgICAgICBtb3ZlIGNmciwgdDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE3ODc1NykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEwIEBAIGVuZAogCiBpZiBKU1ZBTFVFNjQKICAgICBjb25z
dCBQdHJTaXplID0gOAotICAgIGNvbnN0IENhbGxGcmFtZUhlYWRlclNsb3RzID0gNgorICAgIGNv
bnN0IENhbGxGcmFtZUhlYWRlclNsb3RzID0gNQogZWxzZQogICAgIGNvbnN0IFB0clNpemUgPSA0
Ci0gICAgY29uc3QgQ2FsbEZyYW1lSGVhZGVyU2xvdHMgPSA1CisgICAgY29uc3QgQ2FsbEZyYW1l
SGVhZGVyU2xvdHMgPSA0CiAgICAgY29uc3QgQ2FsbEZyYW1lQWxpZ25TbG90cyA9IDEKIGVuZAog
Y29uc3QgU2xvdFNpemUgPSA4CkBAIC01MCw4ICs1MCw3IEBAIGNvbnN0IENhbGxlckZyYW1lQW5k
UENTaXplID0gMiAqIFB0clNpemUKIGNvbnN0IENhbGxlckZyYW1lID0gMAogY29uc3QgUmV0dXJu
UEMgPSBDYWxsZXJGcmFtZSArIFB0clNpemUKIGNvbnN0IENvZGVCbG9jayA9IFJldHVyblBDICsg
UHRyU2l6ZQotY29uc3QgU2NvcGVDaGFpbiA9IENvZGVCbG9jayArIFNsb3RTaXplCi1jb25zdCBD
YWxsZWUgPSBTY29wZUNoYWluICsgU2xvdFNpemUKK2NvbnN0IENhbGxlZSA9IENvZGVCbG9jayAr
IFNsb3RTaXplCiBjb25zdCBBcmd1bWVudENvdW50ID0gQ2FsbGVlICsgU2xvdFNpemUKIGNvbnN0
IFRoaXNBcmd1bWVudE9mZnNldCA9IEFyZ3VtZW50Q291bnQgKyBTbG90U2l6ZQogY29uc3QgQ2Fs
bEZyYW1lSGVhZGVyU2l6ZSA9IFRoaXNBcmd1bWVudE9mZnNldAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245079</attachid>
            <date>2015-01-21 13:00:40 -0800</date>
            <delta_ts>2015-01-21 13:13:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>136724.patch</filename>
            <type>text/plain</type>
            <size>35319</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc4ODU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE1LTAxLTIxICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVsaW1pbmF0ZSBTY29wZSBzbG90IGZyb20gSmF2YVNjcmlwdCBDYWxsRnJhbWUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjcyNAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZmluaXNoZXMg
dGhlIHJlbW92YWwgb2YgdGhlIHNjb3BlIGNoYWluIHNsb3QgZnJvbSB0aGUgY2FsbCBmcmFtZSBo
ZWFkZXIuCisKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yOjpyZWFkVG9wKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBmdGwvRlRM
SlNDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGw6OmVtaXQpOgorICAgICAgICAq
IGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVOYXRpdmVDYWxsT3JDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2FsbE9yQ29uc3RydWN0KToKKyAgICAgICAgKiBpbnRl
cnByZXRlci9KU1N0YWNrLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3Bw
OgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6ZHVtcEZyYW1lKToKKyAgICAgICAgKiBqaXQv
SklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAg
ICogaml0L0pJVENhbGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2Fs
bCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5j
cHA6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAgICAgICAoSlNDOjpsaW5r
Q2xvc3VyZUNhbGwpOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAgICAg
ICAoSlNDOjp2aXJ0dWFsRm9yVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpuYXRpdmVG
b3JHZW5lcmF0b3IpOgorICAgICAgICBEZWxldGVkIFNjb3BlQ2hhaW4gc2xvdCBmcm9tIEpTU3Rh
Y2suICBSZW1vdmVkIGFsbCBjb2RlIHdoZXJlIFNjb3BlQ2hhaW4gd2FzIGJlaW5nCisgICAgICAg
IHJlYWQgb3Igc2V0LiAgSW4gbW9zdCBjYXNlcyB0aGlzIHdhcyB3aGVyZSB3ZSBtYWtlIEpTIGNh
bGxzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVDbG9zdXJlOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZUNsb3N1cmU6OnJlc2V0Q2FsbEZyYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVj
dXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToKKyAgICAgICAg
KEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6cHJlcGFyZUZvclJlcGVhdENhbGwpOgorICAgICAgICAqIGludGVycHJldGVyL1By
b3RvQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvdG9DYWxsRnJhbWU6OmluaXQpOgor
ICAgICAgICAqIGludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OlBy
b3RvQ2FsbEZyYW1lOjpzY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlByb3RvQ2FsbEZy
YW1lOjpzZXRTY29wZSk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJbnREYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6TExJbnQ6OkRhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKToKKyAgICAgICAg
KiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtOgorICAgICAgICBSZW1vdmVkIHRoZSByZWxhdGVkIHNjb3BlQ2hh
aW5WYWx1ZSBtZW1iZXIgZnJvbSBQcm90b0NhbGxGcmFtZS4gIFJlZHVjZWQgdGhlIG51bWJlciBv
ZgorICAgICAgICByZWdpc3RlcnMgdGhhdCBuZWVkZWQgdG8gYmUgY29waWVkIGZyb20gdGhlIFBy
b3RvQ2FsbEZyYW1lIHRvIGEgY2FsbGVlJ3MgZnJhbWUKKyAgICAgICAgZnJvbSA1IHRvIDQuCisK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICBJ
biBhZGRpdGlvbiB0byB0aGUgcHJpb3IgY2hhbmdlcywgYWxzbyBkZWxldGVkIHRoZSB1bnVzZWQg
bWFjcm8gZ2V0RGVCcnVpam5TY29wZS4KKwogMjAxNS0wMS0yMSAgTWljaGFlbCBTYWJvZmYgIDxt
c2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBFbGltaW5hdGUgY29uc3RydWN0IG1ldGhvZHMg
ZnJvbSBOdWxsR2V0dGVyRnVuY3Rpb24gYW5kIE51bGxTZXR0ZXJGdW5jdGlvbiBjbGFzc2VzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxNzg3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Nyw4ICsxOTcsNiBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaml0
LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9j
ayksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q29kZUJsb2NrKSkpOwotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9y
ZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKS0+c2NvcGUoKSkpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwogICAgICAgICBqaXQuc3RvcmU2NChj
YWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKICAgICAgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbEZyYW1lOjpMb2NhdGlvbjo6ZW5jb2RlQXNCeXRlY29kZU9mZnNldChj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpKTsKQEAgLTIxMSw5ICsyMDksNiBAQCB2b2lkIHJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYmFzZWxpbmVDb2RlQmxvY2st
PmFyZ3VtZW50c1JlZ2lzdGVyKCkpLm9mZnNldCgpKSksIEdQUkluZm86OnJlZ1QzKTsKICNlbHNl
IC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgICAg
IGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2Rl
QmxvY2spLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNvZGVCbG9jaykpKTsKLSAgICAg
ICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSkpOwotICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgIGppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZWVDb25zdGFudCgpLT5zY29wZSgpKSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29w
ZUNoYWluKSkpOwogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZU9mZnNldCgpKSk7CiAgICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5l
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsRnJhbWU6OkxvY2F0aW9u
OjplbmNvZGVBc0J5dGVjb2RlSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXpl
LmgJKHJldmlzaW9uIDE3ODc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTAgKzEzMSw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFt
ZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCk7IGktLSA+IDE7KQogICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFs
UmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGkpLm9mZnNldCgpKSk7Ci0gICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1l
LT5pc0Nsb3N1cmVDYWxsKSB7Ci0gICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFpbikpOwor
ICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAg
ICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTc4Nzk1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Njk2LDkgKzY5Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAKICAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoTm90Q2VsbChjYWxsZWUuanNWYWx1ZVJl
Z3MoKSkpOwogICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXlsb2FkR1BSLCB0YXJnZXRUb0NoZWNrKSk7
Ci0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVQYXlsb2Fk
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCByZXN1bHRQYXlsb2Fk
R1BSKTsKLSAgICBtX2ppdC5zdG9yZVB0cihyZXN1bHRQYXlsb2FkR1BSLCBjYWxsZWVGcmFtZVBh
eWxvYWRTbG90KEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKLSAgICBtX2ppdC5zdG9yZVB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBjYWxsZWVGcmFtZVRh
Z1Nsb3QoSlNTdGFjazo6U2NvcGVDaGFpbikpOwogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFz
dENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE3ODc5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3Niw5ICs2NzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlCiAKICAgICBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwogCi0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBt
X3Njb3BlKSksIHJlc3VsdEdQUik7Ci0gICAgbV9qaXQuc3RvcmU2NChyZXN1bHRHUFIsIGNhbGxl
ZUZyYW1lU2xvdChKU1N0YWNrOjpTY29wZUNoYWluKSk7Ci0KICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlND
YWxsLmNwcAkocmV2aXNpb24gMTc4Nzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKU0NhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxNSArNTcsNiBAQCB2b2lkIEpTQ2Fs
bDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCkKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgR1BSSW5mbzo6cmVnVDAsIG1fdGFyZ2V0VG9DaGVjaywKICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKDApKTsKICAgICAKLSAgICBqaXQubG9hZFB0cigKLSAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNj
b3BlQ2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSAgICBqaXQuc3RvcmU2NCgK
LSAgICAgICAgR1BSSW5mbzo6cmVnVDEsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcygK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsCi0gICAgICAg
ICAgICBzaXplb2YoUmVnaXN0ZXIpICogKEpTU3RhY2s6OlNjb3BlQ2hhaW4gLSBKU1N0YWNrOjpD
YWxsZXJGcmFtZUFuZFBDU2l6ZSkpKTsKLSAgICAKICAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJD
YWxsKCk7CiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwogICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHJldmlzaW9uIDE3ODc5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjI3LDEwICszNjI3LDggQEAgcHJp
dmF0ZToKICAgICAgICAgaWYgKChub3RJbmxpbmFibGUgPSAhY2FsbGVlKSkKICAgICAgICAgICAg
IGNhbGxlZSA9IG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbik7CiAKLSAgICAgICAgSlNTY29wZSog
c2NvcGUgPSBrbm93bkZ1bmN0aW9uLT5zY29wZVVuY2hlY2tlZCgpOwogICAgICAgICBtX291dC5z
dG9yZVB0cihtX2NhbGxGcmFtZSwgbV9leGVjU3RvcmFnZSwgbV9oZWFwcy5DYWxsRnJhbWVfY2Fs
bGVyRnJhbWUpOwogICAgICAgICBtX291dC5zdG9yZVB0cihjb25zdE51bGwobV9vdXQuaW50UHRy
KSwgYWRkcmVzc0ZvcihtX2V4ZWNTdG9yYWdlLCBKU1N0YWNrOjpDb2RlQmxvY2spKTsKLSAgICAg
ICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIoc2NvcGUpLCBhZGRyZXNzRm9yKG1fZXhlY1N0
b3JhZ2UsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKICAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vh
a1BvaW50ZXIoa25vd25GdW5jdGlvbiksIGFkZHJlc3NGb3IobV9leGVjU3RvcmFnZSwgSlNTdGFj
azo6Q2FsbGVlKSk7CiAKICAgICAgICAgbV9vdXQuc3RvcmU2NChtX291dC5jb25zdEludDY0KG51
bUFyZ3MpLCBhZGRyZXNzRm9yKG1fZXhlY1N0b3JhZ2UsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KTsKQEAgLTM2NzgsNyArMzY3Niw2IEBAIHByaXZhdGU6CiAgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQobV9vdXQuY29uc3RJbnQzMigxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAtIEpT
U3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplICsgbnVtQXJncykpOwogICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGpzQ2FsbGVlKTsgLy8gY2FsbGVlIC0+ICVyYXgKICAgICAgICAgYXJndW1lbnRz
LmFwcGVuZChnZXRVbmRlZihtX291dC5pbnQ2NCkpOyAvLyBjb2RlIGJsb2NrCi0gICAgICAgIGFy
Z3VtZW50cy5hcHBlbmQoZ2V0VW5kZWYobV9vdXQuaW50NjQpKTsgLy8gc2NvcGUgY2hhaW4KICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZChqc0NhbGxlZSk7IC8vIGNhbGxlZSAtPiBzdGFjawogICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50NjQobnVtQXJncykpOyAvLyBhcmd1
bWVudCBjb3VudCBhbmQgemVyb3MgZm9yIHRoZSB0YWcKICAgICAgICAgaWYgKGR1bW15VGhpc0Fy
Z3VtZW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFt
ZUNsb3N1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCShyZXZpc2lvbiAxNzg3OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lQ2xvc3VyZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSwxMSArNDksNiBAQCBzdHJ1Y3QgQ2FsbEZyYW1lQ2xvc3VyZSB7CiAgICAgewogICAgICAg
ICBwcm90b0NhbGxGcmFtZS0+c2V0QXJndW1lbnQoYXJndW1lbnQsIHZhbHVlKTsKICAgICB9Ci0K
LSAgICB2b2lkIHJlc2V0Q2FsbEZyYW1lKCkKLSAgICB7Ci0gICAgICAgIHByb3RvQ2FsbEZyYW1l
LT5zZXRTY29wZShzY29wZSk7Ci0gICAgfQogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNzg3
OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MDAsNyArOTAwLDcgQEAgZmFpbGVkSlNPTlA6CiAgICAgQVNT
RVJUKGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpID09IDEpOyAvLyAxIHBhcmFtZXRlciBmb3Ig
J3RoaXMnLgogCiAgICAgUHJvdG9DYWxsRnJhbWUgcHJvdG9DYWxsRnJhbWU7Ci0gICAgcHJvdG9D
YWxsRnJhbWUuaW5pdChjb2RlQmxvY2ssIHNjb3BlLCBKU0NhbGxlZTo6Y3JlYXRlKHZtLCBzY29w
ZS0+Z2xvYmFsT2JqZWN0KCksIHNjb3BlKSwgdGhpc09iaiwgMSk7CisgICAgcHJvdG9DYWxsRnJh
bWUuaW5pdChjb2RlQmxvY2ssIEpTQ2FsbGVlOjpjcmVhdGUodm0sIHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKSwgc2NvcGUpLCB0aGlzT2JqLCAxKTsKIAogICAgIGlmIChMZWdhY3lQcm9maWxlciogcHJv
ZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxFeGVj
dXRlKGNhbGxGcmFtZSwgcHJvZ3JhbS0+c291cmNlVVJMKCksIHByb2dyYW0tPmxpbmVObygpLCBw
cm9ncmFtLT5zdGFydENvbHVtbigpKTsKQEAgLTk2Myw3ICs5NjMsNyBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgICAgIHJldHVybiB0aHJvd1Rlcm1pbmF0
ZWRFeGVjdXRpb25FeGNlcHRpb24oY2FsbEZyYW1lKTsKIAogICAgIFByb3RvQ2FsbEZyYW1lIHBy
b3RvQ2FsbEZyYW1lOwotICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBzY29w
ZSwgZnVuY3Rpb24sIHRoaXNWYWx1ZSwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CisgICAgcHJv
dG9DYWxsRnJhbWUuaW5pdChuZXdDb2RlQmxvY2ssIGZ1bmN0aW9uLCB0aGlzVmFsdWUsIGFyZ3ND
b3VudCwgYXJncy5kYXRhKCkpOwogCiAgICAgaWYgKExlZ2FjeVByb2ZpbGVyKiBwcm9maWxlciA9
IHZtLmVuYWJsZWRQcm9maWxlcigpKQogICAgICAgICBwcm9maWxlci0+d2lsbEV4ZWN1dGUoY2Fs
bEZyYW1lLCBmdW5jdGlvbik7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBKU09iamVjdCogSW50ZXJw
cmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAgICAgICAgIHJldHVybiB0aHJvd1Rlcm1pbmF0ZWRF
eGVjdXRpb25FeGNlcHRpb24oY2FsbEZyYW1lKTsKIAogICAgIFByb3RvQ2FsbEZyYW1lIHByb3Rv
Q2FsbEZyYW1lOwotICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBzY29wZSwg
Y29uc3RydWN0b3IsIGpzVW5kZWZpbmVkKCksIGFyZ3NDb3VudCwgYXJncy5kYXRhKCkpOworICAg
IHByb3RvQ2FsbEZyYW1lLmluaXQobmV3Q29kZUJsb2NrLCBjb25zdHJ1Y3RvciwganNVbmRlZmlu
ZWQoKSwgYXJnc0NvdW50LCBhcmdzLmRhdGEoKSk7CiAKICAgICBpZiAoTGVnYWN5UHJvZmlsZXIq
IHByb2ZpbGVyID0gdm0uZW5hYmxlZFByb2ZpbGVyKCkpCiAgICAgICAgIHByb2ZpbGVyLT53aWxs
RXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKQEAgLTEwODMsNyArMTA4Myw3IEBAIENh
bGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKIAogICAgIHNpemVfdCBhcmdz
Q291bnQgPSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsKIAotICAgIHByb3RvQ2FsbEZyYW1l
LT5pbml0KG5ld0NvZGVCbG9jaywgc2NvcGUsIGZ1bmN0aW9uLCBqc1VuZGVmaW5lZCgpLCBhcmdz
Q291bnQsIGFyZ3MpOworICAgIHByb3RvQ2FsbEZyYW1lLT5pbml0KG5ld0NvZGVCbG9jaywgZnVu
Y3Rpb24sIGpzVW5kZWZpbmVkKCksIGFyZ3NDb3VudCwgYXJncyk7CiAgICAgLy8gUmV0dXJuIHRo
ZSBzdWNjZXNzZnVsIGNsb3N1cmU6CiAgICAgQ2FsbEZyYW1lQ2xvc3VyZSByZXN1bHQgPSB7IGNh
bGxGcmFtZSwgcHJvdG9DYWxsRnJhbWUsIGZ1bmN0aW9uLCBmdW5jdGlvbkV4ZWN1dGFibGUsICZ2
bSwgc2NvcGUsIG5ld0NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpLCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyB9OwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMTAwLDcgKzExMDAsNiBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAgICAgICAgIHJldHVybiBq
c051bGwoKTsKIAogICAgIFN0YWNrU3RhdHM6OkNoZWNrUG9pbnQgc3RhY2tDaGVja1BvaW50Owot
ICAgIGNsb3N1cmUucmVzZXRDYWxsRnJhbWUoKTsKIAogICAgIGlmIChMZWdhY3lQcm9maWxlciog
cHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXItPndpbGxF
eGVjdXRlKGNsb3N1cmUub2xkQ2FsbEZyYW1lLCBjbG9zdXJlLmZ1bmN0aW9uKTsKQEAgLTExODcs
NyArMTE4Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAg
ICBBU1NFUlQoY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkgPT0gMSk7IC8vIDEgcGFyYW1ldGVy
IGZvciAndGhpcycuCiAKICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0NhbGxGcmFtZTsKLSAgICBw
cm90b0NhbGxGcmFtZS5pbml0KGNvZGVCbG9jaywgc2NvcGUsIEpTQ2FsbGVlOjpjcmVhdGUodm0s
IHNjb3BlLT5nbG9iYWxPYmplY3QoKSwgc2NvcGUpLCB0aGlzVmFsdWUsIDEpOworICAgIHByb3Rv
Q2FsbEZyYW1lLmluaXQoY29kZUJsb2NrLCBKU0NhbGxlZTo6Y3JlYXRlKHZtLCBzY29wZS0+Z2xv
YmFsT2JqZWN0KCksIHNjb3BlKSwgdGhpc1ZhbHVlLCAxKTsKIAogICAgIGlmIChMZWdhY3lQcm9m
aWxlciogcHJvZmlsZXIgPSB2bS5lbmFibGVkUHJvZmlsZXIoKSkKICAgICAgICAgcHJvZmlsZXIt
PndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgZXZhbC0+c291cmNlVVJMKCksIGV2YWwtPmxpbmVObygp
LCBldmFsLT5zdGFydENvbHVtbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9KU1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0pTU3RhY2suaAkocmV2aXNpb24gMTc4Nzk1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0pTU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW51bSBDYWxsRnJhbWVIZWFkZXJFbnRyeSB7
CiAgICAgICAgICAgICBDYWxsZXJGcmFtZUFuZFBDU2l6ZSA9IHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSAvIHNpemVvZihSZWdpc3RlciksCiAgICAgICAgICAgICBDb2RlQmxvY2sgPSBDYWxsZXJG
cmFtZUFuZFBDU2l6ZSwKLSAgICAgICAgICAgIFNjb3BlQ2hhaW4sCiAgICAgICAgICAgICBDYWxs
ZWUsCiAgICAgICAgICAgICBBcmd1bWVudENvdW50LAogICAgICAgICAgICAgQ2FsbEZyYW1lSGVh
ZGVyU2l6ZSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9Qcm90b0Nh
bGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTc4Nzk1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsMTEgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFByb3RvQ2FsbEZy
YW1lOjppbml0KENvZGVCbG9jayogY29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgSlNPYmplY3Qq
IGNhbGxlZSwgSlNWYWx1ZSB0aGlzVmFsdWUsIGludCBhcmdDb3VudEluY2x1ZGluZ1RoaXMsIEpT
VmFsdWUqIG90aGVyQXJncykKK3ZvaWQgUHJvdG9DYWxsRnJhbWU6OmluaXQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIEpTT2JqZWN0KiBjYWxsZWUsIEpTVmFsdWUgdGhpc1ZhbHVlLCBpbnQgYXJnQ291
bnRJbmNsdWRpbmdUaGlzLCBKU1ZhbHVlKiBvdGhlckFyZ3MpCiB7CiAgICAgdGhpcy0+YXJncyA9
IG90aGVyQXJnczsKICAgICB0aGlzLT5zZXRDb2RlQmxvY2soY29kZUJsb2NrKTsKLSAgICB0aGlz
LT5zZXRTY29wZShzY29wZSk7CiAgICAgdGhpcy0+c2V0Q2FsbGVlKGNhbGxlZSk7CiAgICAgdGhp
cy0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoYXJnQ291bnRJbmNsdWRpbmdUaGlzKTsK
ICAgICBpZiAoY29kZUJsb2NrICYmIGFyZ0NvdW50SW5jbHVkaW5nVGhpcyA8IGNvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1Byb3RvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1Byb3RvQ2FsbEZyYW1lLmgJKHJldmlzaW9uIDE3ODc5NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9Qcm90b0NhbGxGcmFtZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBzdHJ1Y3QgUHJvdG9DYWxsRnJh
bWUgewogICAgIFJlZ2lzdGVyIGNvZGVCbG9ja1ZhbHVlOwotICAgIFJlZ2lzdGVyIHNjb3BlQ2hh
aW5WYWx1ZTsKICAgICBSZWdpc3RlciBjYWxsZWVWYWx1ZTsKICAgICBSZWdpc3RlciBhcmdDb3Vu
dEFuZENvZGVPcmlnaW5WYWx1ZTsKICAgICBSZWdpc3RlciB0aGlzQXJnOwpAQCAtNDAsMTQgKzM5
LDExIEBAIHN0cnVjdCBQcm90b0NhbGxGcmFtZSB7CiAgICAgYm9vbCBhcml0eU1pc3NNYXRjaDsK
ICAgICBKU1ZhbHVlICphcmdzOwogCi0gICAgdm9pZCBpbml0KENvZGVCbG9jayosIEpTU2NvcGUq
LCBKU09iamVjdCosIEpTVmFsdWUsIGludCwgSlNWYWx1ZSogb3RoZXJBcmdzID0gMCk7CisgICAg
dm9pZCBpbml0KENvZGVCbG9jayosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgaW50LCBKU1ZhbHVlKiBv
dGhlckFyZ3MgPSAwKTsKIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3QgeyByZXR1
cm4gY29kZUJsb2NrVmFsdWUuUmVnaXN0ZXI6OmNvZGVCbG9jaygpOyB9CiAgICAgdm9pZCBzZXRD
b2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2spIHsgY29kZUJsb2NrVmFsdWUgPSBjb2RlQmxv
Y2s7IH0KIAotICAgIEpTU2NvcGUqIHNjb3BlKCkgY29uc3QgeyByZXR1cm4gc2NvcGVDaGFpblZh
bHVlLlJlZ2lzdGVyOjpzY29wZSgpOyB9Ci0gICAgdm9pZCBzZXRTY29wZShKU1Njb3BlKiBzY29w
ZSkgeyBzY29wZUNoYWluVmFsdWUgPSBzY29wZTsgfQotCiAgICAgSlNPYmplY3QqIGNhbGxlZSgp
IGNvbnN0IHsgcmV0dXJuIGNhbGxlZVZhbHVlLlJlZ2lzdGVyOjpmdW5jdGlvbigpOyB9CiAgICAg
dm9pZCBzZXRDYWxsZWUoSlNPYmplY3QqIGNhbGxlZSkgeyBjYWxsZWVWYWx1ZSA9IFJlZ2lzdGVy
Ojp3aXRoQ2FsbGVlKGNhbGxlZSk7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1ZNSW5zcGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCShyZXZpc2lvbiAxNzg3OTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvVk1JbnNwZWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MywxNCArNzMsMTIgQEAgdm9pZCBWTUluc3BlY3Rvcjo6ZHVtcEZyYW1lKENh
bGxGcmFtZSogZgogICAgIGlmIChwcmVmaXgpCiAgICAgICAgIHByaW50ZigiJXMgIiwgcHJlZml4
KTsKIAotICAgIHByaW50ZigiZnJhbWUgWyVkXSAlcCB7IGNiICVwOiVzLCByZXRQQyAlcDolcywg
c2NvcGUgJXA6JXMsIGNhbGxlZSAlcDolcywgY2FsbGVyRnJhbWUgJXA6JXMsIGFyZ2MgJWQsIHZQ
QyAlcCB9IiwKKyAgICBwcmludGYoImZyYW1lIFslZF0gJXAgeyBjYiAlcDolcywgcmV0UEMgJXA6
JXMsIGNhbGxlZSAlcDolcywgY2FsbGVyRnJhbWUgJXA6JXMsIGFyZ2MgJWQsIHZQQyAlcCB9IiwK
ICAgICAgICAgZnJhbWVDb3VudCwgZnJhbWUsCiAgICAgICAgIENBU1Q8dm9pZCo+KGZyYW1lW0pT
U3RhY2s6OkNvZGVCbG9ja10ucGF5bG9hZCgpKSwKICAgICAgICAgZ2V0VHlwZU5hbWUoZnJhbWVb
SlNTdGFjazo6Q29kZUJsb2NrXS5qc1ZhbHVlKCkpLAogICAgICAgICBDQVNUPHZvaWQqPihmcmFt
ZVtKU1N0YWNrOjpSZXR1cm5QQ10ucGF5bG9hZCgpKSwKICAgICAgICAgZ2V0VHlwZU5hbWUoZnJh
bWVbSlNTdGFjazo6UmV0dXJuUENdLmpzVmFsdWUoKSksCi0gICAgICAgIENBU1Q8dm9pZCo+KGZy
YW1lW0pTU3RhY2s6OlNjb3BlQ2hhaW5dLnBheWxvYWQoKSksCi0gICAgICAgIGdldFR5cGVOYW1l
KGZyYW1lW0pTU3RhY2s6OlNjb3BlQ2hhaW5dLmpzVmFsdWUoKSksCiAgICAgICAgIENBU1Q8dm9p
ZCo+KGZyYW1lW0pTU3RhY2s6OkNhbGxlZV0ucGF5bG9hZCgpKSwKICAgICAgICAgZ2V0VHlwZU5h
bWUoZnJhbWVbSlNTdGFjazo6Q2FsbGVlXS5qc1ZhbHVlKCkpLAogICAgICAgICBDQVNUPHZvaWQq
PihmcmFtZVtKU1N0YWNrOjpDYWxsZXJGcmFtZV0uY2FsbEZyYW1lKCkpLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAkocmV2aXNpb24gMTc4Nzk1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjQsMTIgKzI2NCwxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJ
RCBvcGNvZGVJCiAgICAgICAgIC0gSW5pdGlhbGl6ZXMgQXJndW1lbnRDb3VudDsgQ2FsbGVyRnJh
bWU7IENhbGxlZS4KIAogICAgICAgIEZvciBhIEpTIGNhbGw6Ci0gICAgICAgIC0gQ2FsbGVyIGlu
aXRpYWxpemVzIFNjb3BlQ2hhaW4uCiAgICAgICAgIC0gQ2FsbGVlIGluaXRpYWxpemVzIFJldHVy
blBDOyBDb2RlQmxvY2suCiAgICAgICAgIC0gQ2FsbGVlIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lz
dGVyIGJlZm9yZSByZXR1cm4uCiAKICAgICAgICBGb3IgYSBub24tSlMgY2FsbDoKLSAgICAgICAg
LSBDYWxsZXIgaW5pdGlhbGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KKyAg
ICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAg
LSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICov
CiAgICAgCkBAIC0zMjcsMTAgKzMyNiw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29k
ZUlEIG9wY29kZUkKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhd
LmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwog
Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwg
bV9zY29wZSkpLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2Yo
UmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwot
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBZGRyZXNzKHN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IFRhZ09mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotCiAgICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwoKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCShyZXZpc2lvbiAxNzg3OTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsMTIg
KzE3NywxMSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAg
ICAgIC0gSW5pdGlhbGl6ZXMgQXJndW1lbnRDb3VudDsgQ2FsbGVyRnJhbWU7IENhbGxlZS4KIAog
ICAgICAgIEZvciBhIEpTIGNhbGw6Ci0gICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFNjb3Bl
Q2hhaW4uCiAgICAgICAgIC0gQ2FsbGVlIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2su
CiAgICAgICAgIC0gQ2FsbGVlIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGJlZm9yZSByZXR1
cm4uCiAKICAgICAgICBGb3IgYSBub24tSlMgY2FsbDoKLSAgICAgICAgLSBDYWxsZXIgaW5pdGlh
bGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVCbG9jay4KKyAgICAgICAgLSBDYWxsZXIg
aW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KICAgICAgICAgLSBDYWxsZXIgcmVzdG9y
ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgogICAgICovCiAgICAgQ09NUElMRV9B
U1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVj
dCksIGNhbGxfYW5kX2NvbnN0cnVjdF9vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwpAQCAt
MjM2LDkgKzIzNSw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUkK
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdp
biA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwogCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9zY29wZSkpLCBy
ZWdUMik7Ci0gICAgc3RvcmU2NChyZWdUMiwgQWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIEpTU3RhY2s6OlNjb3BlQ2hhaW4gKiBzaXplb2YoUmVnaXN0ZXIpIC0g
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0KICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwoKTsKIAogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAkocmV2aXNpb24gMTc4Nzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NywxMiArNTcsNiBAQCBKSVQ6OkNv
ZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1l
UmVnaXN0ZXIsICZtX3ZtLT50b3BDYWxsRnJhbWUpOwogCiAjaWYgQ1BVKFg4NikKLSAgICAvLyBM
b2FkIGNhbGxlciBmcmFtZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhh
dCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgotICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0g
ICAgZW1pdEdldENhbGxlckZyYW1lRnJvbUNhbGxGcmFtZUhlYWRlclB0cihyZWdUMCk7Ci0gICAg
ZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDEs
IHJlZ1QwKTsKLSAgICBlbWl0UHV0Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNr
OjpTY29wZUNoYWluKTsKLQogICAgIC8vIENhbGxpbmcgY29udmVudGlvbjogICAgICBmKGVjeCwg
ZWR4LCAuLi4pOwogICAgIC8vIEhvc3QgZnVuY3Rpb24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSop
OwogICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4KTsKQEAgLTc2
LDExICs3MCw2IEBAIEpJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKDgpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKICNlbGlm
IENQVShBUk0pIHx8IENQVShTSDQpIHx8IENQVShNSVBTKQotICAgIC8vIExvYWQgY2FsbGVyIGZy
YW1lJ3Mgc2NvcGUgY2hhaW4gaW50byB0aGlzIGNhbGxmcmFtZSBzbyB0aGF0IHdoYXRldmVyIHdl
IGNhbGwgY2FuIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgZW1pdEdldENhbGxlckZyYW1l
RnJvbUNhbGxGcmFtZUhlYWRlclB0cihyZWdUMik7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoSlNTdGFjazo6U2NvcGVDaGFpbiwgcmVnVDEsIHJlZ1QyKTsKLSAgICBlbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKHJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQogI2lm
IENQVShNSVBTKQogICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciAodW51c2VkKSAxNiBi
eXRlcyAoOC1ieXRlIGFsaWduZWQpIGZvciA0IGFyZ3VtZW50cy4KICAgICBzdWJQdHIoVHJ1c3Rl
ZEltbTMyKDE2KSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzg3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTEsMTMgKzUxMSw2IEBA
IHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBsb2FkZWRWYWx1ZUdQUiwgYWRkcmVzc09mTGlua0Z1bmN0aW9uQ2hl
Y2ssCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBsb2FkZWRWYWx1ZUdQUiBpcyBhbHJlYWR5IGJ1
cm5lZC4gV2UgY2FuIHJldXNlIGl0LiBGcm9tIGhlcmUgb24gd2UgYXNzdW1lIHRoYXQKLSAgICAg
ICAgICAgIC8vIGFueSB2b2xhdGlsZSByZWdpc3RlciB3aWxsIGJlIGNsb2JiZXJlZCBhbnl3YXku
Ci0gICAgICAgICAgICBzdHViSml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobG9hZGVkVmFsdWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVD
aGFpbigpKSwKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUik7Ci0gICAgICAgICAgICBz
dHViSml0LnN0b3JlQ2VsbCgKLSAgICAgICAgICAgICAgICBsb2FkZWRWYWx1ZUdQUiwgY2FsbGVl
RnJhbWUud2l0aE9mZnNldChKU1N0YWNrOjpTY29wZUNoYWluICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OwogICAgICAgICAgICAgZmFzdFBhdGhDYWxsID0gc3R1YkppdC5uZWFyQ2FsbCgpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBzdHViSml0LmFkZFB0cigKQEAgLTE2ODUsMjMgKzE2NzgsNiBA
QCB2b2lkIGxpbmtDbG9zdXJlQ2FsbCgKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhjYWxsZWVHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSkpOwogICAgIAotICAg
IHN0dWJKaXQubG9hZFB0cigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGNhbGxlZUdQ
UiwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLAotICAgICAgICBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUik7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdHViSml0LnN0
b3JlNjQoCi0gICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAotICAgICAgICBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWlu
KSArIG9mZnNldFRvRnJhbWUpKTsKLSNlbHNlCi0gICAgc3R1YkppdC5zdG9yZVB0cigKLSAgICAg
ICAgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsCi0gICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRp
ZmZfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OlNjb3BlQ2hhaW4pICsgT0JKRUNUX09G
RlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSArIG9mZnNldFRv
RnJhbWUpKTsKLSAgICBzdHViSml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAotICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihSZWdpc3RlcikgKiBKU1N0YWNrOjpTY29wZUNoYWluKSArIE9CSkVDVF9P
RkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSArIG9mZnNldFRvRnJh
bWUpKTsKLSNlbmRpZgotICAgIAogICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsID0gc3R1
YkppdC5uZWFyQ2FsbCgpOwogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcCBkb25lID0gc3R1Ykpp
dC5qdW1wKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiAxNzg3OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCwxNyArMjE0
LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB2aXJ0dWFsRm9yVAogICAgIC8vIE5v
dyB3ZSBrbm93IHRoYXQgd2UgaGF2ZSBhIENvZGVCbG9jaywgYW5kIHdlJ3JlIGNvbW1pdHRlZCB0
byBtYWtpbmcgYSBmYXN0CiAgICAgLy8gY2FsbC4KICAgICAKLSAgICBqaXQubG9hZFB0cigKLSAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZlNjb3BlQ2hhaW4oKSksCi0gICAgICAgIEdQUkluZm86OnJlZ1QxKTsKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIGppdC5lbWl0UHV0VG9DYWxsRnJhbWVIZWFkZXJCZWZvcmVQcm9sb2d1
ZShHUFJJbmZvOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0jZWxzZQotICAgIGppdC5l
bWl0UHV0UGF5bG9hZFRvQ2FsbEZyYW1lSGVhZGVyQmVmb3JlUHJvbG9ndWUoR1BSSW5mbzo6cmVn
VDEsIEpTU3RhY2s6OlNjb3BlQ2hhaW4pOwotICAgIGppdC5lbWl0UHV0VGFnVG9DYWxsRnJhbWVI
ZWFkZXJCZWZvcmVQcm9sb2d1ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwKLSAgICAgICAgSlNTdGFjazo6U2NvcGVDaGFpbik7Ci0jZW5kaWYKLSAgICAKICAg
ICAvLyBNYWtlIGEgdGFpbCBjYWxsLiBUaGlzIHdpbGwgcmV0dXJuIGJhY2sgdG8gSklUIGNvZGUu
CiAgICAgZW1pdFBvaW50ZXJWYWxpZGF0aW9uKGppdCwgR1BSSW5mbzo6cmVnVDQpOwogICAgIGpp
dC5qdW1wKEdQUkluZm86OnJlZ1Q0KTsKQEAgLTI3NiwxMiArMjY1LDYgQEAgc3RhdGljIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBuYXRpdmVGb3JHZQogICAgIGppdC5zdG9yZVB0cihKU0ludGVyZmFj
ZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsICZ2bS0+dG9wQ2FsbEZyYW1lKTsKIAogI2lmIENQVShY
ODYpCi0gICAgLy8gTG9hZCBjYWxsZWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2FsbGZyYW1l
IHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KLSAgICAvLyBnZXQgdG8gaXRzIGdsb2JhbCBk
YXRhLgotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNrOjpDYWxs
ZWUsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmxvYWRQdHIoSlNJbnRlcmZhY2VK
SVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0NhbGxlZTo6b2Zmc2V0T2ZTY29w
ZUNoYWluKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5lbWl0UHV0Q2VsbFRv
Q2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2NvcGVDaGFp
bik7Ci0KICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihlY3gsIGVkeCwgLi4uKTsK
ICAgICAvLyBIb3N0IGZ1bmN0aW9uIHNpZ25hdHVyZTogZihFeGVjU3RhdGUqKTsKICAgICBqaXQu
bW92ZShKU0ludGVyZmFjZUpJVDo6Y2FsbEZyYW1lUmVnaXN0ZXIsIFg4NlJlZ2lzdGVyczo6ZWN4
KTsKQEAgLTI5NiwxMSArMjc5LDYgQEAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBuYXRp
dmVGb3JHZQogICAgIGppdC5hZGRQdHIoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMig4KSwg
SlNJbnRlcmZhY2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIAogI2VsaWYgQ1BVKFg4Nl82
NCkKLSAgICAvLyBMb2FkIGNhbGxlZSdzIHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUg
c28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxsIGNhbgotICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRh
dGEuCi0gICAgaml0LmVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxl
ZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJ
VDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJVDo6cmVnVDEsIEpTQ2FsbGVlOjpvZmZzZXRPZlNjb3Bl
Q2hhaW4oKSksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9D
YWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWlu
KTsKICNpZiAhT1MoV0lORE9XUykKICAgICAvLyBDYWxsaW5nIGNvbnZlbnRpb246ICAgICAgZihl
ZGksIGVzaSwgZWR4LCBlY3gsIC4uLik7CiAgICAgLy8gSG9zdCBmdW5jdGlvbiBzaWduYXR1cmU6
IGYoRXhlY1N0YXRlKik7CkBAIC0zMzMsMTIgKzMxMSw2IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbmF0aXZlRm9yR2UKICAgICBDT01QSUxFX0FTU0VSVChBUk02NFJlZ2lzdGVyczo6
eDEgIT0gSlNJbnRlcmZhY2VKSVQ6OnJlZ1QzLCBUM19ub3RfdHJhbXBsZWRfYnlfYXJnXzEpOwog
ICAgIENPTVBJTEVfQVNTRVJUKEFSTTY0UmVnaXN0ZXJzOjp4MiAhPSBKU0ludGVyZmFjZUpJVDo6
cmVnVDMsIFQzX25vdF90cmFtcGxlZF9ieV9hcmdfMik7CiAKLSAgICAvLyBMb2FkIGNhbGxlZSdz
IHNjb3BlIGNoYWluIGludG8gdGhpcyBjYWxsZnJhbWUgc28gdGhhdCB3aGF0ZXZlciB3ZSBjYWxs
IGNhbgotICAgIC8vIGdldCB0byBpdHMgZ2xvYmFsIGRhdGEuCi0gICAgaml0LmVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKEpTU3RhY2s6OkNhbGxlZSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qx
KTsKLSAgICBqaXQubG9hZFB0cihKU0ludGVyZmFjZUpJVDo6QWRkcmVzcyhKU0ludGVyZmFjZUpJ
VDo6cmVnVDEsIEpTQ2FsbGVlOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIEpTSW50ZXJmYWNlSklU
OjpyZWdUMSk7Ci0gICAgaml0LmVtaXRQdXRDZWxsVG9DYWxsRnJhbWVIZWFkZXIoSlNJbnRlcmZh
Y2VKSVQ6OnJlZ1QxLCBKU1N0YWNrOjpTY29wZUNoYWluKTsKLQogICAgIC8vIEhvc3QgZnVuY3Rp
b24gc2lnbmF0dXJlOiBmKEV4ZWNTdGF0ZSopOwogICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklU
OjpjYWxsRnJhbWVSZWdpc3RlciwgQVJNNjRSZWdpc3RlcnM6OngwKTsKIApAQCAtMzQ2LDEyICsz
MTgsNiBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG5hdGl2ZUZvckdlCiAgICAgaml0
LmxvYWRQdHIoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoQVJNNjRSZWdpc3RlcnM6OngxLCBKU0Z1
bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSksIEFSTTY0UmVnaXN0ZXJzOjp4Mik7CiAgICAg
aml0LmNhbGwoSlNJbnRlcmZhY2VKSVQ6OkFkZHJlc3MoQVJNNjRSZWdpc3RlcnM6OngyLCBleGVj
dXRhYmxlT2Zmc2V0VG9GdW5jdGlvbikpOwogI2VsaWYgQ1BVKEFSTSkgfHwgQ1BVKFNINCkgfHwg
Q1BVKE1JUFMpCi0gICAgLy8gTG9hZCBjYWxsZWUncyBzY29wZSBjaGFpbiBpbnRvIHRoaXMgY2Fs
bGZyYW1lIHNvIHRoYXQgd2hhdGV2ZXIgd2UgY2FsbCBjYW4KLSAgICAvLyBnZXQgdG8gaXRzIGds
b2JhbCBkYXRhLgotICAgIGppdC5lbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihKU1N0YWNr
OjpDYWxsZWUsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgaml0LmxvYWRQdHIoSlNJbnRl
cmZhY2VKSVQ6OkFkZHJlc3MoSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxLCBKU0NhbGxlZTo6b2Zmc2V0
T2ZTY29wZUNoYWluKCkpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5lbWl0UHV0
Q2VsbFRvQ2FsbEZyYW1lSGVhZGVyKEpTSW50ZXJmYWNlSklUOjpyZWdUMSwgSlNTdGFjazo6U2Nv
cGVDaGFpbik7Ci0KICNpZiBDUFUoTUlQUykKICAgICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBm
b3IgKHVudXNlZCkgMTYgYnl0ZXMgKDgtYnl0ZSBhbGlnbmVkKSBmb3IgNCBhcmd1bWVudHMuCiAg
ICAgaml0LnN1YlB0cihKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDE2KSwgSlNJbnRlcmZh
Y2VKSVQ6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludERhdGEuY3BwCShyZXZpc2lvbiAxNzg3OTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzcz
LDEwIEBAIHZvaWQgRGF0YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogI2lmbmRlZiBOREVC
VUcKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNvbnN0IHB0cmRpZmZfdCBQdHJTaXplID0gODsK
LSAgICBjb25zdCBwdHJkaWZmX3QgQ2FsbEZyYW1lSGVhZGVyU2xvdHMgPSA2OworICAgIGNvbnN0
IHB0cmRpZmZfdCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDU7CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTY0KSAvLyBpLmUuIDMyLWJpdCB2ZXJzaW9uCiAgICAgY29uc3QgcHRyZGlmZl90IFB0clNpemUg
PSA0OwotICAgIGNvbnN0IHB0cmRpZmZfdCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDU7CisgICAg
Y29uc3QgcHRyZGlmZl90IENhbGxGcmFtZUhlYWRlclNsb3RzID0gNDsKICNlbmRpZgogICAgIGNv
bnN0IHB0cmRpZmZfdCBTbG90U2l6ZSA9IDg7CiAjZW5kaWYKQEAgLTg5LDggKzg5LDcgQEAgdm9p
ZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgQVNTRVJUKEpTU3RhY2s6OkNh
bGxlckZyYW1lQW5kUENTaXplID09IChQdHJTaXplICogMikgLyBTbG90U2l6ZSk7CiAgICAgQVNT
RVJUKENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSA9PSBDYWxsRnJhbWU6OmNhbGxlckZyYW1l
T2Zmc2V0KCkgKyBQdHJTaXplKTsKICAgICBBU1NFUlQoSlNTdGFjazo6Q29kZUJsb2NrICogc2l6
ZW9mKFJlZ2lzdGVyKSA9PSBDYWxsRnJhbWU6OnJldHVyblBDT2Zmc2V0KCkgKyBQdHJTaXplKTsK
LSAgICBBU1NFUlQoSlNTdGFjazo6U2NvcGVDaGFpbiAqIHNpemVvZihSZWdpc3RlcikgPT0gSlNT
dGFjazo6Q29kZUJsb2NrICogc2l6ZW9mKFJlZ2lzdGVyKSArIFNsb3RTaXplKTsKLSAgICBBU1NF
UlQoSlNTdGFjazo6Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSA9PSBKU1N0YWNrOjpTY29wZUNo
YWluICogc2l6ZW9mKFJlZ2lzdGVyKSArIFNsb3RTaXplKTsKKyAgICBBU1NFUlQoSlNTdGFjazo6
Q2FsbGVlICogc2l6ZW9mKFJlZ2lzdGVyKSA9PSBKU1N0YWNrOjpDb2RlQmxvY2sgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgU2xvdFNpemUpOwogICAgIEFTU0VSVChKU1N0YWNrOjpBcmd1bWVudENvdW50
ICogc2l6ZW9mKFJlZ2lzdGVyKSA9PSBKU1N0YWNrOjpDYWxsZWUgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgU2xvdFNpemUpOwogICAgIEFTU0VSVChKU1N0YWNrOjpUaGlzQXJndW1lbnQgKiBzaXplb2Yo
UmVnaXN0ZXIpID09IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzaXplb2YoUmVnaXN0ZXIpICsg
U2xvdFNpemUpOwogICAgIEFTU0VSVChKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplID09IEpT
U3RhY2s6OlRoaXNBcmd1bWVudCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTc4
Nzk1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw3ICsyODcsNyBAQCBtYWNybyBkb1ZNRW50
cnkobWFrZUNhbGwpCiAKIC5zdGFja0hlaWdodE9LOgogICAgIG1vdmUgdGVtcDEsIHNwCi0gICAg
bW92ZSA1LCB0ZW1wMQorICAgIG1vdmUgNCwgdGVtcDEKIAogLmNvcHlIZWFkZXJMb29wOgogICAg
IHN1YmkgMSwgdGVtcDEKQEAgLTE5NDAsMTQgKzE5NDAsMTEgQEAgbWFjcm8gZG9DYWxsKHNsb3dQ
YXRoKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBuZWdpIHQzCiAgICAgYWRkcCBjZnIsIHQzICAj
IHQzIGNvbnRhaW5zIHRoZSBuZXcgdmFsdWUgb2YgY2ZyCi0gICAgbG9hZHAgSlNGdW5jdGlvbjo6
bV9zY29wZVt0Ml0sIHQwCiAgICAgc3RvcmVpIHQyLCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W3Qz
XQotICAgIHN0b3JlaSB0MCwgU2NvcGVDaGFpbiArIFBheWxvYWRPZmZzZXRbdDNdCiAgICAgbG9h
ZGkgMTJbUENdLCB0MgogICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtj
ZnJdCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KICAg
ICBzdG9yZWkgQ2VsbFRhZywgQ2FsbGVlICsgVGFnT2Zmc2V0W3QzXQotICAgIHN0b3JlaSBDZWxs
VGFnLCBTY29wZUNoYWluICsgVGFnT2Zmc2V0W3QzXQogICAgIGFkZHAgQ2FsbGVyRnJhbWVBbmRQ
Q1NpemUsIHQzCiAgICAgY2FsbFRhcmdldEZ1bmN0aW9uKHQxLCB0MykKIApAQCAtMjAyOSw0MSAr
MjAyNiw2IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICB0cmFjZUV4ZWN1dGlvbigpICAjIFRoaXMg
bmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gY2xvYmJlciB0MCwgdDEs
IHQyLCB0MyBhYm92ZS4KICAgICBkaXNwYXRjaCgyKQogCi0KLSMgR2l2ZXMgeW91IHRoZSBzY29w
ZSBpbiB0MCwgd2hpbGUgYWxsb3dpbmcgeW91IHRvIG9wdGlvbmFsbHkgcGVyZm9ybSBhZGRpdGlv
bmFsIGNoZWNrcyBvbiB0aGUKLSMgc2NvcGVzIGFzIHRoZXkgYXJlIHRyYXZlcnNlZC4gc2NvcGVD
aGVjaygpIGlzIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IHRoZSByZWdpc3RlcgotIyBob2xk
aW5nIHRoZSBzY29wZSwgYW5kIGEgcmVnaXN0ZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3Igc2NyYXRj
aC4gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKLSMgdXNlIHQzLCBzbyB5b3UgY2FuIGhvbGQgc3R1
ZmYgaW4gdDMgaWYgbmVlZCBiZS4KLW1hY3JvIGdldERlQnJ1aWpuU2NvcGUoZGVCcnVpamluSW5k
ZXhPcGVyYW5kLCBzY29wZUNoZWNrKQotICAgIGxvYWRwIFNjb3BlQ2hhaW4gKyBQYXlsb2FkT2Zm
c2V0W2Nmcl0sIHQwCi0gICAgbG9hZGkgZGVCcnVpamluSW5kZXhPcGVyYW5kLCB0MgotCi0gICAg
YnRpeiB0MiwgLmRvbmUKLQotICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQotICAgIGJpbmVx
IENvZGVCbG9jazo6bV9jb2RlVHlwZVt0MV0sIEZ1bmN0aW9uQ29kZSwgLmxvb3AKLSAgICBidGJ6
IENvZGVCbG9jazo6bV9uZWVkc0FjdGl2YXRpb25bdDFdLCAubG9vcAotCi0gICAgbG9hZGkgQ29k
ZUJsb2NrOjptX2xleGljYWxFbnZpcm9ubWVudFJlZ2lzdGVyW3QxXSwgdDEKLQotICAgICMgTmVl
ZCB0byBjb25kaXRpb25hbGx5IHNraXAgb3ZlciBvbmUgc2NvcGUuCi0gICAgYmllcSBUYWdPZmZz
ZXRbY2ZyLCB0MSwgOF0sIEVtcHR5VmFsdWVUYWcsIC5ub0FjdGl2YXRpb24KLSAgICBzY29wZUNo
ZWNrKHQwLCB0MSkKLSAgICBsb2FkcCBKU1Njb3BlOjptX25leHRbdDBdLCB0MAotLm5vQWN0aXZh
dGlvbjoKLSAgICBzdWJpIDEsIHQyCi0KLSAgICBidGl6IHQyLCAuZG9uZQotLmxvb3A6Ci0gICAg
c2NvcGVDaGVjayh0MCwgdDEpCi0gICAgbG9hZHAgSlNTY29wZTo6bV9uZXh0W3QwXSwgdDAKLSAg
ICBzdWJpIDEsIHQyCi0gICAgYnRpbnogdDIsIC5sb29wCi0KLS5kb25lOgotCi1lbmQKLQogX2xs
aW50X29wX2VuZDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2hlY2tTd2l0Y2hUb0pJVEZv
ckVwaWxvZ3VlKCkKQEAgLTIwOTUsOSArMjA1Nyw2IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9s
aW5lKGV4ZWN1dGFibGVPZmYKICAgICBmdW5jdGlvblByb2xvZ3VlKCkKICAgICBzdG9yZXAgMCwg
Q29kZUJsb2NrW2Nmcl0KICAgICBsb2FkaSBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQx
Ci0gICAgbG9hZGkgSlNDYWxsZWU6Om1fc2NvcGVbdDFdLCB0MAotICAgIHN0b3JlaSBDZWxsVGFn
LCBTY29wZUNoYWluICsgVGFnT2Zmc2V0W2Nmcl0KLSAgICBzdG9yZWkgdDAsIFNjb3BlQ2hhaW4g
KyBQYXlsb2FkT2Zmc2V0W2Nmcl0KICAgICAvLyBDYWxsZWUgaXMgc3RpbGwgaW4gdDEgZm9yIGNv
ZGUgYmVsb3cKICAgICBpZiBYODYgb3IgWDg2X1dJTgogICAgICAgICBzdWJwIDgsIHNwICMgYWxp
Z24gc3RhY2sgcG9pbnRlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE3ODc5NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcgQEAgbWFjcm8gZG9WTUVudHJ5KG1ha2VDYWxsKQog
CiAuc3RhY2tIZWlnaHRPSzoKICAgICBtb3ZlIHRlbXAxLCBzcAotICAgIG1vdmUgNSwgdGVtcDEK
KyAgICBtb3ZlIDQsIHRlbXAxCiAKIC5jb3B5SGVhZGVyTG9vcDoKICAgICBzdWJpIDEsIHRlbXAx
CkBAIC0xNzk5LDkgKzE3OTksNyBAQCBtYWNybyBkb0NhbGwoc2xvd1BhdGgpCiAgICAgbHNoaWZ0
aSAzLCB0MwogICAgIG5lZ3AgdDMKICAgICBhZGRwIGNmciwgdDMKLSAgICBsb2FkcCBKU0Z1bmN0
aW9uOjptX3Njb3BlW3QyXSwgdDAKICAgICBzdG9yZXEgdDIsIENhbGxlZVt0M10KLSAgICBzdG9y
ZXEgdDAsIFNjb3BlQ2hhaW5bdDNdCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQyKQog
ICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCiAgICAgc3RvcmVp
IHQyLCBBcmd1bWVudENvdW50ICsgUGF5bG9hZE9mZnNldFt0M10KQEAgLTE5MzAsOSArMTkyOCw2
IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgYW5k
cCBNYXJrZWRCbG9ja01hc2ssIHQwLCB0MQogICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV93
ZWFrU2V0ICsgV2Vha1NldDo6bV92bVt0MV0sIHQxCiAgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0
b3BDYWxsRnJhbWVbdDFdCi0gICAgICAgIC8vIENhbGxlZSBzdGlsbCBpbiB0MAotICAgICAgICBs
b2FkcCBKU0NhbGxlZTo6bV9zY29wZVt0MF0sIHQxCi0gICAgICAgIHN0b3JlcSB0MSwgU2NvcGVD
aGFpbltjZnJdCiAgICAgICAgIG1vdmUgY2ZyLCBhcmcxCiAgICAgICAgIGxvYWRwIENhbGxlZVtj
ZnJdLCBhcmcyCiAgICAgICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fZXhlY3V0YWJsZVthcmcyXSwg
dGVtcApAQCAtMTk1Miw5ICsxOTQ3LDYgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhl
Y3V0YWJsZU9mZgogICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDAsIHQxCiAgICAgICAg
IGxvYWRwIE1hcmtlZEJsb2NrOjptX3dlYWtTZXQgKyBXZWFrU2V0OjptX3ZtW3QxXSwgdDEKICAg
ICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KLSAgICAgICAgLy8gQ2FsbGVl
IHN0aWxsIGluIHQwCi0gICAgICAgIGxvYWRwIEpTQ2FsbGVlOjptX3Njb3BlW3QwXSwgdDEKLSAg
ICAgICAgc3RvcmVwIHQxLCBTY29wZUNoYWluW2Nmcl0KICAgICAgICAgcHJlc2VydmVSZXR1cm5B
ZGRyZXNzQWZ0ZXJDYWxsKHQzKQogICAgICAgICBzdG9yZXAgdDMsIFJldHVyblBDW2Nmcl0KICAg
ICAgICAgbW92ZSBjZnIsIHQwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNzg3OTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDEwICszNCwxMCBAQCBlbmQKIAogaWYgSlNWQUxVRTY0CiAgICAgY29uc3Qg
UHRyU2l6ZSA9IDgKLSAgICBjb25zdCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDYKKyAgICBjb25z
dCBDYWxsRnJhbWVIZWFkZXJTbG90cyA9IDUKIGVsc2UKICAgICBjb25zdCBQdHJTaXplID0gNAot
ICAgIGNvbnN0IENhbGxGcmFtZUhlYWRlclNsb3RzID0gNQorICAgIGNvbnN0IENhbGxGcmFtZUhl
YWRlclNsb3RzID0gNAogICAgIGNvbnN0IENhbGxGcmFtZUFsaWduU2xvdHMgPSAxCiBlbmQKIGNv
bnN0IFNsb3RTaXplID0gOApAQCAtNTAsOCArNTAsNyBAQCBjb25zdCBDYWxsZXJGcmFtZUFuZFBD
U2l6ZSA9IDIgKiBQdHJTaXplCiBjb25zdCBDYWxsZXJGcmFtZSA9IDAKIGNvbnN0IFJldHVyblBD
ID0gQ2FsbGVyRnJhbWUgKyBQdHJTaXplCiBjb25zdCBDb2RlQmxvY2sgPSBSZXR1cm5QQyArIFB0
clNpemUKLWNvbnN0IFNjb3BlQ2hhaW4gPSBDb2RlQmxvY2sgKyBTbG90U2l6ZQotY29uc3QgQ2Fs
bGVlID0gU2NvcGVDaGFpbiArIFNsb3RTaXplCitjb25zdCBDYWxsZWUgPSBDb2RlQmxvY2sgKyBT
bG90U2l6ZQogY29uc3QgQXJndW1lbnRDb3VudCA9IENhbGxlZSArIFNsb3RTaXplCiBjb25zdCBU
aGlzQXJndW1lbnRPZmZzZXQgPSBBcmd1bWVudENvdW50ICsgU2xvdFNpemUKIGNvbnN0IENhbGxG
cmFtZUhlYWRlclNpemUgPSBUaGlzQXJndW1lbnRPZmZzZXQK
</data>
<flag name="review"
          id="270024"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>