<?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>143735</bug_id>
          
          <creation_ts>2015-04-14 15:56:27 -0700</creation_ts>
          <short_desc>DFG should insert Phantoms late using BytecodeKills and block-local OSR availability</short_desc>
          <delta_ts>2015-04-23 13:48:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>126778</dependson>
    
    <dependson>144084</dependson>
          <blocked>144086</blocked>
    
    <blocked>143733</blocked>
    
    <blocked>143736</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085300</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-14 15:56:27 -0700</bug_when>
    <thetext>This will remove bugs where we inserted a Phantom on the wrong thing, or we inserted a Phantom on the right thing but subsequent transformations caused the Phantom to no longer refer to the same thing as the desired MovHint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086689</commentid>
    <comment_count>1</comment_count>
      <attachid>251135</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-19 16:27:32 -0700</bug_when>
    <thetext>Created attachment 251135
work in progress

Currently this crashes instantly. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087216</commentid>
    <comment_count>2</comment_count>
      <attachid>251274</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-21 16:24:50 -0700</bug_when>
    <thetext>Created attachment 251274
it works but it might be slow

Still checking performance and such.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087279</commentid>
    <comment_count>3</comment_count>
      <attachid>251292</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-21 19:23:59 -0700</bug_when>
    <thetext>Created attachment 251292
probably fast enough

Still doing more tests though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087687</commentid>
    <comment_count>4</comment_count>
      <attachid>251396</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-22 19:10:15 -0700</bug_when>
    <thetext>Created attachment 251396
more speed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087700</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-22 19:37:47 -0700</bug_when>
    <thetext>Latest perf numbers:


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r183094)
&quot;Phantoms&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc (r183094)

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

                                                        TipOfTree                  Phantoms                                     
SunSpider:
   3d-cube                                            5.0424+-0.2432            4.9709+-0.0769          might be 1.0144x faster
   3d-morph                                           5.8194+-0.2026            5.7551+-0.0908          might be 1.0112x faster
   3d-raytrace                                        6.4419+-0.3398     ?      6.5358+-0.2105        ? might be 1.0146x slower
   access-binary-trees                                2.2443+-0.1253     ?      2.3378+-0.2136        ? might be 1.0417x slower
   access-fannkuch                                    5.9147+-0.1739     ?      6.2483+-0.3825        ? might be 1.0564x slower
   access-nbody                                       3.1857+-0.3602            3.0734+-0.3406          might be 1.0365x faster
   access-nsieve                                      3.3650+-0.1554     ?      3.4170+-0.0838        ? might be 1.0155x slower
   bitops-3bit-bits-in-byte                           1.6069+-0.1172            1.5570+-0.0550          might be 1.0320x faster
   bitops-bits-in-byte                                3.5409+-0.3095            3.4112+-0.0548          might be 1.0380x faster
   bitops-bitwise-and                                 2.1278+-0.1107     ?      2.2472+-0.2231        ? might be 1.0561x slower
   bitops-nsieve-bits                                 3.3204+-0.0766            3.2814+-0.0566          might be 1.0119x faster
   controlflow-recursive                              2.2146+-0.1053     ?      2.3051+-0.1209        ? might be 1.0408x slower
   crypto-aes                                         4.1592+-0.1234     ?      4.2738+-0.2241        ? might be 1.0276x slower
   crypto-md5                                         2.4593+-0.2196            2.4097+-0.0891          might be 1.0206x faster
   crypto-sha1                                        2.5687+-0.2184     ?      2.6690+-0.2436        ? might be 1.0391x slower
   date-format-tofte                                  9.4229+-0.2422     ?      9.5609+-0.2631        ? might be 1.0146x slower
   date-format-xparb                                  5.5837+-0.1316     ?      6.2437+-0.6387        ? might be 1.1182x slower
   math-cordic                                        3.1552+-0.1329     ?      3.2006+-0.1118        ? might be 1.0144x slower
   math-partial-sums                                  5.8656+-0.8592            5.4100+-0.1252          might be 1.0842x faster
   math-spectral-norm                                 1.9286+-0.0797     ?      2.0343+-0.2256        ? might be 1.0548x slower
   regexp-dna                                         7.8387+-1.2663            7.4255+-0.3229          might be 1.0556x faster
   string-base64                                      4.7788+-0.5722     ?      5.5030+-0.9712        ? might be 1.1515x slower
   string-fasta                                       7.0892+-0.4499            6.9015+-0.6429          might be 1.0272x faster
   string-tagcloud                                    9.9109+-0.4872            9.6383+-0.1528          might be 1.0283x faster
   string-unpack-code                                20.0622+-0.4602           19.8360+-1.3514          might be 1.0114x faster
   string-validate-input                              4.9967+-0.3327            4.9472+-0.1065          might be 1.0100x faster

   &lt;arithmetic&gt;                                       5.1786+-0.0732     ?      5.1998+-0.0941        ? might be 1.0041x slower

                                                        TipOfTree                  Phantoms                                     
LongSpider:
   3d-cube                                          869.8075+-7.6573          865.3125+-4.3515        
   3d-morph                                        1528.4201+-4.3344     ?   1528.6641+-3.5679        ?
   3d-raytrace                                      733.2135+-3.0039     ?    743.2482+-7.1808        ? might be 1.0137x slower
   access-binary-trees                             1022.4955+-8.2002     ?   1030.2060+-9.3154        ?
   access-fannkuch                                  345.5316+-3.1564          333.7206+-12.4381         might be 1.0354x faster
   access-nbody                                     610.9330+-1.8580     ?    613.3153+-8.2762        ?
   access-nsieve                                    856.5666+-5.8369     ?    860.7399+-11.5757       ?
   bitops-3bit-bits-in-byte                          44.2078+-0.7678     ?     46.1954+-3.8980        ? might be 1.0450x slower
   bitops-bits-in-byte                              103.4895+-1.5742     ?    104.1345+-2.6413        ?
   bitops-nsieve-bits                               634.8919+-9.5213     ?    636.4028+-2.7411        ?
   controlflow-recursive                            476.3420+-0.5529     !    479.8759+-0.8461        ! definitely 1.0074x slower
   crypto-aes                                       699.7954+-6.4900     ?    710.0792+-7.1895        ? might be 1.0147x slower
   crypto-md5                                       552.1233+-5.4077          549.7647+-6.2009        
   crypto-sha1                                      602.3127+-4.0319          595.1420+-8.7440          might be 1.0120x faster
   date-format-tofte                                752.2622+-16.7335    ?    757.0235+-12.7832       ?
   date-format-xparb                                832.9229+-42.4996         798.0126+-9.9324          might be 1.0437x faster
   math-cordic                                      592.3583+-3.9580     ?    592.5445+-2.0979        ?
   math-partial-sums                                513.7517+-2.5461          510.1917+-1.9971        
   math-spectral-norm                               564.9075+-2.5067          564.7650+-1.7519        
   string-base64                                    382.2008+-8.5241          378.9279+-3.2620        
   string-fasta                                     441.9298+-3.8990          438.7849+-3.3526        
   string-tagcloud                                  216.1237+-2.7379     ?    219.7808+-3.1449        ? might be 1.0169x slower

   &lt;geometric&gt;                                      498.9609+-1.1659     ?    499.0528+-2.1702        ? might be 1.0002x slower

                                                        TipOfTree                  Phantoms                                     
V8Spider:
   crypto                                            54.6539+-1.7305     ?     57.2838+-2.1507        ? might be 1.0481x slower
   deltablue                                         98.2509+-7.0306           95.5972+-5.1723          might be 1.0278x faster
   earley-boyer                                      43.9778+-0.6343     !     45.2846+-0.4388        ! definitely 1.0297x slower
   raytrace                                          40.1969+-2.3162     ?     43.5972+-2.2466        ? might be 1.0846x slower
   regexp                                            86.3689+-2.2353           84.5293+-1.2271          might be 1.0218x faster
   richards                                          79.1830+-1.9402     ?     80.7668+-2.1827        ? might be 1.0200x slower
   splay                                             39.7161+-2.9009     ?     40.6805+-1.5302        ? might be 1.0243x slower

   &lt;geometric&gt;                                       59.2595+-1.4273     ?     60.5777+-0.8456        ? might be 1.0222x slower

                                                        TipOfTree                  Phantoms                                     
Octane:
   encrypt                                           0.21124+-0.02530          0.20216+-0.00097         might be 1.0449x faster
   decrypt                                           3.62029+-0.04894          3.59999+-0.06020       
   deltablue                                x2       0.20819+-0.00170    ?     0.20866+-0.00271       ?
   earley                                            0.53932+-0.00400    ?     0.54331+-0.00264       ?
   boyer                                             6.72513+-0.08745          6.64183+-0.03920         might be 1.0125x faster
   navier-stokes                            x2       5.17945+-0.01523    ?     5.18579+-0.01194       ?
   raytrace                                 x2       1.27475+-0.02932          1.26460+-0.04783       
   richards                                 x2       0.12186+-0.00125    ?     0.12222+-0.00179       ?
   splay                                    x2       0.39761+-0.00382    ?     0.39766+-0.00228       ?
   regexp                                   x2      33.37021+-0.19029         33.28366+-0.50253       
   pdfjs                                    x2      44.01472+-0.38588    ?    44.04534+-0.25861       ?
   mandreel                                 x2      50.29814+-0.45824    ?    50.33347+-0.19098       ?
   gbemu                                    x2      41.90829+-0.14969    ?    43.54967+-3.09998       ? might be 1.0392x slower
   closure                                           0.55079+-0.00405    !     0.56270+-0.00123       ! definitely 1.0216x slower
   jquery                                            6.99852+-0.03672    !     7.13284+-0.02626       ! definitely 1.0192x slower
   box2d                                    x2      12.24466+-0.06327         12.22918+-0.05730       
   zlib                                     x2     375.81528+-16.35704   ?   389.85517+-14.25274      ? might be 1.0374x slower
   typescript                               x2     832.00496+-6.88461    ?   836.61283+-8.33751       ?

   &lt;geometric&gt;                                       6.71983+-0.03768    ?     6.75115+-0.02550       ? might be 1.0047x slower

                                                        TipOfTree                  Phantoms                                     
Kraken:
   ai-astar                                          268.187+-0.909      ?     270.226+-1.936         ?
   audio-beat-detection                              107.015+-3.706            105.571+-0.801           might be 1.0137x faster
   audio-dft                                         149.854+-2.747      ?     151.217+-2.933         ?
   audio-fft                                          83.188+-3.844      ?      86.672+-1.405         ? might be 1.0419x slower
   audio-oscillator                                  208.212+-1.879            208.138+-2.023         
   imaging-darkroom                                  106.028+-1.648      ?     106.521+-1.416         ?
   imaging-desaturate                                 62.906+-1.656      ?      63.017+-1.628         ?
   imaging-gaussian-blur                             116.092+-5.361            114.200+-2.023           might be 1.0166x faster
   json-parse-financial                               45.870+-1.969      ?      46.983+-1.800         ? might be 1.0243x slower
   json-stringify-tinderbox                           58.609+-1.618             58.333+-2.318         
   stanford-crypto-aes                                63.697+-0.653      ?      63.780+-0.378         ?
   stanford-crypto-ccm                                54.249+-0.231      ?      59.235+-5.455         ? might be 1.0919x slower
   stanford-crypto-pbkdf2                            170.184+-2.743            170.034+-2.214         
   stanford-crypto-sha256-iterative                   56.848+-1.356             55.352+-1.343           might be 1.0270x faster

   &lt;arithmetic&gt;                                      110.781+-0.472      ?     111.377+-0.918         ? might be 1.0054x slower

                                                        TipOfTree                  Phantoms                                     
JSRegress:
   abs-boolean                                        2.6354+-0.0619     ?      2.7767+-0.3469        ? might be 1.0536x slower
   adapt-to-double-divide                            16.6226+-0.2391     ?     16.7762+-0.5813        ?
   aliased-arguments-getbyval                         1.2625+-0.0555     ?      1.2998+-0.1225        ? might be 1.0296x slower
   allocate-big-object                                2.8438+-0.2750            2.7919+-0.1251          might be 1.0186x faster
   arguments-named-and-reflective                    13.0054+-0.6453           12.7455+-0.3981          might be 1.0204x faster
   arguments-out-of-bounds                           14.8934+-0.3832     ?     14.9375+-0.2086        ?
   arguments-strict-mode                             12.3180+-0.6236           11.9248+-0.9248          might be 1.0330x faster
   arguments                                         10.3883+-0.5614     ?     10.8193+-0.8593        ? might be 1.0415x slower
   arity-mismatch-inlining                            0.8402+-0.0325     ?      0.8906+-0.0451        ? might be 1.0600x slower
   array-access-polymorphic-structure                 7.3348+-1.3299            7.1145+-0.6105          might be 1.0310x faster
   array-nonarray-polymorhpic-access                 36.0268+-2.1476           35.2161+-1.7095          might be 1.0230x faster
   array-prototype-every                             87.1536+-1.6249     ?     89.4181+-3.0521        ? might be 1.0260x slower
   array-prototype-forEach                           84.6139+-1.1761     ?     87.4924+-2.3482        ? might be 1.0340x slower
   array-prototype-map                               95.0697+-2.6412     ?     99.2421+-3.1479        ? might be 1.0439x slower
   array-prototype-some                              87.6648+-2.5079     ?     90.4334+-2.4814        ? might be 1.0316x slower
   array-splice-contiguous                           41.7525+-1.3606           41.1243+-1.0134          might be 1.0153x faster
   array-with-double-add                              4.3167+-0.3185            4.2378+-0.2537          might be 1.0186x faster
   array-with-double-increment                        3.3181+-0.0838     ?      3.3727+-0.3124        ? might be 1.0165x slower
   array-with-double-mul-add                          5.0398+-0.0950     ?      5.0481+-0.0709        ?
   array-with-double-sum                              3.3735+-0.1584            3.3302+-0.0883          might be 1.0130x faster
   array-with-int32-add-sub                           6.7124+-0.0838     ?      6.8888+-0.2422        ? might be 1.0263x slower
   array-with-int32-or-double-sum                     3.5771+-0.6135            3.3081+-0.0333          might be 1.0813x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     32.8987+-1.5349     ?     35.9418+-1.7600        ? might be 1.0925x slower
   ArrayBuffer-DataView-alloc-long-lived             14.7145+-1.7410     ?     16.4810+-2.5726        ? might be 1.1201x slower
   ArrayBuffer-Int32Array-byteOffset                  3.7867+-0.1408     ?      3.8493+-0.0582        ? might be 1.0165x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     33.7231+-1.3960     ?     35.4100+-1.9501        ? might be 1.0500x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.5824+-1.3601     ?     24.2017+-1.4287        ? might be 1.0717x slower
   ArrayBuffer-Int8Array-alloc-long-lived            14.1675+-1.6173     ?     15.2691+-1.7072        ? might be 1.0778x slower
   ArrayBuffer-Int8Array-alloc                       11.1627+-0.4232     ?     12.5942+-1.7899        ? might be 1.1282x slower
   asmjs_bool_bug                                     7.5929+-0.0540     ?      7.7052+-0.1856        ? might be 1.0148x slower
   assign-custom-setter-polymorphic                   3.1446+-0.3951     ?      3.2977+-0.3956        ? might be 1.0487x slower
   assign-custom-setter                               4.2607+-0.2029     ?      4.6628+-0.5714        ? might be 1.0944x slower
   basic-set                                          8.4494+-0.5870            8.3340+-0.1041          might be 1.0138x faster
   big-int-mul                                        4.0830+-0.0773     ^      3.9686+-0.0324        ^ definitely 1.0288x faster
   boolean-test                                       3.0603+-0.1351     ?      3.0912+-0.0862        ? might be 1.0101x slower
   branch-fold                                        3.7408+-0.0582            3.7269+-0.1166        
   by-val-generic                                     7.9459+-0.1436     ?      8.1209+-0.4206        ? might be 1.0220x slower
   call-spread-apply                                 29.1362+-0.9559     !     32.2539+-1.8851        ! definitely 1.1070x slower
   call-spread-call                                  25.7860+-2.4087     ?     27.2384+-1.6145        ? might be 1.0563x slower
   captured-assignments                               0.4703+-0.0651     ?      0.4808+-0.0564        ? might be 1.0225x slower
   cast-int-to-double                                 5.6497+-0.8765            5.3375+-0.0572          might be 1.0585x faster
   cell-argument                                      8.6250+-0.2717     ?      8.6957+-0.1837        ?
   cfg-simplify                                       2.9465+-0.0780     ?      2.9498+-0.1975        ?
   chain-getter-access                               10.0941+-0.2342           10.0170+-0.1892        
   cmpeq-obj-to-obj-other                            11.8979+-1.1029           11.4023+-0.9042          might be 1.0435x faster
   constant-test                                      4.8899+-0.0144     !      4.9896+-0.0234        ! definitely 1.0204x slower
   create-lots-of-functions                          12.0387+-0.6852           11.9248+-0.3206        
   DataView-custom-properties                        38.7274+-2.0451     ?     40.5913+-1.2696        ? might be 1.0481x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.5326+-0.0276            0.5010+-0.0189          might be 1.0631x faster
   delay-tear-off-arguments-strictmode               14.4565+-1.1659           14.2883+-0.1742          might be 1.0118x faster
   deltablue-varargs                                201.3281+-2.9463     ?    203.8250+-1.1436        ? might be 1.0124x slower
   destructuring-arguments                           17.5599+-0.5067     ?     18.4723+-0.7892        ? might be 1.0520x slower
   destructuring-swap                                 5.0735+-0.0968            5.0704+-0.0207        
   direct-arguments-getbyval                          1.3149+-0.1846            1.2583+-0.1906          might be 1.0450x faster
   div-boolean-double                                 5.3170+-0.2323            5.2292+-0.0390          might be 1.0168x faster
   div-boolean                                        7.8220+-0.0429     ?      7.8265+-0.0928        ?
   double-get-by-val-out-of-bounds                    4.5457+-0.0710            4.5215+-0.0914        
   double-pollution-getbyval                          8.8473+-0.0277     ?      8.8667+-0.0535        ?
   double-pollution-putbyoffset                       4.4572+-0.1591     ?      4.4618+-0.1300        ?
   double-to-int32-typed-array-no-inline              2.2817+-0.1086            2.2200+-0.0764          might be 1.0278x faster
   double-to-int32-typed-array                        1.8393+-0.0651     ?      1.9467+-0.0570        ? might be 1.0584x slower
   double-to-uint32-typed-array-no-inline             2.3452+-0.2106            2.3412+-0.0555        
   double-to-uint32-typed-array                       1.9297+-0.0114     !      2.1941+-0.2411        ! definitely 1.1370x slower
   elidable-new-object-dag                           43.7360+-1.4893     ?     44.3418+-1.5628        ? might be 1.0139x slower
   elidable-new-object-roflcopter                    47.9366+-1.8151     ?     48.4495+-1.2890        ? might be 1.0107x slower
   elidable-new-object-then-call                     40.4362+-1.4537           39.1064+-0.8807          might be 1.0340x faster
   elidable-new-object-tree                          46.2928+-1.0917     ?     46.4242+-1.5003        ?
   empty-string-plus-int                              5.3992+-0.1043     ?      5.6059+-0.1513        ? might be 1.0383x slower
   emscripten-cube2hash                              39.5417+-1.0718     ?     39.7839+-1.4584        ?
   exit-length-on-plain-object                       15.2425+-0.8298           14.9673+-1.3502          might be 1.0184x faster
   external-arguments-getbyval                        1.3968+-0.2173            1.3134+-0.0263          might be 1.0635x faster
   external-arguments-putbyval                        2.5873+-0.8086            2.3147+-0.2346          might be 1.1178x faster
   fixed-typed-array-storage-var-index                1.2181+-0.0539     ?      1.2474+-0.0555        ? might be 1.0240x slower
   fixed-typed-array-storage                          0.9559+-0.0469            0.9497+-0.0216        
   Float32Array-matrix-mult                           4.5787+-0.5280            4.4221+-0.1567          might be 1.0354x faster
   Float32Array-to-Float64Array-set                  54.3658+-0.7831     !     55.8142+-0.4622        ! definitely 1.0266x slower
   Float64Array-alloc-long-lived                     73.5948+-1.7035     ?     74.5196+-1.8971        ? might be 1.0126x slower
   Float64Array-to-Int16Array-set                    68.4350+-1.9205     ?     68.6193+-1.9912        ?
   fold-double-to-int                                13.6452+-0.2637           13.4764+-0.3347          might be 1.0125x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.1737+-1.7672            9.5597+-0.5011          might be 1.1688x faster
   fold-get-by-id-to-multi-get-by-offset              9.7513+-0.9540     ?     10.2514+-1.7118        ? might be 1.0513x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.1371+-0.9534            8.8715+-1.5324          might be 1.0299x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.1298+-0.6662     ?      9.1392+-0.6373        ?
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.3077+-0.7425     ?     10.1484+-0.8961        ? might be 1.0903x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.9863+-1.2616            4.6207+-0.8036          might be 1.2955x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.0639+-0.5399     ?     10.1071+-0.5060        ?
   fold-put-by-id-to-multi-put-by-offset             10.0092+-1.3135     ?     11.4000+-0.8984        ? might be 1.1390x slower
   fold-put-structure                                 6.4770+-1.4869            4.6645+-0.6152          might be 1.3886x faster
   for-of-iterate-array-entries                       4.6789+-0.2190     ?      4.7780+-0.0978        ? might be 1.0212x slower
   for-of-iterate-array-keys                          4.0196+-0.4398            3.8187+-0.1949          might be 1.0526x faster
   for-of-iterate-array-values                        3.5969+-0.1432     ?      3.7429+-0.2113        ? might be 1.0406x slower
   fround                                            19.8766+-0.2944     ?     20.2817+-0.5798        ? might be 1.0204x slower
   ftl-library-inlining-dataview                     80.4601+-0.6447     ?     82.5903+-1.5552        ? might be 1.0265x slower
   ftl-library-inlining                              76.0899+-16.2283    ?     83.0909+-21.5231       ? might be 1.0920x slower
   function-dot-apply                                 2.2642+-0.0628     ?      2.2915+-0.0632        ? might be 1.0121x slower
   function-test                                      3.4134+-0.1954            3.3460+-0.0608          might be 1.0201x faster
   function-with-eval                               103.6036+-2.9617          103.0661+-2.7977        
   gcse-poly-get-less-obvious                        19.9333+-1.5948           19.3730+-1.6639          might be 1.0289x faster
   gcse-poly-get                                     21.3683+-1.7972     ?     21.9095+-1.4778        ? might be 1.0253x slower
   gcse                                               5.0028+-0.6436            4.3558+-0.0586          might be 1.1485x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.8582+-0.2050            2.7687+-0.0944          might be 1.0323x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1968+-0.3781            6.1022+-0.1347          might be 1.0155x faster
   get-by-id-chain-from-try-block                     6.8992+-0.7004            6.7407+-0.3575          might be 1.0235x faster
   get-by-id-check-structure-elimination              5.3055+-0.3247     ?      5.4245+-0.4771        ? might be 1.0224x slower
   get-by-id-proto-or-self                           17.9760+-0.4948           17.2282+-0.8134          might be 1.0434x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.3424+-0.4155            3.2340+-0.1234          might be 1.0335x faster
   get-by-id-self-or-proto                           17.3678+-0.4074     ?     19.3097+-5.3717        ? might be 1.1118x slower
   get-by-val-out-of-bounds                           4.4098+-0.0697     ?      4.4586+-0.1106        ? might be 1.0111x slower
   get_callee_monomorphic                             2.7402+-0.0757     ?      2.8749+-0.2319        ? might be 1.0492x slower
   get_callee_polymorphic                             3.8886+-0.4049     ?      4.1922+-0.5601        ? might be 1.0781x slower
   getter-no-activation                               4.9361+-0.2251     ?      5.1210+-0.2985        ? might be 1.0374x slower
   getter-richards                                  134.5706+-23.4794         129.1708+-5.5608          might be 1.0418x faster
   getter                                             5.5548+-0.5899     ?      6.2629+-0.8419        ? might be 1.1275x slower
   global-var-const-infer-fire-from-opt               0.9598+-0.1037     ?      1.0114+-0.0182        ? might be 1.0538x slower
   global-var-const-infer                             0.7919+-0.0452     ?      0.8003+-0.1237        ? might be 1.0106x slower
   HashMap-put-get-iterate-keys                      27.1170+-0.4905           26.5796+-0.3534          might be 1.0202x faster
   HashMap-put-get-iterate                           27.2843+-0.8562           26.5205+-0.6198          might be 1.0288x faster
   HashMap-string-put-get-iterate                    27.2079+-1.4198           26.2659+-0.8603          might be 1.0359x faster
   hoist-make-rope                                   12.6641+-0.7898           11.9349+-0.8549          might be 1.0611x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.0643+-0.0896            5.0279+-0.0247        
   hoist-poly-check-structure                         3.6406+-0.0594     ?      3.7683+-0.2048        ? might be 1.0351x slower
   imul-double-only                                   8.5290+-0.6420     ?      9.2600+-0.7788        ? might be 1.0857x slower
   imul-int-only                                      9.8929+-0.2103            9.8811+-0.3732        
   imul-mixed                                         8.4248+-0.4893            8.3924+-0.3702        
   in-four-cases                                     18.9368+-0.3386     !     20.5354+-0.0691        ! definitely 1.0844x slower
   in-one-case-false                                 10.1924+-0.3472     ?     10.3354+-0.6285        ? might be 1.0140x slower
   in-one-case-true                                   9.9651+-0.3429     ?     10.0696+-0.4443        ? might be 1.0105x slower
   in-two-cases                                      10.6329+-0.6887           10.4830+-0.3787          might be 1.0143x faster
   indexed-properties-in-objects                      2.8717+-0.0320     !      3.0368+-0.0611        ! definitely 1.0575x slower
   infer-closure-const-then-mov-no-inline             4.5870+-0.4268            4.2021+-0.3517          might be 1.0916x faster
   infer-closure-const-then-mov                      19.2043+-0.1428     !     19.7883+-0.3837        ! definitely 1.0304x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     15.3770+-1.4999           14.5754+-1.5172          might be 1.0550x faster
   infer-closure-const-then-put-to-scope             22.9858+-1.2240           22.6395+-1.3508          might be 1.0153x faster
   infer-closure-const-then-reenter-no-inline   
                                                     67.8719+-1.0366           66.5077+-1.7539          might be 1.0205x faster
   infer-closure-const-then-reenter                  22.4334+-0.8973     ?     22.6507+-1.0402        ?
   infer-constant-global-property                    30.9496+-1.5941     ?     31.1235+-1.3094        ?
   infer-constant-property                            2.8396+-0.3241            2.7179+-0.0559          might be 1.0448x faster
   infer-one-time-closure-ten-vars                   12.7043+-0.3855           12.5286+-0.2668          might be 1.0140x faster
   infer-one-time-closure-two-vars                   12.9353+-1.7823           12.8198+-1.4616        
   infer-one-time-closure                            12.9332+-1.5944           12.3585+-0.7340          might be 1.0465x faster
   infer-one-time-deep-closure                       22.2740+-2.1168           21.4410+-1.1130          might be 1.0389x faster
   inline-arguments-access                            4.7295+-0.1518     ?      4.7849+-0.4025        ? might be 1.0117x slower
   inline-arguments-aliased-access                    4.6505+-0.1803     ?      4.8250+-0.2479        ? might be 1.0375x slower
   inline-arguments-local-escape                      4.7391+-0.0685     ?      4.7773+-0.3469        ?
   inline-get-scoped-var                              4.8732+-0.2971     ?      4.9003+-0.2492        ?
   inlined-put-by-id-transition                      10.8020+-0.0926     !     11.5483+-0.4152        ! definitely 1.0691x slower
   int-or-other-abs-then-get-by-val                   4.8535+-0.1975            4.7444+-0.0985          might be 1.0230x faster
   int-or-other-abs-zero-then-get-by-val             17.4028+-0.9022     ?     18.1868+-1.0251        ? might be 1.0451x slower
   int-or-other-add-then-get-by-val                   4.3615+-0.0646            4.3390+-0.0720        
   int-or-other-add                                   5.3053+-0.0499            5.2941+-0.0425        
   int-or-other-div-then-get-by-val                   4.1285+-0.1168     !      4.3898+-0.1145        ! definitely 1.0633x slower
   int-or-other-max-then-get-by-val                   4.2846+-0.0784     ?      4.4648+-0.2407        ? might be 1.0420x slower
   int-or-other-min-then-get-by-val                   4.4198+-0.0208     ?      4.5505+-0.2255        ? might be 1.0296x slower
   int-or-other-mod-then-get-by-val                   3.8343+-0.0792     ?      3.9373+-0.0616        ? might be 1.0269x slower
   int-or-other-mul-then-get-by-val                   4.1888+-0.2432            3.9971+-0.1444          might be 1.0480x faster
   int-or-other-neg-then-get-by-val                   4.4754+-0.0632     ?      4.5474+-0.1226        ? might be 1.0161x slower
   int-or-other-neg-zero-then-get-by-val             17.2126+-1.0192     ?     17.4067+-0.3777        ? might be 1.0113x slower
   int-or-other-sub-then-get-by-val                   4.3766+-0.1472     ?      4.7120+-0.2923        ? might be 1.0766x slower
   int-or-other-sub                                   3.4814+-0.1142            3.4784+-0.0428        
   int-overflow-local                                 4.3173+-0.0396     !      4.4556+-0.0703        ! definitely 1.0320x slower
   Int16Array-alloc-long-lived                       52.7500+-0.9924     ?     52.9688+-1.9284        ?
   Int16Array-bubble-sort-with-byteLength            20.8311+-1.3772           20.5093+-1.4106          might be 1.0157x faster
   Int16Array-bubble-sort                            19.6806+-0.2016           19.6342+-0.2629        
   Int16Array-load-int-mul                            1.5905+-0.1671            1.5194+-0.0295          might be 1.0468x faster
   Int16Array-to-Int32Array-set                      59.0631+-2.7997     ^     53.4653+-1.8875        ^ definitely 1.1047x faster
   Int32Array-alloc-large                            25.2626+-1.7818           24.9707+-1.0133          might be 1.0117x faster
   Int32Array-alloc-long-lived                       58.0240+-2.0192     ?     58.8138+-1.9868        ? might be 1.0136x slower
   Int32Array-alloc                                   3.6794+-0.2109     ?      3.8342+-0.4754        ? might be 1.0421x slower
   Int32Array-Int8Array-view-alloc                    7.2453+-0.8101     ?      7.8004+-1.6554        ? might be 1.0766x slower
   int52-spill                                        6.4373+-0.0922     ?      6.5096+-0.1389        ? might be 1.0112x slower
   Int8Array-alloc-long-lived                        47.7861+-2.1150     ?     48.0362+-0.6007        ?
   Int8Array-load-with-byteLength                     3.4451+-0.2660            3.3846+-0.1174          might be 1.0179x faster
   Int8Array-load                                     3.4719+-0.2920            3.3967+-0.1904          might be 1.0221x faster
   integer-divide                                    11.6329+-0.1628           11.2756+-0.3890          might be 1.0317x faster
   integer-modulo                                     1.9588+-0.0572     ?      2.0308+-0.0620        ? might be 1.0367x slower
   large-int-captured                                 4.8144+-0.3769            4.6491+-0.0683          might be 1.0355x faster
   large-int-neg                                     17.7464+-1.7935           16.4386+-0.2760          might be 1.0796x faster
   large-int                                         16.0633+-1.4950           15.6182+-0.9464          might be 1.0285x faster
   logical-not                                        4.4630+-0.0384     ?      4.4911+-0.0359        ?
   lots-of-fields                                    12.9123+-0.3571     ?     13.2996+-0.5210        ? might be 1.0300x slower
   make-indexed-storage                               3.0963+-0.0667     ?      3.1394+-0.0614        ? might be 1.0139x slower
   make-rope-cse                                      4.9319+-0.3069     ?      5.1701+-0.6660        ? might be 1.0483x slower
   marsaglia-larger-ints                             35.7398+-0.6572           35.5125+-0.3703        
   marsaglia-osr-entry                               25.0204+-1.5964           23.8337+-0.6237          might be 1.0498x faster
   max-boolean                                        2.4061+-0.0243     ?      2.4911+-0.0866        ? might be 1.0353x slower
   method-on-number                                  17.3218+-0.4503     ?     17.4090+-0.2613        ?
   min-boolean                                        2.5316+-0.0900     ?      2.6317+-0.2182        ? might be 1.0395x slower
   minus-boolean-double                               3.1614+-0.0682     ?      3.1993+-0.0811        ? might be 1.0120x slower
   minus-boolean                                      2.3643+-0.1205            2.3119+-0.0520          might be 1.0227x faster
   misc-strict-eq                                    38.5804+-1.5467           37.4220+-0.6912          might be 1.0310x faster
   mod-boolean-double                                10.9295+-0.1903     ?     11.3193+-0.9252        ? might be 1.0357x slower
   mod-boolean                                        7.9762+-0.2585            7.8665+-0.1255          might be 1.0139x faster
   mul-boolean-double                                 3.8248+-0.2919            3.6990+-0.0474          might be 1.0340x faster
   mul-boolean                                        2.9231+-0.0656     ?      3.0174+-0.2259        ? might be 1.0323x slower
   neg-boolean                                        3.4657+-0.3498            3.4094+-0.4292          might be 1.0165x faster
   negative-zero-divide                               0.3610+-0.0415     ?      0.3960+-0.0914        ? might be 1.0971x slower
   negative-zero-modulo                               0.3450+-0.0074     ?      0.4211+-0.0929        ? might be 1.2207x slower
   negative-zero-negate                               0.3234+-0.0531     ?      0.3339+-0.0074        ? might be 1.0325x slower
   nested-function-parsing                           38.9415+-1.2277     ?     39.7703+-2.2490        ? might be 1.0213x slower
   new-array-buffer-dead                            111.6466+-1.3951     ?    113.0322+-2.1782        ? might be 1.0124x slower
   new-array-buffer-push                              7.9019+-1.2654            7.2448+-0.6498          might be 1.0907x faster
   new-array-dead                                    20.3440+-1.0986           19.3533+-0.5163          might be 1.0512x faster
   new-array-push                                     4.0097+-0.2606     ?      4.1059+-0.2186        ? might be 1.0240x slower
   no-inline-constructor                            125.7222+-1.3213     ?    125.8537+-1.6382        ?
   number-test                                        2.9968+-0.0747     ?      3.1403+-0.2979        ? might be 1.0479x slower
   object-closure-call                                5.7170+-0.3696            5.6768+-0.0748        
   object-test                                        3.2122+-0.3161            3.1675+-0.0542          might be 1.0141x faster
   obvious-sink-pathology-taken                     140.9941+-1.6366          140.5824+-1.8583        
   obvious-sink-pathology                           133.6877+-1.3876          133.2822+-3.2170        
   obviously-elidable-new-object                     35.9899+-2.3129           35.0474+-1.0954          might be 1.0269x faster
   plus-boolean-arith                                 2.5304+-0.0551            2.4875+-0.0851          might be 1.0172x faster
   plus-boolean-double                                3.2042+-0.0456     ?      3.2043+-0.0480        ?
   plus-boolean                                       2.4609+-0.1112            2.4024+-0.1192          might be 1.0244x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.3431+-0.1683            3.2963+-0.0237          might be 1.0142x faster
   poly-chain-access-different-prototypes             2.6604+-0.3276            2.6097+-0.0476          might be 1.0194x faster
   poly-chain-access-simpler                          3.4639+-0.4781            3.3433+-0.1433          might be 1.0361x faster
   poly-chain-access                                  2.5854+-0.0619            2.5768+-0.0521        
   poly-stricteq                                     61.7244+-1.0675           60.0522+-0.7092          might be 1.0278x faster
   polymorphic-array-call                             1.1311+-0.0523     ?      1.2703+-0.1473        ? might be 1.1230x slower
   polymorphic-get-by-id                              3.2054+-0.0727            3.1314+-0.0327          might be 1.0236x faster
   polymorphic-put-by-id                             30.4344+-2.3992           29.1840+-1.3090          might be 1.0428x faster
   polymorphic-structure                             15.4368+-0.8542           15.1097+-0.8936          might be 1.0217x faster
   polyvariant-monomorphic-get-by-id                  8.6597+-0.3235     ?      8.7203+-0.1757        ?
   proto-getter-access                               10.1275+-0.2006            9.9927+-0.1516          might be 1.0135x faster
   put-by-id-replace-and-transition                   9.2397+-0.1285            9.2023+-0.4351        
   put-by-id-slightly-polymorphic                     3.0896+-0.2430            2.8431+-0.0481          might be 1.0867x faster
   put-by-id                                         12.7818+-0.4412     ?     13.2375+-0.4799        ? might be 1.0357x slower
   put-by-val-direct                                  0.4386+-0.0198     ?      0.4406+-0.0116        ?
   put-by-val-large-index-blank-indexing-type   
                                                      6.0708+-0.5027     ?      6.3074+-0.7633        ? might be 1.0390x slower
   put-by-val-machine-int                             2.8305+-0.1186            2.8187+-0.1277        
   rare-osr-exit-on-local                            15.4897+-1.2028     ?     15.9331+-1.3289        ? might be 1.0286x slower
   register-pressure-from-osr                        22.3381+-1.3280           21.6399+-0.2340          might be 1.0323x faster
   setter                                             5.6908+-0.5954     ?      6.2041+-0.8646        ? might be 1.0902x slower
   simple-activation-demo                            24.8530+-0.6202     ?     25.6334+-1.6716        ? might be 1.0314x slower
   simple-getter-access                              12.6529+-0.1765     ?     12.8226+-0.2845        ? might be 1.0134x slower
   simple-poly-call-nested                            8.5885+-0.6351            8.3855+-0.5024          might be 1.0242x faster
   simple-poly-call                                   1.3885+-0.2696            1.3632+-0.0761          might be 1.0185x faster
   sin-boolean                                       23.2449+-1.2936           23.1338+-0.6832        
   singleton-scope                                   69.1093+-1.3235           67.7059+-0.7031          might be 1.0207x faster
   sinkable-new-object-dag                           70.6011+-1.0439           70.2609+-1.2032        
   sinkable-new-object-taken                         50.9171+-2.8695     ?     53.8829+-1.9382        ? might be 1.0582x slower
   sinkable-new-object                               39.2499+-1.5391           39.0130+-1.5164        
   slow-array-profile-convergence                     2.9033+-0.2621            2.8421+-0.1975          might be 1.0215x faster
   slow-convergence                                   2.8220+-0.2936     ?      2.8831+-0.2825        ? might be 1.0216x slower
   sorting-benchmark                                 24.7218+-1.1157     ?     24.7409+-1.3203        ?
   sparse-conditional                                 1.1020+-0.0270     ?      1.2111+-0.1118        ? might be 1.0990x slower
   splice-to-remove                                  17.8827+-1.7345           17.6655+-2.0424          might be 1.0123x faster
   string-char-code-at                               16.4132+-0.2622     ?     17.3077+-1.2851        ? might be 1.0545x slower
   string-concat-object                               2.5758+-0.1425     ?      2.6901+-0.2194        ? might be 1.0444x slower
   string-concat-pair-object                          2.6036+-0.1560     ?      2.8464+-0.4162        ? might be 1.0932x slower
   string-concat-pair-simple                         11.9384+-0.7421           11.8477+-0.6327        
   string-concat-simple                              12.2691+-0.5947           12.2167+-0.5254        
   string-cons-repeat                                 8.2815+-0.7863     ?      9.1368+-0.7698        ? might be 1.1033x slower
   string-cons-tower                                  8.8721+-0.9923            8.1443+-0.2651          might be 1.0894x faster
   string-equality                                   17.7003+-0.3457           17.3968+-0.1797          might be 1.0174x faster
   string-get-by-val-big-char                         7.2655+-0.2662     ?      7.5064+-0.1486        ? might be 1.0332x slower
   string-get-by-val-out-of-bounds-insane             3.7850+-0.1282     ?      3.8710+-0.2632        ? might be 1.0227x slower
   string-get-by-val-out-of-bounds                    5.2295+-0.1733     ?      5.3647+-0.3142        ? might be 1.0259x slower
   string-get-by-val                                  3.2919+-0.0838     ?      3.5472+-0.4587        ? might be 1.0776x slower
   string-hash                                        2.1726+-0.2633            2.0413+-0.0429          might be 1.0643x faster
   string-long-ident-equality                        14.5866+-0.1702     ?     14.7464+-0.2420        ? might be 1.0110x slower
   string-out-of-bounds                              14.9314+-0.3362     ?     15.1408+-0.3133        ? might be 1.0140x slower
   string-repeat-arith                               32.2200+-2.0924     ?     34.0039+-1.8694        ? might be 1.0554x slower
   string-sub                                        64.8723+-3.3219     !     71.3544+-2.6844        ! definitely 1.0999x slower
   string-test                                        2.8597+-0.0313     !      2.9679+-0.0340        ! definitely 1.0378x slower
   string-var-equality                               31.2848+-1.5856     ?     31.3303+-1.7603        ?
   structure-hoist-over-transitions                   2.5527+-0.0791     ?      2.6463+-0.0772        ? might be 1.0367x slower
   substring-concat-weird                            40.5707+-1.3541     ?     41.9733+-1.7952        ? might be 1.0346x slower
   substring-concat                                  41.2804+-1.2445           41.1396+-1.2893        
   substring                                         46.2070+-0.7120     ?     47.1690+-2.0211        ? might be 1.0208x slower
   switch-char-constant                               2.7120+-0.0611     ?      2.7565+-0.0956        ? might be 1.0164x slower
   switch-char                                        7.2608+-0.9833     ?      7.3573+-1.0432        ? might be 1.0133x slower
   switch-constant                                    8.5667+-0.1409     ?      8.5725+-0.3166        ?
   switch-string-basic-big-var                       14.6858+-0.1965     ?     14.7923+-0.2366        ?
   switch-string-basic-big                           14.8506+-1.9251     ?     14.9808+-1.4210        ?
   switch-string-basic-var                           14.5263+-1.2412     ?     15.6058+-1.8520        ? might be 1.0743x slower
   switch-string-basic                               13.1682+-0.9675     ?     13.9244+-1.5739        ? might be 1.0574x slower
   switch-string-big-length-tower-var                21.2768+-1.6782           20.2014+-1.4072          might be 1.0532x faster
   switch-string-length-tower-var                    15.3482+-1.3119     ?     16.7479+-1.8560        ? might be 1.0912x slower
   switch-string-length-tower                        13.2568+-1.5719           12.8048+-0.1687          might be 1.0353x faster
   switch-string-short                               12.9726+-1.1473     ?     13.2367+-1.4812        ? might be 1.0204x slower
   switch                                            12.7676+-0.2847     ?     12.8370+-0.3421        ?
   tear-off-arguments-simple                          3.4485+-0.2029            3.4314+-0.0609        
   tear-off-arguments                                 4.8903+-0.3230            4.8397+-0.2843          might be 1.0105x faster
   temporal-structure                                12.9903+-1.2423           12.2935+-0.1544          might be 1.0567x faster
   to-int32-boolean                                  13.5859+-0.1159     ?     13.8393+-0.2969        ? might be 1.0186x slower
   try-catch-get-by-val-cloned-arguments             15.1652+-1.5299           14.4604+-0.2548          might be 1.0487x faster
   try-catch-get-by-val-direct-arguments              6.9480+-1.2827     ?      7.5710+-1.2586        ? might be 1.0897x slower
   try-catch-get-by-val-scoped-arguments              7.9561+-0.9713            7.6558+-0.1994          might be 1.0392x faster
   undefined-property-access                        360.8572+-3.1262     ^    354.7093+-2.3039        ^ definitely 1.0173x faster
   undefined-test                                     2.9883+-0.0403     !      3.1202+-0.0733        ! definitely 1.0441x slower
   unprofiled-licm                                   23.1141+-0.8690     ?     23.3839+-1.3723        ? might be 1.0117x slower
   varargs-call                                      16.1381+-0.9337           15.1843+-0.7494          might be 1.0628x faster
   varargs-construct-inline                          24.1261+-4.9809           22.3313+-1.2564          might be 1.0804x faster
   varargs-construct                                 31.6230+-0.6901     ?     31.6243+-1.1757        ?
   varargs-inline                                     9.7864+-0.3974     ?     11.3702+-2.9920        ? might be 1.1618x slower
   varargs-strict-mode                               10.7511+-0.2583     ?     11.5681+-0.7385        ? might be 1.0760x slower
   varargs                                           10.8944+-0.5477     ?     11.2509+-0.2293        ? might be 1.0327x slower
   weird-inlining-const-prop                          2.4908+-0.1789            2.4364+-0.1189          might be 1.0223x faster

   &lt;geometric&gt;                                        8.8798+-0.0319     ?      8.9376+-0.0305        ? might be 1.0065x slower

                                                        TipOfTree                  Phantoms                                     
AsmBench:
   bigfib.cpp                                       496.0093+-6.3499     ?    498.4882+-4.4010        ?
   cray.c                                           429.5101+-4.1117          427.0995+-1.9842        
   dry.c                                            489.0392+-1.7439     ?    528.4001+-99.3151       ? might be 1.0805x slower
   FloatMM.c                                        724.7298+-1.9210          724.4025+-2.2871        
   gcc-loops.cpp                                   4267.1177+-14.9088    ?   4268.7125+-9.1571        ?
   n-body.c                                         980.9612+-3.1286          980.1216+-3.8824        
   Quicksort.c                                      420.5817+-1.5779     ?    423.2050+-3.2098        ?
   stepanov_container.cpp                          3594.8186+-9.1786     ?   3611.5050+-11.2683       ?
   Towers.c                                         260.2696+-1.9962          259.7695+-0.7081        

   &lt;geometric&gt;                                      793.2457+-2.1551     ?    799.8487+-14.8687       ? might be 1.0083x slower

                                                        TipOfTree                  Phantoms                                     
CompressionBench:
   huffman                                          358.9065+-2.8377     !    370.7792+-2.5978        ! definitely 1.0331x slower
   arithmetic-simple                                396.2536+-3.3336     ?    398.1304+-3.5848        ?
   arithmetic-precise                               298.9169+-3.8824          298.8947+-3.2508        
   arithmetic-complex-precise                       303.1027+-1.8073          299.7120+-5.4083          might be 1.0113x faster
   arithmetic-precise-order-0                       422.6335+-9.2720          422.0087+-3.8899        
   arithmetic-precise-order-1                       328.3498+-7.8892          328.1267+-3.1208        
   arithmetic-precise-order-2                       357.9410+-4.8630     ?    364.2371+-2.7906        ? might be 1.0176x slower
   arithmetic-simple-order-1                        423.3739+-2.2525     ?    425.4653+-3.3612        ?
   arithmetic-simple-order-2                        472.3193+-11.8346    ?    474.5986+-14.2289       ?
   lz-string                                        325.7289+-3.3978     ?    326.5235+-4.4278        ?

   &lt;geometric&gt;                                      364.7323+-2.8637     ?    366.6881+-2.4185        ? might be 1.0054x slower

                                                        TipOfTree                  Phantoms                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                                   64.3153+-0.2380     !     64.7699+-0.2056        ! definitely 1.0071x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087704</commentid>
    <comment_count>6</comment_count>
      <attachid>251399</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-22 19:43:05 -0700</bug_when>
    <thetext>Created attachment 251399
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087705</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-22 19:46:17 -0700</bug_when>
    <thetext>Attachment 251399 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:119:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:125:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:56:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:963:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGMovHintRemovalPhase.cpp:86:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 8 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087706</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-22 19:53:43 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Attachment 251399 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:119:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:125:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:126:  Multi
&gt; line control clauses should use braces.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:56:  Place brace on its
&gt; own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:129:  Place brace on its
&gt; own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:963:  Place brace on its own
&gt; line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGMovHintRemovalPhase.cpp:86:  Place brace
&gt; on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7206:  Place brace on
&gt; its own line for function definitions.  [whitespace/braces] [4]
&gt; Total errors found: 8 in 20 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

All of these errors are incorrect. I&apos;m using the accepted style for lambdas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087892</commentid>
    <comment_count>9</comment_count>
      <attachid>251458</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-23 11:20:11 -0700</bug_when>
    <thetext>Created attachment 251458
the patch

Fixed some comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087893</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-23 11:22:18 -0700</bug_when>
    <thetext>Attachment 251458 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:119:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:125:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:126:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:56:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:963:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGMovHintRemovalPhase.cpp:86:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7206:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:58:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:58:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:63:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:63:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 12 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087895</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-23 11:23:35 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Attachment 251458 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:119:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:125:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp:126:  Multi
&gt; line control clauses should use braces.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:56:  Place brace on its
&gt; own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGForAllKills.h:129:  Place brace on its
&gt; own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGGraph.cpp:963:  Place brace on its own
&gt; line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGMovHintRemovalPhase.cpp:86:  Place brace
&gt; on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7206:  Place brace on
&gt; its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:58:  One space before end of
&gt; line comments  [whitespace/comments] [5]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:58:  Should have a space
&gt; between // and comment  [whitespace/comments] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:63:  One space before end of
&gt; line comments  [whitespace/comments] [5]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:63:  Should have a space
&gt; between // and comment  [whitespace/comments] [4]
&gt; Total errors found: 12 in 20 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

The style bot still hasn&apos;t been updated for our style of lambdas. That&apos;s one these are all about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087952</commentid>
    <comment_count>12</comment_count>
      <attachid>251399</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-23 13:05:27 -0700</bug_when>
    <thetext>Comment on attachment 251399
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGGraph.h:722
&gt; +            // op_call_varargs inlining. Save the 

&quot;Save the&quot;

&gt; Source/JavaScriptCore/dfg/DFGNodeType.h:59
&gt; +    macro(GetLocal, NodeResultJS | NodeMustGenerate) \

I&apos;m surprised that this is required. Why is this required?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087957</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-23 13:16:50 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 251399 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=251399&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.h:722
&gt; &gt; +            // op_call_varargs inlining. Save the 
&gt; 
&gt; &quot;Save the&quot;

Yup, fixed locally. &quot;See the comment above&quot;

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNodeType.h:59
&gt; &gt; +    macro(GetLocal, NodeResultJS | NodeMustGenerate) \
&gt; 
&gt; I&apos;m surprised that this is required. Why is this required?

The comment above says:

    /* Note that GetLocal is MustGenerate because it&apos;s our only way of knowing that some other */\
    /* basic block might have read a local variable in bytecode. We only remove GetLocals if it */\
    /* is redundant because of an earlier GetLocal or SetLocal in the same block. We could make */\
    /* these not MustGenerate and use a more sophisticated analysis to insert PhantomLocals in */\
    /* the same way that we insert Phantoms. https://bugs.webkit.org/show_bug.cgi?id=144086 */\

It&apos;s the non-local equivalent of making MovHint a strong use, sort of. The associated bug that this references would be the more elegant solution, which I&apos;ll do in some future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087979</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-23 13:48:59 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/183207</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251135</attachid>
            <date>2015-04-19 16:27:32 -0700</date>
            <delta_ts>2015-04-21 16:24:50 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13153</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODI4NTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw4IEBACiAJCTBGNjIwMTc0MTQzRkNE
MzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0Mg
LyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYy
Mzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIzNzk1MUFFNDVD
QTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjYy
Mzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMzc5NjFBRTQ1Q0E3
MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdD
IC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwICovOyB9OwogCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5
NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovOyB9OwpAQCAtMjA2OCw2
ICsyMDcwLDggQEAKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5o
OyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjM3
OTUxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjIzNzk2MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhh
bnRvbUluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3
QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQ
cm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJv
ZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTgzLDYgKzQ5ODcsOCBA
QAogCQkJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCAqLywKIAkJCQkwRjdCMzY1RjE5N0M1MjVDMDBFRDFEREMgLyogREZHUGhhbnRvbUNhbm9uaWNh
bGl6YXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY3QjM2NjAxOTdDNTI1QzAwRUQxRERDIC8qIERG
R1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjYyMzc5NTFBRTQ1Q0E3
MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjYyMzc5
NjFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJ
MEZCRkREMDIxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwICov
LAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywK
QEAgLTYxNjgsNiArNjE3NCw3IEBACiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
V3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgz
ODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAw
RTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjIzNzk4MUFF
NDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTYwMDk3QTYwRUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVsU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDE0LDYgKzc0MjEsNyBAQAogCQkJCTk1QUI4MzU2
MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1Bo
YW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2Nzcx
QzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCisjaW5j
bHVkZSAiREZHRm9yQWxsS2lsbHMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
IkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKKyNpbmNsdWRlICJE
RkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisj
aW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMgUGhh
c2UgeworcHVibGljOgorICAgIFBoYW50b21JbnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCisg
ICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGluc2VydGlvbiIpCisgICAgICAgICwgbV9p
bnNlcnRpb25TZXQoZ3JhcGgpCisgICAgICAgICwgbV92YWx1ZXMoT3BlcmFuZHNMaWtlLCBncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKKyAgICAgICAgICAgIGhhbmRsZUJsb2NrKGJsb2NrKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2
b2lkIGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgbV92YWx1
ZXMuZmlsbChudWxscHRyKTsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5n
SW5kZXggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChu
b2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5kcygKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLT5vcmlnaW4u
Zm9yRXhpdCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1
ZXMub3BlcmFuZChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2Rl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBteU5vZGVJbmRleCA9IGxhc3RFeGl0aW5nSW5kZXg7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIWZvdW5kICYmIG15Tm9kZUluZGV4IDw9IG5vZGVJbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICArK215Tm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRy
ZW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZWRnZSA9PSBraWxsZWROb2RlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwgU3Bl
Y05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBraWxsZWROb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIG1fdmFsdWVz
Lm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgWm9tYmllSGludDoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVu
bGlua2VkTG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFu
ZChub2RlLT5sb2NhbCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobWF5RXhpdCht
X2dyYXBoLCBub2RlKSkKKyAgICAgICAgICAgICAgICBsYXN0RXhpdGluZ0luZGV4ID0gbm9kZUlu
ZGV4OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRl
KGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0Owor
ICAgIE9wZXJhbmRzPE5vZGUqPiBtX3ZhbHVlczsKK307CisgICAgCitib29sIHBlcmZvcm1QaGFu
dG9tSW5zZXJ0aW9uKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFBoYW50b20gSW5zZXJ0aW9uIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBo
YXNlPFBoYW50b21JbnNlcnRpb25QaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlX2gKKyNkZWZpbmUgREZHUGhhbnRvbUluc2VydGlvblBoYXNlX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IEdyYXBoOworCisvLyBJbnNlcnRzIFBoYW50b21zIGJhc2VkIG9uIGJ5dGVjb2RlIGxpdmVuZXNz
LgorCitib29sIHBlcmZvcm1QaGFudG9tSW5zZXJ0aW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHUGhhbnRvbUluc2VydGlvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMTgyODU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUg
IkRGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHT2JqZWN0QWxs
b2NhdGlvblNpbmtpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21DYW5vbmljYWxpemF0
aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCIKICNpbmNs
dWRlICJERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCIKQEAgLTMxOSw2ICszMjAsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyCiAgICAgICAgIHBlcmZvcm1QaGFudG9tUmVtb3ZhbChkZmcpOwogICAgICAgICBwZXJm
b3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAgcGVyZm9ybURDRShkZmcpOworICAgICAg
ICBwZXJmb3JtUGhhbnRvbUluc2VydGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtU3RhY2tMYXlv
dXQoZGZnKTsKICAgICAgICAgcGVyZm9ybVZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb24oZGZnKTsK
ICAgICAgICAgcGVyZm9ybVdhdGNocG9pbnRDb2xsZWN0aW9uKGRmZyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251274</attachid>
            <date>2015-04-21 16:24:50 -0700</date>
            <delta_ts>2015-04-21 19:23:59 -0700</delta_ts>
            <desc>it works but it might be slow</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19149</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODMwNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw4IEBACiAJCTBGNjIwMTc0MTQzRkNE
MzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0Mg
LyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYy
Mzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIzNzk1MUFFNDVD
QTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjYy
Mzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMzc5NjFBRTQ1Q0E3
MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdD
IC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwICovOyB9OwogCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5
NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovOyB9OwpAQCAtMjA4MCw2
ICsyMDgyLDggQEAKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5o
OyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjM3
OTUxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjIzNzk2MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhh
bnRvbUluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3
QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQ
cm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJv
ZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDE3LDYgKzUwMjEsOCBA
QAogCQkJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCAqLywKIAkJCQkwRjdCMzY1RjE5N0M1MjVDMDBFRDFEREMgLyogREZHUGhhbnRvbUNhbm9uaWNh
bGl6YXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY3QjM2NjAxOTdDNTI1QzAwRUQxRERDIC8qIERG
R1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjYyMzc5NTFBRTQ1Q0E3
MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjYyMzc5
NjFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJ
MEZCRkREMDIxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwICov
LAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywK
QEAgLTYyMDksNiArNjIxNSw3IEBACiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
V3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgz
ODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAw
RTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjIzNzk4MUFF
NDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTYwMDk3QTYwRUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVsU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDYxLDYgKzc0NjgsNyBAQAogCQkJCTk1QUI4MzU2
MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1Bo
YW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2Nzcx
QzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgJKHJldmlzaW9uIDE4MzA3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NzEsOSArNzEsMTMgQEAgdm9pZCBmb3JBbGxMaXZlTm9kZXNBdFRhaWwoR3JhcGgmIGdyYXBoLAog
ICAgIH0KIH0KIAorLy8gVGhpcyB0ZWxscyB5b3UgdGhvc2UgdGhpbmdzIHRoYXQgZGllIG9uIHRo
ZSBib3VuZGFyeSBiZXR3ZWVuIG5vZGVCZWZvcmUgYW5kIG5vZGVBZnRlci4gSXQgaXMKKy8vIGNv
bnNlcnZhdGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBtaWdodCByZXNvcnQgdG8gdGVsbGluZyB5
b3Ugc29tZSB0aGluZ3MgdGhhdCBhcmUgc3RpbGwgbGl2ZSBhdAorLy8gbm9kZUFmdGVyLgogdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgm
IGdyYXBoLCBDb2RlT3JpZ2luIGJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQordm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsK
KyAgICBDb2RlT3JpZ2luIGJlZm9yZSA9IG5vZGVCZWZvcmUtPm9yaWdpbi5mb3JFeGl0OwogICAg
IENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JFeGl0OwogICAgIAogICAg
IGlmICghYmVmb3JlKSB7CkBAIC0xNDAsOSArMTQ0LDkgQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rl
c0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAgIENvZGVPcmln
aW4gYmVmb3JlOworICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7CiAgICAgaWYgKG5vZGVJbmRl
eCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLT5vcmlnaW4uZm9y
RXhpdDsKKyAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAg
Zm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxODMwNzYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IC8qIEFueSB0d28gbm9kZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgc2FtZSBQaGkgZ3JhcGggd2ls
bCBzaGFyZSB0aGUgc2FtZSAqL1wKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0aHVz
IHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuIEZJWE1FOiBXZSBzaG91bGQgY29tZSB1cCB3aXRoICov
XAogICAgIC8qIGJldHRlciBuYW1lcyBmb3IgYSBsb3Qgb2YgdGhlc2UuIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMDcgKi9cCi0gICAgbWFjcm8oR2V0TG9jYWws
IE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBcCiAgICAgbWFj
cm8oUHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiREZHRm9yQWxsS2lsbHMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKKyNpbmNsdWRlICJERkdQ
aGFzZS5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5j
bHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xh
c3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBo
LCAicGhhbnRvbSBpbnNlcnRpb24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQor
ICAgICAgICAsIG1fdmFsdWVzKE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIC8vIFdlIGFzc3VtZSB0aGF0IERDRSBoYXMgYWxyZWFkeSBydW4uIElmIHdlIHJ1biBiZWZv
cmUgRENFIHRoZW4gd2UgdGhpbmsgdGhhdCBhbGwKKyAgICAgICAgLy8gU2V0TG9jYWxzIGV4ZWN1
dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2VydCB0b28gZmV3
IFBoYW50b21zLgorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgu
bV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYg
KHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQaGFudG9tIGlu
c2VydGlvbjpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICBoYW5kbGVCbG9jayhibG9jayk7CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0
ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBoYW5kbGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAg
ICAgIG1fdmFsdWVzLmZpbGwobnVsbHB0cik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBs
YXN0RXhpdGluZ0luZGV4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAw
OyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGlu
dDoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwo
KSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2Nh
bCgpKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2Rl
KSkKKyAgICAgICAgICAgICAgICBsYXN0RXhpdGluZ0luZGV4ID0gbm9kZUluZGV4OworCisgICAg
ICAgICAgICBhdXRvIGtpbGxBY3Rpb24gPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEtpbGxlZCBvcGVyYW5kOiAiLCByZWcsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQo
cmVnKTsKKyAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZE5vZGUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBmb3IgKAorICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBteU5vZGVJbmRleCA9IGxhc3RFeGl0aW5nSW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICFmb3VuZCAmJiBteU5vZGVJbmRleCA8PSBub2RlSW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgICsrbXlOb2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJl
dmlvdXNOb2RlID0gYmxvY2stPmF0KG15Tm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTm9kZSA9PSBraWxsZWRO
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJl
bigKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGVkZ2UgPT0ga2lsbGVkTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGZvdW5k
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVk
Tm9kZSwgIiBhZnRlciAiLAorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RF
eGl0aW5nSW5kZXgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGlu
ZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvIGluY3JlbWVudAorICAgICAgICAgICAg
ICAgIC8vIHRoZSByZWYgY291bnQuCisgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZp
eFJlZigpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggKyAxLCBT
cGVjTm9uZSwgUGhhbnRvbSwgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLT5vcmlnaW4sCisg
ICAgICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleCArIDEgPT0gYmxv
Y2stPnNpemUoKSkgeworICAgICAgICAgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlIHRlcm1pbmFs
IGJ5IHBsYWNpbmcgYSBub2RlIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gb2Yg
dGhlIGJsb2NrLgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI2Nzc4CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCisgICAgICAgICAgICAg
ICAgICAgIGZvckFsbEtpbGxlZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIHN1Y2Nlc3Nvci0+Zmly
c3RPcmlnaW5Ob2RlKCksIGtpbGxBY3Rpb24pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPmF0KG5v
ZGVJbmRleCArIDEpLCBraWxsQWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIEluc2VydGlv
blNldCBtX2luc2VydGlvblNldDsKKyAgICBPcGVyYW5kczxOb2RlKj4gbV92YWx1ZXM7Cit9Owor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKyAgICAKK2Jvb2wgcGVyZm9ybVBoYW50b21JbnNl
cnRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJERkcgUGhhbnRvbSBJbnNlcnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UGhh
bnRvbUluc2VydGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGFudG9tSW5zZXJ0aW9uUGhh
c2VfaAorI2RlZmluZSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CisKKy8vIEluc2VydHMgUGhhbnRvbXMgYmFzZWQgb24gYnl0ZWNvZGUgbGl2ZW5lc3MuCisKK2Jv
b2wgcGVyZm9ybVBoYW50b21JbnNlcnRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAxODMwNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFz
ZS5oIgorI2luY2x1ZGUgIkRGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1BoYW50b21SZW1vdmFsUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpAQCAt
MzIwLDYgKzMyMSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIK
ICAgICAgICAgcGVyZm9ybVBoYW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNS
ZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7CisgICAgICAgIHBlcmZv
cm1QaGFudG9tSW5zZXJ0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91dChkZmcp
OwogICAgICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogICAgICAg
ICBwZXJmb3JtV2F0Y2hwb2ludENvbGxlY3Rpb24oZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxODMwNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
MjEgKzU1LDI3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0Q2xlYXIoKTsKICAgICB9CiAgICAg
CisgICAgdm9pZCBzb3J0RnJlZSgpCisgICAgeworICAgICAgICBzdGQ6OnNvcnQobV9mcmVlLmJl
Z2luKCksIG1fZnJlZS5lbmQoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYXNzZXJ0Q2xlYXIo
KQogICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGlmIChBU1NFUlRfRElTQUJM
RUQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgICAgICAvLyBGb3IgZXZlcnkg
ZW50cnkgaW4gdGhlIHVzZWQgbGlzdCB0aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJlZ2lz
dGVyIHNob3VsZCBiZSB6ZXJvLCBvciBtYXgsIGR1ZSB0byBpdCBiZWluZyBhIHByZXNlcnZlZCBs
b2NhbC4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VzZWQuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkpOwor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4
KCkpOwogICAgICAgICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhlIGZyZWUgbGlzdCwgdGhlIHVz
ZSBjb3VudCBzaG91bGQgYmUgemVyby4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2ZyZWUuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFttX2ZyZWVbaV1d
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3VzZWRbbV9mcmVlW2ldXSk7CiAgICAg
ICAgIC8vIFRoZXJlIG11c3Qgbm90IGJlIGR1cGxpY2F0ZXMgaW4gdGhlIGZyZWUgbGlzdC4KICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fZnJlZS5zaXplKCk7ICsraikKLSAg
ICAgICAgICAgICAgICBBU1NFUlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CiAgICAgICAgIH0K
LSNlbmRpZgogICAgIH0KIAogICAgIFZpcnR1YWxSZWdpc3RlciBhbGxvY2F0ZSgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODMwNzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgICAgICAvLyBGb3JjZSB1c2FnZSBvZiBoaWdoZXN0LW51bWJlcmVkIHZpcnR1
YWwgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQuc29ydEZyZWUoKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5CbG9jayA9IDA7IGlu
ZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251292</attachid>
            <date>2015-04-21 19:23:59 -0700</date>
            <delta_ts>2015-04-22 19:10:15 -0700</delta_ts>
            <desc>probably fast enough</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23121</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODMwNzYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDYgKzM0OCw4IEBACiAJCTBGNjIwMTc0MTQzRkNE
MzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0Mg
LyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYy
Mzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIzNzk1MUFFNDVD
QTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjYy
Mzc5ODFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMzc5NjFBRTQ1Q0E3
MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdD
IC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwICovOyB9OwogCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5
NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwICovOyB9OwpAQCAtMjA4MCw2
ICsyMDgyLDggQEAKIAkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5o
OyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RG
R0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjM3
OTUxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNjIzNzk2MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhh
bnRvbUluc2VydGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3
QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQ
cm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJv
ZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDE3LDYgKzUwMjEsOCBA
QAogCQkJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
aCAqLywKIAkJCQkwRjdCMzY1RjE5N0M1MjVDMDBFRDFEREMgLyogREZHUGhhbnRvbUNhbm9uaWNh
bGl6YXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY3QjM2NjAxOTdDNTI1QzAwRUQxRERDIC8qIERG
R1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjYyMzc5NTFBRTQ1Q0E3
MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjYyMzc5
NjFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJ
MEZCRkREMDIxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwICov
LAogCQkJCTBGQkZERDAzMTk2QzkyQkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNl
LmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywK
QEAgLTYyMDksNiArNjIxNSw3IEBACiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
V3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgz
ODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAw
RTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjIzNzk4MUFF
NDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTYwMDk3QTYwRUJBQkI1ODAwN0E3Mjk3IC8qIExhYmVsU2NvcGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NDYxLDYgKzc0NjgsNyBAQAogCQkJCTk1QUI4MzU2
MERBNDNDMzAwMEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1Bo
YW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2Nzcx
QzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCShyZXZpc2lvbiAxODMwNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcg
KzIzNyw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKIHsKICAg
ICBGYXN0Qml0VmVjdG9yIG91dDsKICAgICAKLSAgICByZXN1bHQubV9tYXAuY2xlYXIoKTsKKyAg
ICByZXN1bHQubV9tYXAucmVzaXplKG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpLS07
KSB7CiAgICAgICAgIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ld
LmdldCgpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
Ojpjb21wdXRlRnUKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPmJ5dGVjb2RlT2Zm
c2V0cygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlcklu
c3RydWN0aW9uKG1fY29kZUJsb2NrLCBtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgb3V0
KTsKLSAgICAgICAgICAgIHJlc3VsdC5tX21hcC5hZGQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7Cisg
ICAgICAgICAgICByZXN1bHQubV9tYXBbYnl0ZWNvZGVPZmZzZXRdID0gb3V0OwogICAgICAgICB9
CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRl
Y29kZUxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHJldmlzaW9uIDE4MzA3NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw5ICszOCw3IEBAIGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKIHB1Ymxp
YzoKICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBnZXRMaXZlbmVzcyh1bnNpZ25lZCBieXRlY29k
ZUluZGV4KSBjb25zdAogICAgIHsKLSAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IG1fbWFwLmZpbmQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VS
VChpdGVyICE9IG1fbWFwLmVuZCgpKTsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAg
ICAgICByZXR1cm4gbV9tYXBbYnl0ZWNvZGVJbmRleF07CiAgICAgfQogICAgIAogICAgIGJvb2wg
b3BlcmFuZElzTGl2ZShpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QK
QEAgLTUxLDcgKzQ5LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogICAgIAotICAgIEJ5dGVjb2RlVG9CaXRtYXBNYXAgbV9t
YXA7CisgICAgVmVjdG9yPEZhc3RCaXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X21hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAkocmV2aXNpb24gMTgzMDc2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5
ICs3MSwxMyBAQCB2b2lkIGZvckFsbExpdmVOb2Rlc0F0VGFpbChHcmFwaCYgZ3JhcGgsCiAgICAg
fQogfQogCisvLyBUaGlzIHRlbGxzIHlvdSB0aG9zZSB0aGluZ3MgdGhhdCBkaWUgb24gdGhlIGJv
dW5kYXJ5IGJldHdlZW4gbm9kZUJlZm9yZSBhbmQgbm9kZUFmdGVyLiBJdCBpcworLy8gY29uc2Vy
dmF0aXZlIGluIHRoZSBzZW5zZSB0aGF0IGl0IG1pZ2h0IHJlc29ydCB0byB0ZWxsaW5nIHlvdSBz
b21lIHRoaW5ncyB0aGF0IGFyZSBzdGlsbCBsaXZlIGF0CisvLyBub2RlQWZ0ZXIuCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3Jh
cGgsIENvZGVPcmlnaW4gYmVmb3JlLCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCit2b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZUJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogeworICAg
IENvZGVPcmlnaW4gYmVmb3JlID0gbm9kZUJlZm9yZS0+b3JpZ2luLmZvckV4aXQ7CiAgICAgQ29k
ZU9yaWdpbiBhZnRlciA9IG5vZGVBZnRlci0+b3JpZ2luLmZvckV4aXQ7CiAgICAgCiAgICAgaWYg
KCFiZWZvcmUpIHsKQEAgLTEwNiw2ICsxMTAsMjMgQEAgdm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5k
cyhHcmFwaCYgZ3JhcGgsIAogICAgIC8vIGJlZm9yZSBjb3VsZCBiZSB1bnNldCBldmVuIGlmIGFm
dGVyIGlzLCBidXQgdGhlIG9wcG9zaXRlIGNhbm5vdCBoYXBwZW4uCiAgICAgQVNTRVJUKCEhYWZ0
ZXIpOwogICAgIAorICAgIC8vIEl0J3MgZWFzaWVyIHRvIGRvIHRoaXMgaWYgdGhlIGlubGluZSBj
YWxsIGZyYW1lcyBhcmUgdGhlIHNhbWUuIFRoaXMgaXMgd2F5IGZhc3RlciB0aGFuIHRoZQorICAg
IC8vIG90aGVyIGxvb3AuCisgICAgaWYgKGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUgPT0gYWZ0ZXIu
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGludCBzdGFja09mZnNldCA9IGJlZm9yZS5pbmxp
bmVDYWxsRnJhbWUgPyBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCA6IDA7Cisg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
YmVmb3JlLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBm
dWxsTGl2ZW5lc3MgPSBncmFwaC5saXZlbmVzc0Zvcihjb2RlQmxvY2spOworICAgICAgICBjb25z
dCBGYXN0Qml0VmVjdG9yJiBsaXZlQmVmb3JlID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGJl
Zm9yZS5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUFm
dGVyID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGFmdGVyLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCByZWxhdGl2ZUxvY2FsID0gY29kZUJsb2NrLT5t
X251bUNhbGxlZVJlZ2lzdGVyczsgcmVsYXRpdmVMb2NhbC0tOykgeworICAgICAgICAgICAgaWYg
KGxpdmVCZWZvcmUuZ2V0KHJlbGF0aXZlTG9jYWwpICYmICFsaXZlQWZ0ZXIuZ2V0KHJlbGF0aXZl
TG9jYWwpKQorICAgICAgICAgICAgICAgIGZ1bmN0b3IodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwo
cmVsYXRpdmVMb2NhbCkgKyBzdGFja09mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgLy8gRGV0ZWN0IGtpbGxzIHRoZSBzdXBlciBj
b25zZXJ2YXRpdmUgd2F5OiBpdCBpcyBraWxsZWQgaWYgaXQgd2FzIGxpdmUgYmVmb3JlIGFuZCBk
ZWFkIGFmdGVyLgogICAgIGZvciAodW5zaWduZWQgaSA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykgewogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgcmVnID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSk7CkBAIC0xNDAsOSArMTYxLDkgQEAg
dm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAgICAg
ICB9KTsKIAotICAgIENvZGVPcmlnaW4gYmVmb3JlOworICAgIE5vZGUqIGJlZm9yZSA9IG51bGxw
dHI7CiAgICAgaWYgKG5vZGVJbmRleCkKLSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCAtIDEpLT5vcmlnaW4uZm9yRXhpdDsKKyAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5v
ZGVJbmRleCAtIDEpOwogCiAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBo
LCBiZWZvcmUsIG5vZGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhp
bnRSZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE4MzA3NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAobm9kZUluZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFu
ZHMoCi0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAx
KS0+b3JpZ2luLmZvckV4aXQsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJs
b2NrLT5hdChub2RlSW5kZXggLSAxKSwgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGEgYml0IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBl
dmVuIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIu
IFdlIG5lZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxODMwNzYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIEFueSB0d28gbm9kZXMg
dGhhdCBhcmUgcGFydCBvZiB0aGUgc2FtZSBQaGkgZ3JhcGggd2lsbCBzaGFyZSB0aGUgc2FtZSAq
L1wKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0aHVzIHdpbGwgc2hhcmUgcHJlZGlj
dGlvbnMuIEZJWE1FOiBXZSBzaG91bGQgY29tZSB1cCB3aXRoICovXAogICAgIC8qIGJldHRlciBu
YW1lcyBmb3IgYSBsb3Qgb2YgdGhlc2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzczMDcgKi9cCi0gICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAor
ICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKICAgICBcCiAgICAgbWFjcm8oUHV0U3RhY2ssIE5vZGVN
dXN0R2VuZXJhdGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoYW50b21J
bnNlcnRpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRm9yQWxsS2lsbHMu
aCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkRGR01heUV4aXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUg
IkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVB
Y2Nlc3NEYXRhRHVtcC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJPcGVy
YW5kc0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1l
c3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgUGhhbnRvbUluc2VydGlv
blBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBQaGFudG9tSW5zZXJ0aW9uUGhh
c2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAicGhhbnRvbSBpbnNlcnRp
b24iKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fdmFsdWVz
KE9wZXJhbmRzTGlrZSwgZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIFdlIGFzc3VtZSB0
aGF0IERDRSBoYXMgYWxyZWFkeSBydW4uIElmIHdlIHJ1biBiZWZvcmUgRENFIHRoZW4gd2UgdGhp
bmsgdGhhdCBhbGwKKyAgICAgICAgLy8gU2V0TG9jYWxzIGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNj
dXJhdGUuIFRoYXQgY2F1c2VzIHVzIHRvIGluc2VydCB0b28gZmV3IFBoYW50b21zLgorICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09
IEV4YWN0UmVmQ291bnQpOworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOworICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisg
ICAgICAgICAgICBoYW5kbGVCbG9jayhibG9jayk7CisgICAgICAgIAorICAgICAgICBpZiAodmVy
Ym9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRp
b246XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5k
bGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIG1fdmFsdWVzLmZpbGwo
bnVsbHB0cik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBsYXN0RXhpdGluZ0luZGV4ID0g
MDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBNb3ZIaW50
OgorICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBudWxscHRyOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAg
ICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAg
ICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT5sb2NhbCgpKSA9IG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSkKKyAgICAgICAgICAgICAg
ICBsYXN0RXhpdGluZ0luZGV4ID0gbm9kZUluZGV4OworCisgICAgICAgICAgICBhdXRvIGtpbGxB
Y3Rpb24gPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEtpbGxlZCBvcGVyYW5k
OiAiLCByZWcsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgTm9kZSoga2lsbGVkTm9kZSA9IG1fdmFsdWVzLm9wZXJhbmQocmVnKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWtpbGxlZE5vZGUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBmb3IgKAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBteU5v
ZGVJbmRleCA9IGxhc3RFeGl0aW5nSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICFmb3VuZCAm
JiBteU5vZGVJbmRleCA8PSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgICsrbXlOb2Rl
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxvY2st
PmF0KG15Tm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHByZXZpb3VzTm9kZSA9PSBraWxsZWROb2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzTm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoRWRn
ZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UgPT0ga2lsbGVk
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgSW5zZXJ0aW5nIFBoYW50b20gb24gIiwga2lsbGVkTm9kZSwgIiBhZnRlciAiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLCAiXG4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGluZyBhIG5ldyB1c2UgbWVhbnMg
dGhhdCB3ZSBoYXZlIHRvIGluY3JlbWVudAorICAgICAgICAgICAgICAgIC8vIHRoZSByZWYgY291
bnQuCisgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggKyAxLCBTcGVjTm9uZSwgUGhhbnRvbSwg
YmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
IGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleCArIDEgPT0gYmxvY2stPnNpemUoKSkgeworICAg
ICAgICAgICAgICAgIGlmICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiB3
ZSBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhlIHRlcm1pbmFsIGJ5IHBsYWNpbmcgYSBub2Rl
IGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGJsb2NrLgorICAgICAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2Nzc4CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCisgICAgICAgICAgICAgICAgICAgIGZvckFsbEtpbGxl
ZE9wZXJhbmRzKG1fZ3JhcGgsIG5vZGUsIHN1Y2Nlc3Nvci0+Zmlyc3RPcmlnaW5Ob2RlKCksIGtp
bGxBY3Rpb24pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZm9yQWxsS2ls
bGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPmF0KG5vZGVJbmRleCArIDEpLCBraWxs
QWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNl
dDsKKyAgICBPcGVyYW5kczxOb2RlKj4gbV92YWx1ZXM7Cit9OworCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKyAgICAKK2Jvb2wgcGVyZm9ybVBoYW50b21JbnNlcnRpb24oR3JhcGgmIGdyYXBo
KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUGhhbnRvbSBJbnNl
cnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UGhhbnRvbUluc2VydGlvblBoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50
b21JbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VfaAorI2RlZmluZSBERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluc2VydHMgUGhh
bnRvbXMgYmFzZWQgb24gYnl0ZWNvZGUgbGl2ZW5lc3MuCisKK2Jvb2wgcGVyZm9ybVBoYW50b21J
bnNlcnRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Vf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxODMw
NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENyZWF0aW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmgiCiAj
aW5jbHVkZSAiREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1BoYW50b21JbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21SZW1vdmFsUGhh
c2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRl
ICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpAQCAtMzIwLDYgKzMyMSw3IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybVBo
YW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwog
ICAgICAgICBwZXJmb3JtRENFKGRmZyk7CisgICAgICAgIHBlcmZvcm1QaGFudG9tSW5zZXJ0aW9u
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91dChkZmcpOwogICAgICAgICBwZXJmb3Jt
VmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtV2F0Y2hwb2lu
dENvbGxlY3Rpb24oZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nv
cmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Nv
cmVCb2FyZC5oCShyZXZpc2lvbiAxODMwNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjEgKzU1LDI3IEBAIHB1Ymxp
YzoKICAgICAgICAgYXNzZXJ0Q2xlYXIoKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzb3J0RnJl
ZSgpCisgICAgeworICAgICAgICBzdGQ6OnNvcnQobV9mcmVlLmJlZ2luKCksIG1fZnJlZS5lbmQo
KSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYXNzZXJ0Q2xlYXIoKQogICAgIHsKLSNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAogICAgICAgICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhlIHVzZWQg
bGlzdCB0aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIHNob3VsZCBiZSB6ZXJv
LCBvciBtYXgsIGR1ZSB0byBpdCBiZWluZyBhIHByZXNlcnZlZCBsb2NhbC4KICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3VzZWQuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBBU1NF
UlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkpOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkpOwogICAgICAgICAvLyBG
b3IgZXZlcnkgZW50cnkgaW4gdGhlIGZyZWUgbGlzdCwgdGhlIHVzZSBjb3VudCBzaG91bGQgYmUg
emVyby4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kp
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFttX2ZyZWVbaV1dKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3VzZWRbbV9mcmVlW2ldXSk7CiAgICAgICAgIC8vIFRoZXJlIG11c3Qg
bm90IGJlIGR1cGxpY2F0ZXMgaW4gdGhlIGZyZWUgbGlzdC4KICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGogPSBpICsgMTsgaiA8IG1fZnJlZS5zaXplKCk7ICsraikKLSAgICAgICAgICAgICAgICBBU1NF
UlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CiAgICAgICAgIH0KLSNlbmRpZgogICAgIH0KIAog
ICAgIFZpcnR1YWxSZWdpc3RlciBhbGxvY2F0ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxODMwNzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDYgKzU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICAv
LyBGb3JjZSB1c2FnZSBvZiBoaWdoZXN0LW51bWJlcmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgorICAg
ICAgICAgICAgICAgIHNjb3JlQm9hcmQuc29ydEZyZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2Nr
LT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251396</attachid>
            <date>2015-04-22 19:10:15 -0700</date>
            <delta_ts>2015-04-22 19:43:05 -0700</delta_ts>
            <desc>more speed</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50309</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMTM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY1IEBA
CisyMDE1LTA0LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbnNlcnQgUGhhbnRvbXMgbGF0ZSB1c2luZyBCeXRlY29kZUtpbGxzIGFuZCBi
bG9jay1sb2NhbCBPU1IgYXZhaWxhYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM3MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlJ3ZlIGFsd2F5cyBoYWQgYnVncyBhcmlzaW5n
IGZyb20gdGhlIGZhY3QgdGhhdCB3ZSB3b3VsZCBNb3ZIaW50IHNvbWV0aGluZyBpbnRvIGEgbG9j
YWwsCisgICAgICAgIGFuZCB0aGVuIGZhaWwgdG8ga2VlcCBpdCBhbGl2ZS4gV2Ugd291bGQgdGhl
biB0cnkgdG8ga2VlcCB0aGluZ3MgYWxpdmUgYnkgcHV0dGluZyBQaGFudG9tcworICAgICAgICBv
biB0aG9zZSBOb2RlcyB0aGF0IHdlcmUgTW92SGludGVkLiBCdXQgdGhpcyBiZWNhbWUgaW5jcmVh
c2luZ2x5IHRyaWNreS4gR2l2ZW4gdGhlCisgICAgICAgIHNvcGhpc3RpY2F0aW9uIG9mIHRoZSB0
cmFuc2Zvcm1hdGlvbnMgd2UgYXJlIGRvaW5nIHRvZGF5LCB0aGlzIGFwcHJvYWNoIGlzIGp1c3Qg
bm90IHNvdW5kCisgICAgICAgIGFueW1vcmUuCisgICAgICAgIAorICAgICAgICBUaGlzIGNvbXBy
ZWhlbnNpdmVseSBmaXhlcyB0aGVzZSBidWdzIGJ5IGhhdmluZyB0aGUgREZHIGJhY2tlbmQgYXV0
b21hdGljYWxseSBpbnNlcnQKKyAgICAgICAgUGhhbnRvbXMganVzdCBiZWZvcmUgY29kZWdlbiBi
YXNlZCBvbiBieXRlY29kZSBsaXZlbmVzcy4gVG8gbWFrZSB0aGlzIHByYWN0aWNhbCwgdGhpcyBh
bHNvCisgICAgICAgIG1ha2VzIGl0IG11Y2ggZmFzdGVyIHRvIHF1ZXJ5IGJ5dGVjb2RlIGxpdmVu
ZXNzLgorICAgICAgICAKKyAgICAgICAgSXQncyBhYm91dCBhcyBwZXJmLW5ldXRyYWwgYXMgaXQg
Z2V0cyBmb3IgYSBjaGFuZ2UgdGhhdCBpbmNyZWFzZXMgY29tcGlsZXIgd29yayB3aXRob3V0Cisg
ICAgICAgIGFjdHVhbGx5IG9wdGltaXppbmcgYW55dGhpbmcuIExhdGVyIGNoYW5nZXMgd2lsbCBy
ZW1vdmUgdGhlIG9sZCBQaGFudG9tLXByZXNlcnZpbmcgbG9naWMsCisgICAgICAgIHdoaWNoIHNo
b3VsZCB0aGVuIHNwZWVkIHVzIHVwLiBJIGNhbid0IHJlYWxseSByZXBvcnQgY29uY3JldGUgc2xv
dy1kb3duIG51bWJlcnMgYmVjYXVzZQorICAgICAgICB0aGV5IGFyZSBsb3cgZW5vdWdoIHRvIGJh
c2ljYWxseSBiZSBpbiB0aGUgbm9pc2UuIEZvciBleGFtcGxlLCBhIDIwLWl0ZXJhdGlvbiBydW4g
b2YKKyAgICAgICAgU3VuU3BpZGVyIHlpZWxkcyAibWF5YmUgMC44JSBzbG93ZXIiLCB3aGF0ZXZl
ciB0aGF0IG1lYW5zLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKiBieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0ZWNvZGVMaXZl
bmVzczo6Z2V0TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5o
OgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhdG9yKyk6CisgICAgICAgIChK
U0M6OlZpcnR1YWxSZWdpc3Rlcjo6b3BlcmF0b3ItKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxs
S2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxMaXZlTm9kZXNBdFRhaWwpOgorICAg
ICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6REZH
Ojpmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25Q
aGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1QaGFudG9tSW5zZXJ0
aW9uKToKKyAgICAgICAgKiBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmg6IEFkZGVkLgor
ICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21w
aWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBkZmcvREZHU2NvcmVCb2FyZC5oOgorICAgICAg
ICAoSlNDOjpERkc6OlNjb3JlQm9hcmQ6OnNvcnRGcmVlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
Y29yZUJvYXJkOjphc3NlcnRDbGVhcik6CisgICAgICAgICogZGZnL0RGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmlydHVhbFJlZ2lzdGVy
QWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFyZ3VtZW50
cyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3BoYW50b20taW5hZGVxdWFjeS5qczogQWRkZWQu
CisgICAgICAgIChiYXIpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGZvbyk6CisKIDIwMTUt
MDQtMjIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFNwYXJzZUFy
cmF5RW50cnkncyB3cml0ZSBiYXJyaWVyIG93bmVyIHNob3VsZCBiZSB0aGUgU3BhcnNlQXJyYXlW
YWx1ZU1hcC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDE4MzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAyLDYgKzIwMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAg
ICAgZGZnL0RGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwCiAgICAgZGZnL0RGR09wZXJh
dGlvbnMuY3BwCiAgICAgZGZnL0RGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwCisg
ICAgZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUGhhbnRvbVJl
bW92YWxQaGFzZS5jcHAKICAgICBkZmcvREZHUGhhc2UuY3BwCiAgICAgZGZnL0RGR1BoaUNoaWxk
cmVuLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxODMwOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NDYsNiArNDQ2
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPYmplY3RBbGxvY2F0aW9u
U2lua2luZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5jcHAiIC8+CkBAIC0x
MTQwLDYgKzExNDEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4
aXRKdW1wUGxhY2Vob2xkZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdPU1JFeGl0UHJlcGFyYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hpbGRyZW4uaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODMwOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMzQ4LDYgKzM0OCw4IEBACiAJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYy
MDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8q
IERGR0Jhc2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkYx
NDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEg
LyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIzNzk1MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2UuY3BwICovOyB9OworCQkwRjYyMzc5ODFBRTQ1Q0E3MDBENDAyRUEg
LyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMzc5NjFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2Mzk0
NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0M0MxNUM3NUYx
NDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjYz
OTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAv
KiBBcnJheVByb2ZpbGUuY3BwICovOyB9OwpAQCAtMjA4MCw2ICsyMDgyLDggQEAKIAkJMEY2MjAx
NkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzAxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjM3OTUxQUU0NUNBNzAwRDQwMkVBIC8q
IERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1Bo
YW50b21JbnNlcnRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
NjIzNzk2MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmg7
IHBhdGggPSBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNjM5NDNDMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1R5
cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzOTQzRDE1Qzc1RjE0
MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjYzOTQ1MTE1RDA3MDUxMDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC01MDE3LDYgKzUwMjEsOCBAQAogCQkJCTBGMjM1QkVBMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLywKIAkJCQkwRjdCMzY1RjE5
N0M1MjVDMDBFRDFEREMgLyogREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5jcHAgKi8s
CiAJCQkJMEY3QjM2NjAxOTdDNTI1QzAwRUQxRERDIC8qIERGR1BoYW50b21DYW5vbmljYWxpemF0
aW9uUGhhc2UuaCAqLywKKwkJCQkwRjYyMzc5NTFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcCAqLywKKwkJCQkwRjYyMzc5NjFBRTQ1Q0E3MDBENDAyRUEgLyog
REZHUGhhbnRvbUluc2VydGlvblBoYXNlLmggKi8sCiAJCQkJMEZCRkREMDIxOTZDOTJCRjAwN0E1
QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwICovLAogCQkJCTBGQkZERDAzMTk2Qzky
QkYwMDdBNUJGQSAvKiBERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmggKi8sCiAJCQkJMEZGRkM5NEYx
NEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCAqLywKQEAgLTYyMDksNiArNjIxNSw3IEBA
CiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29r
dXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzJBMEVEMUNF
NjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTYwMDk3QTYwRUJBQkI1
ODAwN0E3Mjk3IC8qIExhYmVsU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjU0Njc3MTRG
NTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC03NDYxLDYgKzc0NjgsNyBAQAogCQkJCTk1QUI4MzU2MERBNDNDMzAwMEJDODNGMyAvKiBQ
cm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRTE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmls
ZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFGMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxODMw
OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDcgKzIzNyw3IEBAIHZvaWQgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKIHsKICAgICBGYXN0Qml0VmVjdG9yIG91dDsK
ICAgICAKLSAgICByZXN1bHQubV9tYXAuY2xlYXIoKTsKKyAgICByZXN1bHQubV9tYXAucmVzaXpl
KG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwogICAgIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG1fYmFzaWNCbG9ja3Muc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgIEJ5dGVjb2Rl
QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jhc2ljQmxvY2tzW2ldLmdldCgpOwpAQCAtMjQ5LDcgKzI0
OSw3IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYmxvY2stPmJ5dGVjb2RlT2Zmc2V0cygpLnNpemUoKTsgaS0tOykg
ewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+Ynl0ZWNvZGVP
ZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKG1fY29kZUJsb2Nr
LCBtX2Jhc2ljQmxvY2tzLCBieXRlY29kZU9mZnNldCwgb3V0KTsKLSAgICAgICAgICAgIHJlc3Vs
dC5tX21hcC5hZGQoYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAgICAgICByZXN1bHQubV9t
YXBbYnl0ZWNvZGVPZmZzZXRdID0gb3V0OwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVu
ZXNzLmgJKHJldmlzaW9uIDE4MzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw5ICszOCw3IEBA
IGNsYXNzIEZ1bGxCeXRlY29kZUxpdmVuZXNzIHsKIHB1YmxpYzoKICAgICBjb25zdCBGYXN0Qml0
VmVjdG9yJiBnZXRMaXZlbmVzcyh1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdAogICAgIHsK
LSAgICAgICAgQnl0ZWNvZGVUb0JpdG1hcE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbWFw
LmZpbmQoYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIEFTU0VSVChpdGVyICE9IG1fbWFwLmVuZCgp
KTsKLSAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOworICAgICAgICByZXR1cm4gbV9tYXBbYnl0
ZWNvZGVJbmRleF07CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmFuZElzTGl2ZShpbnQgb3Bl
cmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkgY29uc3QKQEAgLTUxLDcgKzQ5LDcgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
OwogICAgIAotICAgIEJ5dGVjb2RlVG9CaXRtYXBNYXAgbV9tYXA7CisgICAgVmVjdG9yPEZhc3RC
aXRWZWN0b3IsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX21hcDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxS
ZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
aXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMTgzMDk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw2ICs4
MiwxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9m
ZnNldCgpIC0gdmFsdWUpOwogICAgIH0KKyAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmF0b3IrKFZp
cnR1YWxSZWdpc3RlciB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFs
UmVnaXN0ZXIob2Zmc2V0KCkgKyB2YWx1ZS5vZmZzZXQoKSk7CisgICAgfQorICAgIFZpcnR1YWxS
ZWdpc3RlciBvcGVyYXRvci0oVmlydHVhbFJlZ2lzdGVyIHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvZmZzZXQoKSAtIHZhbHVlLm9mZnNldCgpKTsK
KyAgICB9CiAgICAgVmlydHVhbFJlZ2lzdGVyJiBvcGVyYXRvcis9KGludCB2YWx1ZSkKICAgICB7
CiAgICAgICAgIHJldHVybiAqdGhpcyA9ICp0aGlzICsgdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE4MzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCwxMiArMTk0LDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgPT0gR2V0
TG9jYWwpIHsKICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRo
aXMgR2V0TG9jYWwgd2l0aCBvdGhlck5vZGUuCi0gICAgICAgICAgICAgICAgbm9kZS0+cmVwbGFj
ZW1lbnQgPSBvdGhlck5vZGU7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0UmVwbGFjZW1lbnQo
b3RoZXJOb2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIEFTU0VSVChvdGhlck5vZGUtPm9wKCkgPT0gU2V0TG9jYWwp
OwotICAgICAgICAgICAgbm9kZS0+cmVwbGFjZW1lbnQgPSBvdGhlck5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgIG5vZGUtPnNldFJlcGxhY2VtZW50KG90aGVyTm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAx
ODMwOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM1LDcgKzIzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IElkZW50aXR5KSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRvQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9ub2RlLT5yZXBsYWNlbWVudCA9IG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAg
ICAgICAgICAgICBtX25vZGUtPnNldFJlcGxhY2VtZW50KG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgp
KTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHJ1bGUgb25seSBtYWtlcyBz
ZW5zZSBmb3IgbG9jYWwgQ1NFLCBzaW5jZSBpbiBTU0EgZm9ybSB3ZSBoYXZlIGFscmVhZHkKQEAg
LTQzOCw3ICs0MzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBJZGVudGl0eSkgewogICAgICAgICAgICAgICAgICAgICBt
X25vZGUtPmNvbnZlcnRUb0NoZWNrKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+cmVw
bGFjZW1lbnQgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9ub2RlLT5zZXRSZXBsYWNlbWVudChtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGNsb2JiZXJpemUobV9ncmFwaCwgbV9ub2RlLCAqdGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vwb2NoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFcG9jaC5oCShyZXZpc2lvbiAxODMwOTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vwb2NoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDYgKzQxLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBF
cG9jaCBmcm9tVW5zaWduZWQodW5zaWduZWQgdmFsdWUpCisgICAgeworICAgICAgICBFcG9jaCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2Vwb2NoID0gdmFsdWU7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHRvVW5zaWduZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZXBvY2g7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBFcG9j
aCBmaXJzdCgpCiAgICAgewogICAgICAgICBFcG9jaCByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGb3JBbGxLaWxscy5oCShyZXZpc2lvbiAxODMwOTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDY5ICs1MSw4OCBAQCB2b2lkIGZvckFsbExpdmVOb2Rlc0F0VGFpbChHcmFwaCYgZ3Jh
cGgsCiAgICAgREZHX0FTU0VSVChncmFwaCwgYmxvY2stPnRlcm1pbmFsKCksIGJsb2NrLT50ZXJt
aW5hbCgpLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKICAgICAKICAgICBBdmFpbGFiaWxpdHlN
YXAmIGF2YWlsYWJpbGl0eU1hcCA9IGJsb2NrLT5zc2EtPmF2YWlsYWJpbGl0eUF0VGFpbDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMuc2l6ZSgpOyBpLS07
KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2Nh
bHMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWdy
YXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4
aXQpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBhdmFpbGFiaWxp
dHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKLSAgICAgICAgICAgIHJlZywKLSAgICAgICAg
ICAgIFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNl
ZW4uY29udGFpbnMobm9kZSk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChOb2Rl
KiBub2RlKSAtPiBib29sIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNlZW4uYWRkKG5vZGUpLmlz
TmV3RW50cnkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBmdW5jdG9yKG5vZGUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgfSk7Ci0gICAgfQorICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKAor
ICAgICAgICBibG9jay0+dGVybWluYWwoKS0+b3JpZ2luLmZvckV4aXQsCisgICAgICAgIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmNsb3Nl
U3RhcnRpbmdXaXRoTG9jYWwoCisgICAgICAgICAgICAgICAgcmVnLAorICAgICAgICAgICAgICAg
IFsmXSAoTm9kZSogbm9kZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
ZWVuLmNvbnRhaW5zKG5vZGUpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
WyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWVu
LmFkZChub2RlKS5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKG5vZGUpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CiB9CiAK
Ky8vIFRoaXMgdGVsbHMgeW91IHRob3NlIHRoaW5ncyB0aGF0IGRpZSBvbiB0aGUgYm91bmRhcnkg
YmV0d2VlbiBub2RlQmVmb3JlIGFuZCBub2RlQWZ0ZXIuIEl0IGlzCisvLyBjb25zZXJ2YXRpdmUg
aW4gdGhlIHNlbnNlIHRoYXQgaXQgbWlnaHQgcmVzb3J0IHRvIHRlbGxpbmcgeW91IHNvbWUgdGhp
bmdzIHRoYXQgYXJlIHN0aWxsIGxpdmUgYXQKKy8vIG5vZGVBZnRlci4KIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+Ci12b2lkIGZvckFsbEtpbGxlZE9wZXJhbmRzKEdyYXBoJiBncmFwaCwgQ29k
ZU9yaWdpbiBiZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
K3ZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlQmVmb3Jl
LCBOb2RlKiBub2RlQWZ0ZXIsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CisgICAgQ29kZU9y
aWdpbiBiZWZvcmUgPSBub2RlQmVmb3JlLT5vcmlnaW4uZm9yRXhpdDsKICAgICBDb2RlT3JpZ2lu
IGFmdGVyID0gbm9kZUFmdGVyLT5vcmlnaW4uZm9yRXhpdDsKICAgICAKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYWxyZWFkeU5vdGVkOworICAgIGlmICghIWFmdGVyKSB7CisgICAgICAgIC8vIElmIHdl
IE1vdkhpbnQgc29tZXRoaW5nIHRoYXQgaXMgbGl2ZSBhdCB0aGUgdGltZSwgdGhlbiB3ZSBraWxs
IHRoZSBvbGQgdmFsdWUuCisgICAgICAgIGlmIChub2RlQWZ0ZXItPmNvbnRhaW5zTW92SGludCgp
KSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gbm9kZUFmdGVyLT51bmxpbmtl
ZExvY2FsKCk7CisgICAgICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGFm
dGVyKSkgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgICAgICAgICBh
bHJlYWR5Tm90ZWQgPSByZWc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
CiAgICAgaWYgKCFiZWZvcmUpIHsKICAgICAgICAgaWYgKCFhZnRlcikKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgLy8gVGhlIHRydWUgYmVmb3JlLW9yaWdpbiBpcyB0aGUgb3JpZ2luIGF0
IHByZWRlY2Vzc29ycyB0aGF0IGp1bXAgdG8gdXMuIEJ1dCB0aGVyZSBjYW4gYmUKICAgICAgICAg
Ly8gbWFueSBzdWNoIHByZWRlY2Vzc29ycyBhbmQgdGhleSB3aWxsIGxpa2VseSBhbGwgaGF2ZSBh
IGRpZmZlcmVudCBvcmlnaW4uIFNvLCBpdCdzIGJldHRlcgogICAgICAgICAvLyB0byBkbyB0aGUg
Y29uc2VydmF0aXZlIHRoaW5nLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAg
ICAgICAgICAgIGlmIChncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKQotICAgICAg
ICAgICAgICAgIGZ1bmN0b3IocmVnKTsKLSAgICAgICAgfQorICAgICAgICBncmFwaC5mb3JBbGxM
b2NhbHNMaXZlSW5CeXRlY29kZShhZnRlciwgZnVuY3Rvcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBsaXZlIGF0
IHRoZSB0aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYWxyZWFkeU5vdGVkOwotICAgIGlmIChub2RlQWZ0ZXItPmNvbnRhaW5zTW92SGludCgpKSB7
Ci0gICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBub2RlQWZ0ZXItPnVubGlua2VkTG9jYWwo
KTsKLSAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlcikpIHsKLSAg
ICAgICAgICAgIGZ1bmN0b3IocmVnKTsKLSAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBpZiAoYmVmb3JlID09IGFmdGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgCiAgICAgLy8gYmVmb3JlIGNvdWxkIGJlIHVuc2V0IGV2ZW4gaWYgYWZ0
ZXIgaXMsIGJ1dCB0aGUgb3Bwb3NpdGUgY2Fubm90IGhhcHBlbi4KICAgICBBU1NFUlQoISFhZnRl
cik7CiAgICAgCisgICAgLy8gSXQncyBlYXNpZXIgdG8gZG8gdGhpcyBpZiB0aGUgaW5saW5lIGNh
bGwgZnJhbWVzIGFyZSB0aGUgc2FtZS4gVGhpcyBpcyB3YXkgZmFzdGVyIHRoYW4gdGhlCisgICAg
Ly8gb3RoZXIgbG9vcC4KKyAgICBpZiAoYmVmb3JlLmlubGluZUNhbGxGcmFtZSA9PSBhZnRlci5p
bmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgaW50IHN0YWNrT2Zmc2V0ID0gYmVmb3JlLmlubGlu
ZUNhbGxGcmFtZSA/IGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMDsKKyAg
ICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihi
ZWZvcmUuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1
bGxMaXZlbmVzcyA9IGdyYXBoLmxpdmVuZXNzRm9yKGNvZGVCbG9jayk7CisgICAgICAgIGNvbnN0
IEZhc3RCaXRWZWN0b3ImIGxpdmVCZWZvcmUgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYmVm
b3JlLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlQWZ0
ZXIgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoYWZ0ZXIuYnl0ZWNvZGVJbmRleCk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHJlbGF0aXZlTG9jYWwgPSBjb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzOyByZWxhdGl2ZUxvY2FsLS07KSB7CisgICAgICAgICAgICBpZiAo
bGl2ZUJlZm9yZS5nZXQocmVsYXRpdmVMb2NhbCkgJiYgIWxpdmVBZnRlci5nZXQocmVsYXRpdmVM
b2NhbCkpCisgICAgICAgICAgICAgICAgZnVuY3Rvcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChy
ZWxhdGl2ZUxvY2FsKSArIHN0YWNrT2Zmc2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICAvLyBEZXRlY3Qga2lsbHMgdGhlIHN1cGVyIGNv
bnNlcnZhdGl2ZSB3YXk6IGl0IGlzIGtpbGxlZCBpZiBpdCB3YXMgbGl2ZSBiZWZvcmUgYW5kIGRl
YWQgYWZ0ZXIuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyBpLS07KSB7Ci0gICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciByZWcgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKTsKLSAgICAgICAgaWYgKHJlZyA9PSBh
bHJlYWR5Tm90ZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGdyYXBoLmlz
TGl2ZUluQnl0ZWNvZGUocmVnLCBiZWZvcmUpICYmICFncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKHJl
ZywgYWZ0ZXIpKQorICAgIEJpdFZlY3RvciBsaXZlQWZ0ZXIgPSBncmFwaC5sb2NhbHNMaXZlSW5C
eXRlY29kZShhZnRlcik7CisgICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisg
ICAgICAgIGJlZm9yZSwKKyAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAg
ICAgICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBpZiAobGl2ZUFmdGVyLmdldChyZWcudG9Mb2NhbCgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7Ci0gICAgfQorICAgICAg
ICB9KTsKIH0KICAgICAKIC8vIFRlbGxzIHlvdSBhbGwgb2YgdGhlIG5vZGVzIHRoYXQgd291bGQg
bm8gbG9uZ2VyIGJlIGxpdmUgYWNyb3NzIHRoZSBub2RlIGF0IHRoaXMgbm9kZUluZGV4LgpAQCAt
MTQwLDkgKzE1OSw5IEBAIHZvaWQgZm9yQWxsS2lsbGVkTm9kZXNBdE5vZGVJbmRleCgKICAgICAg
ICAgICAgIH0KICAgICAgICAgfSk7CiAKLSAgICBDb2RlT3JpZ2luIGJlZm9yZTsKKyAgICBOb2Rl
KiBiZWZvcmUgPSBudWxscHRyOwogICAgIGlmIChub2RlSW5kZXgpCi0gICAgICAgIGJlZm9yZSA9
IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKS0+b3JpZ2luLmZvckV4aXQ7CisgICAgICAgIGJlZm9y
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKIAogICAgIGZvckFsbEtpbGxlZE9wZXJhbmRz
KAogICAgICAgICBncmFwaCwgYmVmb3JlLCBub2RlLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4MzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzIsOSArODMyLDIyIEBA
IHZvaWQgR3JhcGg6OmNsZWFyUmVwbGFjZW1lbnRzKCkKICAgICAgICAgaWYgKCFibG9jaykKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxv
Y2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKLSAgICAgICAgICAgIGJsb2NrLT5waGlzW3Bo
aUluZGV4XS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAgICAgYmxvY2stPnBoaXNbcGhpSW5k
ZXhdLT5zZXRSZXBsYWNlbWVudChudWxscHRyKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCi0gICAgICAgICAgICBibG9jay0+
YXQobm9kZUluZGV4KS0+cmVwbGFjZW1lbnQgPSAwOworICAgICAgICAgICAgYmxvY2stPmF0KG5v
ZGVJbmRleCktPnNldFJlcGxhY2VtZW50KG51bGxwdHIpOworICAgIH0KK30KKwordm9pZCBHcmFw
aDo6Y2xlYXJFcG9jaHMoKQoreworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBo
aXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgIGJsb2NrLT5waGlzW3BoaUluZGV4
XS0+c2V0RXBvY2goRXBvY2goKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgYmxvY2stPmF0KG5vZGVJ
bmRleCktPnNldEVwb2NoKEVwb2NoKCkpOwogICAgIH0KIH0KIApAQCAtOTMxLDggKzk0NCw2IEBA
IGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2kKIAogICAgICAgICAvLyBB
cmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFudCBpZiBpdCB3
YXNuJ3QgZm9yIG91cgogICAgICAgICAvLyBvcF9jYWxsX3ZhcmFyZ3MgaW5saW5pbmcuCi0gICAg
ICAgIC8vIEZJWE1FOiAndGhpcycgbWlnaHQgbm90IGJlIGxpdmUsIGJ1dCB3ZSBkb24ndCBoYXZl
IGEgd2F5IG9mIGtub3dpbmcuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjg1MTkKICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkKICAgICAg
ICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvQXJndW1lbnQoKSkgPCBpbmxpbmVD
YWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTk0Myw2ICs5NTQsMTkgQEAgYm9vbCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVn
aQogICAgIHJldHVybiB0cnVlOwogfQogCitCaXRWZWN0b3IgR3JhcGg6OmxvY2Fsc0xpdmVJbkJ5
dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbikKK3sKKyAgICBCaXRWZWN0b3IgcmVzdWx0Owor
ICAgIHJlc3VsdC5lbnN1cmVTaXplKGJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSk7CisgICAgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCisgICAgICAgIGNvZGVP
cmlnaW4sCisgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAg
QVNTRVJUKHJlZy5pc0xvY2FsKCkpOworICAgICAgICAgICAgcmVzdWx0LnF1aWNrU2V0KHJlZy50
b0xvY2FsKCkpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB1bnNpZ25l
ZCBHcmFwaDo6ZnJhbWVSZWdpc3RlckNvdW50KCkKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSBt
X25leHRNYWNoaW5lTG9jYWwgKyBzdGQ6Om1heChtX3BhcmFtZXRlclNsb3RzLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGxJblJlZ2lzdGVycykpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTgzMDk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJBc3NlbWJs
eUhlbHBlcnMuaCIKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5o
IgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKQEAgLTQxLDYgKzQyLDcgQEAKICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiREZHUHJlUG9zdE51bWJlcmluZy5oIgogI2luY2x1ZGUg
IkRGR1NjYW5uYWJsZS5oIgorI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5j
bHVkZSAiSlNTdGFjay5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUu
aCIKICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgpAQCAtMTYyLDcgKzE2NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGlmIHRoZXJl
IGlzIGFueSByZXBsYWNlbWVudC4KLSAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQgPSBjaGlsZC0+
cmVwbGFjZW1lbnQ7CisgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50ID0gY2hpbGQtPnJlcGxhY2Vt
ZW50KCk7CiAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIApAQCAtNTYzLDYgKzU2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyRmxhZ3NP
bkFsbE5vZGVzKE5vZGVGbGFncyk7CiAgICAgCiAgICAgdm9pZCBjbGVhclJlcGxhY2VtZW50cygp
OworICAgIHZvaWQgY2xlYXJFcG9jaHMoKTsKICAgICB2b2lkIGluaXRpYWxpemVOb2RlT3duZXJz
KCk7CiAgICAgCiAgICAgQmxvY2tMaXN0IGJsb2Nrc0luUHJlT3JkZXIoKTsKQEAgLTY3OCw2ICs2
ODEsNzEgQEAgcHVibGljOgogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJ
bmxpbmVDYWxsRnJhbWUqKTsKICAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lz
dGVyLCBDb2RlT3JpZ2luKTsKICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3Ig
bm90IHJlZHVuZGFudGx5IHJlcG9ydGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGlu
IGNhc2Ugb2YgYSB2YXJhcmdzCisgICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93
cyB0aGF0IGFyZ3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJh
cmdzCisgICAgICAgIC8vIGNhbGwsIGJvdGggY2FsbGVlIGFuZCBjYWxsZXIgd2lsbCBzZWUgdGhl
IHZhcmlhYmxlcyBsaXZlLgorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjbHVzaW9uU3RhcnQ7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBleGNsdXNpb25FbmQ7CisgICAgICAgIAorICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgOiAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Ioc3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
ZWUpOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQor
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVz
c0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZW5l
c3MgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcmVsYXRpdmVMb2NhbCA9IGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7IHJlbGF0aXZlTG9jYWwtLTspIHsKKyAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gc3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChyZWxhdGl2ZUxvY2FsKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBE
b24ndCByZXBvcnQgaWYgb3VyIGNhbGxlZSBhbHJlYWR5IHJlcG9ydGVkLgorICAgICAgICAgICAg
ICAgIGlmIChyZWcgPj0gZXhjbHVzaW9uU3RhcnQgJiYgcmVnIDwgZXhjbHVzaW9uRW5kKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobGl2ZW5lc3MuZ2V0KHJlbGF0aXZlTG9jYWwpKQorICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFu
dCBpZiBpdCB3YXNuJ3QgZm9yIG91cgorICAgICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlu
bGluaW5nLiBTYXZlIHRoZSAKKyAgICAgICAgICAgIGV4Y2x1c2lvblN0YXJ0ID0gc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKTsKKyAgICAgICAg
ICAgIGV4Y2x1c2lvbkVuZCA9IHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugd2lsbCBhbHdheXMgaGF2ZSBhICJ0aGlzIiBhcmd1
bWVudCBhbmQgZXhjbHVzaW9uU3RhcnQgc2hvdWxkIGJlIGEgc21hbGxlciBzdGFjaworICAgICAg
ICAgICAgLy8gb2Zmc2V0IHRoYW4gZXhjbHVzaW9uRW5kLgorICAgICAgICAgICAgQVNTRVJUKGV4
Y2x1c2lvblN0YXJ0IDwgZXhjbHVzaW9uRW5kKTsKKworICAgICAgICAgICAgZm9yIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gZXhjbHVzaW9uU3RhcnQ7IHJlZyA8IGV4Y2x1c2lvbkVuZDsgcmVnICs9
IDEpCisgICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgQml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxM
aXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2lu
LCBmdW5jdG9yKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFz
IGJlaW5nIGxpdmUgYW5kIHRoZW4gZmluaXNoLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1
bWVudC0tOykKKyAgICAgICAgICAgIGZ1bmN0b3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
YXJndW1lbnQpKTsKKyAgICB9CisgICAgCiAgICAgQnl0ZWNvZGVLaWxscyYga2lsbHNGb3IoQ29k
ZUJsb2NrKik7CiAgICAgQnl0ZWNvZGVLaWxscyYga2lsbHNGb3IoSW5saW5lQ2FsbEZyYW1lKik7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJl
dmlzaW9uIDE4MzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDkgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgY2FzZSBKdW1wOgorICAgIGNhc2Ug
QnJhbmNoOgorICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50
UmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lvbiAxODMwOTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCwxMyArODAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEVwb2No
IGN1cnJlbnRFcG9jaCA9IEVwb2NoOjpmaXJzdCgpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9zdGF0ZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBtX3N0YXRlLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkpOwotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJsb2NrLT50ZXJtaW5hbCgp
LT5vcmlnaW4uZm9yRXhpdCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZVtpXSA9IGN1cnJlbnRF
cG9jaDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3N0YXRlW2ldID0gRXBv
Y2goKTsKLSAgICAgICAgfQorICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CisgICAgICAg
IG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCisgICAgICAgICAgICBibG9jay0+dGVybWlu
YWwoKS0+b3JpZ2luLmZvckV4aXQsCisgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9j
aDsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgTG9jYWxzOiAiLCBtX3N0YXRlLCAiXG4iKTsKQEAgLTExNCw3
ICsxMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAxKS0+b3JpZ2luLmZvckV4
aXQsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5k
ZXggLSAxKSwgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0
IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJv
dGVjdCBhZ2FpbnN0IHRoYXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gMTgzMDk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJERkdBcml0aE1vZGUu
aCIKICNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKKyNp
bmNsdWRlICJERkdFcG9jaC5oIgogI2luY2x1ZGUgIkRGR0xhenlKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgpAQCAtMjQ1LDkg
KzI0Niw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihWaXJ0
dWFsUmVnaXN0ZXIoKSkKICAgICAgICAgLCBtX3JlZkNvdW50KDEpCiAgICAgICAgICwgbV9wcmVk
aWN0aW9uKFNwZWNOb25lKQotICAgICAgICAsIHJlcGxhY2VtZW50KG51bGxwdHIpCiAgICAgICAg
ICwgb3duZXIobnVsbHB0cikKICAgICB7CisgICAgICAgIG1fbWlzYy5yZXBsYWNlbWVudCA9IG51
bGxwdHI7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKICAgICB9CiAgICAgCkBA
IC0yNjAsOSArMjYxLDkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihT
cGVjTm9uZSkKICAgICAgICAgLCBtX29wSW5mbygwKQogICAgICAgICAsIG1fb3BJbmZvMigwKQot
ICAgICAgICAsIHJlcGxhY2VtZW50KG51bGxwdHIpCiAgICAgICAgICwgb3duZXIobnVsbHB0cikK
ICAgICB7CisgICAgICAgIG1fbWlzYy5yZXBsYWNlbWVudCA9IG51bGxwdHI7CiAgICAgICAgIHNl
dE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKICAgICAgICAgQVNTRVJUKCEobV9mbGFncyAmIE5vZGVI
YXNWYXJBcmdzKSk7CiAgICAgfQpAQCAtMjc2LDkgKzI3Nyw5IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgICAgICwgbV9vcEluZm8oMCkKICAg
ICAgICAgLCBtX29wSW5mbzIoMCkKLSAgICAgICAgLCByZXBsYWNlbWVudChudWxscHRyKQogICAg
ICAgICAsIG93bmVyKG51bGxwdHIpCiAgICAgeworICAgICAgICBtX21pc2MucmVwbGFjZW1lbnQg
PSBudWxscHRyOwogICAgICAgICBzZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CiAgICAgICAgIHNl
dFJlc3VsdChyZXN1bHQpOwogICAgICAgICBBU1NFUlQoIShtX2ZsYWdzICYgTm9kZUhhc1ZhckFy
Z3MpKTsKQEAgLTI5Myw5ICsyOTQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV9wcmVk
aWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQogICAgICAg
ICAsIG1fb3BJbmZvMigwKQotICAgICAgICAsIHJlcGxhY2VtZW50KG51bGxwdHIpCiAgICAgICAg
ICwgb3duZXIobnVsbHB0cikKICAgICB7CisgICAgICAgIG1fbWlzYy5yZXBsYWNlbWVudCA9IG51
bGxwdHI7CiAgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdzKG9wKTsKICAgICAgICAgQVNTRVJU
KCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgfQpAQCAtMzA5LDkgKzMxMCw5IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ByZWRpY3Rpb24oU3BlY05vbmUpCiAgICAgICAg
ICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKDApCi0gICAgICAg
ICwgcmVwbGFjZW1lbnQobnVsbHB0cikKICAgICAgICAgLCBvd25lcihudWxscHRyKQogICAgIHsK
KyAgICAgICAgbV9taXNjLnJlcGxhY2VtZW50ID0gbnVsbHB0cjsKICAgICAgICAgc2V0T3BBbmRE
ZWZhdWx0RmxhZ3Mob3ApOwogICAgICAgICBzZXRSZXN1bHQocmVzdWx0KTsKICAgICAgICAgQVNT
RVJUKCEobV9mbGFncyAmIE5vZGVIYXNWYXJBcmdzKSk7CkBAIC0zMjYsOSArMzI3LDkgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICAsIG1fcHJlZGljdGlvbihTcGVjTm9uZSkKICAgICAgICAgLCBt
X29wSW5mbyhpbW0xLm1fdmFsdWUpCiAgICAgICAgICwgbV9vcEluZm8yKGltbTIubV92YWx1ZSkK
LSAgICAgICAgLCByZXBsYWNlbWVudChudWxscHRyKQogICAgICAgICAsIG93bmVyKG51bGxwdHIp
CiAgICAgeworICAgICAgICBtX21pc2MucmVwbGFjZW1lbnQgPSBudWxscHRyOwogICAgICAgICBz
ZXRPcEFuZERlZmF1bHRGbGFncyhvcCk7CiAgICAgICAgIEFTU0VSVCghKG1fZmxhZ3MgJiBOb2Rl
SGFzVmFyQXJncykpOwogICAgIH0KQEAgLTM0Miw5ICszNDMsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgICwgbV9wcmVkaWN0aW9uKFNwZWNOb25lKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEu
bV92YWx1ZSkKICAgICAgICAgLCBtX29wSW5mbzIoaW1tMi5tX3ZhbHVlKQotICAgICAgICAsIHJl
cGxhY2VtZW50KG51bGxwdHIpCiAgICAgICAgICwgb3duZXIobnVsbHB0cikKICAgICB7CisgICAg
ICAgIG1fbWlzYy5yZXBsYWNlbWVudCA9IG51bGxwdHI7CiAgICAgICAgIHNldE9wQW5kRGVmYXVs
dEZsYWdzKG9wKTsKICAgICAgICAgQVNTRVJUKG1fZmxhZ3MgJiBOb2RlSGFzVmFyQXJncyk7CiAg
ICAgfQpAQCAtNDI1LDcgKzQyNiw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICB2b2lkIHJlcGxhY2VX
aXRoKE5vZGUqIG90aGVyKQogICAgIHsKICAgICAgICAgY29udmVydFRvUGhhbnRvbSgpOwotICAg
ICAgICByZXBsYWNlbWVudCA9IG90aGVyOworICAgICAgICBzZXRSZXBsYWNlbWVudChvdGhlcik7
CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9JZGVudGl0eSgpOwpAQCAtMTkzNiw2ICsxOTM3
LDI2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QmFz
aWNCbG9ja0xvY2F0aW9uKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAgICBOb2RlKiByZXBs
YWNlbWVudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9taXNjLnJlcGxhY2VtZW50
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlcGxhY2VtZW50KE5vZGUqIHJlcGxhY2VtZW50
KQorICAgIHsKKyAgICAgICAgbV9taXNjLnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisgICAg
fQorICAgIAorICAgIEVwb2NoIGVwb2NoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBF
cG9jaDo6ZnJvbVVuc2lnbmVkKG1fbWlzYy5lcG9jaCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c2V0RXBvY2goRXBvY2ggZXBvY2gpCisgICAgeworICAgICAgICBtX21pc2MuZXBvY2ggPSBlcG9j
aC50b1Vuc2lnbmVkKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpAQCAtMTk3OSwxMiAr
MjAwMCwxNyBAQCBwdWJsaWM6CiAgICAgLy8gd2lsbCB0ZWxsIHlvdSB3aGljaCBiYXNpYyBibG9j
ayBhIG5vZGUgYmVsb25ncyB0by4gWW91IGNhbm5vdCByZWx5IG9uIHRoaXMgcGVyc2lzdGluZwog
ICAgIC8vIGFjcm9zcyB0cmFuc2Zvcm1hdGlvbnMgdW5sZXNzIHlvdSBkbyB0aGUgbWFpbnRlbmFu
Y2Ugd29yayB5b3Vyc2VsZi4gT3RoZXIgcGhhc2VzIHVzZQogICAgIC8vIE5vZGU6OnJlcGxhY2Vt
ZW50LCBidXQgdGhleSBkbyBzbyBtYW51YWxseTogZmlyc3QgeW91IGRvIEdyYXBoOjpjbGVhclJl
cGxhY2VtZW50cygpCi0gICAgLy8gYW5kIHRoZW4geW91IHNldCwgYW5kIHVzZSwgcmVwbGFjZW1l
bnQncyB5b3Vyc2VsZi4KKyAgICAvLyBhbmQgdGhlbiB5b3Ugc2V0LCBhbmQgdXNlLCByZXBsYWNl
bWVudCdzIHlvdXJzZWxmLiBTYW1lIHRoaW5nIGZvciBlcG9jaC4KICAgICAvLwogICAgIC8vIEJv
dHRvbSBsaW5lOiBkb24ndCB1c2UgdGhlc2UgZmllbGRzIHVubGVzcyB5b3UgaW5pdGlhbGl6ZSB0
aGVtIHlvdXJzZWxmLCBvciBieQogICAgIC8vIGNhbGxpbmcgc29tZSBhcHByb3ByaWF0ZSBtZXRo
b2RzIHRoYXQgaW5pdGlhbGl6ZSB0aGVtIHRoZSB3YXkgeW91IHdhbnQuIE90aGVyd2lzZSwKICAg
ICAvLyB0aGVzZSBmaWVsZHMgYXJlIG1lYW5pbmdsZXNzLgotICAgIE5vZGUqIHJlcGxhY2VtZW50
OworcHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50OworICAg
ICAgICB1bnNpZ25lZCBlcG9jaDsKKyAgICB9IG1fbWlzYzsKK3B1YmxpYzoKICAgICBCYXNpY0Js
b2NrKiBvd25lcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDE4MzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQW55IHR3byBub2RlcyB0aGF0IGFyZSBwYXJ0IG9m
IHRoZSBzYW1lIFBoaSBncmFwaCB3aWxsIHNoYXJlIHRoZSBzYW1lICovXAogICAgIC8qIFZhcmlh
YmxlQWNjZXNzRGF0YSwgYW5kIHRodXMgd2lsbCBzaGFyZSBwcmVkaWN0aW9ucy4gRklYTUU6IFdl
IHNob3VsZCBjb21lIHVwIHdpdGggKi9cCiAgICAgLyogYmV0dGVyIG5hbWVzIGZvciBhIGxvdCBv
ZiB0aGVzZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMwNyAq
L1wKLSAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oR2V0TG9j
YWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTZXRMb2Nh
bCwgMCkgXAogICAgIFwKICAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUlu
c2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdGb3JBbGxLaWxscy5oIgorI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHTWF5
RXhpdC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wg
dmVyYm9zZSA9IGZhbHNlOworCitjbGFzcyBQaGFudG9tSW5zZXJ0aW9uUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIFBoYW50b21JbnNlcnRpb25QaGFzZShHcmFwaCYgZ3JhcGgp
CisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGluc2VydGlvbiIpCisgICAgICAgICwg
bV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgICAgICwgbV92YWx1ZXMoT3BlcmFuZHNMaWtlLCBn
cmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBydW4oKQorICAgIHsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgRENFIGhhcyBhbHJl
YWR5IHJ1bi4gSWYgd2UgcnVuIGJlZm9yZSBEQ0UgdGhlbiB3ZSB0aGluayB0aGF0IGFsbAorICAg
ICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5hY2N1cmF0ZS4gVGhhdCBjYXVz
ZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCisgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUgPT0gRXhhY3RSZWZDb3VudCk7
CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygi
R3JhcGggYmVmb3JlIFBoYW50b20gaW5zZXJ0aW9uOlxuIik7CisgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5jbGVhckVwb2No
cygpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKKyAgICAgICAgICAgIGhhbmRsZUJsb2NrKGJsb2NrKTsK
KyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJH
cmFwaCBhZnRlciBQaGFudG9tIGluc2VydGlvbjpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5k
dW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAg
IHsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChudWxscHRyKTsKKworICAgICAgICBFcG9jaCBjdXJy
ZW50RXBvY2ggPSBFcG9jaDo6Zmlyc3QoKTsKKyAgICAgICAgdW5zaWduZWQgbGFzdEV4aXRpbmdJ
bmRleCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIG5vZGUsICJcbiIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2Ug
TW92SGludDoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPnVubGlua2Vk
TG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAg
ICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gbnVsbHB0
cjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoK
KyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50
OgorICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+bG9jYWwoKSkgPSBudWxs
cHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkpIHsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOworICAgICAgICAgICAgICAgIGxhc3RFeGl0
aW5nSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgIG5vZGUsCisgICAg
ICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZWRnZS0+
c2V0RXBvY2goY3VycmVudEVwb2NoKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKKworICAgICAgICAg
ICAgYXV0byBraWxsQWN0aW9uID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBL
aWxsZWQgb3BlcmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3ZhbHVlcy5vcGVyYW5kKHJlZyk7
CisgICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVk
IHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0IGJlZW4gdXNlZCBzaW5jZSB0
aGUgbGFzdAorICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3YXNuJ3QgYm9ybiBhZnRlciB0
aGUgbGFzdCBleGl0LgorICAgICAgICAgICAgICAgIGlmIChraWxsZWROb2RlLT5lcG9jaCgpID09
IGN1cnJlbnRFcG9jaCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICAgICAiICAgIEluc2VydGluZyBQaGFudG9t
IG9uICIsIGtpbGxlZE5vZGUsICIgYWZ0ZXIgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJs
b2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KSwgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50
cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRoYXQgd2UgaGF2ZSB0byBpbmNyZW1lbnQK
KyAgICAgICAgICAgICAgICAvLyB0aGUgcmVmIGNvdW50LgorICAgICAgICAgICAgICAgIGtpbGxl
ZE5vZGUtPnBvc3RmaXhSZWYoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICBsYXN0RXhpdGlu
Z0luZGV4ICsgMSwgU3BlY05vbmUsIFBoYW50b20sIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4
KS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBraWxsZWROb2RlLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlSW5k
ZXggKyAxID09IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTaG91bGQgYSBN
b3ZIaW50ZWQgdmFsdWUgYmUga2VwdCBhbGl2ZT8gSWYgdGhlIHZhbHVlIGhhcyBiZWVuIFNldExv
Y2FsJ2QgdGhlbgorICAgICAgICAgICAgICAgIC8vIHRoZSBhbnN3ZXIgaXMgbm8uIEJ1dCB3ZSBt
YXkgaGF2ZSBhIHZhbHVlIHRoYXQgaXMgbGl2ZSBoZXJlIGFuZCBkZWFkIGluCisgICAgICAgICAg
ICAgICAgLy8gc3VjY2Vzc29ycyBiZWNhdXNlIHdlIGhhZCBqZXR0aXNvbmVkIHRob3NlIHN1Y2Nl
c3NvcnMgdGhhdCB3b3VsZCBoYXZlIHVzZWQgdGhlCisgICAgICAgICAgICAgICAgLy8gdmFsdWUu
IEhlbmNlLCBhbnl0aGluZyBsaXZlIGhlcmUgc2hvdWxkIGJlIGtlcHQgYWxpdmUuCisgICAgICAg
ICAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZShub2RlLT5vcmlnaW4uZm9yRXhp
dCwga2lsbEFjdGlvbik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmb3JB
bGxLaWxsZWRPcGVyYW5kcyhtX2dyYXBoLCBub2RlLCBibG9jay0+YXQobm9kZUluZGV4ICsgMSks
IGtpbGxBY3Rpb24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2luc2VydGlvblNl
dC5leGVjdXRlKGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OworICAgIE9wZXJhbmRzPE5vZGUqPiBtX3ZhbHVlczsKK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorICAgIAorYm9vbCBwZXJmb3JtUGhhbnRvbUluc2VydGlvbihHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBQaGFudG9t
IEluc2VydGlvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxQaGFudG9tSW5zZXJ0aW9u
UGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGhhbnRvbUluc2VydGlvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR1BoYW50b21JbnNlcnRpb25QaGFzZV9oCisjZGVmaW5l
IERGR1BoYW50b21JbnNlcnRpb25QaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gSW5zZXJ0
cyBQaGFudG9tcyBiYXNlZCBvbiBieXRlY29kZSBsaXZlbmVzcy4KKworYm9vbCBwZXJmb3JtUGhh
bnRvbUluc2VydGlvbihHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1BoYW50b21JbnNlcnRpb25Q
aGFzZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9u
IDE4MzA5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeXBvaW50Q3Jl
YXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmgiCisjaW5jbHVk
ZSAiREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbVJlbW92
YWxQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCkBAIC0zMjAsNiArMzIxLDcg
QEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJm
b3JtUGhhbnRvbVJlbW92YWwoZGZnKTsKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1EQ0UoZGZnKTsKKyAgICAgICAgcGVyZm9ybVBoYW50b21JbnNl
cnRpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAgICAgIHBl
cmZvcm1WaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1XYXRj
aHBvaW50Q29sbGVjdGlvbihkZmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTgzMDk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjcsMTMgKzIyNywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBkZWYtPnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5yZXBsYWNl
bWVudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cmVwbGFjZW1lbnQoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG9jY3VyIHdoZW4gYSBTZXRMb2Nh
bCBoYWQgYSBHZXRMb2NhbCBhcyBpdHMgc291cmNlLiBUaGUKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIEdldExvY2FsIHdvdWxkIGdldCByZXBsYWNlZCB3aXRoIGFuIGFjdHVhbCBTU0EgdmFs
dWUgYnkgdGhlIHRpbWUgd2UgZ2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoZXJlLiBO
b3RlIHRoYXQgdGhlIFNTQSB2YWx1ZSB3aXRoIHdoaWNoIHRoZSBHZXRMb2NhbCBnb3QgcmVwbGFj
ZWQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdvdWxkIG5vdCBpbiB0dXJuIGhhdmUgYSBy
ZXBsYWNlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yZXBsYWNl
bWVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+cmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJlcGxhY2VtZW50KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPnJlcGxhY2VtZW50KCkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZzogIiwgVmlydHVhbFJlZ2lzdGVy
KHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIC0+ICIsIG5vZGUsICJcbiIp
OwpAQCAtMzAzLDcgKzMwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIlJlcGxhY2luZyBub2RlICIsIG5vZGUsICIg
d2l0aCAiLCB2YWx1ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSksICJcbiIp
OwotICAgICAgICAgICAgICAgICAgICBub2RlLT5yZXBsYWNlbWVudCA9IHZhbHVlRm9yT3BlcmFu
ZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0UmVwbGFjZW1lbnQodmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVC
b2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2NvcmVC
b2FyZC5oCShyZXZpc2lvbiAxODMwOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjEgKzU1LDI3IEBAIHB1YmxpYzoK
ICAgICAgICAgYXNzZXJ0Q2xlYXIoKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzb3J0RnJlZSgp
CisgICAgeworICAgICAgICBzdGQ6OnNvcnQobV9mcmVlLmJlZ2luKCksIG1fZnJlZS5lbmQoKSk7
CisgICAgfQorICAgIAogICAgIHZvaWQgYXNzZXJ0Q2xlYXIoKQogICAgIHsKLSNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAogICAgICAgICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhlIHVzZWQgbGlz
dCB0aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIHNob3VsZCBiZSB6ZXJvLCBv
ciBtYXgsIGR1ZSB0byBpdCBiZWluZyBhIHByZXNlcnZlZCBsb2NhbC4KICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3VzZWQuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBBU1NFUlQo
IW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkpOworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkpOwogICAgICAgICAvLyBGb3Ig
ZXZlcnkgZW50cnkgaW4gdGhlIGZyZWUgbGlzdCwgdGhlIHVzZSBjb3VudCBzaG91bGQgYmUgemVy
by4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFttX2ZyZWVbaV1dKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3VzZWRbbV9mcmVlW2ldXSk7CiAgICAgICAgIC8vIFRoZXJlIG11c3Qgbm90
IGJlIGR1cGxpY2F0ZXMgaW4gdGhlIGZyZWUgbGlzdC4KICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGog
PSBpICsgMTsgaiA8IG1fZnJlZS5zaXplKCk7ICsraikKLSAgICAgICAgICAgICAgICBBU1NFUlQo
bV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CiAgICAgICAgIH0KLSNlbmRpZgogICAgIH0KIAogICAg
IFZpcnR1YWxSZWdpc3RlciBhbGxvY2F0ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxODMwOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDYgKzU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAgICAvLyBG
b3JjZSB1c2FnZSBvZiBoaWdoZXN0LW51bWJlcmVkIHZpcnR1YWwgcmVnaXN0ZXJzLgorICAgICAg
ICAgICAgICAgIHNjb3JlQm9hcmQuc29ydEZyZWUoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODMwOTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzE5OSwxMyArNzE5OSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCiAgICAgICAgIEF2YWls
YWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzLmZpbGwoQXZhaWxhYmlsaXR5KCkpOwogICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1fZ3JhcGguaXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4pOwotICAgICAg
ICAgICAgaWYgKCFpc0xpdmUpCi0gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9j
YWxzW2ldID0gQXZhaWxhYmlsaXR5KCk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9ncmFwaC5mb3JB
bGxMaXZlSW5CeXRlY29kZSgKKyAgICAgICAgICAgIGNvZGVPcmlnaW4sCisgICAgICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAubV9sb2NhbHMub3BlcmFuZChyZWcpID0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy0+YXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICAgICAgfSk7CiAg
ICAgICAgIAogICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BoYW50b20taW5hZGVxdWFjeS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BoYW50
b20taW5hZGVxdWFjeS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvcGhhbnRvbS1pbmFkZXF1YWN5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzMgQEAKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gNDIuNTsKK30KK25vSW5saW5l
KGJhcik7CisKK2Z1bmN0aW9uIGJheih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSAhPSA0Mi41KQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworfQorbm9JbmxpbmUo
YmF6KTsKKwordmFyIFRydWUgPSB0cnVlOworZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9
IGJhcigpOworICAgIHZhciB0bXAgPSAwOworICAgIGlmIChUcnVlKSB7CisgICAgICAgIHZhciB0
bXAyID0geDsKKyAgICAgICAgdG1wID0gYSArIDE7CisgICAgICAgIGJheih0bXAyKTsKKyAgICB9
CisgICAgcmV0dXJuIHggKyAxICsgdG1wOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbygxKTsKKyAgICBp
ZiAocmVzdWx0ICE9IDQyLjUgKyAxICsgMSArIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygyMTQ3NDgzNjQ3KTsK
K2lmIChyZXN1bHQgIT0gNDIuNSArIDEgKyAyMTQ3NDgzNjQ3ICsgMSkKKyAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251399</attachid>
            <date>2015-04-22 19:43:05 -0700</date>
            <delta_ts>2015-04-23 13:05:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40514</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE1LTA0LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbnNlcnQgUGhhbnRvbXMgbGF0ZSB1c2luZyBCeXRlY29kZUtpbGxzIGFuZCBi
bG9jay1sb2NhbCBPU1IgYXZhaWxhYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM3MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlJ3ZlIGFsd2F5cyBoYWQgYnVncyBhcmlzaW5n
IGZyb20gdGhlIGZhY3QgdGhhdCB3ZSB3b3VsZCBNb3ZIaW50IHNvbWV0aGluZyBpbnRvIGEgbG9j
YWwsCisgICAgICAgIGFuZCB0aGVuIGZhaWwgdG8ga2VlcCBpdCBhbGl2ZS4gV2Ugd291bGQgdGhl
biB0cnkgdG8ga2VlcCB0aGluZ3MgYWxpdmUgYnkgcHV0dGluZyBQaGFudG9tcworICAgICAgICBv
biB0aG9zZSBOb2RlcyB0aGF0IHdlcmUgTW92SGludGVkLiBCdXQgdGhpcyBiZWNhbWUgaW5jcmVh
c2luZ2x5IHRyaWNreS4gR2l2ZW4gdGhlCisgICAgICAgIHNvcGhpc3RpY2F0aW9uIG9mIHRoZSB0
cmFuc2Zvcm1hdGlvbnMgd2UgYXJlIGRvaW5nIHRvZGF5LCB0aGlzIGFwcHJvYWNoIGlzIGp1c3Qg
bm90IHNvdW5kCisgICAgICAgIGFueW1vcmUuCisgICAgICAgIAorICAgICAgICBUaGlzIGNvbXBy
ZWhlbnNpdmVseSBmaXhlcyB0aGVzZSBidWdzIGJ5IGhhdmluZyB0aGUgREZHIGJhY2tlbmQgYXV0
b21hdGljYWxseSBpbnNlcnQKKyAgICAgICAgUGhhbnRvbXMganVzdCBiZWZvcmUgY29kZWdlbiBi
YXNlZCBvbiBieXRlY29kZSBsaXZlbmVzcy4gVG8gbWFrZSB0aGlzIHByYWN0aWNhbCwgdGhpcyBh
bHNvCisgICAgICAgIG1ha2VzIGl0IG11Y2ggZmFzdGVyIHRvIHF1ZXJ5IGJ5dGVjb2RlIGxpdmVu
ZXNzLgorICAgICAgICAKKyAgICAgICAgSXQncyBhYm91dCBhcyBwZXJmLW5ldXRyYWwgYXMgaXQg
Z2V0cyBmb3IgYSBjaGFuZ2UgdGhhdCBpbmNyZWFzZXMgY29tcGlsZXIgd29yayB3aXRob3V0Cisg
ICAgICAgIGFjdHVhbGx5IG9wdGltaXppbmcgYW55dGhpbmcuIExhdGVyIGNoYW5nZXMgd2lsbCBy
ZW1vdmUgdGhlIG9sZCBQaGFudG9tLXByZXNlcnZpbmcgbG9naWMsCisgICAgICAgIHdoaWNoIHNo
b3VsZCB0aGVuIHNwZWVkIHVzIHVwLiBJIGNhbid0IHJlYWxseSByZXBvcnQgY29uY3JldGUgc2xv
dy1kb3duIG51bWJlcnMgYmVjYXVzZQorICAgICAgICB0aGV5IGFyZSBsb3cgZW5vdWdoIHRvIGJh
c2ljYWxseSBiZSBpbiB0aGUgbm9pc2UuIEZvciBleGFtcGxlLCBhIDIwLWl0ZXJhdGlvbiBydW4g
b2YKKyAgICAgICAgU3VuU3BpZGVyIHlpZWxkcyAibWF5YmUgMC44JSBzbG93ZXIiLCB3aGF0ZXZl
ciB0aGF0IG1lYW5zLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKiBieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0ZWNvZGVMaXZl
bmVzczo6Z2V0TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5o
OgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhdG9yKyk6CisgICAgICAgIChK
U0M6OlZpcnR1YWxSZWdpc3Rlcjo6b3BlcmF0b3ItKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxs
S2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxMaXZlTm9kZXNBdFRhaWwpOgorICAg
ICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6REZH
Ojpmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
bWF5RXhpdCk6CisgICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUGhhbnRvbUlu
c2VydGlvbik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1Njb3JlQm9hcmQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjpzb3J0RnJlZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2NvcmVCb2FyZDo6YXNzZXJ0Q2xlYXIpOgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpidWlsZEV4aXRBcmd1
bWVudHMpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9waGFudG9tLWluYWRlcXVhY3kuanM6IEFk
ZGVkLgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChmb28pOgorCiAy
MDE1LTA0LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgZml4IGRlYnVnIGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTgzMTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAzLDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAK
ICAgICBkZmcvREZHT3BlcmF0aW9ucy5jcHAKICAgICBkZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6
YXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAogICAg
IGRmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKICAg
ICBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0Nyw2ICs0NDcsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2Uu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRv
bVJlbW92YWxQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxk
cmVuLmNwcCIgLz4KQEAgLTExNDIsNiArMTE0Myw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBo
YXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MzE2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4LDggQEAKIAkJMEY2MjAxNzQxNDNGQ0QzMzAw
NjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MDE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIzNzk3
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjM3OTUxQUU0NUNBNzAw
RDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGNjIzNzk4
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIzNzk2MUFFNDVDQTcwMEQ0
MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyog
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAgKi87IH07CiAJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTEx
NUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi87IH07CkBAIC0yMDgzLDYgKzIw
ODUsOCBAQAogCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmg7IHBh
dGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrLmg7IHBhdGggPSBkZmcvREZHQmFz
aWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMzc5NTFB
RTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2MjM3OTYxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNl
cnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8q
IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwMjQsNiArNTAyOCw4IEBACiAJ
CQkJMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICov
LAogCQkJCTBGN0IzNjVGMTk3QzUyNUMwMEVEMUREQyAvKiBERkdQaGFudG9tQ2Fub25pY2FsaXph
dGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjdCMzY2MDE5N0M1MjVDMDBFRDFEREMgLyogREZHUGhh
bnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5oICovLAorCQkJCTBGNjIzNzk1MUFFNDVDQTcwMEQ0
MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGNjIzNzk2MUFF
NDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkJG
REQwMjE5NkM5MkJGMDA3QTVCRkEgLyogREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAgKi8sCiAJ
CQkJMEZCRkREMDMxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuaCAq
LywKIAkJCQkwRkZGQzk0RjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuY3BwICovLApAQCAt
NjIyMCw2ICs2MjI2LDcgQEAKIAkJCQlCQzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNXcmFw
cGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2
NUEgLyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjM3OTgxQUU0NUNB
NzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTY5QTA3MkEwRUQxQ0U2OTAwRjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NjAwOTdBNjBFQkFCQjU4MDA3QTcyOTcgLyogTGFiZWxTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTc0NzMsNiArNzQ4MCw3IEBACiAJCQkJOTVBQjgzNTYwREE0
M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMw
MDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QUYxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29t
cGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAJKHJldmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3
LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdQogewogICAgIEZh
c3RCaXRWZWN0b3Igb3V0OwogICAgIAotICAgIHJlc3VsdC5tX21hcC5jbGVhcigpOworICAgIHJl
c3VsdC5tX21hcC5yZXNpemUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0
KCk7CkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNv
bXB1dGVGdQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1
Y3Rpb24obV9jb2RlQmxvY2ssIG1fYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwot
ICAgICAgICAgICAgcmVzdWx0Lm1fbWFwLmFkZChieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICAg
ICAgICAgIHJlc3VsdC5tX21hcFtieXRlY29kZU9mZnNldF0gPSBvdXQ7CiAgICAgICAgIH0KICAg
ICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAkocmV2aXNpb24gMTgzMTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDkgKzM4LDcgQEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogcHVibGljOgog
ICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldExpdmVuZXNzKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpIGNvbnN0CiAgICAgewotICAgICAgICBCeXRlY29kZVRvQml0bWFwTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZChieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gbV9tYXAuZW5kKCkpOwotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAgICAg
IHJldHVybiBtX21hcFtieXRlY29kZUluZGV4XTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVy
YW5kSXNMaXZlKGludCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdApAQCAt
NTEsNyArNDksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsK
KyAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbWFw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAxODMxNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDYgKzgyLDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIob2Zmc2V0KCkgLSB2YWx1ZSk7CiAgICAgfQorICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYXRvcisoVmlydHVhbFJlZ2lzdGVyIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvZmZzZXQoKSArIHZhbHVlLm9mZnNldCgpKTsKKyAg
ICB9CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhdG9yLShWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9mZnNldCgpIC0g
dmFsdWUub2Zmc2V0KCkpOworICAgIH0KICAgICBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhdG9yKz0o
aW50IHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgJKHJldmlz
aW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNjkgKzUxLDg4IEBAIHZvaWQgZm9yQWxsTGl2ZU5vZGVz
QXRUYWlsKEdyYXBoJiBncmFwaCwKICAgICBERkdfQVNTRVJUKGdyYXBoLCBibG9jay0+dGVybWlu
YWwoKSwgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpOwogICAgIAog
ICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwID0gYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRUYWlsOwotICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xv
Y2Fscy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGF2YWls
YWJpbGl0eU1hcC5tX2xvY2Fscy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJsb2NrLT50ZXJtaW5h
bCgpLT5vcmlnaW4uZm9yRXhpdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0g
ICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAotICAgICAgICAg
ICAgcmVnLAotICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc2Vlbi5jb250YWlucyhub2RlKTsKLSAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIGlmICgh
c2Vlbi5hZGQobm9kZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9KTsKLSAgICB9CisgICAgZ3JhcGguZm9yQWxsTG9jYWxz
TGl2ZUluQnl0ZWNvZGUoCisgICAgICAgIGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4uZm9yRXhp
dCwKKyAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKKyAgICAgICAgICAgICAgICByZWcs
CisgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNlZW4uY29udGFpbnMobm9kZSk7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNlZW4uYWRkKG5vZGUpLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKIH0KIAorLy8gVGhpcyB0ZWxscyB5b3UgdGhvc2UgdGhpbmdzIHRoYXQgZGll
IG9uIHRoZSBib3VuZGFyeSBiZXR3ZWVuIG5vZGVCZWZvcmUgYW5kIG5vZGVBZnRlci4gSXQgaXMK
Ky8vIGNvbnNlcnZhdGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBtaWdodCByZXNvcnQgdG8gdGVs
bGluZyB5b3Ugc29tZSB0aGluZ3MgdGhhdCBhcmUgc3RpbGwgbGl2ZSBhdAorLy8gbm9kZUFmdGVy
LgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMo
R3JhcGgmIGdyYXBoLCBDb2RlT3JpZ2luIGJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQordm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKIHsKKyAgICBDb2RlT3JpZ2luIGJlZm9yZSA9IG5vZGVCZWZvcmUtPm9yaWdpbi5mb3JFeGl0
OwogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JFeGl0OwogICAg
IAorICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgaWYgKCEhYWZ0ZXIpIHsK
KyAgICAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBsaXZlIGF0IHRoZSB0
aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KKyAgICAgICAgaWYgKG5vZGVBZnRlci0+
Y29udGFpbnNNb3ZIaW50KCkpIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBu
b2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwor
ICAgICAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKICAgICBpZiAoIWJlZm9yZSkgewogICAgICAgICBpZiAoIWFmdGVy
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBUaGUgdHJ1ZSBiZWZvcmUtb3JpZ2lu
IGlzIHRoZSBvcmlnaW4gYXQgcHJlZGVjZXNzb3JzIHRoYXQganVtcCB0byB1cy4gQnV0IHRoZXJl
IGNhbiBiZQogICAgICAgICAvLyBtYW55IHN1Y2ggcHJlZGVjZXNzb3JzIGFuZCB0aGV5IHdpbGwg
bGlrZWx5IGFsbCBoYXZlIGEgZGlmZmVyZW50IG9yaWdpbi4gU28sIGl0J3MgYmV0dGVyCiAgICAg
ICAgIC8vIHRvIGRvIHRoZSBjb25zZXJ2YXRpdmUgdGhpbmcuCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
aS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGkpOwotICAgICAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVn
LCBhZnRlcikpCi0gICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICB9CisgICAg
ICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyLCBmdW5jdG9yKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0aGlu
ZyB0aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVlLgot
ICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7Ci0gICAgaWYgKG5vZGVBZnRlci0+Y29u
dGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRl
ci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShy
ZWcsIGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAgYWxy
ZWFkeU5vdGVkID0gcmVnOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIGlmIChiZWZvcmUg
PT0gYWZ0ZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBiZWZvcmUgY291bGQgYmUg
dW5zZXQgZXZlbiBpZiBhZnRlciBpcywgYnV0IHRoZSBvcHBvc2l0ZSBjYW5ub3QgaGFwcGVuLgog
ICAgIEFTU0VSVCghIWFmdGVyKTsKICAgICAKKyAgICAvLyBJdCdzIGVhc2llciB0byBkbyB0aGlz
IGlmIHRoZSBpbmxpbmUgY2FsbCBmcmFtZXMgYXJlIHRoZSBzYW1lLiBUaGlzIGlzIHdheSBmYXN0
ZXIgdGhhbiB0aGUKKyAgICAvLyBvdGhlciBsb29wLgorICAgIGlmIChiZWZvcmUuaW5saW5lQ2Fs
bEZyYW1lID09IGFmdGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpbnQgc3RhY2tPZmZz
ZXQgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlLmlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgOiAwOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBGdWxsQnl0
ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2Nr
KTsKKyAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVz
cy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGNvbnN0IEZhc3RC
aXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgcmVsYXRpdmVMb2Nh
bCA9IGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7IHJlbGF0aXZlTG9jYWwtLTspIHsK
KyAgICAgICAgICAgIGlmIChsaXZlQmVmb3JlLmdldChyZWxhdGl2ZUxvY2FsKSAmJiAhbGl2ZUFm
dGVyLmdldChyZWxhdGl2ZUxvY2FsKSkKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKHJlbGF0aXZlTG9jYWwpICsgc3RhY2tPZmZzZXQpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIERldGVjdCBr
aWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQgaXMga2lsbGVkIGlmIGl0IHdhcyBs
aXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGktLTspIHsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOwotICAg
ICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJlZm9yZSkgJiYgIWdyYXBoLmlz
TGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlcikpCisgICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdy
YXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNM
aXZlSW5CeXRlY29kZSgKKyAgICAgICAgYmVmb3JlLAorICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50b0xv
Y2FsKCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGZ1bmN0b3IocmVn
KTsKLSAgICB9CisgICAgICAgIH0pOwogfQogICAgIAogLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUg
bm9kZXMgdGhhdCB3b3VsZCBubyBsb25nZXIgYmUgbGl2ZSBhY3Jvc3MgdGhlIG5vZGUgYXQgdGhp
cyBub2RlSW5kZXguCkBAIC0xNDAsOSArMTU5LDkgQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0
Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAgIENvZGVPcmlnaW4g
YmVmb3JlOworICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7CiAgICAgaWYgKG5vZGVJbmRleCkK
LSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLT5vcmlnaW4uZm9yRXhp
dDsKKyAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgzMTYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0NCw4ICs5NDQsNiBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
CiAKICAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSBy
ZWR1bmRhbnQgaWYgaXQgd2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdz
IGlubGluaW5nLgotICAgICAgICAvLyBGSVhNRTogJ3RoaXMnIG1pZ2h0IG5vdCBiZSBsaXZlLCBi
dXQgd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBrbm93aW5nLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NTE5CiAgICAgICAgIGlmIChyZWcuaXNB
cmd1bWVudCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3Vt
ZW50KCkpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC05NTYsNiArOTU0LDE5IEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQml0VmVjdG9yIEdyYXBo
Ojpsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgQml0
VmVjdG9yIHJlc3VsdDsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KAorICAgICAgICBjb2RlT3JpZ2luLAorICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcp
IHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogdW5zaWduZWQgR3JhcGg6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiB7CiAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9uZXh0TWFjaGluZUxvY2FsICsgc3RkOjptYXgobV9wYXJhbWV0ZXJT
bG90cywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
SW5SZWdpc3RlcnMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Fy
Z3VtZW50UG9zaXRpb24uaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCkBAIC00MSw2ICs0
Miw3IEBACiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ByZVBvc3ROdW1iZXJp
bmcuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKKyNpbmNsdWRlICJGdWxsQnl0ZWNvZGVM
aXZlbmVzcy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KQEAgLTY3OSw2ICs2
ODEsNzEgQEAgcHVibGljOgogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJ
bmxpbmVDYWxsRnJhbWUqKTsKICAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lz
dGVyLCBDb2RlT3JpZ2luKTsKICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3Ig
bm90IHJlZHVuZGFudGx5IHJlcG9ydGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGlu
IGNhc2Ugb2YgYSB2YXJhcmdzCisgICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93
cyB0aGF0IGFyZ3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJh
cmdzCisgICAgICAgIC8vIGNhbGwsIGJvdGggY2FsbGVlIGFuZCBjYWxsZXIgd2lsbCBzZWUgdGhl
IHZhcmlhYmxlcyBsaXZlLgorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjbHVzaW9uU3RhcnQ7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBleGNsdXNpb25FbmQ7CisgICAgICAgIAorICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgOiAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Ioc3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
ZWUpOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQor
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVz
c0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZW5l
c3MgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcmVsYXRpdmVMb2NhbCA9IGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7IHJlbGF0aXZlTG9jYWwtLTspIHsKKyAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gc3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChyZWxhdGl2ZUxvY2FsKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBE
b24ndCByZXBvcnQgaWYgb3VyIGNhbGxlZSBhbHJlYWR5IHJlcG9ydGVkLgorICAgICAgICAgICAg
ICAgIGlmIChyZWcgPj0gZXhjbHVzaW9uU3RhcnQgJiYgcmVnIDwgZXhjbHVzaW9uRW5kKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobGl2ZW5lc3MuZ2V0KHJlbGF0aXZlTG9jYWwpKQorICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFu
dCBpZiBpdCB3YXNuJ3QgZm9yIG91cgorICAgICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlu
bGluaW5nLiBTYXZlIHRoZSAKKyAgICAgICAgICAgIGV4Y2x1c2lvblN0YXJ0ID0gc3RhY2tPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKTsKKyAgICAgICAg
ICAgIGV4Y2x1c2lvbkVuZCA9IHN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugd2lsbCBhbHdheXMgaGF2ZSBhICJ0aGlzIiBhcmd1
bWVudCBhbmQgZXhjbHVzaW9uU3RhcnQgc2hvdWxkIGJlIGEgc21hbGxlciBzdGFjaworICAgICAg
ICAgICAgLy8gb2Zmc2V0IHRoYW4gZXhjbHVzaW9uRW5kLgorICAgICAgICAgICAgQVNTRVJUKGV4
Y2x1c2lvblN0YXJ0IDwgZXhjbHVzaW9uRW5kKTsKKworICAgICAgICAgICAgZm9yIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gZXhjbHVzaW9uU3RhcnQ7IHJlZyA8IGV4Y2x1c2lvbkVuZDsgcmVnICs9
IDEpCisgICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgQml0VmVjdG9yIGxvY2Fsc0xpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4p
OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxM
aXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBmb3JBbGxMb2NhbHNMaXZlSW5CeXRlY29kZShjb2RlT3JpZ2lu
LCBmdW5jdG9yKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlcG9ydCBhbGwgYXJndW1lbnRzIGFz
IGJlaW5nIGxpdmUgYW5kIHRoZW4gZmluaXNoLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3Vt
ZW50ID0gYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1
bWVudC0tOykKKyAgICAgICAgICAgIGZ1bmN0b3IodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
YXJndW1lbnQpKTsKKyAgICB9CisgICAgCiAgICAgQnl0ZWNvZGVLaWxscyYga2lsbHNGb3IoQ29k
ZUJsb2NrKik7CiAgICAgQnl0ZWNvZGVLaWxscyYga2lsbHNGb3IoSW5saW5lQ2FsbEZyYW1lKik7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJl
dmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDkgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldFNjb3BlOgogICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgY2FzZSBKdW1wOgorICAgIGNhc2Ug
QnJhbmNoOgorICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBkZWZhdWx0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50
UmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCwxMyArODAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIEVwb2No
IGN1cnJlbnRFcG9jaCA9IEVwb2NoOjpmaXJzdCgpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9zdGF0ZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZWcgPSBtX3N0YXRlLnZpcnR1YWxSZWdpc3RlckZvckluZGV4KGkpOwotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJsb2NrLT50ZXJtaW5hbCgp
LT5vcmlnaW4uZm9yRXhpdCkpCi0gICAgICAgICAgICAgICAgbV9zdGF0ZVtpXSA9IGN1cnJlbnRF
cG9jaDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3N0YXRlW2ldID0gRXBv
Y2goKTsKLSAgICAgICAgfQorICAgICAgICBtX3N0YXRlLmZpbGwoRXBvY2goKSk7CisgICAgICAg
IG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUoCisgICAgICAgICAgICBibG9jay0+dGVybWlu
YWwoKS0+b3JpZ2luLmZvckV4aXQsCisgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBy
ZWcpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQocmVnKSA9IGN1cnJlbnRFcG9j
aDsKKyAgICAgICAgICAgIH0pOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgTG9jYWxzOiAiLCBtX3N0YXRlLCAiXG4iKTsKQEAgLTExNCw3
ICsxMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4KSB7CiAgICAgICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMoCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5kZXggLSAxKS0+b3JpZ2luLmZvckV4
aXQsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJsb2NrLT5hdChub2RlSW5k
ZXggLSAxKSwgbm9kZSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIg
cmVnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGEgYml0
IHNsb3BweSAtIGl0IG1pZ2h0IGNsYWltIHRvIGtpbGwgYSBsb2NhbCBldmVuIGlmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpdCdzIHN0aWxsIGxpdmUgYWZ0ZXIuIFdlIG5lZWQgdG8gcHJv
dGVjdCBhZ2FpbnN0IHRoYXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIEFueSB0d28gbm9kZXMgdGhhdCBhcmUgcGFydCBv
ZiB0aGUgc2FtZSBQaGkgZ3JhcGggd2lsbCBzaGFyZSB0aGUgc2FtZSAqL1wKICAgICAvKiBWYXJp
YWJsZUFjY2Vzc0RhdGEsIGFuZCB0aHVzIHdpbGwgc2hhcmUgcHJlZGljdGlvbnMuIEZJWE1FOiBX
ZSBzaG91bGQgY29tZSB1cCB3aXRoICovXAogICAgIC8qIGJldHRlciBuYW1lcyBmb3IgYSBsb3Qg
b2YgdGhlc2UuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMDcg
Ki9cCi0gICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEdldExv
Y2FsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU2V0TG9j
YWwsIDApIFwKICAgICBcCiAgICAgbWFjcm8oUHV0U3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21J
bnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1BoYW50b21JbnNlcnRpb25QaGFzZS5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXNJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRm9yQWxsS2lsbHMuaCIKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkRGR01h
eUV4aXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCituYW1lc3BhY2UgeworCitib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgUGhhbnRvbUluc2VydGlvblBoYXNlIDogcHVibGlj
IFBoYXNlIHsKK3B1YmxpYzoKKyAgICBQaGFudG9tSW5zZXJ0aW9uUGhhc2UoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAicGhhbnRvbSBpbnNlcnRpb24iKQorICAgICAgICAs
IG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgICAgICAsIG1fdmFsdWVzKE9wZXJhbmRzTGlrZSwg
Z3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IERDRSBoYXMgYWxy
ZWFkeSBydW4uIElmIHdlIHJ1biBiZWZvcmUgRENFIHRoZW4gd2UgdGhpbmsgdGhhdCBhbGwKKyAg
ICAgICAgLy8gU2V0TG9jYWxzIGV4ZWN1dGUsIHdoaWNoIGlzIGluYWNjdXJhdGUuIFRoYXQgY2F1
c2VzIHVzIHRvIGluc2VydCB0b28gZmV3IFBoYW50b21zLgorICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9yZWZDb3VudFN0YXRlID09IEV4YWN0UmVmQ291bnQp
OworICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
IkdyYXBoIGJlZm9yZSBQaGFudG9tIGluc2VydGlvbjpcbiIpOworICAgICAgICAgICAgbV9ncmFw
aC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fZ3JhcGguY2xlYXJFcG9j
aHMoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpCisgICAgICAgICAgICBoYW5kbGVCbG9jayhibG9jayk7
CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygi
R3JhcGggYWZ0ZXIgUGhhbnRvbSBpbnNlcnRpb246XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGgu
ZHVtcCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBoYW5kbGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICB7CisgICAgICAgIG1fdmFsdWVzLmZpbGwobnVsbHB0cik7CisKKyAgICAgICAgRXBvY2ggY3Vy
cmVudEVwb2NoID0gRXBvY2g6OmZpcnN0KCk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RFeGl0aW5n
SW5kZXggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBub2RlLCAiXG4iKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNl
IE1vdkhpbnQ6CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAg
ICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IG51bGxw
dHI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpKSB7CisgICAg
ICAgICAgICAgICAgY3VycmVudEVwb2NoLmJ1bXAoKTsKKyAgICAgICAgICAgICAgICBsYXN0RXhp
dGluZ0luZGV4ID0gbm9kZUluZGV4OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICBub2RlLAorICAg
ICAgICAgICAgICAgIFsmXSAoRWRnZSBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgIGVkZ2Ut
PnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG5vZGUtPnNldEVwb2NoKGN1cnJlbnRFcG9jaCk7CisKKyAgICAgICAg
ICAgIGF1dG8ga2lsbEFjdGlvbiA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
S2lsbGVkIG9wZXJhbmQ6ICIsIHJlZywgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBOb2RlKiBraWxsZWROb2RlID0gbV92YWx1ZXMub3BlcmFuZChyZWcp
OworICAgICAgICAgICAgICAgIGlmICgha2lsbGVkTm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVl
ZCB0byBpbnNlcnQgYSBQaGFudG9tIGlmIHRoZSBub2RlIGhhc24ndCBiZWVuIHVzZWQgc2luY2Ug
dGhlIGxhc3QKKyAgICAgICAgICAgICAgICAvLyBleGl0LCBhbmQgd2Fzbid0IGJvcm4gYWZ0ZXIg
dGhlIGxhc3QgZXhpdC4KKyAgICAgICAgICAgICAgICBpZiAoa2lsbGVkTm9kZS0+ZXBvY2goKSA9
PSBjdXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBJbnNlcnRpbmcgUGhhbnRv
bSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCksICJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGV4YWN0IHJlZiBjb3Vu
dHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFucyB0aGF0IHdlIGhhdmUgdG8gaW5jcmVtZW50
CisgICAgICAgICAgICAgICAgLy8gdGhlIHJlZiBjb3VudC4KKyAgICAgICAgICAgICAgICBraWxs
ZWROb2RlLT5wb3N0Zml4UmVmKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbGFzdEV4aXRp
bmdJbmRleCArIDEsIFNwZWNOb25lLCBQaGFudG9tLCBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRl
eCktPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+ZGVmYXVsdEVkZ2Uo
KSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9kZUlu
ZGV4ICsgMSA9PSBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGEg
TW92SGludGVkIHZhbHVlIGJlIGtlcHQgYWxpdmU/IElmIHRoZSB2YWx1ZSBoYXMgYmVlbiBTZXRM
b2NhbCdkIHRoZW4KKyAgICAgICAgICAgICAgICAvLyB0aGUgYW5zd2VyIGlzIG5vLiBCdXQgd2Ug
bWF5IGhhdmUgYSB2YWx1ZSB0aGF0IGlzIGxpdmUgaGVyZSBhbmQgZGVhZCBpbgorICAgICAgICAg
ICAgICAgIC8vIHN1Y2Nlc3NvcnMgYmVjYXVzZSB3ZSBoYWQgamV0dGlzb25lZCB0aG9zZSBzdWNj
ZXNzb3JzIHRoYXQgd291bGQgaGF2ZSB1c2VkIHRoZQorICAgICAgICAgICAgICAgIC8vIHZhbHVl
LiBIZW5jZSwgYW55dGhpbmcgbGl2ZSBoZXJlIHNob3VsZCBiZSBrZXB0IGFsaXZlLgorICAgICAg
ICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUobm9kZS0+b3JpZ2luLmZvckV4
aXQsIGtpbGxBY3Rpb24pOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPmF0KG5vZGVJbmRleCArIDEp
LCBraWxsQWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9pbnNlcnRpb25T
ZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIEluc2VydGlvblNldCBtX2luc2Vy
dGlvblNldDsKKyAgICBPcGVyYW5kczxOb2RlKj4gbV92YWx1ZXM7Cit9OworCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKyAgICAKK2Jvb2wgcGVyZm9ybVBoYW50b21JbnNlcnRpb24oR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUGhhbnRv
bSBJbnNlcnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UGhhbnRvbUluc2VydGlv
blBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYW50b21JbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VfaAorI2RlZmlu
ZSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIEluc2Vy
dHMgUGhhbnRvbXMgYmFzZWQgb24gYnl0ZWNvZGUgbGl2ZW5lc3MuCisKK2Jvb2wgcGVyZm9ybVBo
YW50b21JbnNlcnRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQaGFudG9tSW5zZXJ0aW9u
UGhhc2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lv
biAxODMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNl
LmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5oIgorI2luY2x1
ZGUgIkRGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1BoYW50b21SZW1v
dmFsUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpAQCAtMzIwLDYgKzMyMSw3
IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVy
Zm9ybVBoYW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhk
ZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7CisgICAgICAgIHBlcmZvcm1QaGFudG9tSW5z
ZXJ0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91dChkZmcpOwogICAgICAgICBw
ZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogICAgICAgICBwZXJmb3JtV2F0
Y2hwb2ludENvbGxlY3Rpb24oZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMjEgKzU1LDI3IEBA
IHB1YmxpYzoKICAgICAgICAgYXNzZXJ0Q2xlYXIoKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBz
b3J0RnJlZSgpCisgICAgeworICAgICAgICBzdGQ6OnNvcnQobV9mcmVlLmJlZ2luKCksIG1fZnJl
ZS5lbmQoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYXNzZXJ0Q2xlYXIoKQogICAgIHsKLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAogICAgICAgICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhl
IHVzZWQgbGlzdCB0aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIHNob3VsZCBi
ZSB6ZXJvLCBvciBtYXgsIGR1ZSB0byBpdCBiZWluZyBhIHByZXNlcnZlZCBsb2NhbC4KICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VzZWQuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICBBU1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkpOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkpOwogICAgICAg
ICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhlIGZyZWUgbGlzdCwgdGhlIHVzZSBjb3VudCBzaG91
bGQgYmUgemVyby4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgp
OyArK2kpCi0gICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFttX2ZyZWVbaV1dKTsKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX3VzZWRbbV9mcmVlW2ldXSk7CiAgICAgICAgIC8vIFRoZXJl
IG11c3Qgbm90IGJlIGR1cGxpY2F0ZXMgaW4gdGhlIGZyZWUgbGlzdC4KICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGogPSBpICsgMTsgaiA8IG1fZnJlZS5zaXplKCk7ICsraikKLSAgICAgICAgICAgICAg
ICBBU1NFUlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CiAgICAgICAgIH0KLSNlbmRpZgogICAg
IH0KIAogICAgIFZpcnR1YWxSZWdpc3RlciBhbGxvY2F0ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDYgKzU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGb3JjZSB1c2FnZSBvZiBoaWdoZXN0LW51bWJlcmVkIHZpcnR1YWwgcmVnaXN0ZXJz
LgorICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQuc29ydEZyZWUoKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8
IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
ODMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzE5OSwxMyArNzE5OSwxNCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKICAgICAgICAgCiAgICAg
ICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlN
YXAoKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzLmZpbGwoQXZhaWxhYmlsaXR5
KCkpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92
YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5tX3Zh
bHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBib29sIGlzTGl2ZSA9IG1fZ3Jh
cGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGNvZGVPcmlnaW4p
OwotICAgICAgICAgICAgaWYgKCFpc0xpdmUpCi0gICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5
TWFwLm1fbG9jYWxzW2ldID0gQXZhaWxhYmlsaXR5KCk7Ci0gICAgICAgIH0KKyAgICAgICAgbV9n
cmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKKyAgICAgICAgICAgIGNvZGVPcmlnaW4sCisgICAg
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAubV9sb2NhbHMub3BlcmFuZChyZWcpID0KKyAgICAgICAgICAgICAgICAgICAg
dGhpcy0+YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMub3BlcmFuZChyZWcpOworICAgICAgICAg
ICAgfSk7CiAgICAgICAgIAogICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmUoKTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3BoYW50b20taW5h
ZGVxdWFjeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3BoYW50b20taW5hZGVxdWFjeS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvcGhhbnRvbS1pbmFkZXF1YWN5LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzMgQEAKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gNDIuNTsKK30K
K25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGJheih2YWx1ZSkgeworICAgIGlmICh2YWx1ZSAh
PSA0Mi41KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworfQor
bm9JbmxpbmUoYmF6KTsKKwordmFyIFRydWUgPSB0cnVlOworZnVuY3Rpb24gZm9vKGEpIHsKKyAg
ICB2YXIgeCA9IGJhcigpOworICAgIHZhciB0bXAgPSAwOworICAgIGlmIChUcnVlKSB7CisgICAg
ICAgIHZhciB0bXAyID0geDsKKyAgICAgICAgdG1wID0gYSArIDE7CisgICAgICAgIGJheih0bXAy
KTsKKyAgICB9CisgICAgcmV0dXJuIHggKyAxICsgdG1wOworfQorbm9JbmxpbmUoZm9vKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbygx
KTsKKyAgICBpZiAocmVzdWx0ICE9IDQyLjUgKyAxICsgMSArIDEpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygyMTQ3
NDgzNjQ3KTsKK2lmIChyZXN1bHQgIT0gNDIuNSArIDEgKyAyMTQ3NDgzNjQ3ICsgMSkKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0Owo=
</data>
<flag name="review"
          id="276262"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251458</attachid>
            <date>2015-04-23 11:20:11 -0700</date>
            <delta_ts>2015-04-23 13:05:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41213</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgzMTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE1LTA0LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBpbnNlcnQgUGhhbnRvbXMgbGF0ZSB1c2luZyBCeXRlY29kZUtpbGxzIGFuZCBi
bG9jay1sb2NhbCBPU1IgYXZhaWxhYmlsaXR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDM3MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdlJ3ZlIGFsd2F5cyBoYWQgYnVncyBhcmlzaW5n
IGZyb20gdGhlIGZhY3QgdGhhdCB3ZSB3b3VsZCBNb3ZIaW50IHNvbWV0aGluZyBpbnRvIGEgbG9j
YWwsCisgICAgICAgIGFuZCB0aGVuIGZhaWwgdG8ga2VlcCBpdCBhbGl2ZS4gV2Ugd291bGQgdGhl
biB0cnkgdG8ga2VlcCB0aGluZ3MgYWxpdmUgYnkgcHV0dGluZyBQaGFudG9tcworICAgICAgICBv
biB0aG9zZSBOb2RlcyB0aGF0IHdlcmUgTW92SGludGVkLiBCdXQgdGhpcyBiZWNhbWUgaW5jcmVh
c2luZ2x5IHRyaWNreS4gR2l2ZW4gdGhlCisgICAgICAgIHNvcGhpc3RpY2F0aW9uIG9mIHRoZSB0
cmFuc2Zvcm1hdGlvbnMgd2UgYXJlIGRvaW5nIHRvZGF5LCB0aGlzIGFwcHJvYWNoIGlzIGp1c3Qg
bm90IHNvdW5kCisgICAgICAgIGFueW1vcmUuCisgICAgICAgIAorICAgICAgICBUaGlzIGNvbXBy
ZWhlbnNpdmVseSBmaXhlcyB0aGVzZSBidWdzIGJ5IGhhdmluZyB0aGUgREZHIGJhY2tlbmQgYXV0
b21hdGljYWxseSBpbnNlcnQKKyAgICAgICAgUGhhbnRvbXMganVzdCBiZWZvcmUgY29kZWdlbiBi
YXNlZCBvbiBieXRlY29kZSBsaXZlbmVzcy4gVG8gbWFrZSB0aGlzIHByYWN0aWNhbCwgdGhpcyBh
bHNvCisgICAgICAgIG1ha2VzIGl0IG11Y2ggZmFzdGVyIHRvIHF1ZXJ5IGJ5dGVjb2RlIGxpdmVu
ZXNzLgorICAgICAgICAKKyAgICAgICAgSXQncyBhYm91dCBhcyBwZXJmLW5ldXRyYWwgYXMgaXQg
Z2V0cyBmb3IgYSBjaGFuZ2UgdGhhdCBpbmNyZWFzZXMgY29tcGlsZXIgd29yayB3aXRob3V0Cisg
ICAgICAgIGFjdHVhbGx5IG9wdGltaXppbmcgYW55dGhpbmcuIExhdGVyIGNoYW5nZXMgd2lsbCBy
ZW1vdmUgdGhlIG9sZCBQaGFudG9tLXByZXNlcnZpbmcgbG9naWMsCisgICAgICAgIHdoaWNoIHNo
b3VsZCB0aGVuIHNwZWVkIHVzIHVwLiBJIGNhbid0IHJlYWxseSByZXBvcnQgY29uY3JldGUgc2xv
dy1kb3duIG51bWJlcnMgYmVjYXVzZQorICAgICAgICB0aGV5IGFyZSBsb3cgZW5vdWdoIHRvIGJh
c2ljYWxseSBiZSBpbiB0aGUgbm9pc2UuIEZvciBleGFtcGxlLCBhIDIwLWl0ZXJhdGlvbiBydW4g
b2YKKyAgICAgICAgU3VuU3BpZGVyIHlpZWxkcyAibWF5YmUgMC44JSBzbG93ZXIiLCB3aGF0ZXZl
ciB0aGF0IG1lYW5zLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKiBieXRlY29k
ZS9GdWxsQnl0ZWNvZGVMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpGdWxsQnl0ZWNvZGVMaXZl
bmVzczo6Z2V0TGl2ZW5lc3MpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5o
OgorICAgICAgICAoSlNDOjpWaXJ0dWFsUmVnaXN0ZXI6Om9wZXJhdG9yKyk6CisgICAgICAgIChK
U0M6OlZpcnR1YWxSZWdpc3Rlcjo6b3BlcmF0b3ItKToKKyAgICAgICAgKiBkZmcvREZHRm9yQWxs
S2lsbHMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpmb3JBbGxMaXZlTm9kZXNBdFRhaWwpOgorICAg
ICAgICAoSlNDOjpERkc6OmZvckFsbEtpbGxlZE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6REZH
Ojpmb3JBbGxLaWxsZWROb2Rlc0F0Tm9kZUluZGV4KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6bG9jYWxzTGl2ZUluQnl0ZWNvZGUpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmb3JBbGxMb2NhbHNMaXZl
SW5CeXRlY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExpdmVJbkJ5dGVj
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
bWF5RXhpdCk6CisgICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtUGhhbnRvbUlu
c2VydGlvbik6CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RGR1Njb3JlQm9hcmQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTY29yZUJvYXJkOjpzb3J0RnJlZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U2NvcmVCb2FyZDo6YXNzZXJ0Q2xlYXIpOgorICAgICAgICAqIGRmZy9ERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpidWlsZEV4aXRBcmd1
bWVudHMpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9waGFudG9tLWluYWRlcXVhY3kuanM6IEFk
ZGVkLgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJheik6CisgICAgICAgIChmb28pOgorCiAy
MDE1LTA0LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgZml4IGRlYnVnIGJ1aWxkLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTgzMTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNiArMjAzLDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YS5jcHAK
ICAgICBkZmcvREZHT3BlcmF0aW9ucy5jcHAKICAgICBkZmcvREZHUGhhbnRvbUNhbm9uaWNhbGl6
YXRpb25QaGFzZS5jcHAKKyAgICBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAogICAg
IGRmZy9ERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmNwcAogICAgIGRmZy9ERkdQaGFzZS5jcHAKICAg
ICBkZmcvREZHUGhpQ2hpbGRyZW4uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0Nyw2ICs0NDcsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2Uu
Y3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRv
bVJlbW92YWxQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxk
cmVuLmNwcCIgLz4KQEAgLTExNDIsNiArMTE0Myw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tUmVtb3ZhbFBo
YXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4MzE2MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNiArMzQ4LDggQEAKIAkJMEY2MjAxNzQxNDNGQ0QzMzAw
NjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MDE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIzNzk3
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjM3OTUxQUU0NUNBNzAw
RDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgKi87IH07CisJCTBGNjIzNzk4
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIzNzk2MUFFNDVDQTcwMEQ0
MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyog
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjYzOTQzQzE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAgKi87IH07CiAJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2Mzk0NTEx
NUQwNzA1MTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgKi87IH07CkBAIC0yMDgzLDYgKzIw
ODUsOCBAQAogCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdBYnN0cmFjdFZhbHVlLmg7IHBh
dGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Jsb2NrLmg7IHBhdGggPSBkZmcvREZHQmFz
aWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMzc5NTFB
RTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA7
IHBhdGggPSBkZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2MjM3OTYxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNl
cnRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8q
IERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuaDsgcGF0aCA9IGRmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNjM5NDUxMTVEMDcwNTEwMDZBNTk3QyAvKiBBcnJheVByb2Zp
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwMjQsNiArNTAyOCw4IEBACiAJ
CQkJMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICov
LAogCQkJCTBGN0IzNjVGMTk3QzUyNUMwMEVEMUREQyAvKiBERkdQaGFudG9tQ2Fub25pY2FsaXph
dGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRjdCMzY2MDE5N0M1MjVDMDBFRDFEREMgLyogREZHUGhh
bnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5oICovLAorCQkJCTBGNjIzNzk1MUFFNDVDQTcwMEQ0
MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwICovLAorCQkJCTBGNjIzNzk2MUFF
NDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkJG
REQwMjE5NkM5MkJGMDA3QTVCRkEgLyogREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAgKi8sCiAJ
CQkJMEZCRkREMDMxOTZDOTJCRjAwN0E1QkZBIC8qIERGR1BoYW50b21SZW1vdmFsUGhhc2UuaCAq
LywKIAkJCQkwRkZGQzk0RjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuY3BwICovLApAQCAt
NjIyMCw2ICs2MjI2LDcgQEAKIAkJCQlCQzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNXcmFw
cGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0ZEOEM5MzBFRUIyRUU3MDAyODM4NDgg
LyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2
NUEgLyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjM3OTgxQUU0NUNB
NzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTY5QTA3MkEwRUQxQ0U2OTAwRjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NjAwOTdBNjBFQkFCQjU4MDA3QTcyOTcgLyogTGFiZWxTY29wZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTc0NzMsNiArNzQ4MCw3IEBACiAJCQkJOTVBQjgzNTYwREE0
M0MzMDAwQkM4M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMw
MDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QUYxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29t
cGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHAJKHJldmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3
LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVGdQogewogICAgIEZh
c3RCaXRWZWN0b3Igb3V0OwogICAgIAotICAgIHJlc3VsdC5tX21hcC5jbGVhcigpOworICAgIHJl
c3VsdC5tX21hcC5yZXNpemUobV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9iYXNpY0Jsb2Nrcy5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmFzaWNCbG9ja3NbaV0uZ2V0
KCk7CkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNv
bXB1dGVGdQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+Ynl0ZWNvZGVPZmZzZXRz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5ieXRlY29kZU9mZnNldHMoKVtpXTsKICAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1
Y3Rpb24obV9jb2RlQmxvY2ssIG1fYmFzaWNCbG9ja3MsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwot
ICAgICAgICAgICAgcmVzdWx0Lm1fbWFwLmFkZChieXRlY29kZU9mZnNldCwgb3V0KTsKKyAgICAg
ICAgICAgIHJlc3VsdC5tX21hcFtieXRlY29kZU9mZnNldF0gPSBvdXQ7CiAgICAgICAgIH0KICAg
ICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaAkocmV2aXNpb24gMTgzMTYzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0Z1bGxCeXRlY29kZUxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDkgKzM4LDcgQEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MgewogcHVibGljOgog
ICAgIGNvbnN0IEZhc3RCaXRWZWN0b3ImIGdldExpdmVuZXNzKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpIGNvbnN0CiAgICAgewotICAgICAgICBCeXRlY29kZVRvQml0bWFwTWFwOjpjb25zdF9pdGVy
YXRvciBpdGVyID0gbV9tYXAuZmluZChieXRlY29kZUluZGV4KTsKLSAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gbV9tYXAuZW5kKCkpOwotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAgICAg
IHJldHVybiBtX21hcFtieXRlY29kZUluZGV4XTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVy
YW5kSXNMaXZlKGludCBvcGVyYW5kLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KSBjb25zdApAQCAt
NTEsNyArNDksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgCi0gICAgQnl0ZWNvZGVUb0JpdG1hcE1hcCBtX21hcDsK
KyAgICBWZWN0b3I8RmFzdEJpdFZlY3RvciwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbWFw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAxODMxNjMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDYgKzgyLDE0IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBW
aXJ0dWFsUmVnaXN0ZXIob2Zmc2V0KCkgLSB2YWx1ZSk7CiAgICAgfQorICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYXRvcisoVmlydHVhbFJlZ2lzdGVyIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvZmZzZXQoKSArIHZhbHVlLm9mZnNldCgpKTsKKyAg
ICB9CisgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhdG9yLShWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9mZnNldCgpIC0g
dmFsdWUub2Zmc2V0KCkpOworICAgIH0KICAgICBWaXJ0dWFsUmVnaXN0ZXImIG9wZXJhdG9yKz0o
aW50IHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuICp0aGlzID0gKnRoaXMgKyB2YWx1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZvckFsbEtpbGxzLmgJKHJldmlz
aW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRm9yQWxsS2lsbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTEsNjkgKzUxLDg4IEBAIHZvaWQgZm9yQWxsTGl2ZU5vZGVz
QXRUYWlsKEdyYXBoJiBncmFwaCwKICAgICBERkdfQVNTRVJUKGdyYXBoLCBibG9jay0+dGVybWlu
YWwoKSwgYmxvY2stPnRlcm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpOwogICAgIAog
ICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwID0gYmxvY2stPnNzYS0+YXZhaWxh
YmlsaXR5QXRUYWlsOwotICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eU1hcC5tX2xv
Y2Fscy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGF2YWls
YWJpbGl0eU1hcC5tX2xvY2Fscy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJsb2NrLT50ZXJtaW5h
bCgpLT5vcmlnaW4uZm9yRXhpdCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0g
ICAgICAgIGF2YWlsYWJpbGl0eU1hcC5jbG9zZVN0YXJ0aW5nV2l0aExvY2FsKAotICAgICAgICAg
ICAgcmVnLAotICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc2Vlbi5jb250YWlucyhub2RlKTsKLSAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIGlmICgh
c2Vlbi5hZGQobm9kZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICB9KTsKLSAgICB9CisgICAgZ3JhcGguZm9yQWxsTG9jYWxz
TGl2ZUluQnl0ZWNvZGUoCisgICAgICAgIGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4uZm9yRXhp
dCwKKyAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAuY2xvc2VTdGFydGluZ1dpdGhMb2NhbCgKKyAgICAgICAgICAgICAgICByZWcs
CisgICAgICAgICAgICAgICAgWyZdIChOb2RlKiBub2RlKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNlZW4uY29udGFpbnMobm9kZSk7CisgICAgICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgICAgICBbJl0gKE5vZGUqIG5vZGUpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNlZW4uYWRkKG5vZGUpLmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Iobm9kZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKIH0KIAorLy8gVGhpcyB0ZWxscyB5b3UgdGhvc2UgdGhpbmdzIHRoYXQgZGll
IG9uIHRoZSBib3VuZGFyeSBiZXR3ZWVuIG5vZGVCZWZvcmUgYW5kIG5vZGVBZnRlci4gSXQgaXMK
Ky8vIGNvbnNlcnZhdGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBtaWdodCByZXNvcnQgdG8gdGVs
bGluZyB5b3Ugc29tZSB0aGluZ3MgdGhhdCBhcmUgc3RpbGwgbGl2ZSBhdAorLy8gbm9kZUFmdGVy
LgogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLXZvaWQgZm9yQWxsS2lsbGVkT3BlcmFuZHMo
R3JhcGgmIGdyYXBoLCBDb2RlT3JpZ2luIGJlZm9yZSwgTm9kZSogbm9kZUFmdGVyLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQordm9pZCBmb3JBbGxLaWxsZWRPcGVyYW5kcyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGVCZWZvcmUsIE5vZGUqIG5vZGVBZnRlciwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKIHsKKyAgICBDb2RlT3JpZ2luIGJlZm9yZSA9IG5vZGVCZWZvcmUtPm9yaWdpbi5mb3JFeGl0
OwogICAgIENvZGVPcmlnaW4gYWZ0ZXIgPSBub2RlQWZ0ZXItPm9yaWdpbi5mb3JFeGl0OwogICAg
IAorICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7CisgICAgaWYgKCEhYWZ0ZXIpIHsK
KyAgICAgICAgLy8gSWYgd2UgTW92SGludCBzb21ldGhpbmcgdGhhdCBpcyBsaXZlIGF0IHRoZSB0
aW1lLCB0aGVuIHdlIGtpbGwgdGhlIG9sZCB2YWx1ZS4KKyAgICAgICAgaWYgKG5vZGVBZnRlci0+
Y29udGFpbnNNb3ZIaW50KCkpIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBu
b2RlQWZ0ZXItPnVubGlua2VkTG9jYWwoKTsKKyAgICAgICAgICAgIGlmIChncmFwaC5pc0xpdmVJ
bkJ5dGVjb2RlKHJlZywgYWZ0ZXIpKSB7CisgICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwor
ICAgICAgICAgICAgICAgIGFscmVhZHlOb3RlZCA9IHJlZzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKICAgICBpZiAoIWJlZm9yZSkgewogICAgICAgICBpZiAoIWFmdGVy
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAvLyBUaGUgdHJ1ZSBiZWZvcmUtb3JpZ2lu
IGlzIHRoZSBvcmlnaW4gYXQgcHJlZGVjZXNzb3JzIHRoYXQganVtcCB0byB1cy4gQnV0IHRoZXJl
IGNhbiBiZQogICAgICAgICAvLyBtYW55IHN1Y2ggcHJlZGVjZXNzb3JzIGFuZCB0aGV5IHdpbGwg
bGlrZWx5IGFsbCBoYXZlIGEgZGlmZmVyZW50IG9yaWdpbi4gU28sIGl0J3MgYmV0dGVyCiAgICAg
ICAgIC8vIHRvIGRvIHRoZSBjb25zZXJ2YXRpdmUgdGhpbmcuCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGdyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsg
aS0tOykgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3Rl
ckZvckxvY2FsKGkpOwotICAgICAgICAgICAgaWYgKGdyYXBoLmlzTGl2ZUluQnl0ZWNvZGUocmVn
LCBhZnRlcikpCi0gICAgICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICB9CisgICAg
ICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyLCBmdW5jdG9yKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICAvLyBJZiB3ZSBNb3ZIaW50IHNvbWV0aGlu
ZyB0aGF0IGlzIGxpdmUgYXQgdGhlIHRpbWUsIHRoZW4gd2Uga2lsbCB0aGUgb2xkIHZhbHVlLgot
ICAgIFZpcnR1YWxSZWdpc3RlciBhbHJlYWR5Tm90ZWQ7Ci0gICAgaWYgKG5vZGVBZnRlci0+Y29u
dGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG5vZGVBZnRl
ci0+dW5saW5rZWRMb2NhbCgpOwotICAgICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShy
ZWcsIGFmdGVyKSkgewotICAgICAgICAgICAgZnVuY3RvcihyZWcpOwotICAgICAgICAgICAgYWxy
ZWFkeU5vdGVkID0gcmVnOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIGlmIChiZWZvcmUg
PT0gYWZ0ZXIpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBiZWZvcmUgY291bGQgYmUg
dW5zZXQgZXZlbiBpZiBhZnRlciBpcywgYnV0IHRoZSBvcHBvc2l0ZSBjYW5ub3QgaGFwcGVuLgog
ICAgIEFTU0VSVCghIWFmdGVyKTsKICAgICAKKyAgICAvLyBJdCdzIGVhc2llciB0byBkbyB0aGlz
IGlmIHRoZSBpbmxpbmUgY2FsbCBmcmFtZXMgYXJlIHRoZSBzYW1lLiBUaGlzIGlzIHdheSBmYXN0
ZXIgdGhhbiB0aGUKKyAgICAvLyBvdGhlciBsb29wLgorICAgIGlmIChiZWZvcmUuaW5saW5lQ2Fs
bEZyYW1lID09IGFmdGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICBpbnQgc3RhY2tPZmZz
ZXQgPSBiZWZvcmUuaW5saW5lQ2FsbEZyYW1lID8gYmVmb3JlLmlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgOiAwOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGdyYXBoLmJhc2Vs
aW5lQ29kZUJsb2NrRm9yKGJlZm9yZS5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBGdWxsQnl0
ZWNvZGVMaXZlbmVzcyYgZnVsbExpdmVuZXNzID0gZ3JhcGgubGl2ZW5lc3NGb3IoY29kZUJsb2Nr
KTsKKyAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZUJlZm9yZSA9IGZ1bGxMaXZlbmVz
cy5nZXRMaXZlbmVzcyhiZWZvcmUuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGNvbnN0IEZhc3RC
aXRWZWN0b3ImIGxpdmVBZnRlciA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhhZnRlci5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgcmVsYXRpdmVMb2Nh
bCA9IGNvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnM7IHJlbGF0aXZlTG9jYWwtLTspIHsK
KyAgICAgICAgICAgIGlmIChsaXZlQmVmb3JlLmdldChyZWxhdGl2ZUxvY2FsKSAmJiAhbGl2ZUFm
dGVyLmdldChyZWxhdGl2ZUxvY2FsKSkKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKHJlbGF0aXZlTG9jYWwpICsgc3RhY2tPZmZzZXQpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIC8vIERldGVjdCBr
aWxscyB0aGUgc3VwZXIgY29uc2VydmF0aXZlIHdheTogaXQgaXMga2lsbGVkIGlmIGl0IHdhcyBs
aXZlIGJlZm9yZSBhbmQgZGVhZCBhZnRlci4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBncmFwaC5i
bG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7IGktLTspIHsKLSAgICAg
ICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpOwotICAg
ICAgICBpZiAocmVnID09IGFscmVhZHlOb3RlZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoZ3JhcGguaXNMaXZlSW5CeXRlY29kZShyZWcsIGJlZm9yZSkgJiYgIWdyYXBoLmlz
TGl2ZUluQnl0ZWNvZGUocmVnLCBhZnRlcikpCisgICAgQml0VmVjdG9yIGxpdmVBZnRlciA9IGdy
YXBoLmxvY2Fsc0xpdmVJbkJ5dGVjb2RlKGFmdGVyKTsKKyAgICBncmFwaC5mb3JBbGxMb2NhbHNM
aXZlSW5CeXRlY29kZSgKKyAgICAgICAgYmVmb3JlLAorICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciByZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcgPT0gYWxyZWFkeU5vdGVkKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChsaXZlQWZ0ZXIuZ2V0KHJlZy50b0xv
Y2FsKCkpKQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGZ1bmN0b3IocmVn
KTsKLSAgICB9CisgICAgICAgIH0pOwogfQogICAgIAogLy8gVGVsbHMgeW91IGFsbCBvZiB0aGUg
bm9kZXMgdGhhdCB3b3VsZCBubyBsb25nZXIgYmUgbGl2ZSBhY3Jvc3MgdGhlIG5vZGUgYXQgdGhp
cyBub2RlSW5kZXguCkBAIC0xNDAsOSArMTU5LDkgQEAgdm9pZCBmb3JBbGxLaWxsZWROb2Rlc0F0
Tm9kZUluZGV4KAogICAgICAgICAgICAgfQogICAgICAgICB9KTsKIAotICAgIENvZGVPcmlnaW4g
YmVmb3JlOworICAgIE5vZGUqIGJlZm9yZSA9IG51bGxwdHI7CiAgICAgaWYgKG5vZGVJbmRleCkK
LSAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpLT5vcmlnaW4uZm9yRXhp
dDsKKyAgICAgICAgYmVmb3JlID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwogCiAgICAgZm9y
QWxsS2lsbGVkT3BlcmFuZHMoCiAgICAgICAgIGdyYXBoLCBiZWZvcmUsIG5vZGUsCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgzMTYzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk0NCw4ICs5NDQsNiBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
CiAKICAgICAgICAgLy8gQXJndW1lbnRzIGFyZSBhbHdheXMgbGl2ZS4gVGhpcyB3b3VsZCBiZSBy
ZWR1bmRhbnQgaWYgaXQgd2Fzbid0IGZvciBvdXIKICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdz
IGlubGluaW5nLgotICAgICAgICAvLyBGSVhNRTogJ3RoaXMnIG1pZ2h0IG5vdCBiZSBsaXZlLCBi
dXQgd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBrbm93aW5nLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NTE5CiAgICAgICAgIGlmIChyZWcuaXNB
cmd1bWVudCgpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3Vt
ZW50KCkpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC05NTYsNiArOTU0LDE5IEBAIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0
ZWNvZGUoVmlydHVhbFJlZ2kKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQml0VmVjdG9yIEdyYXBo
Ojpsb2NhbHNMaXZlSW5CeXRlY29kZShDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCit7CisgICAgQml0
VmVjdG9yIHJlc3VsdDsKKyAgICByZXN1bHQuZW5zdXJlU2l6ZShibG9jaygwKS0+dmFyaWFibGVz
QXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2Rl
KAorICAgICAgICBjb2RlT3JpZ2luLAorICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcp
IHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcuaXNMb2NhbCgpKTsKKyAgICAgICAgICAgIHJlc3Vs
dC5xdWlja1NldChyZWcudG9Mb2NhbCgpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogdW5zaWduZWQgR3JhcGg6OmZyYW1lUmVnaXN0ZXJDb3VudCgpCiB7CiAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9uZXh0TWFjaGluZUxvY2FsICsgc3RkOjptYXgobV9wYXJhbWV0ZXJT
bG90cywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
SW5SZWdpc3RlcnMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Fy
Z3VtZW50UG9zaXRpb24uaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCkBAIC00MSw2ICs0
Miw3IEBACiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkRGR1ByZVBvc3ROdW1iZXJp
bmcuaCIKICNpbmNsdWRlICJERkdTY2FubmFibGUuaCIKKyNpbmNsdWRlICJGdWxsQnl0ZWNvZGVM
aXZlbmVzcy5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KQEAgLTY3OSw2ICs2
ODEsNzEgQEAgcHVibGljOgogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBsaXZlbmVzc0ZvcihJ
bmxpbmVDYWxsRnJhbWUqKTsKICAgICBib29sIGlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lz
dGVyLCBDb2RlT3JpZ2luKTsKICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgLy8gU3VwcG9ydCBmb3Ig
bm90IHJlZHVuZGFudGx5IHJlcG9ydGluZyBhcmd1bWVudHMuIE5lY2Vzc2FyeSBiZWNhdXNlIGlu
IGNhc2Ugb2YgYSB2YXJhcmdzCisgICAgICAgIC8vIGNhbGwsIG9ubHkgdGhlIGNhbGxlZSBrbm93
cyB0aGF0IGFyZ3VtZW50cyBhcmUgbGl2ZSB3aGlsZSBpbiB0aGUgY2FzZSBvZiBhIG5vbi12YXJh
cmdzCisgICAgICAgIC8vIGNhbGwsIGJvdGggY2FsbGVlIGFuZCBjYWxsZXIgd2lsbCBzZWUgdGhl
IHZhcmlhYmxlcyBsaXZlLgorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjbHVzaW9uU3RhcnQ7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBleGNsdXNpb25FbmQ7CisgICAgICAgIAorICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgOiAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
CisgICAgICAgICAgICAgICAgICAgIGZ1bmN0b3Ioc3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
ZWUpOworICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpKQor
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVz
c0Zvcihjb2RlQmxvY2spOworICAgICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZW5l
c3MgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcmVsYXRpdmVMb2NhbCA9IGNvZGVCbG9jay0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7IHJlbGF0aXZlTG9jYWwtLTspIHsKKyAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnID0gc3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChyZWxhdGl2ZUxvY2FsKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBE
b24ndCByZXBvcnQgaWYgb3VyIGNhbGxlZSBhbHJlYWR5IHJlcG9ydGVkLgorICAgICAgICAgICAg
ICAgIGlmIChyZWcgPj0gZXhjbHVzaW9uU3RhcnQgJiYgcmVnIDwgZXhjbHVzaW9uRW5kKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobGl2ZW5lc3MuZ2V0KHJlbGF0aXZlTG9jYWwpKQorICAgICAgICAgICAgICAgICAg
ICBmdW5jdG9yKHJlZyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICAvLyBBcmd1bWVudHMgYXJlIGFsd2F5cyBsaXZlLiBUaGlzIHdvdWxkIGJlIHJlZHVuZGFu
dCBpZiBpdCB3YXNuJ3QgZm9yIG91cgorICAgICAgICAgICAgLy8gb3BfY2FsbF92YXJhcmdzIGlu
bGluaW5nLiBTYXZlIHRoZSBjb21tZW50IGFib3ZlLgorICAgICAgICAgICAgZXhjbHVzaW9uU3Rh
cnQgPSBzdGFja09mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlz
KDApOworICAgICAgICAgICAgZXhjbHVzaW9uRW5kID0gc3RhY2tPZmZzZXQgKyBDYWxsRnJhbWU6
OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcyhpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSB3aWxsIGFsd2F5cyBoYXZl
IGEgInRoaXMiIGFyZ3VtZW50IGFuZCBleGNsdXNpb25TdGFydCBzaG91bGQgYmUgYSBzbWFsbGVy
IHN0YWNrCisgICAgICAgICAgICAvLyBvZmZzZXQgdGhhbiBleGNsdXNpb25FbmQuCisgICAgICAg
ICAgICBBU1NFUlQoZXhjbHVzaW9uU3RhcnQgPCBleGNsdXNpb25FbmQpOworCisgICAgICAgICAg
ICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBleGNsdXNpb25TdGFydDsgcmVnIDwgZXhjbHVz
aW9uRW5kOyByZWcgKz0gMSkKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHJlZyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNvZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBCaXRWZWN0b3IgbG9jYWxzTGl2ZUluQnl0ZWNv
ZGUoQ29kZU9yaWdpbik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckFsbExpdmVJbkJ5dGVjb2RlKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvckFsbExvY2Fsc0xpdmVJbkJ5dGVj
b2RlKGNvZGVPcmlnaW4sIGZ1bmN0b3IpOworICAgICAgICAKKyAgICAgICAgLy8gUmVwb3J0IGFs
bCBhcmd1bWVudHMgYXMgYmVpbmcgbGl2ZSBhbmQgdGhlbiBmaW5pc2guCisgICAgICAgIGZvciAo
dW5zaWduZWQgYXJndW1lbnQgPSBibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJn
dW1lbnRzKCk7IGFyZ3VtZW50LS07KQorICAgICAgICAgICAgZnVuY3Rvcih2aXJ0dWFsUmVnaXN0
ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpOworICAgIH0KKyAgICAKICAgICBCeXRlY29kZUtpbGxz
JiBraWxsc0ZvcihDb2RlQmxvY2sqKTsKICAgICBCeXRlY29kZUtpbGxzJiBraWxsc0ZvcihJbmxp
bmVDYWxsRnJhbWUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcAkocmV2aXNpb24gMTgzMTYzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsOSBAQCBib29sIG1h
eUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAg
Y2FzZSBQaGFudG9tTG9jYWw6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICBjYXNlIEp1
bXA6CisgICAgY2FzZSBCcmFuY2g6CisgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE4MzE2
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEzICs4MCwxMiBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgRXBvY2ggY3VycmVudEVwb2NoID0gRXBvY2g6OmZpcnN0KCk7CiAgICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3N0YXRlLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IG1fc3RhdGUudmlydHVhbFJlZ2lzdGVyRm9ySW5k
ZXgoaSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKHJlZywgYmxv
Y2stPnRlcm1pbmFsKCktPm9yaWdpbi5mb3JFeGl0KSkKLSAgICAgICAgICAgICAgICBtX3N0YXRl
W2ldID0gY3VycmVudEVwb2NoOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
c3RhdGVbaV0gPSBFcG9jaCgpOwotICAgICAgICB9CisgICAgICAgIG1fc3RhdGUuZmlsbChFcG9j
aCgpKTsKKyAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKKyAgICAgICAgICAg
IGJsb2NrLT50ZXJtaW5hbCgpLT5vcmlnaW4uZm9yRXhpdCwKKyAgICAgICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChyZWcp
ID0gY3VycmVudEVwb2NoOworICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBMb2NhbHM6ICIsIG1fc3RhdGUsICJc
biIpOwpAQCAtMTE0LDcgKzExMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmIChub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBmb3JBbGxLaWxsZWRPcGVyYW5k
cygKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgYmxvY2stPmF0KG5vZGVJbmRleCAtIDEp
LT5vcmlnaW4uZm9yRXhpdCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgYmxv
Y2stPmF0KG5vZGVJbmRleCAtIDEpLCBub2RlLAogICAgICAgICAgICAgICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciByZWcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgYSBiaXQgc2xvcHB5IC0gaXQgbWlnaHQgY2xhaW0gdG8ga2lsbCBhIGxvY2FsIGV2
ZW4gaWYKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgc3RpbGwgbGl2ZSBhZnRlci4g
V2UgbmVlZCB0byBwcm90ZWN0IGFnYWluc3QgdGhhdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE4MzE2MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsOCArNTUsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIE5vZGVzIGZvciBsb2Nh
bCB2YXJpYWJsZSBhY2Nlc3MuIFRoZXNlIG5vZGVzIGFyZSBsaW5rZWQgdG9nZXRoZXIgdXNpbmcg
UGhpIG5vZGVzLiAqL1wKICAgICAvKiBBbnkgdHdvIG5vZGVzIHRoYXQgYXJlIHBhcnQgb2YgdGhl
IHNhbWUgUGhpIGdyYXBoIHdpbGwgc2hhcmUgdGhlIHNhbWUgKi9cCiAgICAgLyogVmFyaWFibGVB
Y2Nlc3NEYXRhLCBhbmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiBGSVhNRTogV2Ugc2hv
dWxkIGNvbWUgdXAgd2l0aCAqL1wKLSAgICAvKiBiZXR0ZXIgbmFtZXMgZm9yIGEgbG90IG9mIHRo
ZXNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzA3ICovXAot
ICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKKyAgICAvKiBiZXR0ZXIgbmFtZXMg
Zm9yIGEgbG90IG9mIHRoZXNlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM3MzA3LiAqL1wKKyAgICAvKiBOb3RlIHRoYXQgR2V0TG9jYWwgaXMgTXVzdEdlbmVyYXRl
IGJlY2F1c2UgaXQncyBvdXIgb25seSB3YXkgb2Yga25vd2luZyB0aGF0IHNvbWUgb3RoZXIgKi9c
CisgICAgLyogYmFzaWMgYmxvY2sgbWlnaHQgaGF2ZSByZWFkIGEgbG9jYWwgdmFyaWFibGUgaW4g
Ynl0ZWNvZGUuIFdlIG9ubHkgcmVtb3ZlIEdldExvY2FscyBpZiBpdCAqL1wKKyAgICAvKiBpcyBy
ZWR1bmRhbnQgYmVjYXVzZSBvZiBhbiBlYXJsaWVyIEdldExvY2FsIG9yIFNldExvY2FsIGluIHRo
ZSBzYW1lIGJsb2NrLiBXZSBjb3VsZCBtYWtlICovXAorICAgIC8qIHRoZXNlIG5vdCBNdXN0R2Vu
ZXJhdGUgYW5kIHVzZSBhIG1vcmUgc29waGlzdGljYXRlZCBhbmFseXNpcyB0byBpbnNlcnQgUGhh
bnRvbUxvY2FscyBpbiAqL1wKKyAgICAvKiB0aGUgc2FtZSB3YXkgdGhhdCB3ZSBpbnNlcnQgUGhh
bnRvbXMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQwODYgKi9c
CisgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhTZXRMb2NhbCwgMCkgXAogICAgIFwKICAgICBtYWNybyhQdXRTdGFjaywgTm9k
ZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFu
dG9tSW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUGhhbnRv
bUluc2VydGlvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdGb3JBbGxLaWxs
cy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVk
ZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk9w
ZXJhbmRzSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25h
bWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworCitjbGFzcyBQaGFudG9tSW5zZXJ0
aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFBoYW50b21JbnNlcnRpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJwaGFudG9tIGluc2Vy
dGlvbiIpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQoZ3JhcGgpCisgICAgICAgICwgbV92YWx1
ZXMoT3BlcmFuZHNMaWtlLCBncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgLy8gV2UgYXNzdW1l
IHRoYXQgRENFIGhhcyBhbHJlYWR5IHJ1bi4gSWYgd2UgcnVuIGJlZm9yZSBEQ0UgdGhlbiB3ZSB0
aGluayB0aGF0IGFsbAorICAgICAgICAvLyBTZXRMb2NhbHMgZXhlY3V0ZSwgd2hpY2ggaXMgaW5h
Y2N1cmF0ZS4gVGhhdCBjYXVzZXMgdXMgdG8gaW5zZXJ0IHRvbyBmZXcgUGhhbnRvbXMuCisgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFwaC5tX3JlZkNvdW50U3RhdGUg
PT0gRXhhY3RSZWZDb3VudCk7CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFBoYW50b20gaW5zZXJ0aW9uOlxuIik7Cisg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
bV9ncmFwaC5jbGVhckVwb2NocygpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkKKyAgICAgICAgICAgIGhh
bmRsZUJsb2NrKGJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQaGFudG9tIGluc2VydGlvbjpcbiIpOworICAg
ICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGhhbmRsZUJsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgbV92YWx1ZXMuZmlsbChudWxscHRyKTsKKwor
ICAgICAgICBFcG9jaCBjdXJyZW50RXBvY2ggPSBFcG9jaDo6Zmlyc3QoKTsKKyAgICAgICAgdW5z
aWduZWQgbGFzdEV4aXRpbmdJbmRleCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIG5vZGUs
ICJcbiIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgICAgICBtX3ZhbHVlcy5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFpv
bWJpZUhpbnQ6CisgICAgICAgICAgICAgICAgbV92YWx1ZXMub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAgICAgICAgIG1fdmFsdWVzLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSkgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFw
aCwgbm9kZSkpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOworICAgICAg
ICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggPSBub2RlSW5kZXg7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAg
ICAgICAgIG5vZGUsCisgICAgICAgICAgICAgICAgWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZWRnZS0+c2V0RXBvY2goY3VycmVudEVwb2NoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+c2V0RXBvY2goY3VycmVudEVw
b2NoKTsKKworICAgICAgICAgICAgYXV0byBraWxsQWN0aW9uID0gWyZdIChWaXJ0dWFsUmVnaXN0
ZXIgcmVnKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBLaWxsZWQgb3BlcmFuZDogIiwgcmVnLCAiXG4iKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIGtpbGxlZE5vZGUgPSBtX3Zh
bHVlcy5vcGVyYW5kKHJlZyk7CisgICAgICAgICAgICAgICAgaWYgKCFraWxsZWROb2RlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gV2Ugb25seSBuZWVkIHRvIGluc2VydCBhIFBoYW50b20gaWYgdGhlIG5vZGUgaGFzbid0
IGJlZW4gdXNlZCBzaW5jZSB0aGUgbGFzdAorICAgICAgICAgICAgICAgIC8vIGV4aXQsIGFuZCB3
YXMgYm9ybiBiZWZvcmUgdGhlIGxhc3QgZXhpdC4KKyAgICAgICAgICAgICAgICBpZiAoa2lsbGVk
Tm9kZS0+ZXBvY2goKSA9PSBjdXJyZW50RXBvY2gpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBJ
bnNlcnRpbmcgUGhhbnRvbSBvbiAiLCBraWxsZWROb2RlLCAiIGFmdGVyICIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCksICJcbiIpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IGV4YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFucyB0aGF0IHdlIGhh
dmUgdG8gaW5jcmVtZW50CisgICAgICAgICAgICAgICAgLy8gdGhlIHJlZiBjb3VudC4KKyAgICAg
ICAgICAgICAgICBraWxsZWROb2RlLT5wb3N0Zml4UmVmKCk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAg
ICAgICAgbGFzdEV4aXRpbmdJbmRleCArIDEsIFNwZWNOb25lLCBQaGFudG9tLCBibG9jay0+YXQo
bGFzdEV4aXRpbmdJbmRleCktPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAga2lsbGVkTm9k
ZS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAobm9kZUluZGV4ICsgMSA9PSBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgLy8gU2hvdWxkIGEgTW92SGludGVkIHZhbHVlIGJlIGtlcHQgYWxpdmU/IElmIHRoZSB2YWx1
ZSBoYXMgYmVlbiBTZXRMb2NhbCdkIHRoZW4KKyAgICAgICAgICAgICAgICAvLyB0aGUgYW5zd2Vy
IGlzIG5vLiBCdXQgd2UgbWF5IGhhdmUgYSB2YWx1ZSB0aGF0IGlzIGxpdmUgaGVyZSBhbmQgZGVh
ZCBpbgorICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3NvcnMgYmVjYXVzZSB3ZSBoYWQgamV0dGlz
b25lZCB0aG9zZSBzdWNjZXNzb3JzIHRoYXQgd291bGQgaGF2ZSB1c2VkIHRoZQorICAgICAgICAg
ICAgICAgIC8vIHZhbHVlLiBIZW5jZSwgYW55dGhpbmcgbGl2ZSBoZXJlIHNob3VsZCBiZSBrZXB0
IGFsaXZlLgorICAgICAgICAgICAgICAgIG1fZ3JhcGguZm9yQWxsTGl2ZUluQnl0ZWNvZGUobm9k
ZS0+b3JpZ2luLmZvckV4aXQsIGtpbGxBY3Rpb24pOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgZm9yQWxsS2lsbGVkT3BlcmFuZHMobV9ncmFwaCwgbm9kZSwgYmxvY2stPmF0
KG5vZGVJbmRleCArIDEpLCBraWxsQWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorICAgIAorICAgIEluc2Vy
dGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBPcGVyYW5kczxOb2RlKj4gbV92YWx1ZXM7Cit9
OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKyAgICAKK2Jvb2wgcGVyZm9ybVBoYW50b21J
bnNlcnRpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgUGhhbnRvbSBJbnNlcnRpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8
UGhhbnRvbUluc2VydGlvblBoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25Q
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQaGFudG9tSW5zZXJ0aW9u
UGhhc2VfaAorI2RlZmluZSBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2VfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3Jh
cGg7CisKKy8vIEluc2VydHMgUGhhbnRvbXMgYmFzZWQgb24gYnl0ZWNvZGUgbGl2ZW5lc3MuCisK
K2Jvb2wgcGVyZm9ybVBoYW50b21JbnNlcnRpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiREZH
T1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdPYmplY3RBbGxvY2F0
aW9uU2lua2luZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25Q
aGFzZS5oIgorI2luY2x1ZGUgIkRGR1BoYW50b21JbnNlcnRpb25QaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1BoYW50b21SZW1vdmFsUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgpA
QCAtMzIwLDYgKzMyMSw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICAgICAgcGVyZm9ybVBoYW50b21SZW1vdmFsKGRmZyk7CiAgICAgICAgIHBlcmZvcm1D
UFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtRENFKGRmZyk7CisgICAgICAgIHBl
cmZvcm1QaGFudG9tSW5zZXJ0aW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TdGFja0xheW91dChk
ZmcpOwogICAgICAgICBwZXJmb3JtVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvbihkZmcpOwogICAg
ICAgICBwZXJmb3JtV2F0Y2hwb2ludENvbGxlY3Rpb24oZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2NvcmVCb2FyZC5oCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsMjEgKzU1LDI3IEBAIHB1YmxpYzoKICAgICAgICAgYXNzZXJ0Q2xlYXIoKTsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBzb3J0RnJlZSgpCisgICAgeworICAgICAgICBzdGQ6OnNvcnQobV9mcmVl
LmJlZ2luKCksIG1fZnJlZS5lbmQoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYXNzZXJ0Q2xl
YXIoKQogICAgIHsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGlmIChBU1NFUlRfRElT
QUJMRUQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgICAgICAvLyBGb3IgZXZl
cnkgZW50cnkgaW4gdGhlIHVzZWQgbGlzdCB0aGUgdXNlIGNvdW50IG9mIHRoZSB2aXJ0dWFsIHJl
Z2lzdGVyIHNob3VsZCBiZSB6ZXJvLCBvciBtYXgsIGR1ZSB0byBpdCBiZWluZyBhIHByZXNlcnZl
ZCBsb2NhbC4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3VzZWQuc2l6ZSgpOyAr
K2kpCi0gICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0gbWF4KCkp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fdXNlZFtpXSB8fCBtX3VzZWRbaV0gPT0g
bWF4KCkpOwogICAgICAgICAvLyBGb3IgZXZlcnkgZW50cnkgaW4gdGhlIGZyZWUgbGlzdCwgdGhl
IHVzZSBjb3VudCBzaG91bGQgYmUgemVyby4KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2ZyZWUuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBBU1NFUlQoIW1fdXNlZFttX2ZyZWVb
aV1dKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3VzZWRbbV9mcmVlW2ldXSk7CiAg
ICAgICAgIC8vIFRoZXJlIG11c3Qgbm90IGJlIGR1cGxpY2F0ZXMgaW4gdGhlIGZyZWUgbGlzdC4K
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IG1fZnJlZS5zaXplKCk7ICsraikK
LSAgICAgICAgICAgICAgICBBU1NFUlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CisgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9mcmVlW2ldICE9IG1fZnJlZVtqXSk7CiAgICAgICAg
IH0KLSNlbmRpZgogICAgIH0KIAogICAgIFZpcnR1YWxSZWdpc3RlciBhbGxvY2F0ZSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmICghYmxvY2stPmlzUmVhY2hhYmxlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
IHsKKyAgICAgICAgICAgICAgICAvLyBGb3JjZSB1c2FnZSBvZiBoaWdoZXN0LW51bWJlcmVkIHZp
cnR1YWwgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgIHNjb3JlQm9hcmQuc29ydEZyZWUoKTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4SW5CbG9jayA9IDA7
IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCShyZXZpc2lvbiAxODMxNjMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE5OSwxMyArNzE5OSwxNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsK
ICAgICAgICAgCiAgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlz
LT5hdmFpbGFiaWxpdHlNYXAoKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzLmZp
bGwoQXZhaWxhYmlsaXR5KCkpOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBvcGVy
YW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBib29s
IGlzTGl2ZSA9IG1fZ3JhcGguaXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFu
ZCksIGNvZGVPcmlnaW4pOwotICAgICAgICAgICAgaWYgKCFpc0xpdmUpCi0gICAgICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldID0gQXZhaWxhYmlsaXR5KCk7Ci0gICAgICAg
IH0KKyAgICAgICAgbV9ncmFwaC5mb3JBbGxMaXZlSW5CeXRlY29kZSgKKyAgICAgICAgICAgIGNv
ZGVPcmlnaW4sCisgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHMub3BlcmFuZChyZWcpID0KKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMub3BlcmFuZChy
ZWcpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIAogICAgICAgICBhdmFpbGFiaWxpdHlNYXAu
cHJ1bmUoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3BoYW50b20taW5hZGVxdWFjeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3BoYW50b20taW5hZGVxdWFjeS5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcGhhbnRvbS1pbmFkZXF1YWN5Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICBy
ZXR1cm4gNDIuNTsKK30KK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGJheih2YWx1ZSkgewor
ICAgIGlmICh2YWx1ZSAhPSA0Mi41KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTog
IiArIHZhbHVlOworfQorbm9JbmxpbmUoYmF6KTsKKwordmFyIFRydWUgPSB0cnVlOworZnVuY3Rp
b24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGJhcigpOworICAgIHZhciB0bXAgPSAwOworICAgIGlm
IChUcnVlKSB7CisgICAgICAgIHZhciB0bXAyID0geDsKKyAgICAgICAgdG1wID0gYSArIDE7Cisg
ICAgICAgIGJheih0bXAyKTsKKyAgICB9CisgICAgcmV0dXJuIHggKyAxICsgdG1wOworfQorbm9J
bmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGZvbygxKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyLjUgKyAxICsgMSArIDEpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHJl
c3VsdCA9IGZvbygyMTQ3NDgzNjQ3KTsKK2lmIChyZXN1bHQgIT0gNDIuNSArIDEgKyAyMTQ3NDgz
NjQ3ICsgMSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0
Owo=
</data>
<flag name="review"
          id="276244"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>