<?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>146602</bug_id>
          
          <creation_ts>2015-07-03 23:09:44 -0700</creation_ts>
          <short_desc>DFG fragile frozen values are fundamentally broken</short_desc>
          <delta_ts>2015-07-10 14:21:32 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1106823</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-03 23:09:44 -0700</bug_when>
    <thetext>We currently have the notion of a FragileValue, which is a value known to the compiler but not tracked by the GC in any way - it&apos;s not marked and it&apos;s not weak.  This is used to support AI bootstrap for OSR must-handle values.  The philosophy is that if the compiler does use the value for optimization, it will be strengthened to a weak value (or maybe even a strong value, though we probably won&apos;t do that).  But this is too much of a pipe dream.  I&apos;ve found at least one case where the compiler does use the value, but never strengthens it: it will happen if the value ends up in an OSR entry data expected value.  Then if we GC, we might kill the value, but OSR entry will still try to use it for validation.  That might sort of just work, but it&apos;s clearly shady.

The reason why we make must-handle values fragile and not weak is that most of the time the values disappear from the abstract state: they are LUBed to a non-constant.  If we kept them around as weak, we&apos;d have too many cases of the GC killing the code because it thought that the value was somehow meaningful to the code when it was only used as a temporary artifact of optimization.

So, it&apos;s true that it&apos;s very important for must-handle values not to automatically be weak or strong.  It&apos;s also true that the values are necessary for AI bootstrap because we need to know what values OSR entry will require.  But we shouldn&apos;t accomplish these goals by having the compiler hold onto what are essentially dangling pointers.

A better solution is to turn the bootstrap into a late widening pass: after CFAPhase achieves convergence, it should check if the must-handle values would widen the valuesAtHead of the must-handle block.  If they would widen them into a non-constant, then we don&apos;t need to ever have the compiler track the must-handle values.  If some must-handle value widen a valueAtHead from bottom to a constant, then we can do weak freezing.  This makes sense: in that case we know for sure that the compilation&apos;s validity relies on the value being alive, and it makes perfect sense for the GC to jettison the resulting JIT code if the value dies.  This approach will let us get rid of FragileValue.  It will also let us get rid of the must-handle bootstrap in InPlaceAbstractState, and replace it with a must-handle widening in CFAPhase.  CFAPhase will then rerun its fixpoint if the widening changed the results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106824</commentid>
    <comment_count>1</comment_count>
      <attachid>256137</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-03 23:10:45 -0700</bug_when>
    <thetext>Created attachment 256137
work towards finding the issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106884</commentid>
    <comment_count>2</comment_count>
      <attachid>256156</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-04 12:46:39 -0700</bug_when>
    <thetext>Created attachment 256156
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106886</commentid>
    <comment_count>3</comment_count>
      <attachid>256158</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-04 13:14:38 -0700</bug_when>
    <thetext>Created attachment 256158
validation is written

It might make it easier to catch these bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106888</commentid>
    <comment_count>4</comment_count>
      <attachid>256160</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-04 13:56:46 -0700</bug_when>
    <thetext>Created attachment 256160
more

Running tests now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106889</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-04 14:09:59 -0700</bug_when>
    <thetext>It appears that the OSR entry fragile value bug is very real.  Here are the tests that fail now that I have the validation in place.  Note that dead-osr-entry-value is the new test added in this patch.


** The following JSC stress test failures have been introduced:
	internal-js-tests.yaml/V8v7/earley.js.ftl-no-cjit-validate
	stress/dead-osr-entry-value.js.dfg-eager-no-cjit-validate
	stress/dead-osr-entry-value.js.ftl-eager-no-cjit
	stress/dead-osr-entry-value.js.ftl-no-cjit-no-inline-validate
	stress/dead-osr-entry-value.js.ftl-no-cjit-validate
	stress/dead-osr-entry-value.js.no-cjit-validate-phases
	stress/flatten-oversize-dictionary-object.js.dfg-eager-no-cjit-validate
	stress/flatten-oversize-dictionary-object.js.ftl-eager-no-cjit
	sunspider-1.0/3d-raytrace.js.dfg-eager-no-cjit-validate
	sunspider-1.0/3d-raytrace.js.ftl-eager-no-cjit
	v8-v6/v8-earley-boyer.js.dfg-eager-no-cjit-validate
	v8-v6/v8-earley-boyer.js.ftl-eager-no-cjit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106912</commentid>
    <comment_count>6</comment_count>
      <attachid>256165</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-04 19:18:10 -0700</bug_when>
    <thetext>Created attachment 256165
probably done

Still need to do some perf testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106913</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-07-04 19:19:59 -0700</bug_when>
    <thetext>Attachment 256165 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLExitTimeObjectMaterialization.h:60:  The parameter name &quot;trackedReferences&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:189:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/dfg/DFGGraph.h:190:  The parameter name &quot;value&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/TrackedReferences.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/bytecode/StructureSet.cpp:103:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:481:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGOSREntry.cpp:47:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 7 in 48 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>1106919</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-04 20:06:41 -0700</bug_when>
    <thetext>I did two benchmark runs, and cannot find any reasons to believe that this is a regression.  Which is good - I was fearing that this might screw up OSR entry.  That doesn&apos;t seem to be the case.  First report is below:


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r186271)
&quot;KillFragile&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r186271)

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                KillFragile                                    
SunSpider:
   3d-cube                                            5.1658+-0.1139     ?      5.3016+-0.3218        ? might be 1.0263x slower
   3d-morph                                           5.9030+-0.2500            5.7909+-0.1054          might be 1.0194x faster
   3d-raytrace                                        6.8110+-0.4910            6.5057+-0.1764          might be 1.0469x faster
   access-binary-trees                                2.3487+-0.0570     ?      2.4775+-0.2058        ? might be 1.0548x slower
   access-fannkuch                                    6.3613+-0.4316            6.2417+-0.1236          might be 1.0192x faster
   access-nbody                                       2.9751+-0.1781            2.8835+-0.0250          might be 1.0318x faster
   access-nsieve                                      3.4624+-0.0511     ?      3.4931+-0.1165        ?
   bitops-3bit-bits-in-byte                           1.6587+-0.1626            1.6460+-0.0750        
   bitops-bits-in-byte                                3.9999+-0.3375            3.7528+-0.0815          might be 1.0658x faster
   bitops-bitwise-and                                 2.1406+-0.0420     ?      2.2910+-0.1712        ? might be 1.0703x slower
   bitops-nsieve-bits                                 3.2180+-0.0167     ?      3.2709+-0.0997        ? might be 1.0164x slower
   controlflow-recursive                              2.7410+-0.1287     !      3.0517+-0.1751        ! definitely 1.1133x slower
   crypto-aes                                         4.7267+-0.2546     ?      4.7601+-0.2028        ?
   crypto-md5                                         2.7595+-0.0265            2.7413+-0.0654        
   crypto-sha1                                        3.7397+-0.1962     ?      3.8553+-0.2389        ? might be 1.0309x slower
   date-format-tofte                                  9.3505+-0.1944     ?      9.3905+-0.1069        ?
   date-format-xparb                                  5.4230+-0.0828     ?      5.6960+-0.2186        ? might be 1.0503x slower
   math-cordic                                        3.1071+-0.0822            3.1050+-0.0469        
   math-partial-sums                                  5.4154+-0.1905     ?      5.4918+-0.3024        ? might be 1.0141x slower
   math-spectral-norm                                 2.0257+-0.0540     ?      2.1313+-0.1027        ? might be 1.0521x slower
   regexp-dna                                         8.1180+-1.2585     ?      8.2002+-1.2945        ? might be 1.0101x slower
   string-base64                                      5.1721+-0.7790            5.0391+-0.2488          might be 1.0264x faster
   string-fasta                                       6.8041+-0.4140     ?      6.8783+-0.3566        ? might be 1.0109x slower
   string-tagcloud                                   10.3134+-0.9240           10.0135+-0.5165          might be 1.0299x faster
   string-unpack-code                                21.0568+-0.6950     ?     21.1302+-1.4146        ?
   string-validate-input                              5.9877+-0.3966     ?      6.3720+-0.6683        ? might be 1.0642x slower

   &lt;arithmetic&gt;                                       5.4148+-0.0653     ?      5.4427+-0.0627        ? might be 1.0052x slower

                                                        TipOfTree                KillFragile                                    
LongSpider:
   3d-cube                                         1111.6484+-13.6909    ?   1129.0247+-47.0946       ? might be 1.0156x slower
   3d-morph                                        1533.5403+-9.1098         1531.1944+-5.5061        
   3d-raytrace                                      706.4413+-11.4719         698.5375+-7.1135          might be 1.0113x faster
   access-binary-trees                             1002.3462+-8.0472     ?   1006.6850+-7.2561        ?
   access-fannkuch                                  351.2570+-11.9549    ?    354.9881+-22.4554       ? might be 1.0106x slower
   access-nbody                                     590.0514+-1.4876     ?    593.0566+-5.5511        ?
   access-nsieve                                    477.3623+-6.6054     ?    479.2903+-5.3086        ?
   bitops-3bit-bits-in-byte                          44.9222+-1.5452     ?     46.9449+-3.2299        ? might be 1.0450x slower
   bitops-bits-in-byte                              100.3494+-1.3994           99.3380+-0.4403          might be 1.0102x faster
   bitops-nsieve-bits                               416.6311+-3.0204     ?    418.5774+-3.8022        ?
   controlflow-recursive                            488.8066+-9.4110          479.7889+-10.1047         might be 1.0188x faster
   crypto-aes                                       686.6007+-23.2664         679.1970+-12.6436         might be 1.0109x faster
   crypto-md5                                       522.6184+-6.5017     ?    526.4530+-9.1409        ?
   crypto-sha1                                      683.8693+-12.3408         683.5646+-13.9903       
   date-format-tofte                                730.7314+-22.5279    ?    738.7426+-18.7207       ? might be 1.0110x slower
   date-format-xparb                                809.8194+-52.6761    ?    837.0182+-32.2235       ? might be 1.0336x slower
   hash-map                                         188.3042+-9.2363          184.5827+-5.0380          might be 1.0202x faster
   math-cordic                                      579.0139+-5.3374          576.5954+-1.9425        
   math-partial-sums                                515.7079+-8.9618     ?    520.8332+-19.3225       ?
   math-spectral-norm                               568.2700+-3.3616     ?    572.2967+-4.7012        ?
   string-base64                                    407.5018+-3.8717          406.3160+-5.4002        
   string-fasta                                     419.0234+-2.7629     ?    423.2995+-8.0328        ? might be 1.0102x slower
   string-tagcloud                                  198.8052+-7.5008          198.0483+-6.8016        

   &lt;geometric&gt;                                      459.6168+-3.6128     ?    461.2429+-1.8889        ? might be 1.0035x slower

                                                        TipOfTree                KillFragile                                    
V8Spider:
   crypto                                            55.4757+-2.1297     ?     58.2491+-2.4580        ? might be 1.0500x slower
   deltablue                                         99.0967+-1.7898     ?    104.8929+-6.9563        ? might be 1.0585x slower
   earley-boyer                                      47.3778+-1.8227     ?     48.0252+-1.0096        ? might be 1.0137x slower
   raytrace                                          41.3442+-2.1605           41.2783+-3.2746        
   regexp                                            77.9365+-4.6408           75.2558+-0.6068          might be 1.0356x faster
   richards                                          79.6482+-1.5252           79.6150+-1.1204        
   splay                                             40.9108+-1.2991     ?     45.2399+-14.7671       ? might be 1.1058x slower

   &lt;geometric&gt;                                       59.7685+-0.7144     ?     61.1315+-3.4439        ? might be 1.0228x slower

                                                        TipOfTree                KillFragile                                    
Octane:
   encrypt                                           0.19593+-0.00443    ?     0.20365+-0.01297       ? might be 1.0394x slower
   decrypt                                           3.30864+-0.03806    ?     3.34438+-0.16406       ? might be 1.0108x slower
   deltablue                                x2       0.19207+-0.00697    ?     0.19449+-0.01031       ? might be 1.0126x slower
   earley                                            0.35666+-0.01644          0.34671+-0.00197         might be 1.0287x faster
   boyer                                             5.08604+-0.04222    ?     5.11047+-0.03869       ?
   navier-stokes                            x2       5.14762+-0.03507          5.12602+-0.00701       
   raytrace                                 x2       1.29500+-0.03942          1.27381+-0.03536         might be 1.0166x faster
   richards                                 x2       0.12778+-0.00176          0.12761+-0.00202       
   splay                                    x2       0.40455+-0.00645          0.39746+-0.00481         might be 1.0178x faster
   regexp                                   x2      28.89192+-0.17189    ?    29.16002+-0.11726       ?
   pdfjs                                    x2      42.95033+-0.11565    ?    43.18191+-0.40655       ?
   mandreel                                 x2      50.69832+-0.87303    ?    51.30054+-2.26108       ? might be 1.0119x slower
   gbemu                                    x2      42.97147+-1.30845    ?    43.75604+-2.30081       ? might be 1.0183x slower
   closure                                           0.62759+-0.00376          0.62218+-0.00340       
   jquery                                            8.16884+-0.02996    ?     8.27291+-0.40614       ? might be 1.0127x slower
   box2d                                    x2      11.85675+-0.07092    ?    12.03736+-0.29166       ? might be 1.0152x slower
   zlib                                     x2     403.32547+-27.03232   ?   404.47605+-2.78829       ?
   typescript                               x2     830.38896+-10.70370   ?   852.90312+-83.22869      ? might be 1.0271x slower

   &lt;geometric&gt;                                       6.54650+-0.04089    ?     6.57834+-0.06668       ? might be 1.0049x slower

                                                        TipOfTree                KillFragile                                    
Kraken:
   ai-astar                                          226.346+-5.806      ?     227.788+-9.129         ?
   audio-beat-detection                               82.928+-1.464      ?      84.818+-6.491         ? might be 1.0228x slower
   audio-dft                                         121.797+-1.339      ?     126.608+-12.643        ? might be 1.0395x slower
   audio-fft                                          70.353+-4.758      ?      71.962+-2.366         ? might be 1.0229x slower
   audio-oscillator                                   78.924+-4.560             76.828+-1.230           might be 1.0273x faster
   imaging-darkroom                                  106.470+-2.142      ?     106.901+-2.058         ?
   imaging-desaturate                                 62.327+-2.056             62.194+-2.125         
   imaging-gaussian-blur                             109.900+-1.799      ?     113.846+-8.177         ? might be 1.0359x slower
   json-parse-financial                               48.063+-1.867      ?      49.470+-2.333         ? might be 1.0293x slower
   json-stringify-tinderbox                           30.298+-2.002             28.574+-0.872           might be 1.0603x faster
   stanford-crypto-aes                                58.383+-1.224      ?      59.634+-2.747         ? might be 1.0214x slower
   stanford-crypto-ccm                                48.788+-1.085      ?      50.880+-3.302         ? might be 1.0429x slower
   stanford-crypto-pbkdf2                            105.286+-2.654      ?     106.570+-1.083         ? might be 1.0122x slower
   stanford-crypto-sha256-iterative                   43.263+-2.792             41.963+-0.547           might be 1.0310x faster

   &lt;arithmetic&gt;                                       85.223+-0.638      ?      86.288+-1.356         ? might be 1.0125x slower

                                                        TipOfTree                KillFragile                                    
JSRegress:
   abc-forward-loop-equal                            48.8656+-3.1739           47.6755+-0.7228          might be 1.0250x faster
   abc-postfix-backward-loop                         47.5457+-1.2181           47.4857+-1.6844        
   abc-simple-backward-loop                          46.9294+-0.7073           46.8554+-0.2443        
   abc-simple-forward-loop                           47.5520+-1.8449           46.5876+-0.2892          might be 1.0207x faster
   abc-skippy-loop                                   33.1906+-1.8353           32.1427+-0.4142          might be 1.0326x faster
   abs-boolean                                        2.7937+-0.2470            2.6542+-0.0375          might be 1.0526x faster
   adapt-to-double-divide                            17.0269+-0.7045           16.9888+-0.9646        
   aliased-arguments-getbyval                         1.2569+-0.0434     ?      1.2805+-0.0458        ? might be 1.0188x slower
   allocate-big-object                                2.8575+-0.1402     ?      2.8764+-0.2151        ?
   arguments-named-and-reflective                    13.0465+-0.9768           12.9622+-1.4357        
   arguments-out-of-bounds                           14.8404+-0.6232           14.7170+-0.6420        
   arguments-strict-mode                             11.5647+-1.4900           11.3732+-0.7950          might be 1.0168x faster
   arguments                                          9.6032+-0.1141     ?      9.9503+-0.8095        ? might be 1.0361x slower
   arity-mismatch-inlining                            0.9099+-0.0365     ?      0.9856+-0.1372        ? might be 1.0832x slower
   array-access-polymorphic-structure                 6.6110+-0.1471     ?      7.0507+-1.1571        ? might be 1.0665x slower
   array-nonarray-polymorhpic-access                 32.7572+-1.6663           32.5632+-1.1736        
   array-prototype-every                             88.5128+-3.1296           87.8908+-3.8281        
   array-prototype-forEach                           85.8632+-2.0153           85.6193+-1.1476        
   array-prototype-map                               96.3062+-3.1659           92.9744+-1.9200          might be 1.0358x faster
   array-prototype-reduce                            86.1436+-3.2155           83.5887+-1.3737          might be 1.0306x faster
   array-prototype-reduceRight                       85.5524+-3.0433           81.9420+-1.3088          might be 1.0441x faster
   array-prototype-some                              89.1138+-4.8958           87.0966+-1.8909          might be 1.0232x faster
   array-splice-contiguous                           26.5886+-0.2765     ?     27.2762+-1.1168        ? might be 1.0259x slower
   array-with-double-add                              4.2373+-0.0475     ?      4.3924+-0.3629        ? might be 1.0366x slower
   array-with-double-increment                        3.3459+-0.2699     ?      3.6550+-0.7383        ? might be 1.0924x slower
   array-with-double-mul-add                          5.3520+-0.2911            5.2235+-0.1045          might be 1.0246x faster
   array-with-double-sum                              3.4028+-0.1822            3.3653+-0.0511          might be 1.0111x faster
   array-with-int32-add-sub                           6.8269+-0.0398     ?      7.2637+-0.7778        ? might be 1.0640x slower
   array-with-int32-or-double-sum                     3.4497+-0.2075     ?      3.5410+-0.2782        ? might be 1.0265x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     36.2631+-0.9472     !     38.9834+-1.4991        ! definitely 1.0750x slower
   ArrayBuffer-DataView-alloc-long-lived             15.5404+-2.4266     ?     15.9283+-1.5297        ? might be 1.0250x slower
   ArrayBuffer-Int32Array-byteOffset                  3.9292+-0.1573            3.8568+-0.1520          might be 1.0188x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     39.4789+-2.5846           39.0430+-1.7040          might be 1.0112x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.8830+-2.0659     ?     22.9473+-1.2714        ?
   ArrayBuffer-Int8Array-alloc-long-lived            14.1545+-1.7294     ?     14.2828+-1.3662        ?
   ArrayBuffer-Int8Array-alloc                       11.0574+-1.2077           10.9041+-0.7418          might be 1.0141x faster
   asmjs_bool_bug                                     7.8291+-0.2369     !     18.5383+-1.3053        ! definitely 2.3679x slower
   assign-custom-setter-polymorphic                   3.3088+-0.1565            3.2319+-0.0622          might be 1.0238x faster
   assign-custom-setter                               4.6873+-0.2575            4.6745+-0.1944        
   basic-set                                          9.4895+-0.2623     ?      9.6869+-0.3566        ? might be 1.0208x slower
   big-int-mul                                        4.0697+-0.0474     ?      4.0905+-0.1092        ?
   boolean-test                                       3.2308+-0.1219     ?      3.2551+-0.1345        ?
   branch-fold                                        3.9612+-0.2302     ?      4.0981+-0.1313        ? might be 1.0346x slower
   branch-on-string-as-boolean                       20.7430+-0.4712           20.6926+-0.4615        
   by-val-generic                                     8.6214+-0.2568            8.4107+-0.0874          might be 1.0251x faster
   call-spread-apply                                 31.6786+-2.0432           31.1379+-1.4849          might be 1.0174x faster
   call-spread-call                                  25.6069+-1.0033           25.0826+-0.6862          might be 1.0209x faster
   captured-assignments                               0.6066+-0.1897            0.5515+-0.0479          might be 1.0999x faster
   cast-int-to-double                                 5.3323+-0.0618            5.3077+-0.0244        
   cell-argument                                      8.9934+-0.6219            8.5852+-0.1996          might be 1.0475x faster
   cfg-simplify                                       2.8853+-0.1092     ?      2.8921+-0.0661        ?
   chain-getter-access                                9.4790+-0.2785     ?      9.5269+-0.4083        ?
   cmpeq-obj-to-obj-other                            11.7711+-0.7494     ?     12.2868+-1.2302        ? might be 1.0438x slower
   constant-test                                      5.0017+-0.0191     ?      5.0482+-0.1124        ?
   create-lots-of-functions                          11.7094+-0.6472           11.6580+-0.6335        
   cse-new-array-buffer                               2.5092+-0.0285     ?      2.5701+-0.1183        ? might be 1.0243x slower
   cse-new-array                                      2.6077+-0.0393     ?      2.7307+-0.2638        ? might be 1.0472x slower
   DataView-custom-properties                        42.6788+-0.8554     ?     42.9906+-2.4471        ?
   delay-tear-off-arguments-strictmode               14.2223+-1.1840           13.9430+-0.5564          might be 1.0200x faster
   deltablue-varargs                                219.2578+-11.0620         216.1359+-8.4887          might be 1.0144x faster
   destructuring-arguments                          243.2455+-17.5824    ^    186.1989+-4.6737        ^ definitely 1.3064x faster
   destructuring-parameters-overridden-by-function   
                                                      0.5915+-0.0308     ?      0.6174+-0.0494        ? might be 1.0439x slower
   destructuring-swap                                 5.1321+-0.0599     ?      5.1388+-0.0897        ?
   direct-arguments-getbyval                          1.2355+-0.0427     ?      1.2933+-0.0965        ? might be 1.0468x slower
   div-boolean-double                                 5.3106+-0.1119            5.2974+-0.0476        
   div-boolean                                        7.8267+-0.0308     ?      7.8502+-0.0912        ?
   double-get-by-val-out-of-bounds                    4.7448+-0.0639     ^      4.6082+-0.0530        ^ definitely 1.0297x faster
   double-pollution-getbyval                          8.9664+-0.0965     ?      9.0214+-0.3278        ?
   double-pollution-putbyoffset                       4.4117+-0.1700     ?      4.4287+-0.1653        ?
   double-real-use                                   31.7875+-2.0038           30.0139+-1.2591          might be 1.0591x faster
   double-to-int32-typed-array-no-inline              2.5334+-0.2329     ?      2.5378+-0.1284        ?
   double-to-int32-typed-array                        1.9543+-0.0323     ?      1.9956+-0.0283        ? might be 1.0211x slower
   double-to-uint32-typed-array-no-inline             2.5728+-0.0882     ?      2.7020+-0.2401        ? might be 1.0502x slower
   double-to-uint32-typed-array                       2.2045+-0.2791            2.0610+-0.1053          might be 1.0697x faster
   elidable-new-object-dag                           43.3591+-1.8146     ?     43.3979+-1.9395        ?
   elidable-new-object-roflcopter                    43.8473+-2.0571           43.1228+-0.6415          might be 1.0168x faster
   elidable-new-object-then-call                     40.0031+-1.5484           39.3519+-0.9611          might be 1.0165x faster
   elidable-new-object-tree                          46.7940+-1.5835           46.2204+-2.3917          might be 1.0124x faster
   empty-string-plus-int                              5.6799+-0.3588            5.4617+-0.1921          might be 1.0399x faster
   emscripten-cube2hash                              39.3350+-2.5317           38.7665+-2.3517          might be 1.0147x faster
   exit-length-on-plain-object                       14.3972+-1.3795           13.9520+-0.4362          might be 1.0319x faster
   external-arguments-getbyval                        1.2651+-0.0444     ?      1.4343+-0.1721        ? might be 1.1337x slower
   external-arguments-putbyval                        2.3350+-0.0323     !      2.4221+-0.0513        ! definitely 1.0373x slower
   fixed-typed-array-storage-var-index                1.2662+-0.0823            1.2157+-0.0573          might be 1.0415x faster
   fixed-typed-array-storage                          0.9425+-0.0814            0.9006+-0.0275          might be 1.0465x faster
   Float32Array-matrix-mult                           4.5906+-0.1292     ?      4.6967+-0.1048        ? might be 1.0231x slower
   Float32Array-to-Float64Array-set                  56.8227+-1.9334     ^     51.6147+-1.5963        ^ definitely 1.1009x faster
   Float64Array-alloc-long-lived                     86.9775+-3.6954     ?     87.7484+-1.8540        ?
   Float64Array-to-Int16Array-set                    69.6254+-1.4555     ?     69.8114+-1.7463        ?
   fold-double-to-int                                14.2906+-1.2589     !     22.4733+-0.5278        ! definitely 1.5726x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.7929+-1.0848     ?     11.0518+-1.2137        ? might be 1.0240x slower
   fold-get-by-id-to-multi-get-by-offset             10.5487+-0.8843            9.9752+-1.1051          might be 1.0575x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.2335+-0.8697            8.8104+-1.5861          might be 1.0480x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.2823+-0.3638     ?      9.4632+-0.5330        ? might be 1.0195x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.1414+-0.8393     ?     10.6445+-0.7129        ? might be 1.0496x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.1075+-0.3644            8.0507+-0.8025        
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1613+-0.8650            9.9653+-0.6842          might be 1.0197x faster
   fold-put-by-id-to-multi-put-by-offset             10.7037+-1.0329           10.2995+-0.9381          might be 1.0392x faster
   fold-put-structure                                 7.6039+-0.3897     ?      7.6462+-0.5356        ?
   for-of-iterate-array-entries                      12.9559+-1.3629           12.5558+-0.1687          might be 1.0319x faster
   for-of-iterate-array-keys                          3.9853+-0.3665            3.8548+-0.0564          might be 1.0339x faster
   for-of-iterate-array-values                        4.0295+-0.4059            3.9248+-0.1809          might be 1.0267x faster
   fround                                            21.0765+-0.6807           20.9597+-0.6053        
   ftl-library-inlining-dataview                     67.8527+-4.8458           67.3314+-3.5550        
   ftl-library-inlining                              73.9913+-18.6773    ?     74.5857+-17.0658       ?
   function-dot-apply                                 2.2917+-0.1164     ?      2.2944+-0.0723        ?
   function-test                                      2.9986+-0.1382     ?      3.0422+-0.1499        ? might be 1.0145x slower
   function-with-eval                               104.6504+-2.6099          102.1421+-4.0751          might be 1.0246x faster
   gcse-poly-get-less-obvious                        18.5585+-0.9065     ?     19.2482+-1.1608        ? might be 1.0372x slower
   gcse-poly-get                                     21.0581+-2.0404           20.6571+-1.9984          might be 1.0194x faster
   gcse                                               4.4058+-0.0622     ?      4.4383+-0.1571        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7962+-0.1146     ?      2.8297+-0.1051        ? might be 1.0120x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0188+-0.0632     ?      6.1523+-0.3415        ? might be 1.0222x slower
   get-by-id-chain-from-try-block                     7.0326+-1.1779            6.8705+-0.1547          might be 1.0236x faster
   get-by-id-check-structure-elimination              5.1882+-0.0461            5.1403+-0.0831        
   get-by-id-proto-or-self                           19.6470+-2.7154     ?     19.9227+-2.6742        ? might be 1.0140x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0656+-0.1741            3.0421+-0.1559        
   get-by-id-self-or-proto                           19.3027+-2.0398           18.2064+-1.8615          might be 1.0602x faster
   get-by-val-out-of-bounds                           4.4951+-0.1098            4.4148+-0.0366          might be 1.0182x faster
   get_callee_monomorphic                             2.9344+-0.5788            2.6504+-0.0776          might be 1.1072x faster
   get_callee_polymorphic                             3.6644+-0.2309     !      4.3853+-0.0827        ! definitely 1.1967x slower
   getter-no-activation                               5.2174+-0.3309            5.1107+-0.2790          might be 1.0209x faster
   getter-prototype                                  15.0947+-0.7633           14.8254+-0.2975          might be 1.0182x faster
   getter-richards                                  125.6264+-4.4010     ?    126.5938+-11.0964       ?
   getter                                             6.2266+-0.9945            5.6010+-0.4990          might be 1.1117x faster
   global-var-const-infer-fire-from-opt               0.9292+-0.0315     ?      0.9463+-0.0506        ? might be 1.0183x slower
   global-var-const-infer                             0.8698+-0.1731     ?      0.9160+-0.2495        ? might be 1.0531x slower
   HashMap-put-get-iterate-keys                      31.3818+-1.7341           31.3200+-2.0030        
   HashMap-put-get-iterate                           32.8168+-0.8292           31.3636+-1.9721          might be 1.0463x faster
   HashMap-string-put-get-iterate                    32.4993+-2.6791     ?     32.7550+-1.5033        ?
   hoist-make-rope                                   13.4399+-0.9726           12.4910+-0.9916          might be 1.0760x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.1434+-0.1413     ?      5.3437+-0.5042        ? might be 1.0390x slower
   hoist-poly-check-structure                         3.7586+-0.0701            3.7557+-0.0624        
   imul-double-only                                   8.6942+-0.2109            8.6239+-0.7505        
   imul-int-only                                      9.9823+-0.1631            9.8886+-0.1736        
   imul-mixed                                         8.2263+-0.4108     ?      8.4532+-0.3132        ? might be 1.0276x slower
   in-four-cases                                     23.5408+-1.2967           22.7229+-0.2625          might be 1.0360x faster
   in-one-case-false                                 11.2818+-0.4317     ?     11.3230+-0.1716        ?
   in-one-case-true                                  11.1762+-0.2180     ?     11.3520+-0.2820        ? might be 1.0157x slower
   in-two-cases                                      11.4252+-0.0952     ?     11.5972+-0.4166        ? might be 1.0151x slower
   indexed-properties-in-objects                      2.9386+-0.0367     !      3.1696+-0.0828        ! definitely 1.0786x slower
   infer-closure-const-then-mov-no-inline             3.9707+-0.0162     !      4.5913+-0.4841        ! definitely 1.1563x slower
   infer-closure-const-then-mov                      20.0662+-0.7732           19.8011+-0.3405          might be 1.0134x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     13.1515+-1.0753           13.0079+-0.8154          might be 1.0110x faster
   infer-closure-const-then-put-to-scope             22.1228+-0.6736           21.5544+-0.5891          might be 1.0264x faster
   infer-closure-const-then-reenter-no-inline   
                                                     56.8105+-2.5850           55.0740+-1.6806          might be 1.0315x faster
   infer-closure-const-then-reenter                  23.0161+-1.2799     ?     23.2373+-0.2649        ?
   infer-constant-global-property                     3.6643+-0.1860            3.5857+-0.1092          might be 1.0219x faster
   infer-constant-property                            2.7596+-0.0866     ?      2.8103+-0.1267        ? might be 1.0184x slower
   infer-one-time-closure-ten-vars                   12.5919+-0.2666     ?     13.0062+-0.7755        ? might be 1.0329x slower
   infer-one-time-closure-two-vars                   12.5990+-0.7363     ?     12.8025+-0.9210        ? might be 1.0162x slower
   infer-one-time-closure                            12.3515+-0.7743     ?     12.8923+-1.0654        ? might be 1.0438x slower
   infer-one-time-deep-closure                       21.3260+-1.0696     ?     21.9395+-1.1716        ? might be 1.0288x slower
   inline-arguments-access                            4.4963+-0.3298            4.3958+-0.0842          might be 1.0229x faster
   inline-arguments-aliased-access                    4.5196+-0.3304            4.4453+-0.1837          might be 1.0167x faster
   inline-arguments-local-escape                      4.3909+-0.1384     ?      4.4279+-0.2329        ?
   inline-get-scoped-var                              4.8132+-0.1018     ?      4.9755+-0.2526        ? might be 1.0337x slower
   inlined-put-by-id-transition                      11.8921+-0.7158     ?     11.9030+-0.3108        ?
   int-or-other-abs-then-get-by-val                   5.0362+-0.0699            4.9916+-0.0100        
   int-or-other-abs-zero-then-get-by-val             19.1250+-1.7199           17.8445+-0.7941          might be 1.0718x faster
   int-or-other-add-then-get-by-val                   4.4007+-0.1034            4.3542+-0.0203          might be 1.0107x faster
   int-or-other-add                                   5.4477+-0.1156     ?      5.5089+-0.2023        ? might be 1.0112x slower
   int-or-other-div-then-get-by-val                   4.2552+-0.0369     ?      4.2854+-0.0428        ?
   int-or-other-max-then-get-by-val                   4.3778+-0.0772     ?      4.4424+-0.2245        ? might be 1.0148x slower
   int-or-other-min-then-get-by-val                   4.3628+-0.0421     ?      4.5683+-0.4145        ? might be 1.0471x slower
   int-or-other-mod-then-get-by-val                   3.9526+-0.0204     ?      4.0192+-0.1063        ? might be 1.0169x slower
   int-or-other-mul-then-get-by-val                   3.9506+-0.0356            3.9461+-0.0272        
   int-or-other-neg-then-get-by-val                   4.9621+-0.3243            4.8850+-0.1301          might be 1.0158x faster
   int-or-other-neg-zero-then-get-by-val             18.4331+-0.9600           17.8401+-0.2970          might be 1.0332x faster
   int-or-other-sub-then-get-by-val                   4.4175+-0.0284     ?      4.4535+-0.0914        ?
   int-or-other-sub                                   3.6675+-0.1194     ?      3.7567+-0.3148        ? might be 1.0243x slower
   int-overflow-local                                 4.7100+-0.3392     ?      4.7203+-0.2684        ?
   Int16Array-alloc-long-lived                       53.0855+-1.5062     ?     54.0390+-1.1558        ? might be 1.0180x slower
   Int16Array-bubble-sort-with-byteLength            20.2757+-0.5137     ^     15.8335+-0.1630        ^ definitely 1.2806x faster
   Int16Array-bubble-sort                            20.6977+-1.5178     ^     16.5044+-0.8800        ^ definitely 1.2541x faster
   Int16Array-load-int-mul                            1.6093+-0.0981            1.5074+-0.0352          might be 1.0676x faster
   Int16Array-to-Int32Array-set                      56.8641+-2.0835           53.8638+-2.7646          might be 1.0557x faster
   Int32Array-alloc-large                            24.3234+-0.5300           24.0205+-0.3998          might be 1.0126x faster
   Int32Array-alloc-long-lived                       64.2209+-2.0207           63.3881+-1.2789          might be 1.0131x faster
   Int32Array-alloc                                   3.4843+-0.3063            3.3528+-0.1334          might be 1.0392x faster
   Int32Array-Int8Array-view-alloc                    6.8088+-0.7801     ?      7.0131+-0.8868        ? might be 1.0300x slower
   int52-spill                                        5.6659+-0.1405            5.6159+-0.6383        
   Int8Array-alloc-long-lived                        48.6840+-1.4842     ?     49.4736+-2.3957        ? might be 1.0162x slower
   Int8Array-load-with-byteLength                     3.6733+-0.3868            3.3708+-0.0459          might be 1.0898x faster
   Int8Array-load                                     3.3730+-0.0448     ?      3.4354+-0.1293        ? might be 1.0185x slower
   integer-divide                                    10.9601+-0.1536     ?     11.0705+-0.1326        ? might be 1.0101x slower
   integer-modulo                                     2.2535+-0.2249            2.1164+-0.0822          might be 1.0648x faster
   is-boolean-fold-tricky                             4.6072+-0.2544            4.5149+-0.1948          might be 1.0205x faster
   is-boolean-fold                                    2.9569+-0.1541            2.9435+-0.1213        
   is-function-fold-tricky-internal-function   
                                                     12.1052+-0.1060           12.0088+-0.2362        
   is-function-fold-tricky                            4.7812+-0.3185            4.7007+-0.1172          might be 1.0171x faster
   is-function-fold                                   2.8813+-0.0530     ?      2.9418+-0.0951        ? might be 1.0210x slower
   is-number-fold-tricky                              4.4711+-0.0508     ?      4.4825+-0.0751        ?
   is-number-fold                                     2.9513+-0.1176            2.8931+-0.1279          might be 1.0201x faster
   is-object-or-null-fold-functions                   2.9494+-0.0630     ?      3.0299+-0.1397        ? might be 1.0273x slower
   is-object-or-null-fold-less-tricky                 4.7859+-0.5558            4.6829+-0.3717          might be 1.0220x faster
   is-object-or-null-fold-tricky                      6.6710+-0.1639     ?      6.8134+-0.2398        ? might be 1.0213x slower
   is-object-or-null-fold                             2.9689+-0.1559            2.9112+-0.0392          might be 1.0198x faster
   is-object-or-null-trickier-function                4.5975+-0.0199     ?      4.6213+-0.0578        ?
   is-object-or-null-trickier-internal-function   
                                                     12.5915+-0.3019     ?     12.7368+-0.1211        ? might be 1.0115x slower
   is-object-or-null-tricky-function                  4.6618+-0.1000     ?      4.7439+-0.2329        ? might be 1.0176x slower
   is-object-or-null-tricky-internal-function   
                                                      9.2953+-0.1329     ?      9.3736+-0.1415        ?
   is-string-fold-tricky                              4.4848+-0.0505     ?      4.6975+-0.3056        ? might be 1.0474x slower
   is-string-fold                                     2.8922+-0.0682     ?      2.9178+-0.1238        ?
   is-undefined-fold-tricky                           3.7618+-0.0329     ?      3.8999+-0.1929        ? might be 1.0367x slower
   is-undefined-fold                                  2.9103+-0.0932     ?      2.9685+-0.1292        ? might be 1.0200x slower
   large-int-captured                                 4.6919+-0.2234     ?      4.7647+-0.1007        ? might be 1.0155x slower
   large-int-neg                                     17.4164+-1.3340           17.2292+-1.7193          might be 1.0109x faster
   large-int                                         16.3160+-1.7241           15.0413+-0.3826          might be 1.0847x faster
   load-varargs-elimination                          23.0845+-0.3773     ?     23.9302+-1.9131        ? might be 1.0366x slower
   logical-not-weird-types                            3.5027+-0.1000            3.4358+-0.0371          might be 1.0195x faster
   logical-not                                        4.7383+-0.0761            4.7196+-0.1211        
   lots-of-fields                                    12.0102+-0.2783     ?     12.4755+-0.5081        ? might be 1.0387x slower
   make-indexed-storage                               3.2052+-0.0566            3.1512+-0.0598          might be 1.0171x faster
   make-rope-cse                                     12.6359+-1.1304     ?     13.8017+-1.2327        ? might be 1.0923x slower
   marsaglia-larger-ints                             36.5624+-0.8877     ?     36.8232+-0.8595        ?
   marsaglia-osr-entry                               23.1437+-0.6059     ?     23.5035+-1.4732        ? might be 1.0155x slower
   math-with-out-of-bounds-array-values              25.2302+-0.7472     ^     24.0509+-0.3887        ^ definitely 1.0490x faster
   max-boolean                                        2.5192+-0.0531            2.5187+-0.0458        
   method-on-number                                  18.6099+-0.2662           18.0300+-0.8806          might be 1.0322x faster
   min-boolean                                        2.5479+-0.0925     ?      2.5504+-0.0998        ?
   minus-boolean-double                               3.2247+-0.0452            3.1755+-0.0342          might be 1.0155x faster
   minus-boolean                                      2.4399+-0.1142            2.4355+-0.2259        
   misc-strict-eq                                    38.3765+-2.0020     ?     39.9556+-3.0714        ? might be 1.0411x slower
   mod-boolean-double                                10.9436+-0.0353     ?     11.1086+-0.1431        ? might be 1.0151x slower
   mod-boolean                                        7.8731+-0.0260     ?      7.9188+-0.0627        ?
   mul-boolean-double                                 3.7953+-0.0541            3.7323+-0.0769          might be 1.0169x faster
   mul-boolean                                        2.8971+-0.0230     ?      2.9403+-0.0525        ? might be 1.0149x slower
   neg-boolean                                        3.2299+-0.0431     ?      3.2428+-0.0467        ?
   negative-zero-divide                               0.4176+-0.0193            0.4078+-0.0493          might be 1.0238x faster
   negative-zero-modulo                               0.3995+-0.0307            0.3873+-0.0222          might be 1.0314x faster
   negative-zero-negate                               0.3821+-0.0288     ?      0.3896+-0.0251        ? might be 1.0197x slower
   nested-function-parsing                           39.6056+-1.8359     ?     41.9015+-2.5262        ? might be 1.0580x slower
   new-array-buffer-dead                            115.6413+-1.0790          113.4774+-2.8829          might be 1.0191x faster
   new-array-buffer-push                              7.2028+-0.9184            7.1790+-0.9169        
   new-array-dead                                    19.7540+-0.8675           19.6535+-0.4286        
   new-array-push                                     6.5706+-0.2280     ?      6.6888+-0.1152        ? might be 1.0180x slower
   no-inline-constructor                             41.4896+-1.7647           41.4545+-1.9069        
   number-test                                        3.2260+-0.2184            3.1711+-0.1030          might be 1.0173x faster
   object-closure-call                                6.0102+-0.6591            5.7353+-0.1013          might be 1.0479x faster
   object-test                                        2.8739+-0.0135     ?      2.8960+-0.0209        ?
   obvious-sink-pathology-taken                     142.0662+-3.8283     ?    142.9138+-0.6500        ?
   obvious-sink-pathology                           131.2300+-2.2354     ?    133.5909+-1.2626        ? might be 1.0180x slower
   obviously-elidable-new-object                     34.5745+-1.6824     ?     35.0348+-2.0001        ? might be 1.0133x slower
   plus-boolean-arith                                 2.5289+-0.0479     ?      2.5947+-0.1376        ? might be 1.0260x slower
   plus-boolean-double                                3.2545+-0.0458     ?      3.3408+-0.1658        ? might be 1.0265x slower
   plus-boolean                                       2.5442+-0.1815            2.4703+-0.0897          might be 1.0299x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.3705+-0.0668            3.3550+-0.0514        
   poly-chain-access-different-prototypes             2.5782+-0.0190     ?      2.6873+-0.1073        ? might be 1.0423x slower
   poly-chain-access-simpler                          3.3444+-0.0569            3.3141+-0.0528        
   poly-chain-access                                  2.6253+-0.1403            2.5925+-0.0421          might be 1.0126x faster
   poly-stricteq                                     64.5675+-2.8903           62.7793+-2.2574          might be 1.0285x faster
   polymorphic-array-call                             1.3654+-0.0831     ?      1.3757+-0.0418        ?
   polymorphic-get-by-id                              3.1881+-0.0369            3.1626+-0.0377        
   polymorphic-put-by-id                             31.1657+-2.4050     ?     33.0242+-2.9986        ? might be 1.0596x slower
   polymorphic-structure                             15.1262+-0.6822           14.7732+-0.1844          might be 1.0239x faster
   polyvariant-monomorphic-get-by-id                  8.6115+-0.1693     ?      8.6822+-0.2107        ?
   proto-getter-access                                9.3233+-0.1668            9.2735+-0.1557        
   put-by-id-replace-and-transition                   9.7245+-0.3252     ?      9.7318+-0.2561        ?
   put-by-id-slightly-polymorphic                     2.9256+-0.1979            2.8653+-0.0381          might be 1.0210x faster
   put-by-id                                         12.7977+-0.3831     ?     12.9371+-0.6515        ? might be 1.0109x slower
   put-by-val-direct                                  0.4156+-0.0546     ?      0.4202+-0.0621        ? might be 1.0110x slower
   put-by-val-large-index-blank-indexing-type   
                                                     12.8735+-1.4777           12.4545+-1.0238          might be 1.0336x faster
   put-by-val-machine-int                             2.8578+-0.0510            2.8532+-0.0772        
   rare-osr-exit-on-local                            15.1293+-0.8831           14.9592+-0.2221          might be 1.0114x faster
   register-pressure-from-osr                        22.0940+-1.1368           21.4066+-0.1723          might be 1.0321x faster
   repeat-multi-get-by-offset                        24.7769+-0.5270     ?     24.9869+-1.2387        ?
   setter-prototype                                  10.7756+-0.5646           10.3408+-0.2578          might be 1.0420x faster
   setter                                             6.4272+-0.6087            6.0461+-0.8105          might be 1.0630x faster
   simple-activation-demo                            26.1675+-1.6006           25.3679+-0.0909          might be 1.0315x faster
   simple-getter-access                              11.6413+-0.1959     ?     12.0388+-0.5057        ? might be 1.0341x slower
   simple-poly-call-nested                            8.1929+-0.1404     ?      8.2848+-0.3160        ? might be 1.0112x slower
   simple-poly-call                                   1.3306+-0.0197            1.3275+-0.0150        
   sin-boolean                                       23.0531+-0.8890     ?     23.5378+-1.4342        ? might be 1.0210x slower
   singleton-scope                                   62.4755+-0.5823           62.3252+-0.4383        
   sink-function                                     11.9483+-0.5913           11.4709+-0.3051          might be 1.0416x faster
   sink-huge-activation                              19.0968+-0.4666     ?     19.6622+-1.1697        ? might be 1.0296x slower
   sinkable-new-object-dag                           69.3654+-1.6685     ?     72.2611+-3.4394        ? might be 1.0417x slower
   sinkable-new-object-taken                         52.6157+-2.1783     ?     53.8029+-2.3903        ? might be 1.0226x slower
   sinkable-new-object                               38.4804+-1.0714     ?     39.3876+-2.0001        ? might be 1.0236x slower
   slow-array-profile-convergence                     3.0564+-0.3626            2.8841+-0.1559          might be 1.0597x faster
   slow-convergence                                   2.7940+-0.1046     ?      2.8886+-0.3572        ? might be 1.0338x slower
   slow-ternaries                                    21.1374+-2.2417     ?     21.9553+-3.8604        ? might be 1.0387x slower
   sorting-benchmark                                 19.4988+-1.1274           19.3558+-2.1198        
   sparse-conditional                                 1.1905+-0.0398     ?      1.2417+-0.0753        ? might be 1.0430x slower
   splice-to-remove                                  15.3677+-0.7446           15.0920+-0.1888          might be 1.0183x faster
   string-char-code-at                               16.3259+-0.2594           16.1285+-0.1281          might be 1.0122x faster
   string-concat-object                               2.6724+-0.3609            2.5131+-0.1035          might be 1.0634x faster
   string-concat-pair-object                          2.4733+-0.0876     ?      2.5082+-0.1148        ? might be 1.0141x slower
   string-concat-pair-simple                         12.5156+-1.0503     ?     12.6041+-1.0514        ?
   string-concat-simple                              13.0330+-1.4362           12.3118+-1.0451          might be 1.0586x faster
   string-cons-repeat                                 8.6525+-0.9279     ?      8.8453+-0.9191        ? might be 1.0223x slower
   string-cons-tower                                  8.3058+-0.9019     ?      8.3438+-0.9312        ?
   string-equality                                   18.5274+-0.5978           18.0775+-0.6984          might be 1.0249x faster
   string-get-by-val-big-char                         7.7325+-1.1912            7.2164+-0.0508          might be 1.0715x faster
   string-get-by-val-out-of-bounds-insane             3.7172+-0.1112     ?      3.7803+-0.0485        ? might be 1.0170x slower
   string-get-by-val-out-of-bounds                    5.3929+-0.0322     ?      5.4357+-0.1438        ?
   string-get-by-val                                  3.4978+-0.1642            3.4891+-0.0693        
   string-hash                                        2.2407+-0.2532            2.1108+-0.0609          might be 1.0615x faster
   string-long-ident-equality                        15.0696+-0.2651           14.9672+-0.1593        
   string-out-of-bounds                              15.2966+-0.8476           14.9972+-0.2842          might be 1.0200x faster
   string-repeat-arith                               33.6455+-1.8277     ?     36.1458+-1.6684        ? might be 1.0743x slower
   string-sub                                        65.9492+-3.3752     ?     69.6652+-5.1862        ? might be 1.0563x slower
   string-test                                        3.0201+-0.0676            3.0023+-0.0536        
   string-var-equality                               35.1777+-1.2960     ?     35.5000+-1.6534        ?
   structure-hoist-over-transitions                   2.8464+-0.3144            2.7013+-0.1285          might be 1.0537x faster
   substring-concat-weird                            42.1429+-1.5862     ?     42.3613+-1.2920        ?
   substring-concat                                  44.4506+-0.6594     ?     45.2700+-1.7799        ? might be 1.0184x slower
   substring                                         50.9342+-1.9239           48.7130+-0.9766          might be 1.0456x faster
   switch-char-constant                               2.8702+-0.2039            2.8126+-0.0924          might be 1.0205x faster
   switch-char                                        7.1647+-0.9895            6.8535+-0.7762          might be 1.0454x faster
   switch-constant                                    8.0011+-0.1447     ?      8.2594+-0.2242        ? might be 1.0323x slower
   switch-string-basic-big-var                       18.5733+-0.4846     ?     18.7262+-0.7000        ?
   switch-string-basic-big                           15.1267+-0.2544           14.8735+-0.1081          might be 1.0170x faster
   switch-string-basic-var                           15.2437+-0.5006     ?     15.2782+-0.4442        ?
   switch-string-basic                               13.8925+-0.2909     ?     14.0035+-0.3449        ?
   switch-string-big-length-tower-var                22.0644+-4.4160           20.6120+-0.2261          might be 1.0705x faster
   switch-string-length-tower-var                    16.2492+-1.6432           15.7633+-0.3332          might be 1.0308x faster
   switch-string-length-tower                        13.7802+-1.1728           13.1676+-0.1901          might be 1.0465x faster
   switch-string-short                               13.4786+-1.0207           13.1995+-0.2405          might be 1.0211x faster
   switch                                            11.9593+-0.1626     !     12.3039+-0.1797        ! definitely 1.0288x slower
   tear-off-arguments-simple                          3.5521+-0.3023            3.4054+-0.0293          might be 1.0431x faster
   tear-off-arguments                                 4.6705+-0.1952            4.6121+-0.0720          might be 1.0126x faster
   temporal-structure                                12.2968+-0.2986     ?     12.3464+-0.1411        ?
   to-int32-boolean                                  14.3273+-1.0445           14.3192+-0.2811        
   try-catch-get-by-val-cloned-arguments             14.2920+-0.2109     !     14.9113+-0.2812        ! definitely 1.0433x slower
   try-catch-get-by-val-direct-arguments              6.4448+-0.1721     ?      6.8330+-0.9406        ? might be 1.0602x slower
   try-catch-get-by-val-scoped-arguments              8.6464+-1.3469            7.6858+-0.6264          might be 1.1250x faster
   typed-array-get-set-by-val-profiling              28.5802+-0.7759           27.8738+-0.6227          might be 1.0253x faster
   undefined-property-access                        348.4008+-14.9946         346.1859+-4.6793        
   undefined-test                                     3.1840+-0.1294            3.1286+-0.0957          might be 1.0177x faster
   unprofiled-licm                                   22.7118+-0.1355     ?     23.3580+-0.8449        ? might be 1.0285x slower
   varargs-call                                      15.2708+-0.8350     ?     15.3372+-0.8999        ?
   varargs-construct-inline                          28.5618+-1.2666           28.1510+-1.4714          might be 1.0146x faster
   varargs-construct                                 22.2691+-0.6037     ?     22.4684+-0.3555        ?
   varargs-inline                                     9.4354+-0.1684     ?      9.7201+-0.7012        ? might be 1.0302x slower
   varargs-strict-mode                               10.3371+-0.3616           10.1779+-0.1281          might be 1.0156x faster
   varargs                                           10.1707+-0.3064           10.0124+-0.0636          might be 1.0158x faster
   weird-inlining-const-prop                          3.2585+-0.1974            3.2266+-0.1422        

   &lt;geometric&gt;                                        9.1972+-0.0262     ?      9.1992+-0.0484        ? might be 1.0002x slower

                                                        TipOfTree                KillFragile                                    
AsmBench:
   bigfib.cpp                                       503.1381+-1.9663          503.0874+-1.8400        
   cray.c                                           434.1497+-6.7057          432.7891+-3.5702        
   dry.c                                            497.1062+-24.3499         484.9703+-7.7320          might be 1.0250x faster
   FloatMM.c                                        722.3258+-1.1890     ?    722.7931+-2.9430        ?
   gcc-loops.cpp                                   4100.3635+-10.6698    ?   4107.5069+-19.2818       ?
   n-body.c                                         975.2502+-6.9370          975.1615+-4.3094        
   Quicksort.c                                      424.3606+-5.9779     ?    425.5798+-8.5908        ?
   stepanov_container.cpp                          3630.8795+-47.4893    ?   3905.0840+-788.0100      ? might be 1.0755x slower
   Towers.c                                         258.9187+-5.4771          256.1815+-0.3897          might be 1.0107x faster

   &lt;geometric&gt;                                      793.6923+-5.5677     ?    796.2095+-15.3297       ? might be 1.0032x slower

                                                        TipOfTree                KillFragile                                    
CompressionBench:
   huffman                                          256.2840+-2.5448          254.4128+-4.0414        
   arithmetic-simple                                339.6688+-4.6325          336.7405+-3.1863        
   arithmetic-precise                               280.3256+-8.5690     ?    284.9015+-13.2448       ? might be 1.0163x slower
   arithmetic-complex-precise                       274.5852+-1.6576     ?    277.4342+-3.3463        ? might be 1.0104x slower
   arithmetic-precise-order-0                       347.9025+-4.5894          346.2756+-3.9645        
   arithmetic-precise-order-1                       334.8490+-13.0501    ?    337.6881+-18.4019       ?
   arithmetic-precise-order-2                       368.3077+-6.3634     ?    378.2010+-29.0458       ? might be 1.0269x slower
   arithmetic-simple-order-1                        398.8512+-6.0499     ?    401.0932+-2.3577        ?
   arithmetic-simple-order-2                        452.5039+-23.8773    ?    467.1750+-30.7293       ? might be 1.0324x slower
   lz-string                                        349.5501+-27.4781         334.9349+-55.5408         might be 1.0436x faster

   &lt;geometric&gt;                                      335.5017+-4.9465     ?    336.4103+-8.6828        ? might be 1.0027x slower

                                                        TipOfTree                KillFragile                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   61.4454+-0.1858     ?     61.8571+-0.6300        ? might be 1.0067x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1106920</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-04 20:07:18 -0700</bug_when>
    <thetext>And the second report.  The &quot;maybe slower&quot; results on SunSpider, Octane, and Kraken scared me so I ran those for more samples.  It doesn&apos;t seem to be a real slow-down.


Benchmark report for SunSpider, Octane, and Kraken on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r186271)
&quot;KillFragile&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r186271)

Collected 10 samples per benchmark/VM, with 10 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                KillFragile                                    
SunSpider:
   3d-cube                                    5.1293+-0.0442     ?      5.2465+-0.1316        ? might be 1.0228x slower
   3d-morph                                   5.7951+-0.1085            5.7557+-0.0958        
   3d-raytrace                                6.4439+-0.0407     ?      6.4597+-0.0772        ?
   access-binary-trees                        2.4223+-0.0786            2.3714+-0.0344          might be 1.0215x faster
   access-fannkuch                            6.1557+-0.0517     ?      6.1691+-0.0474        ?
   access-nbody                               2.9227+-0.0792     ?      2.9714+-0.1578        ? might be 1.0167x slower
   access-nsieve                              3.4820+-0.0585            3.4099+-0.0321          might be 1.0211x faster
   bitops-3bit-bits-in-byte                   1.6385+-0.0484            1.6215+-0.0379          might be 1.0104x faster
   bitops-bits-in-byte                        3.8623+-0.1720            3.7648+-0.1152          might be 1.0259x faster
   bitops-bitwise-and                         2.1984+-0.0722            2.1878+-0.0657        
   bitops-nsieve-bits                         3.3171+-0.1228            3.2506+-0.0244          might be 1.0205x faster
   controlflow-recursive                      2.9163+-0.1943     ?      2.9672+-0.0932        ? might be 1.0174x slower
   crypto-aes                                 4.5993+-0.1610     ?      4.6437+-0.1389        ?
   crypto-md5                                 2.7903+-0.0624            2.7326+-0.0574          might be 1.0211x faster
   crypto-sha1                                3.8042+-0.1603     ?      3.9509+-0.2498        ? might be 1.0386x slower
   date-format-tofte                          9.3351+-0.1104     ?      9.3712+-0.0750        ?
   date-format-xparb                          5.5909+-0.1190     ?      5.6083+-0.0934        ?
   math-cordic                                3.0812+-0.0445     ?      3.1395+-0.0605        ? might be 1.0189x slower
   math-partial-sums                          5.5950+-0.4002            5.4566+-0.1468          might be 1.0254x faster
   math-spectral-norm                         2.0889+-0.0652     ?      2.1359+-0.0836        ? might be 1.0225x slower
   regexp-dna                                 7.7418+-0.4260     ?      7.8222+-0.5664        ? might be 1.0104x slower
   string-base64                              5.2304+-0.4408     ?      5.3036+-0.4575        ? might be 1.0140x slower
   string-fasta                               6.7334+-0.0883            6.6701+-0.0430        
   string-tagcloud                           10.2324+-0.4026     ?     10.4727+-0.4453        ? might be 1.0235x slower
   string-unpack-code                        20.7005+-0.5495     ?     21.0774+-0.9380        ? might be 1.0182x slower
   string-validate-input                      5.8569+-0.0840     !      6.0503+-0.0925        ! definitely 1.0330x slower

   &lt;arithmetic&gt;                               5.3717+-0.0415     ?      5.4081+-0.0586        ? might be 1.0068x slower

                                                TipOfTree                KillFragile                                    
Octane:
   encrypt                                   0.19896+-0.00378          0.19717+-0.00218       
   decrypt                                   3.29929+-0.01251    ?     3.31996+-0.03442       ?
   deltablue                        x2       0.18825+-0.00115    ?     0.18925+-0.00104       ?
   earley                                    0.35339+-0.01600          0.34733+-0.00190         might be 1.0174x faster
   boyer                                     5.10765+-0.02175    ?     5.15394+-0.14331       ?
   navier-stokes                    x2       5.14554+-0.01582          5.14547+-0.02716       
   raytrace                         x2       1.29973+-0.03262    ?     1.30358+-0.02636       ?
   richards                         x2       0.12794+-0.00127    ?     0.12863+-0.00123       ?
   splay                            x2       0.40407+-0.00270    ^     0.39805+-0.00174       ^ definitely 1.0151x faster
   regexp                           x2      29.01224+-0.18441    !    29.50007+-0.29002       ! definitely 1.0168x slower
   pdfjs                            x2      43.40926+-0.29495         43.12008+-0.33860       
   mandreel                         x2      50.55601+-0.22013    ?    50.78135+-0.14937       ?
   gbemu                            x2      43.60232+-1.74862         43.07001+-1.49889         might be 1.0124x faster
   closure                                   0.63105+-0.00419    ^     0.62312+-0.00365       ^ definitely 1.0127x faster
   jquery                                    8.14471+-0.06003          8.07440+-0.07629       
   box2d                            x2      11.92097+-0.03301         11.87842+-0.06024       
   zlib                             x2     405.13209+-2.40868        400.24526+-8.69643         might be 1.0122x faster
   typescript                       x2     820.05754+-9.74306    ?   830.07786+-8.68243       ? might be 1.0122x slower

   &lt;geometric&gt;                               6.55202+-0.02877          6.54404+-0.02757         might be 1.0012x faster

                                                TipOfTree                KillFragile                                    
Kraken:
   ai-astar                                  224.504+-3.281      ?     225.628+-2.848         ?
   audio-beat-detection                       83.596+-0.915             82.752+-0.976           might be 1.0102x faster
   audio-dft                                 121.407+-3.316            120.299+-2.357         
   audio-fft                                  70.585+-1.219             70.039+-2.274         
   audio-oscillator                           77.222+-1.221      ?      78.095+-1.136         ? might be 1.0113x slower
   imaging-darkroom                          106.485+-1.919            105.591+-1.560         
   imaging-desaturate                         61.390+-0.907      ?      62.295+-1.916         ? might be 1.0147x slower
   imaging-gaussian-blur                     109.364+-1.520      ?     110.620+-2.804         ? might be 1.0115x slower
   json-parse-financial                       48.934+-1.483      ?      49.555+-1.825         ? might be 1.0127x slower
   json-stringify-tinderbox                   29.925+-1.187             29.185+-1.148           might be 1.0254x faster
   stanford-crypto-aes                        59.159+-1.897             58.974+-0.538         
   stanford-crypto-ccm                        49.101+-0.873      ?      50.762+-2.074         ? might be 1.0338x slower
   stanford-crypto-pbkdf2                    105.320+-0.966      !     108.326+-1.856         ! definitely 1.0285x slower
   stanford-crypto-sha256-iterative           42.899+-1.254             42.317+-1.269           might be 1.0137x faster

   &lt;arithmetic&gt;                               84.992+-0.691      ?      85.317+-0.613         ? might be 1.0038x slower

                                                TipOfTree                KillFragile                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                           14.4082+-0.0639     ?     14.4531+-0.0731        ? might be 1.0031x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1107504</commentid>
    <comment_count>10</comment_count>
      <attachid>256165</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-07-07 11:40:41 -0700</bug_when>
    <thetext>Comment on attachment 256165
probably done

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

r=me with fixes.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        found at least one case where the compiler did use the value, but never strengthene

typo: strengthene ==&gt; strengthened

&gt; Source/JavaScriptCore/ChangeLog:47
&gt; +        inside the loop, which is both efficient (yay constant folding!) and necesary

typo: necesary ==&gt; necessary

&gt; Source/JavaScriptCore/dfg/DFGFrozenValue.h:94
&gt; +    // The strength of the value itself. The structure is almost always weak.

By &quot;The structure is almost always weak”, did you mean &quot;The strength is almost always weak”?

&gt; Source/JavaScriptCore/dfg/DFGValidate.cpp:257
&gt; +                case JSConstant:
&gt; +                    VALIDATE((node), !node-&gt;constant()-&gt;pointsToHeap() || node-&gt;constant()-&gt;strength() &gt;= WeakValue);
&gt; +                    break;

Is this still meaningful?  All DFGValueStrength values are &gt;= WeakValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108706</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-07-10 12:10:43 -0700</bug_when>
    <thetext>&lt;rdar://problem/21771059&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108767</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-10 14:19:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Comment on attachment 256165 [details]
&gt; probably done
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=256165&amp;action=review
&gt; 
&gt; r=me with fixes.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:16
&gt; &gt; +        found at least one case where the compiler did use the value, but never strengthene
&gt; 
&gt; typo: strengthene ==&gt; strengthened

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:47
&gt; &gt; +        inside the loop, which is both efficient (yay constant folding!) and necesary
&gt; 
&gt; typo: necesary ==&gt; necessary

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGFrozenValue.h:94
&gt; &gt; +    // The strength of the value itself. The structure is almost always weak.
&gt; 
&gt; By &quot;The structure is almost always weak”, did you mean &quot;The strength is
&gt; almost always weak”?

No, I meant structure.  A frozen value is a tuple that contains the value itself and the value&apos;s structure.  The strength() method returns the strength of the value itself.  The structure, on the other hand, has a strength that is selected by a different mechanism, and it&apos;s almost always weak.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGValidate.cpp:257
&gt; &gt; +                case JSConstant:
&gt; &gt; +                    VALIDATE((node), !node-&gt;constant()-&gt;pointsToHeap() || node-&gt;constant()-&gt;strength() &gt;= WeakValue);
&gt; &gt; +                    break;
&gt; 
&gt; Is this still meaningful?  All DFGValueStrength values are &gt;= WeakValue.

Nope, not meaningful.  I removed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108769</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-10 14:21:32 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/186691</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256137</attachid>
            <date>2015-07-03 23:10:45 -0700</date>
            <delta_ts>2015-07-04 12:46:39 -0700</delta_ts>
            <desc>work towards finding the issue</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13804</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lv
biAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDYgKzE0OSw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcykt
Pm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgY29uc3QgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2Fz
dDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQogICAgIAogICAgIGJvb2wg
aGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg5LDYgKzg5LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9zdHJlbmd0aCA9IG1lcmdlKG1f
c3RyZW5ndGgsIHN0cmVuZ3RoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBwb2ludHNUb0hlYXAo
KSBjb25zdCB7IHJldHVybiAhIXZhbHVlKCkgJiYgdmFsdWUoKS5pc0NlbGwoKTsgfQorICAgIAog
ICAgIC8vIFRoZSBzdHJlbmd0aCBvZiB0aGUgdmFsdWUgaXRzZWxmLiBUaGUgc3RydWN0dXJlIHNo
b3VsZCBiZSB2aWV3ZWQgYXMgZnJhZ2lsZQogICAgIC8vIGV4Y2VwdCBpZiBpdCBpcyB3YXRjaGVk
LCBpbiB3aGljaCBjYXNlIGl0J3Mgd2Vhay4gTm90ZSB0aGF0IGN1cnJlbnRseSB3ZQogICAgIC8v
IHdhdGNoIGFsbCB3YXRjaGFibGUgc3RydWN0dXJlcyBpbmRpc2NyaW1pbmFudGx5LCBhbmQgc28g
d2UgYWxzbyBtYXJrIHRoZW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI5LDYgKzUyOSwxMiBAQCB2b2lkIEdyYXBoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAg
ICB9CiAgICAgCisgICAgb3V0LnByaW50KCJHQyBWYWx1ZXM6XG4iKTsKKyAgICBmb3IgKEZyb3pl
blZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZS0+cG9p
bnRzVG9IZWFwKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbkNvbnRleHQoKnZh
bHVlLCAmbXlDb250ZXh0KSwgIlxuIik7CisgICAgfQorICAgIAogICAgIGlmICghbXlDb250ZXh0
LmlzRW1wdHkoKSkgewogICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOwogICAgICAgICBvdXQu
cHJpbnQoIlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw2ICs0NzUsNTQgQEAg
dm9pZCogSklUQ29tcGlsZXI6OmFkZHJlc3NPZkRvdWJsZUNvbnN0YQogfQogI2VuZGlmCiAKK3Zv
aWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJ
VENvbXBpbGVyOjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7Cisg
ICAgLy8gT1NSIGVudHJ5IGlzIG5vdCBhbGxvd2VkIGludG8gYmxvY2tzIGRlZW1lZCB1bnJlYWNo
YWJsZSBieSBjb250cm9sIGZsb3cgYW5hbHlzaXMuCisgICAgaWYgKCFiYXNpY0Jsb2NrLmludGVy
c2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBP
U1JFbnRyeURhdGEqIGVudHJ5ID0gbV9qaXRDb2RlLT5hcHBlbmRPU1JFbnRyeURhdGEoYmFzaWNC
bG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLm9mZnNldE9mKGJsb2NrSGVhZCkpOworICAg
IAorICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay5pbnRlcnNlY3Rpb25P
ZlBhc3RWYWx1ZXNBdEhlYWQ7CisgICAgICAgIAorICAgIC8vIEZpeCB0aGUgZXhwZWN0ZWQgdmFs
dWVzOiBpbiBvdXIgcHJvdG9jb2wsIGEgZGVhZCB2YXJpYWJsZSB3aWxsIGhhdmUgYW4gZXhwZWN0
ZWQKKyAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBCdXQgdGhlIG9sZCBKSVQgbWF5IHN0YXNo
IHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkKKyAgICAvLyBuZWVkIChUb3AsIFRPUCku
CisgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJhc2ljQmxvY2sudmFy
aWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50
KTsKKyAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLm1ha2VIZWFw
VG9wKCk7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Js
b2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAg
IE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7Cisg
ICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5tYWtlSGVhcFRvcCgpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIGVudHJ5LT5tX21hY2hpbmVT
dGFja1VzZWQuc2V0KHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS50b0xvY2FsKCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkg
eworICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAgICAgIGVudHJ5
LT5tX2xvY2Fsc0ZvcmNlZERvdWJsZS5zZXQobG9jYWwpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICAgICAgZW50cnkt
Pm1fbG9jYWxzRm9yY2VkTWFjaGluZUludC5zZXQobG9jYWwpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgp
ICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5t
X3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgIE9TUkVudHJ5UmVzaHVm
ZmxpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQo
KSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5zaHJp
bmtUb0ZpdCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjUsNTMg
KzI2NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIHZvaWQgbm90aWNlT1NSRW50
cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwg
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikKLSAgICB7Ci0gICAgICAgIC8vIE9TUiBlbnRyeSBpcyBu
b3QgYWxsb3dlZCBpbnRvIGJsb2NrcyBkZWVtZWQgdW5yZWFjaGFibGUgYnkgY29udHJvbCBmbG93
IGFuYWx5c2lzLgotICAgICAgICBpZiAoIWJhc2ljQmxvY2suaW50ZXJzZWN0aW9uT2ZDRkFIYXNW
aXNpdGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgT1NSRW50cnlE
YXRhKiBlbnRyeSA9IG1faml0Q29kZS0+YXBwZW5kT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0
ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5vZmZzZXRPZihibG9ja0hlYWQpKTsKLSAgICAgICAgCi0g
ICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay5pbnRlcnNlY3Rpb25P
ZlBhc3RWYWx1ZXNBdEhlYWQ7Ci0gICAgICAgIAotICAgICAgICAvLyBGaXggdGhlIGV4cGVjdGVk
IHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFibGUgd2lsbCBoYXZlIGFuIGV4
cGVjdGVkCi0gICAgICAgIC8vIHZhbHVlIG9mIChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJVCBt
YXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUuIFNvIHdlIHJlYWxseQotICAgICAgICAvLyBuZWVk
IChUb3AsIFRPUCkuCi0gICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3Vt
ZW50KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhl
YWQuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVz
LmFyZ3VtZW50KGFyZ3VtZW50KS5tYWtlSGVhcFRvcCgpOwotICAgICAgICB9Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmFz
aWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwotICAgICAgICAgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIGVudHJ5LT5t
X2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5tYWtlSGVhcFRvcCgpOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgIGVudHJ5LT5tX21hY2hp
bmVTdGFja1VzZWQuc2V0KHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS50b0xvY2FsKCkpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNoRm9y
bWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAg
ICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJsZS5zZXQobG9jYWwpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjoK
LSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbG9jYWxzRm9yY2VkTWFjaGluZUludC5zZXQo
bG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5sb2NhbCgpICE9IHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9y
ZXNodWZmbGluZ3MuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgT1NSRW50cnlSZXNo
dWZmbGluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bG9jYWwoKS5v
ZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBlbnRy
eS0+bV9yZXNodWZmbGluZ3Muc2hyaW5rVG9GaXQoKTsKLSAgICB9CisgICAgdm9pZCBub3RpY2VP
U1JFbnRyeShCYXNpY0Jsb2NrJiwgSklUQ29tcGlsZXI6OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1
ZmZlciYpOwogICAgIAogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlKCkgeyByZXR1cm4gbV9q
aXRDb2RlOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVu
dHJ5LmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1
LDkgKzM1LDYxIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdGFja0lubGluZXMu
aCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQgT1NSRW50cnlEYXRh
OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRlY29kZUluZGV4LCAiLCBtYWNoaW5l
IGNvZGUgb2Zmc2V0ID0gIiwgbV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgb3V0LnByaW50KCIs
IHN0YWNrIHJ1bGVzID0gWyIpOworICAgIAorICAgIGF1dG8gcHJpbnRPcGVyYW5kID0gWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBl
Y3RlZFZhbHVlcy5vcGVyYW5kKHJlZyksIGNvbnRleHQpLCAiICgiKTsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHRvUmVnOworICAgICAgICBib29sIG92ZXJ3cml0dGVuID0gZmFsc2U7CisgICAg
ICAgIGZvciAoT1NSRW50cnlSZXNodWZmbGluZyByZXNodWZmbGluZyA6IG1fcmVzaHVmZmxpbmdz
KSB7CisgICAgICAgICAgICBpZiAocmVnID09IFZpcnR1YWxSZWdpc3RlcihyZXNodWZmbGluZy5m
cm9tT2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIHRvUmVnID0gVmlydHVhbFJlZ2lzdGVyKHJl
c2h1ZmZsaW5nLnRvT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChyZWcgPT0gVmlydHVhbFJlZ2lzdGVyKHJlc2h1ZmZsaW5nLnRv
T2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBvdmVyd3JpdHRlbiA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFvdmVyd3JpdHRlbiAmJiAhdG9SZWcuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgdG9SZWcgPSByZWc7CisgICAgICAgIGlmICh0b1JlZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAg
ICAgIGlmICh0b1JlZy5pc0xvY2FsKCkgJiYgIW1fbWFjaGluZVN0YWNrVXNlZC5nZXQodG9SZWcu
dG9Mb2NhbCgpKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoImlnbm9yZWQiKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIm1hcHMgdG8gIiwgdG9SZWcp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgib3ZlcndyaXR0ZW4iKTsK
KyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgbV9sb2NhbHNGb3JjZWREb3VibGUuZ2V0KHJl
Zy50b0xvY2FsKCkpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIGZvcmNlZCBkb3VibGUiKTsK
KyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgbV9sb2NhbHNGb3JjZWRNYWNoaW5lSW50Lmdl
dChyZWcudG9Mb2NhbCgpKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCBmb3JjZWQgbWFjaGlu
ZSBpbnQiKTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgfTsKKyAgICAKKyAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG1fZXhwZWN0
ZWRWYWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgeworICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIpOworICAgICAgICBw
cmludE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCkpOwor
ICAgIH0KKyAgICBmb3IgKHNpemVfdCBsb2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8IG1fZXhw
ZWN0ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbEluZGV4KSB7CisgICAgICAgIG91
dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6Iik7CisgICAgICAgIHByaW50T3Bl
cmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbEluZGV4KSk7CisgICAgfQorICAgIAor
ICAgIG91dC5wcmludCgiXSwgbWFjaGluZSBzdGFjayB1c2VkID0gIiwgbV9tYWNoaW5lU3RhY2tV
c2VkKTsKK30KKwordm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKIHZvaWQqIHByZXBh
cmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
Y29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNiArNjAsOSBA
QCBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICBCaXRWZWN0b3IgbV9sb2NhbHNGb3JjZWRNYWNo
aW5lSW50OwogICAgIFZlY3RvcjxPU1JFbnRyeVJlc2h1ZmZsaW5nPiBtX3Jlc2h1ZmZsaW5nczsK
ICAgICBCaXRWZWN0b3IgbV9tYWNoaW5lU3RhY2tVc2VkOworICAgIAorICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlE
YXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzMSw2ICsxNjMxLDE1IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmsKICAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnko
KmJsb2NrLCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CiAg
ICAgfQogICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5zaXplKCkp
OworICAgIAorICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAg
RHVtcENvbnRleHQgZHVtcENvbnRleHQ7CisgICAgICAgIGRhdGFMb2coIk9TUiBFbnRyaWVzOlxu
Iik7CisgICAgICAgIGZvciAoT1NSRW50cnlEYXRhJiBlbnRyeURhdGEgOiBtX2ppdC5qaXRDb2Rl
KCktPm9zckVudHJ5KQorICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIGluQ29udGV4dChlbnRy
eURhdGEsICZkdW1wQ29udGV4dCksICJcbiIpOworICAgICAgICBpZiAoIWR1bXBDb250ZXh0Lmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGR1bXBDb250ZXh0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsK
KyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbChO
b2RlKiBub2RlLCBTcGVjdWxhdGVDZWxsT3BlcmFuZCYgYmFzZSwgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kJiBwcm9wZXJ0eSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1MiwxMyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICFub2RlLT5jb25zdGFudCgpLT5wb2ludHNUb0hlYXAoKSB8fCBub2RlLT5jb25zdGFudCgpLT5z
dHJlbmd0aCgpID49IFdlYWtWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBJ
bnQ1MkNvbnN0YW50OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUt
PmlzTnVtYmVyQ29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1v
c3ItZW50cnktdmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9kZWFkLW9zci1lbnRyeS12YWx1ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1vc3ItZW50cnktdmFsdWUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBv
ID0ge2Y6NDJ9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIE9TUkV4aXQoKTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgaWYgKCFERkdUcnVlKCkpCisg
ICAgICAgICAgICByZXN1bHQgKz0gby5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIGZvbygpOworICAgIGZ1bGxH
QygpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256156</attachid>
            <date>2015-07-04 12:46:39 -0700</date>
            <delta_ts>2015-07-04 13:14:38 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26045</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgwMSw2ICsyODAxLDEzIEBAIHZvaWQgQ29kZUJs
b2NrOjpzdHJvbmdseVZpc2l0U3Ryb25nUmVmZXIKIAogI2lmIEVOQUJMRShERkdfSklUKQogICAg
IGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgeworICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhbiBhbnRpcGF0dGVybiBmb3IgdHdvIHJlYXNvbnMuIFJlZmVyZW5jZXMg
aW50cm9kdWNlZCBieSB0aGUgREZHCisgICAgICAgIC8vIHRoYXQgYXJlbid0IGluIHRoZSBvcmln
aW5hbCBDb2RlQmxvY2sgYmVpbmcgY29tcGlsZWQgc2hvdWxkIGJlIHdlYWtseSByZWZlcmVuY2Vk
LgorICAgICAgICAvLyBJbmxpbmUgY2FsbCBmcmFtZXMgYXJlbid0IGluIHRoZSBvcmlnaW5hbCBD
b2RlQmxvY2ssIHNvIHRoZXkgcXVhbGlmeSBhcyB3ZWFrLiBBbHNvLAorICAgICAgICAvLyB0aG9z
ZSB3ZWFrIHJlZmVyZW5jZXMgc2hvdWxkIGFscmVhZHkgYmUgdHJhY2tlZCBpbiB0aGUgREZHIGFz
IHdlYWsgRnJvemVuVmFsdWVzLiBTbywKKyAgICAgICAgLy8gdGhlcmUgaXMgcHJvYmFibHkgbm8g
bmVlZCBmb3IgdGhpcy4gV2UgYWxyZWFkeSBoYXZlIGFzc2VydGlvbnMgdGhhdCB0aGlzIHNob3Vs
ZCBiZQorICAgICAgICAvLyB1bm5lY2Vzc2FyeS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjYxMwogICAgICAgICBERkc6OkNvbW1vbkRhdGEq
IGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAgICAgIGlmIChkZmdDb21t
b24tPmlubGluZUNhbGxGcmFtZXMuZ2V0KCkpCiAgICAgICAgICAgICBkZmdDb21tb24tPmlubGlu
ZUNhbGxGcmFtZXMtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTg2MjcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTAsNiArMTUwLDE1IEBAIEpTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6
Y2FsbGVlQ29uc3QKIAogdm9pZCBJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFuIGFudGlwYXR0ZXJu
IGZvciB0d28gcmVhc29ucy4gUmVmZXJlbmNlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBERkcKKyAgICAv
LyB0aGF0IGFyZW4ndCBpbiB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrIGJlaW5nIGNvbXBpbGVkIHNo
b3VsZCBiZSB3ZWFrbHkgcmVmZXJlbmNlZC4KKyAgICAvLyBJbmxpbmUgY2FsbCBmcmFtZXMgYXJl
bid0IGluIHRoZSBvcmlnaW5hbCBDb2RlQmxvY2ssIHNvIHRoZXkgcXVhbGlmeSBhcyB3ZWFrLiBB
bHNvLAorICAgIC8vIHRob3NlIHdlYWsgcmVmZXJlbmNlcyBzaG91bGQgYWxyZWFkeSBiZSB0cmFj
a2VkIGluIHRoZSBERkcgYXMgd2VhayBGcm96ZW5WYWx1ZXMuIFNvLAorICAgIC8vIHRoZXJlIGlz
IHByb2JhYmx5IG5vIG5lZWQgZm9yIHRoaXMuIFdlIGFscmVhZHkgaGF2ZSBhc3NlcnRpb25zIHRo
YXQgdGhpcyBzaG91bGQgYmUKKyAgICAvLyB1bm5lY2Vzc2FyeS4gRmluYWxseSwganVzdCBtYXJr
aW5nIHRoZSBleGVjdXRhYmxlIGFuZCBub3QgYW55dGhpbmcgZWxzZSBpbiB0aGUgaW5saW5lCisg
ICAgLy8gY2FsbCBmcmFtZSBpcyBhbG1vc3QgY2VydGFpbmx5IGluc3VmZmljaWVudCBmb3Igd2hh
dCB0aGlzIG1ldGhvZCB0aG91Z2h0IGl0IHdhcyBnb2luZworICAgIC8vIHRvIGFjY29tcGxpc2gu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjYxMwog
ICAgIHZpc2l0b3IuYXBwZW5kKCZleGVjdXRhYmxlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIw
MTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0xNDksNiArMTQ5LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7
IH0KKyAgICBjb25zdCBUJiBvcGVyYW5kKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcykt
Pm9wZXJhbmQob3BlcmFuZCkpOyB9CiAgICAgCiAgICAgYm9vbCBoYXNPcGVyYW5kKGludCBvcGVy
YW5kKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYs
NSArOTYsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogICAg
IGR1bXBJbkNvbnRleHQob3V0LCBudWxscHRyKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTZXQ6OnZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNl
cykgY29uc3QKK3sKKyAgICBmb3JFYWNoKAorICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0
dXJlKSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFja2VkUmVmZXJlbmNlcy5jb250
YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
CShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDggQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdm9pZCB2
YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgSGFzaFNldDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5j
ZXMpIGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyNCw2ICs0MjQsMTQgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wSW5D
b250ZXh0KFByaW50UwogICAgIG91dC5wcmludCgiKSIpOwogfQogCit2b2lkIEFic3RyYWN0VmFs
dWU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVm
ZXJlbmNlcykKK3sKKyAgICBpZiAoISFtX3ZhbHVlICYmIG1fdmFsdWUuaXNDZWxsKCkpCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrZWRSZWZlcmVuY2VzLmNvbnRhaW5zKG1fdmFsdWUuYXND
ZWxsKCkpKTsKKyAgICAKKyAgICBtX3N0cnVjdHVyZS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tl
ZFJlZmVyZW5jZXMpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDYgKzMzMCw4
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8
SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKTsKKyAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJv
dmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZl
IHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHZhbHVlIG11
c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQogICAgIC8vIGJlIFRPUCwgaW5kaWNh
dGluZyB0aGF0IGl0IGlzIHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMsIGluIHdo
aWNoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJ
KHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9u
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDI5IEBAIGJvb2wgQ29tbW9uRGF0
YTo6aW52YWxpZGF0ZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgQ29tbW9uRGF0YTo6
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVu
Y2VzKQoreworICAgIGlmIChJbmxpbmVDYWxsRnJhbWVTZXQqIHNldCA9IGlubGluZUNhbGxGcmFt
ZXMuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA6ICpzZXQpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgOiBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cykgeworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVy
eS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEhcmVjb3ZlcnkuY29u
c3RhbnQoKSAmJiByZWNvdmVyeS5jb25zdGFudCgpLmlzQ2VsbCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJhY2tlZFJlZmVyZW5jZXMuY29udGFpbnMocmVjb3Zl
cnkuY29uc3RhbnQoKS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodHJhY2tlZFJlZmVyZW5jZXMuY29udGFpbnMoZXhlY3V0YWJsZSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVS
ZWNvdmVyeS5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50
ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpOworICAgICAgICAg
ICAgICAgIGlmICghIWNvbnN0YW50ICYmIGNvbnN0YW50LmlzQ2VsbCgpKQorICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFja2VkUmVmZXJlbmNlcy5jb250YWlucyhjb25zdGFu
dC5hc0NlbGwoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNiArODYsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
c3RkOjptYXgoZnJhbWVSZWdpc3RlckNvdW50LCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0
KTsKICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgSGFzaFNl
dDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpOwogCiAgICAgUmVmUHRyPElubGluZUNhbGxG
cmFtZVNldD4gaW5saW5lQ2FsbEZyYW1lczsKICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+IGNvZGVPcmlnaW5zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2
ICs4OSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fc3RyZW5ndGggPSBtZXJnZShtX3N0cmVu
Z3RoLCBzdHJlbmd0aCk7CiAgICAgfQogICAgIAorICAgIGJvb2wgcG9pbnRzVG9IZWFwKCkgY29u
c3QgeyByZXR1cm4gISF2YWx1ZSgpICYmIHZhbHVlKCkuaXNDZWxsKCk7IH0KKyAgICAKICAgICAv
LyBUaGUgc3RyZW5ndGggb2YgdGhlIHZhbHVlIGl0c2VsZi4gVGhlIHN0cnVjdHVyZSBzaG91bGQg
YmUgdmlld2VkIGFzIGZyYWdpbGUKICAgICAvLyBleGNlcHQgaWYgaXQgaXMgd2F0Y2hlZCwgaW4g
d2hpY2ggY2FzZSBpdCdzIHdlYWsuIE5vdGUgdGhhdCBjdXJyZW50bHkgd2UKICAgICAvLyB3YXRj
aCBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgaW5kaXNjcmltaW5hbnRseSwgYW5kIHNvIHdlIGFs
c28gbWFyayB0aGVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyOSw2ICs1MjksMTIgQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBvdXQucHJpbnQoIlxuIik7CiAgICAgfQog
ICAgIAorICAgIG91dC5wcmludCgiR0MgVmFsdWVzOlxuIik7CisgICAgZm9yIChGcm96ZW5WYWx1
ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgeworICAgICAgICBpZiAodmFsdWUtPnBvaW50c1Rv
SGVhcCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5Db250ZXh0KCp2YWx1ZSwg
Jm15Q29udGV4dCksICJcbiIpOworICAgIH0KKyAgICAKICAgICBpZiAoIW15Q29udGV4dC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgbXlDb250ZXh0LmR1bXAob3V0KTsKICAgICAgICAgb3V0LnByaW50
KCJcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuY3BwCShy
ZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDE5IEBAIHZvaWQgSklUQ29kZTo6c2V0
T3B0aW1pemF0aW9uVGhyZXNob2xkQmEKIH0KICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKIAor
dm9pZCBKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgSGFzaFNldDxKU0NlbGwqPiYg
dHJhY2tlZFJlZmVyZW5jZXMpCit7CisgICAgY29tbW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFj
a2VkUmVmZXJlbmNlcyk7CisgICAgCisgICAgZm9yIChPU1JFbnRyeURhdGEmIGVudHJ5IDogb3Ny
RW50cnkpIHsKKyAgICAgICAgZm9yIChBYnN0cmFjdFZhbHVlJiB2YWx1ZSA6IGVudHJ5Lm1fZXhw
ZWN0ZWRWYWx1ZXMpCisgICAgICAgICAgICB2YWx1ZS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tl
ZFJlZmVyZW5jZXMpOworICAgIH0KKyAgICAKKyAgICB2YXJpYWJsZUV2ZW50U3RyZWFtLnZhbGlk
YXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CisgICAgbWluaWZpZWRERkcudmFsaWRh
dGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsxMDcs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOwogI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQogICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0
IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKTsKKyAgICAKICAgICB2b2lkIHNo
cmlua1RvRml0KCk7CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NzUsNiArNDc1LDU0IEBAIHZvaWQqIEpJVENvbXBpbGVyOjphZGRyZXNzT2ZEb3VibGVDb25zdGEK
IH0KICNlbmRpZgogCit2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2Nr
JiBiYXNpY0Jsb2NrLCBKSVRDb21waWxlcjo6TGFiZWwgYmxvY2tIZWFkLCBMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKQoreworICAgIC8vIE9TUiBlbnRyeSBpcyBub3QgYWxsb3dlZCBpbnRvIGJsb2Nr
cyBkZWVtZWQgdW5yZWFjaGFibGUgYnkgY29udHJvbCBmbG93IGFuYWx5c2lzLgorICAgIGlmICgh
YmFzaWNCbG9jay5pbnRlcnNlY3Rpb25PZkNGQUhhc1Zpc2l0ZWQpCisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IG1faml0Q29kZS0+YXBwZW5kT1NS
RW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5vZmZzZXRPZihi
bG9ja0hlYWQpKTsKKyAgICAKKyAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9IGJhc2ljQmxv
Y2suaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkOworICAgICAgICAKKyAgICAvLyBGaXgg
dGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFibGUgd2ls
bCBoYXZlIGFuIGV4cGVjdGVkCisgICAgLy8gdmFsdWUgb2YgKE5vbmUsIFtdKS4gQnV0IHRoZSBv
bGQgSklUIG1heSBzdGFzaCBzb21lIHZhbHVlcyB0aGVyZS4gU28gd2UgcmVhbGx5CisgICAgLy8g
bmVlZCAoVG9wLCBUT1ApLgorICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3Vt
ZW50KSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFy
Z3VtZW50KS5tYWtlSGVhcFRvcCgpOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7
IGxvY2FsIDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKyts
b2NhbCkgeworICAgICAgICBOb2RlKiBub2RlID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQu
bG9jYWwobG9jYWwpOworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFr
ZUhlYXBUb3AoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBl
bnRyeS0+bV9tYWNoaW5lU3RhY2tVc2VkLnNldCh2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkudG9M
b2NhbCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUt
PmZsdXNoRm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAg
ICAgICAgICAgICBlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuc2V0KGxvY2FsKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAg
ICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuc2V0KGxvY2FsKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKyAgICAgICAg
ICAgICAgICBlbnRyeS0+bV9yZXNodWZmbGluZ3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAg
ICBPU1JFbnRyeVJlc2h1ZmZsaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUt
PmxvY2FsKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBlbnRyeS0+bV9y
ZXNodWZmbGluZ3Muc2hyaW5rVG9GaXQoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjY1LDUzICsyNjUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICB2
b2lkIG5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpM
YWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCi0gICAgewotICAgICAgICAv
LyBPU1IgZW50cnkgaXMgbm90IGFsbG93ZWQgaW50byBibG9ja3MgZGVlbWVkIHVucmVhY2hhYmxl
IGJ5IGNvbnRyb2wgZmxvdyBhbmFseXNpcy4KLSAgICAgICAgaWYgKCFiYXNpY0Jsb2NrLmludGVy
c2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBtX2ppdENvZGUtPmFwcGVuZE9TUkVudHJ5RGF0
YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGxpbmtCdWZmZXIub2Zmc2V0T2YoYmxvY2tIZWFk
KSk7Ci0gICAgICAgIAotICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9IGJhc2ljQmxv
Y2suaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkOwotICAgICAgICAKLSAgICAgICAgLy8g
Rml4IHRoZSBleHBlY3RlZCB2YWx1ZXM6IGluIG91ciBwcm90b2NvbCwgYSBkZWFkIHZhcmlhYmxl
IHdpbGwgaGF2ZSBhbiBleHBlY3RlZAotICAgICAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBC
dXQgdGhlIG9sZCBKSVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkK
LSAgICAgICAgLy8gbmVlZCAoVG9wLCBUT1ApLgotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVu
dCA9IDA7IGFyZ3VtZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1
bWVudHMoKTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2ljQmxv
Y2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBlbnRyeS0+
bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZUhlYXBUb3AoKTsKLSAgICAg
ICAgfQotICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzaWNCbG9jay52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAg
ICAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAg
ICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFrZUhlYXBUb3Ao
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9tYWNoaW5lU3RhY2tVc2VkLnNldCh2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCku
dG9Mb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZh
cmlhYmxlLT5mbHVzaEZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91
YmxlOgotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuc2V0
KGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBGbHVzaGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNl
ZE1hY2hpbmVJbnQuc2V0KGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
aWFibGUtPmxvY2FsKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQo
KSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLnNocmlua1RvRml0KCk7Ci0gICAgfQor
ICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYsIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9ja0hlYWQsIExpbmtCdWZmZXImKTsKICAgICAKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29k
ZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zNSw5ICszNSw2MSBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IkpTU3RhY2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCit2
b2lkIE9TUkVudHJ5RGF0YTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29u
dGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJjIyIsIG1fYnl0ZWNvZGVJ
bmRleCwgIiwgbWFjaGluZSBjb2RlIG9mZnNldCA9ICIsIG1fbWFjaGluZUNvZGVPZmZzZXQpOwor
ICAgIG91dC5wcmludCgiLCBzdGFjayBydWxlcyA9IFsiKTsKKyAgICAKKyAgICBhdXRvIHByaW50
T3BlcmFuZCA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIHJlZykgeworICAgICAgICBvdXQucHJpbnQo
aW5Db250ZXh0KG1fZXhwZWN0ZWRWYWx1ZXMub3BlcmFuZChyZWcpLCBjb250ZXh0KSwgIiAoIik7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB0b1JlZzsKKyAgICAgICAgYm9vbCBvdmVyd3JpdHRl
biA9IGZhbHNlOworICAgICAgICBmb3IgKE9TUkVudHJ5UmVzaHVmZmxpbmcgcmVzaHVmZmxpbmcg
OiBtX3Jlc2h1ZmZsaW5ncykgeworICAgICAgICAgICAgaWYgKHJlZyA9PSBWaXJ0dWFsUmVnaXN0
ZXIocmVzaHVmZmxpbmcuZnJvbU9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICB0b1JlZyA9IFZp
cnR1YWxSZWdpc3RlcihyZXNodWZmbGluZy50b09mZnNldCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVnID09IFZpcnR1YWxSZWdpc3Rl
cihyZXNodWZmbGluZy50b09mZnNldCkpCisgICAgICAgICAgICAgICAgb3ZlcndyaXR0ZW4gPSB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghb3ZlcndyaXR0ZW4gJiYgIXRvUmVnLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIHRvUmVnID0gcmVnOworICAgICAgICBpZiAodG9SZWcuaXNWYWxp
ZCgpKSB7CisgICAgICAgICAgICBpZiAodG9SZWcuaXNMb2NhbCgpICYmICFtX21hY2hpbmVTdGFj
a1VzZWQuZ2V0KHRvUmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJp
Z25vcmVkIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCJt
YXBzIHRvICIsIHRvUmVnKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQo
Im92ZXJ3cml0dGVuIik7CisgICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIG1fbG9jYWxzRm9y
Y2VkRG91YmxlLmdldChyZWcudG9Mb2NhbCgpKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCBm
b3JjZWQgZG91YmxlIik7CisgICAgICAgIGlmIChyZWcuaXNMb2NhbCgpICYmIG1fbG9jYWxzRm9y
Y2VkTWFjaGluZUludC5nZXQocmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICBvdXQucHJpbnQo
IiwgZm9yY2VkIG1hY2hpbmUgaW50Iik7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgIH07
CisgICAgCisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50
SW5kZXggPSBtX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5k
ZXgtLTspIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYXJnIiwgYXJndW1lbnRJbmRleCwg
IjoiKTsKKyAgICAgICAgcHJpbnRPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFy
Z3VtZW50SW5kZXgpKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgbG9jYWxJbmRleCA9IDA7IGxv
Y2FsSW5kZXggPCBtX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWxJbmRl
eCkgeworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIpOwor
ICAgICAgICBwcmludE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobG9jYWxJbmRleCkp
OworICAgIH0KKyAgICAKKyAgICBvdXQucHJpbnQoIl0sIG1hY2hpbmUgc3RhY2sgdXNlZCA9ICIs
IG1fbWFjaGluZVN0YWNrVXNlZCk7Cit9CisKK3ZvaWQgT1NSRW50cnlEYXRhOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwor
fQorCiB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBBU1NFUlQoSklUQ29kZTo6
aXNPcHRpbWl6aW5nSklUKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTYwLDYgKzYwLDkgQEAgc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgQml0VmVjdG9yIG1f
bG9jYWxzRm9yY2VkTWFjaGluZUludDsKICAgICBWZWN0b3I8T1NSRW50cnlSZXNodWZmbGluZz4g
bV9yZXNodWZmbGluZ3M7CiAgICAgQml0VmVjdG9yIG1fbWFjaGluZVN0YWNrVXNlZDsKKyAgICAK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogfTsKIAogaW5saW5lIHVuc2ln
bmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURh
dGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE4
NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzNiw2ICs1MzYsMjQgQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxp
emVXaXRob3V0TgogICAgIAogICAgIHJlYWxseUFkZChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
Q29tbW9uKCkpOwogICAgIAorICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAg
IEhhc2hTZXQ8SlNDZWxsKj4gdHJhY2tlZFJlZmVyZW5jZXM7CisgICAgICAgIAorICAgICAgICBm
b3IgKFdyaXRlQmFycmllcjxKU0NlbGw+JiByZWZlcmVuY2UgOiBjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCkud2Vha1JlZmVyZW5jZXMpCisgICAgICAgICAgICB0cmFja2VkUmVmZXJl
bmNlcy5hZGQocmVmZXJlbmNlLmdldCgpKTsKKyAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiYgcmVmZXJlbmNlIDogY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLndl
YWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKQorICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRk
KHJlZmVyZW5jZS5nZXQoKSk7CisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFVua25vd24+JiBj
b25zdGFudCA6IGNvZGVCbG9jay0+Y29uc3RhbnRzKCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBjb25zdGFudC5nZXQoKTsKKyAgICAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVl
LmlzQ2VsbCgpKQorICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZCh2YWx1ZS5h
c0NlbGwoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgYW55
IG90aGVyIHJlZmVyZW5jZXMgdGhhdCB3ZSBoYXZlIGFueXdoZXJlIGluIHRoZSBKSVRDb2RlIGFy
ZSBhbHNvCisgICAgICAgIC8vIHRyYWNrZWQgZWl0aGVyIHN0cm9uZ2x5IG9yIHdlYWtseS4KKyAg
ICAgICAgY29kZUJsb2NrLT5qaXRDb2RlKCktPnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVm
ZXJlbmNlcyk7CisgICAgfQorICAgIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzMSw2ICsxNjMxLDE1
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExpbmsKICAgICAgICAgbV9q
aXQubm90aWNlT1NSRW50cnkoKmJsb2NrLCBtX29zckVudHJ5SGVhZHNbb3NyRW50cnlJbmRleCsr
XSwgbGlua0J1ZmZlcik7CiAgICAgfQogICAgIEFTU0VSVChvc3JFbnRyeUluZGV4ID09IG1fb3Ny
RW50cnlIZWFkcy5zaXplKCkpOworICAgIAorICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKCkpIHsKKyAgICAgICAgRHVtcENvbnRleHQgZHVtcENvbnRleHQ7CisgICAgICAgIGRhdGFM
b2coIk9TUiBFbnRyaWVzOlxuIik7CisgICAgICAgIGZvciAoT1NSRW50cnlEYXRhJiBlbnRyeURh
dGEgOiBtX2ppdC5qaXRDb2RlKCktPm9zckVudHJ5KQorICAgICAgICAgICAgZGF0YUxvZygiICAg
ICIsIGluQ29udGV4dChlbnRyeURhdGEsICZkdW1wQ29udGV4dCksICJcbiIpOworICAgICAgICBp
ZiAoIWR1bXBDb250ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGR1bXBDb250ZXh0LmR1bXAo
V1RGOjpkYXRhRmlsZSgpKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVEb3VibGVQdXRCeVZhbChOb2RlKiBub2RlLCBTcGVjdWxhdGVDZWxsT3BlcmFuZCYgYmFzZSwg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJiBwcm9wZXJ0eSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNw
cAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDYgKzM4NiwxMyBA
QCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRTCiAgICAgZHVtcEluQ29u
dGV4dChvdXQsIDApOwogfQogCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnZhbGlkYXRl
UmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNlcykgY29u
c3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2V0LnZhbGlk
YXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJl
dmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDggQEAgcHVibGlj
OgogICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAg
ICAgYm9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29u
c3Q7CiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgSGFzaFNldDxKU0Nl
bGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpIGNvbnN0OworICAgIAogcHJpdmF0ZToKICAgICBzdGF0
aWMgY29uc3QgdWludHB0cl90IGNsb2JiZXJlZEZsYWcgPSBTdHJ1Y3R1cmVTZXQ6OnJlc2VydmVk
RmxhZzsKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRvcFZhbHVlID0gU3RydWN0dXJlU2V0
OjpyZXNlcnZlZFZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNiArMjUyLDEzIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIXZhcmlhbnQub2xk
U3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5kZmdTaG91bGRXYXRjaCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5v
ZGUtPmNvbnN0YW50KCktPnBvaW50c1RvSGVhcCgpIHx8IG5vZGUtPmNvbnN0YW50KCktPnN0cmVu
Z3RoKCkgPj0gV2Vha1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgICAgICBjYXNlIEludDUy
Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+aXNO
dW1iZXJDb25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJldmlzaW9u
IDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGluaXRpYWxpemVB
cml0eUNoZWNrRW50cnlwb2ludChDb2RlUmVmKTsKICAgICB2b2lkIGluaXRpYWxpemVBZGRyZXNz
Rm9yQ2FsbChDb2RlUHRyKTsKICAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNlcyk7CisgICAgCiAgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPj4mIGhhbmRsZXMoKSBjb25zdCB7
IHJldHVybiBtX2hhbmRsZXM7IH0KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPERhdGFTZWN0aW9u
Pj4mIGRhdGFTZWN0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YVNlY3Rpb25zOyB9CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHJldmlzaW9uIDE4NjI3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDYgKzY0LDEwIEBAIGNvbnN0IGNoYXIqIEpJVENvZGU6OnR5cGVOYW1lKEpJVFR5
cGUgamkKICAgICB9CiB9CiAKK3ZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0
IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKQoreworfQorCiBKU1ZhbHVlIEpJ
VENvZGU6OmV4ZWN1dGUoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9DYWxsRnJhbWUpCiB7
CiAgICAgdm9pZCogZW50cnlBZGRyZXNzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsNiArMTgzLDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgRlRMOjpKSVRDb2RlKiBmdGwoKTsKICAgICB2aXJ0dWFsIEZUTDo6Rm9yT1NSRW50cnlK
SVRDb2RlKiBmdGxGb3JPU1JFbnRyeSgpOwogICAgIAorICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0
ZVJlZmVyZW5jZXMoY29uc3QgSGFzaFNldDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpOwor
ICAgIAogICAgIEpTVmFsdWUgZXhlY3V0ZShWTSosIFByb3RvQ2FsbEZyYW1lKik7CiAgICAgCiAg
ICAgdm9pZCogc3RhcnQoKSB7IHJldHVybiBkYXRhQWRkcmVzc0F0T2Zmc2V0KDApOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RlYWQtb3NyLWVudHJ5LXZhbHVl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVh
ZC1vc3ItZW50cnktdmFsdWUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2RlYWQtb3NyLWVudHJ5LXZhbHVlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgbyA9IHtmOjQyfTsKKyAg
ICB2YXIgcmVzdWx0ID0gMDsKKyAgICBPU1JFeGl0KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgICAgIGlmICghREZHVHJ1ZSgpKQorICAgICAgICAgICAgcmVz
dWx0ICs9IG8uZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICBmb28oKTsKKyAgICBmdWxsR0MoKTsKK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256158</attachid>
            <date>2015-07-04 13:14:38 -0700</date>
            <delta_ts>2015-07-04 13:56:46 -0700</delta_ts>
            <desc>validation is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>40423</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTkzLDYgKzE5Myw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0xvbmdMaXZlZFN0YXRlLmNwcAogICAgIGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAKKyAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5j
cHAKICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNwcAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3Zh
bFBoYXNlLmNwcAogICAgIGRmZy9ERkdOYWl2ZURvbWluYXRvcnMuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw2ICs0MzEsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0xvbmdMaXZlZFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2ZURvbWluYXRvcnMuY3BwIiAvPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAKIAkJMEYxMzkxMkMxNjc3MUMz
RDAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5MTI3MTY3NzFDMzAwMDlDQ0IwNyAv
KiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4
aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJ
MEYxNUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURF
MzdEIC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMTcyNUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmll
ZEdyYXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLzsgfTsK
IAkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUEx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwogCQkw
RjE5MENBRDE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUIxODlEODJG
NjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEg
LyogSlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTg1MSw2ICsxODUyLDcg
QEAKIAkJMEYxMzkxMjcxNjc3MUMzMDAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29k
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJQcm9maWxlZEJ5
dGVjb2Rlcy5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyog
SW5kZXhpbmdUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElu
ZGV4aW5nVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRC
N0E3M0EwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBw
YXRoID0gZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE5MENBQTE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckpldHRpc29u
UmVhc29uLmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBQcm9maWxlckpldHRpc29uUmVhc29uLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRp
c29uUmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUREODQ5MThBOTQ1
QkUwMDI2RjNGQSAvKiBKU0NJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwMTEsNiAr
NTAxMyw3IEBACiAJCQkJMEY1ODc0RUIxOTRGRUIxMjAwQUFCMkMxIC8qIERGR01heUV4aXQuY3Bw
ICovLAogCQkJCTBGNTg3NEVDMTk0RkVCMTIwMEFBQjJDMSAvKiBERkdNYXlFeGl0LmggKi8sCiAJ
CQkJQTcwNEQ5MDIxN0EwQkFBODAwNkJBNTU0IC8qIERGR01lcmdlTW9kZS5oICovLAorCQkJCTBG
MTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLywKIAkJCQkw
RjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oICovLAogCQkJCTBG
QjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmllZElELmggKi8sCiAJCQkJMEYyQkRD
NEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAgKi8sCkBAIC03NDkzLDYg
Kzc0OTYsNyBAQAogCQkJCTY1NUVCMjlCMTBDRTI1ODEwMDFBOTkwRSAvKiBOb2Rlc0NvZGVnZW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU0NkY1MjExQTMyQjMxMzAwNkYwN0Q1IC8qIE51bGxH
ZXR0ZXJGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUyNUZDNTFBNkREODAxMDA3
QjU0OTUgLyogTnVsbFNldHRlckZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMTcy
NUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0NDY5REUyMTA3RUM3RTcwMDY1MDQ0NiAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFMzEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU0MTA3RUM3RTcwMDY1MDQ0NiAvKiBO
dW1iZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4MDEsNiArMjgwMSwxMyBAQCB2b2lkIENvZGVCbG9jazo6c3Ryb25nbHlWaXNpdFN0cm9u
Z1JlZmVyCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gYW50aXBh
dHRlcm4gZm9yIHR3byByZWFzb25zLiBSZWZlcmVuY2VzIGludHJvZHVjZWQgYnkgdGhlIERGRwor
ICAgICAgICAvLyB0aGF0IGFyZW4ndCBpbiB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrIGJlaW5nIGNv
bXBpbGVkIHNob3VsZCBiZSB3ZWFrbHkgcmVmZXJlbmNlZC4KKyAgICAgICAgLy8gSW5saW5lIGNh
bGwgZnJhbWVzIGFyZW4ndCBpbiB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrLCBzbyB0aGV5IHF1YWxp
ZnkgYXMgd2Vhay4gQWxzbywKKyAgICAgICAgLy8gdGhvc2Ugd2VhayByZWZlcmVuY2VzIHNob3Vs
ZCBhbHJlYWR5IGJlIHRyYWNrZWQgaW4gdGhlIERGRyBhcyB3ZWFrIEZyb3plblZhbHVlcy4gU28s
CisgICAgICAgIC8vIHRoZXJlIGlzIHByb2JhYmx5IG5vIG5lZWQgZm9yIHRoaXMuIFdlIGFscmVh
ZHkgaGF2ZSBhc3NlcnRpb25zIHRoYXQgdGhpcyBzaG91bGQgYmUKKyAgICAgICAgLy8gdW5uZWNl
c3NhcnkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDY2MTMKICAgICAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUt
PmRmZ0NvbW1vbigpOwogICAgICAgICBpZiAoZGZnQ29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzLmdl
dCgpKQogICAgICAgICAgICAgZGZnQ29tbW9uLT5pbmxpbmVDYWxsRnJhbWVzLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCwx
NSBAQCBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUNvbnN0CiAKIHZvaWQgSW5s
aW5lQ2FsbEZyYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBhbiBhbnRpcGF0dGVybiBmb3IgdHdvIHJlYXNvbnMuIFJlZmVy
ZW5jZXMgaW50cm9kdWNlZCBieSB0aGUgREZHCisgICAgLy8gdGhhdCBhcmVuJ3QgaW4gdGhlIG9y
aWdpbmFsIENvZGVCbG9jayBiZWluZyBjb21waWxlZCBzaG91bGQgYmUgd2Vha2x5IHJlZmVyZW5j
ZWQuCisgICAgLy8gSW5saW5lIGNhbGwgZnJhbWVzIGFyZW4ndCBpbiB0aGUgb3JpZ2luYWwgQ29k
ZUJsb2NrLCBzbyB0aGV5IHF1YWxpZnkgYXMgd2Vhay4gQWxzbywKKyAgICAvLyB0aG9zZSB3ZWFr
IHJlZmVyZW5jZXMgc2hvdWxkIGFscmVhZHkgYmUgdHJhY2tlZCBpbiB0aGUgREZHIGFzIHdlYWsg
RnJvemVuVmFsdWVzLiBTbywKKyAgICAvLyB0aGVyZSBpcyBwcm9iYWJseSBubyBuZWVkIGZvciB0
aGlzLiBXZSBhbHJlYWR5IGhhdmUgYXNzZXJ0aW9ucyB0aGF0IHRoaXMgc2hvdWxkIGJlCisgICAg
Ly8gdW5uZWNlc3NhcnkuIEZpbmFsbHksIGp1c3QgbWFya2luZyB0aGUgZXhlY3V0YWJsZSBhbmQg
bm90IGFueXRoaW5nIGVsc2UgaW4gdGhlIGlubGluZQorICAgIC8vIGNhbGwgZnJhbWUgaXMgYWxt
b3N0IGNlcnRhaW5seSBpbnN1ZmZpY2llbnQgZm9yIHdoYXQgdGhpcyBtZXRob2QgdGhvdWdodCBp
dCB3YXMgZ29pbmcKKyAgICAvLyB0byBhY2NvbXBsaXNoLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MTMKICAgICB2aXNpdG9yLmFwcGVuZCgmZXhl
Y3V0YWJsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVy
YW5kcy5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5
LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBjb25zdCBUJiBvcGVyYW5kKGludCBv
cGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9w
ZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgY29uc3QgVCYgb3BlcmFu
ZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25z
dCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQog
ICAgIAogICAgIGJvb2wgaGFzT3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAko
cmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDUgKzk2LDEzIEBAIHZvaWQgU3RydWN0
dXJlU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQKICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVs
bHB0cik7CiB9CiAKK3ZvaWQgU3RydWN0dXJlU2V0Ojp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
SGFzaFNldDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpIGNvbnN0Cit7CisgICAgZm9yRWFj
aCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodHJhY2tlZFJlZmVyZW5jZXMuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAg
ICAgIH0pOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMTg2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Nyw2ICs3Nyw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRl
eHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0
IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKSBjb25zdDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjQsNiArNDI0
LDE0IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICBvdXQu
cHJpbnQoIikiKTsKIH0KIAordm9pZCBBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZVJlZmVyZW5jZXMo
Y29uc3QgSGFzaFNldDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpCit7CisgICAgaWYgKCEh
bV92YWx1ZSAmJiBtX3ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFj
a2VkUmVmZXJlbmNlcy5jb250YWlucyhtX3ZhbHVlLmFzQ2VsbCgpKSk7CisgICAgCisgICAgbV9z
dHJ1Y3R1cmUudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNp
b24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMCw2ICszMzAsOCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1
ZSB7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBj
b25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKKyAgICB2b2lk
IHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJl
bmNlcyk7CisgICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBz
dHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZSByaWdodAogICAgIC8vIG5vdy4gVGhl
IHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBtdXN0IGJlbG9uZyB0byB0aGlzIHNldC4g
VGhlIHNldCBtYXkKICAgICAvLyBiZSBUT1AsIGluZGljYXRpbmcgdGhhdCBpdCBpcyB0aGUgc2V0
IG9mIGFsbCBwb3NzaWJsZSBzdHJ1Y3R1cmVzLCBpbiB3aGljaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Miw2ICs3MiwyOSBAQCBib29sIENvbW1vbkRhdGE6OmludmFsaWRhdGUoKQogICAgIHJl
dHVybiB0cnVlOwogfQogCit2b2lkIENvbW1vbkRhdGE6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNlcykKK3sKKyAgICBpZiAoSW5saW5l
Q2FsbEZyYW1lU2V0KiBzZXQgPSBpbmxpbmVDYWxsRnJhbWVzLmdldCgpKSB7CisgICAgICAgIGZv
ciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgOiAqc2V0KSB7CisgICAgICAgICAg
ICBmb3IgKFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5IDogaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkuaXNDb25zdGFudCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghIXJlY292ZXJ5LmNvbnN0YW50KCkgJiYgcmVjb3ZlcnkuY29u
c3RhbnQoKS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyYWNrZWRSZWZlcmVuY2VzLmNvbnRhaW5zKHJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkp
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gaW5saW5lQ2FsbEZyYW1l
LT5leGVjdXRhYmxlLmdldCgpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNr
ZWRSZWZlcmVuY2VzLmNvbnRhaW5zKGV4ZWN1dGFibGUpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFudCgpKSB7
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudCA9IGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlUmVjb3ZlcnkuY29uc3RhbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoISFjb25zdGFudCAm
JiBjb25zdGFudC5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
dHJhY2tlZFJlZmVyZW5jZXMuY29udGFpbnMoY29uc3RhbnQuYXNDZWxsKCkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KGZyYW1lUmVnaXN0ZXJD
b3VudCwgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCk7CiAgICAgfQorICAgIAorICAgIHZv
aWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZl
cmVuY2VzKTsKIAogICAgIFJlZlB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IGlubGluZUNhbGxGcmFt
ZXM7CiAgICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBjb2Rl
T3JpZ2luczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVl
LmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJv
emVuVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBtX3N0cmVuZ3RoID0gbWVyZ2UobV9zdHJlbmd0aCwgc3RyZW5ndGgpOwogICAgIH0K
ICAgICAKKyAgICBib29sIHBvaW50c1RvSGVhcCgpIGNvbnN0IHsgcmV0dXJuICEhdmFsdWUoKSAm
JiB2YWx1ZSgpLmlzQ2VsbCgpOyB9CisgICAgCiAgICAgLy8gVGhlIHN0cmVuZ3RoIG9mIHRoZSB2
YWx1ZSBpdHNlbGYuIFRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHZpZXdlZCBhcyBmcmFnaWxlCiAg
ICAgLy8gZXhjZXB0IGlmIGl0IGlzIHdhdGNoZWQsIGluIHdoaWNoIGNhc2UgaXQncyB3ZWFrLiBO
b3RlIHRoYXQgY3VycmVudGx5IHdlCiAgICAgLy8gd2F0Y2ggYWxsIHdhdGNoYWJsZSBzdHJ1Y3R1
cmVzIGluZGlzY3JpbWluYW50bHksIGFuZCBzbyB3ZSBhbHNvIG1hcmsgdGhlbQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MjksNiArNTI5LDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMK
ICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIH0KICAgICAKKyAgICBvdXQucHJpbnQoIkdD
IFZhbHVlczpcbiIpOworICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9mcm96ZW5WYWx1
ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5wb2ludHNUb0hlYXAoKSkKKyAgICAgICAgICAgIG91
dC5wcmludCgiICAgICIsIGluQ29udGV4dCgqdmFsdWUsICZteUNvbnRleHQpLCAiXG4iKTsKKyAg
ICB9CisgICAgCiAgICAgaWYgKCFteUNvbnRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIG15Q29u
dGV4dC5kdW1wKG91dCk7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTcwLDYgKzE3MCwxOCBAQCB2b2lkIEpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
CiB9CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKK3ZvaWQgSklUQ29kZTo6dmFsaWRhdGVS
ZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKQorewor
ICAgIGNvbW1vbi52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOworICAgIAor
ICAgIGZvciAoT1NSRW50cnlEYXRhJiBlbnRyeSA6IG9zckVudHJ5KSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGVudHJ5Lm1fZXhwZWN0ZWRWYWx1ZXMuc2l6ZSgpOyBpLS07KQorICAgICAg
ICAgICAgZW50cnkubV9leHBlY3RlZFZhbHVlc1tpXS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tl
ZFJlZmVyZW5jZXMpOworICAgIH0KKyAgICAKKyAgICBtaW5pZmllZERGRy52YWxpZGF0ZVJlZmVy
ZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDYgKzEwNyw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlv
blJlc3VsdChDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgSGFzaFNl
dDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpIG92ZXJyaWRlOworICAgIAogICAgIHZvaWQg
c2hyaW5rVG9GaXQoKTsKICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3NSw2ICs0NzUsNTQgQEAgdm9pZCogSklUQ29tcGlsZXI6OmFkZHJlc3NPZkRvdWJsZUNvbnN0
YQogfQogI2VuZGlmCiAKK3ZvaWQgSklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KEJhc2ljQmxv
Y2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpCit7CisgICAgLy8gT1NSIGVudHJ5IGlzIG5vdCBhbGxvd2VkIGludG8gYmxv
Y2tzIGRlZW1lZCB1bnJlYWNoYWJsZSBieSBjb250cm9sIGZsb3cgYW5hbHlzaXMuCisgICAgaWYg
KCFiYXNpY0Jsb2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkKKyAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gbV9qaXRDb2RlLT5hcHBlbmRP
U1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBsaW5rQnVmZmVyLm9mZnNldE9m
KGJsb2NrSGVhZCkpOworICAgIAorICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNC
bG9jay5pbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQ7CisgICAgICAgIAorICAgIC8vIEZp
eCB0aGUgZXhwZWN0ZWQgdmFsdWVzOiBpbiBvdXIgcHJvdG9jb2wsIGEgZGVhZCB2YXJpYWJsZSB3
aWxsIGhhdmUgYW4gZXhwZWN0ZWQKKyAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBCdXQgdGhl
IG9sZCBKSVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkKKyAgICAv
LyBuZWVkIChUb3AsIFRPUCkuCisgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVu
dCA8IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJn
dW1lbnQpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGFyZ3VtZW50KTsKKyAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQo
YXJndW1lbnQpLm1ha2VIZWFwVG9wKCk7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGxvY2FsID0g
MDsgbG9jYWwgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyAr
K2xvY2FsKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVh
ZC5sb2NhbChsb2NhbCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5t
YWtlSGVhcFRvcCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
IGVudHJ5LT5tX21hY2hpbmVTdGFja1VzZWQuc2V0KHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS50
b0xvY2FsKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoICh2YXJpYWJs
ZS0+Zmx1c2hGb3JtYXQoKSkgeworICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAg
ICAgICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJsZS5zZXQobG9jYWwpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAg
ICAgICAgICAgICAgZW50cnktPm1fbG9jYWxzRm9yY2VkTWFjaGluZUludC5zZXQobG9jYWwpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHZhcmlhYmxlLT5sb2NhbCgpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgeworICAgICAg
ICAgICAgICAgIGVudHJ5LT5tX3Jlc2h1ZmZsaW5ncy5hcHBlbmQoCisgICAgICAgICAgICAgICAg
ICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNldCgpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgIGVudHJ5LT5t
X3Jlc2h1ZmZsaW5ncy5zaHJpbmtUb0ZpdCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNjUsNTMgKzI2NSw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAg
IHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYgYmFzaWNCbG9jaywgSklUQ29tcGlsZXI6
OkxhYmVsIGJsb2NrSGVhZCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlcikKLSAgICB7Ci0gICAgICAg
IC8vIE9TUiBlbnRyeSBpcyBub3QgYWxsb3dlZCBpbnRvIGJsb2NrcyBkZWVtZWQgdW5yZWFjaGFi
bGUgYnkgY29udHJvbCBmbG93IGFuYWx5c2lzLgotICAgICAgICBpZiAoIWJhc2ljQmxvY2suaW50
ZXJzZWN0aW9uT2ZDRkFIYXNWaXNpdGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAK
LSAgICAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IG1faml0Q29kZS0+YXBwZW5kT1NSRW50cnlE
YXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5vZmZzZXRPZihibG9ja0hl
YWQpKTsKLSAgICAgICAgCi0gICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNC
bG9jay5pbnRlcnNlY3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQ7Ci0gICAgICAgIAotICAgICAgICAv
LyBGaXggdGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFi
bGUgd2lsbCBoYXZlIGFuIGV4cGVjdGVkCi0gICAgICAgIC8vIHZhbHVlIG9mIChOb25lLCBbXSku
IEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUuIFNvIHdlIHJlYWxs
eQotICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCi0gICAgICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2FyZ3VtZW50KSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmFzaWNC
bG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwotICAgICAgICAgICAgaWYg
KCFub2RlIHx8ICFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgICAgIGVudHJ5
LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5tYWtlSGVhcFRvcCgpOwotICAg
ICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Jsb2Nr
LnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwot
ICAgICAgICAgICAgaWYgKCFub2RlIHx8ICFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAg
ICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5tYWtlSGVhcFRv
cCgpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAg
ICAgIGVudHJ5LT5tX21hY2hpbmVTdGFja1VzZWQuc2V0KHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KS50b0xvY2FsKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAo
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRE
b3VibGU6Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZERvdWJsZS5z
ZXQobG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPm1fbG9jYWxzRm9y
Y2VkTWFjaGluZUludC5zZXQobG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZhcmlh
YmxlLT5sb2NhbCgpICE9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkgewotICAgICAgICAgICAg
ICAgICAgICBlbnRyeS0+bV9yZXNodWZmbGluZ3MuYXBwZW5kKAotICAgICAgICAgICAgICAgICAg
ICAgICAgT1NSRW50cnlSZXNodWZmbGluZygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSwgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLm9mZnNl
dCgpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBlbnRyeS0+bV9yZXNodWZmbGluZ3Muc2hyaW5rVG9GaXQoKTsKLSAgICB9
CisgICAgdm9pZCBub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiwgSklUQ29tcGlsZXI6OkxhYmVs
IGJsb2NrSGVhZCwgTGlua0J1ZmZlciYpOwogICAgIAogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRD
b2RlKCkgeyByZXR1cm4gbV9qaXRDb2RlOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR01pbmlmaWVkR3JhcGgu
aCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgTWluaWZpZWRHcmFwaDo6cHJl
cGFyZUFuZFNocmluaygpCit7CisgICAgc3RkOjpzb3J0KG1fbGlzdC5iZWdpbigpLCBtX2xpc3Qu
ZW5kKCksIE1pbmlmaWVkTm9kZTo6Y29tcGFyZUJ5Tm9kZUluZGV4KTsKKyAgICBtX2xpc3Quc2hy
aW5rVG9GaXQoKTsKK30KKwordm9pZCBNaW5pZmllZEdyYXBoOjp2YWxpZGF0ZVJlZmVyZW5jZXMo
Y29uc3QgSGFzaFNldDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpCit7CisgICAgZm9yIChN
aW5pZmllZE5vZGUmIG5vZGUgOiBtX2xpc3QpIHsKKyAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3Rh
bnQoKSAmJiAhIW5vZGUuY29uc3RhbnQoKSAmJiBub2RlLmNvbnN0YW50KCkuaXNDZWxsKCkpCisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFja2VkUmVmZXJlbmNlcy5jb250YWlucyhub2Rl
LmNvbnN0YW50KCkuYXNDZWxsKCkpKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAkocmV2aXNpb24gMTg2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUwLDExICs1MCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9saXN0LmFwcGVuZChub2RlKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlQW5kU2hyaW5rKCkKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c29ydChtX2xpc3QuYmVnaW4oKSwgbV9saXN0LmVuZCgpLCBNaW5pZmllZE5vZGU6OmNv
bXBhcmVCeU5vZGVJbmRleCk7Ci0gICAgICAgIG1fbGlzdC5zaHJpbmtUb0ZpdCgpOwotICAgIH0K
KyAgICB2b2lkIHByZXBhcmVBbmRTaHJpbmsoKTsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVm
ZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNlcyk7CiAgICAg
CiBwcml2YXRlOgogICAgIFZlY3RvcjxNaW5pZmllZE5vZGU+IG1fbGlzdDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiAxODYyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzLCAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsNjEgQEAKICNpbmNsdWRlICJKSVQu
aCIKICNpbmNsdWRlICJKU1N0YWNrSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAordm9pZCBPU1JFbnRyeURhdGE6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJiYyMi
LCBtX2J5dGVjb2RlSW5kZXgsICIsIG1hY2hpbmUgY29kZSBvZmZzZXQgPSAiLCBtX21hY2hpbmVD
b2RlT2Zmc2V0KTsKKyAgICBvdXQucHJpbnQoIiwgc3RhY2sgcnVsZXMgPSBbIik7CisgICAgCisg
ICAgYXV0byBwcmludE9wZXJhbmQgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciByZWcpIHsKKyAgICAg
ICAgb3V0LnByaW50KGluQ29udGV4dChtX2V4cGVjdGVkVmFsdWVzLm9wZXJhbmQocmVnKSwgY29u
dGV4dCksICIgKCIpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdG9SZWc7CisgICAgICAgIGJv
b2wgb3ZlcndyaXR0ZW4gPSBmYWxzZTsKKyAgICAgICAgZm9yIChPU1JFbnRyeVJlc2h1ZmZsaW5n
IHJlc2h1ZmZsaW5nIDogbV9yZXNodWZmbGluZ3MpIHsKKyAgICAgICAgICAgIGlmIChyZWcgPT0g
VmlydHVhbFJlZ2lzdGVyKHJlc2h1ZmZsaW5nLmZyb21PZmZzZXQpKSB7CisgICAgICAgICAgICAg
ICAgdG9SZWcgPSBWaXJ0dWFsUmVnaXN0ZXIocmVzaHVmZmxpbmcudG9PZmZzZXQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlZyA9PSBW
aXJ0dWFsUmVnaXN0ZXIocmVzaHVmZmxpbmcudG9PZmZzZXQpKQorICAgICAgICAgICAgICAgIG92
ZXJ3cml0dGVuID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW92ZXJ3cml0dGVuICYm
ICF0b1JlZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICB0b1JlZyA9IHJlZzsKKyAgICAgICAgaWYg
KHRvUmVnLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgaWYgKHRvUmVnLmlzTG9jYWwoKSAmJiAh
bV9tYWNoaW5lU3RhY2tVc2VkLmdldCh0b1JlZy50b0xvY2FsKCkpKQorICAgICAgICAgICAgICAg
IG91dC5wcmludCgiaWdub3JlZCIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG91dC5wcmludCgibWFwcyB0byAiLCB0b1JlZyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCJvdmVyd3JpdHRlbiIpOworICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAm
JiBtX2xvY2Fsc0ZvcmNlZERvdWJsZS5nZXQocmVnLnRvTG9jYWwoKSkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiwgZm9yY2VkIGRvdWJsZSIpOworICAgICAgICBpZiAocmVnLmlzTG9jYWwoKSAm
JiBtX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuZ2V0KHJlZy50b0xvY2FsKCkpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCIsIGZvcmNlZCBtYWNoaW5lIGludCIpOworICAgICAgICBvdXQucHJpbnQo
IikiKTsKKyAgICB9OworICAgIAorICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKHNp
emVfdCBhcmd1bWVudEluZGV4ID0gbV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygp
OyBhcmd1bWVudEluZGV4LS07KSB7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImFyZyIsIGFy
Z3VtZW50SW5kZXgsICI6Iik7CisgICAgICAgIHByaW50T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudEluZGV4KSk7CisgICAgfQorICAgIGZvciAoc2l6ZV90IGxvY2Fs
SW5kZXggPSAwOyBsb2NhbEluZGV4IDwgbV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkxvY2Fscygp
OyArK2xvY2FsSW5kZXgpIHsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJ
bmRleCwgIjoiKTsKKyAgICAgICAgcHJpbnRPcGVyYW5kKHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KGxvY2FsSW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgb3V0LnByaW50KCJdLCBtYWNoaW5lIHN0
YWNrIHVzZWQgPSAiLCBtX21hY2hpbmVTdGFja1VzZWQpOworfQorCit2b2lkIE9TUkVudHJ5RGF0
YTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0
LCBudWxscHRyKTsKK30KKwogdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQVNT
RVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPmppdFR5cGUoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24gMTg2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02MCw2ICs2MCw5IEBAIHN0cnVjdCBPU1JFbnRyeURhdGEgewogICAg
IEJpdFZlY3RvciBtX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQ7CiAgICAgVmVjdG9yPE9TUkVudHJ5
UmVzaHVmZmxpbmc+IG1fcmVzaHVmZmxpbmdzOwogICAgIEJpdFZlY3RvciBtX21hY2hpbmVTdGFj
a1VzZWQ7CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIH07CiAK
IGlubGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0
YSogb3NyRW50cnlEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzYsNiArNTM2LDI0IEBAIENvbXBpbGF0aW9uUmVzdWx0
IFBsYW46OmZpbmFsaXplV2l0aG91dE4KICAgICAKICAgICByZWFsbHlBZGQoY29kZUJsb2NrLT5q
aXRDb2RlKCktPmRmZ0NvbW1vbigpKTsKICAgICAKKyAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQo
KSkgeworICAgICAgICBIYXNoU2V0PEpTQ2VsbCo+IHRyYWNrZWRSZWZlcmVuY2VzOworICAgICAg
ICAKKyAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8SlNDZWxsPiYgcmVmZXJlbmNlIDogY29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpLT53ZWFrUmVmZXJlbmNlcykKKyAgICAgICAgICAg
IHRyYWNrZWRSZWZlcmVuY2VzLmFkZChyZWZlcmVuY2UuZ2V0KCkpOworICAgICAgICBmb3IgKFdy
aXRlQmFycmllcjxTdHJ1Y3R1cmU+JiByZWZlcmVuY2UgOiBjb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnQ29tbW9uKCktPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzKQorICAgICAgICAgICAgdHJhY2tl
ZFJlZmVyZW5jZXMuYWRkKHJlZmVyZW5jZS5nZXQoKSk7CisgICAgICAgIGZvciAoV3JpdGVCYXJy
aWVyPFVua25vd24+JiBjb25zdGFudCA6IGNvZGVCbG9jay0+Y29uc3RhbnRzKCkpIHsKKyAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb25zdGFudC5nZXQoKTsKKyAgICAgICAgICAgIGlmICgh
IXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVu
Y2VzLmFkZCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IENoZWNrIHRoYXQgYW55IG90aGVyIHJlZmVyZW5jZXMgdGhhdCB3ZSBoYXZlIGFueXdoZXJlIGlu
IHRoZSBKSVRDb2RlIGFyZSBhbHNvCisgICAgICAgIC8vIHRyYWNrZWQgZWl0aGVyIHN0cm9uZ2x5
IG9yIHdlYWtseS4KKyAgICAgICAgY29kZUJsb2NrLT5qaXRDb2RlKCktPnZhbGlkYXRlUmVmZXJl
bmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CisgICAgfQorICAgIAogICAgIHJldHVybiBDb21waWxh
dGlvblN1Y2Nlc3NmdWw7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTYzMSw2ICsxNjMxLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtPU1JFbnRyaWVzKExp
bmsKICAgICAgICAgbV9qaXQubm90aWNlT1NSRW50cnkoKmJsb2NrLCBtX29zckVudHJ5SGVhZHNb
b3NyRW50cnlJbmRleCsrXSwgbGlua0J1ZmZlcik7CiAgICAgfQogICAgIEFTU0VSVChvc3JFbnRy
eUluZGV4ID09IG1fb3NyRW50cnlIZWFkcy5zaXplKCkpOworICAgIAorICAgIGlmICh2ZXJib3Nl
Q29tcGlsYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAgRHVtcENvbnRleHQgZHVtcENvbnRleHQ7
CisgICAgICAgIGRhdGFMb2coIk9TUiBFbnRyaWVzOlxuIik7CisgICAgICAgIGZvciAoT1NSRW50
cnlEYXRhJiBlbnRyeURhdGEgOiBtX2ppdC5qaXRDb2RlKCktPm9zckVudHJ5KQorICAgICAgICAg
ICAgZGF0YUxvZygiICAgICIsIGluQ29udGV4dChlbnRyeURhdGEsICZkdW1wQ29udGV4dCksICJc
biIpOworICAgICAgICBpZiAoIWR1bXBDb250ZXh0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGR1
bXBDb250ZXh0LmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVQdXRCeVZhbChOb2RlKiBub2RlLCBTcGVjdWxhdGVDZWxs
T3BlcmFuZCYgYmFzZSwgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kJiBwcm9wZXJ0eSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg2LDYgKzM4NiwxMyBAQCB2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRT
CiAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwogfQogCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2Vk
UmVmZXJlbmNlcykgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fc2V0LnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cit9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiAr
MjE0LDggQEAgcHVibGljOgogICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikgY29uc3Q7CiAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29u
c3QgSGFzaFNldDxKU0NlbGwqPiYgdHJhY2tlZFJlZmVyZW5jZXMpIGNvbnN0OworICAgIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGNsb2JiZXJlZEZsYWcgPSBTdHJ1Y3R1
cmVTZXQ6OnJlc2VydmVkRmxhZzsKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRvcFZhbHVl
ID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZFZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsNiAr
MjUyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIXZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5kZmdTaG91bGRXYXRjaCgp
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKChub2RlKSwgIW5vZGUtPmNvbnN0YW50KCktPnBvaW50c1RvSGVhcCgpIHx8IG5vZGUtPmNv
bnN0YW50KCktPnN0cmVuZ3RoKCkgPj0gV2Vha1ZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAg
ICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlKSwgbm9kZS0+aXNOdW1iZXJDb25zdGFudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGl0UHJvcGVydHlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCwxMSBAQCB2b2lkIEV4aXRQcm9wZXJ0eVZhbHVlOjpkdW1wKFByaW50
U3RyZWFtCiAgICAgb3V0LnByaW50KG1fbG9jYXRpb24sICIgPT4gIiwgbV92YWx1ZSk7CiB9CiAK
K3ZvaWQgRXhpdFByb3BlcnR5VmFsdWU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0
PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNlcykgY29uc3QKK3sKKyAgICBtX3ZhbHVlLnZhbGlk
YXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuaAkocmV2aXNpb24gMTg2
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBFeGl0UHJvcGVy
dHlWYWx1ZSB3aXRoTG9jYWxzT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0OwogICAgIAogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRl
UmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNlcykgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgREZHOjpQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBtX2xv
Y2F0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAJKHJldmlzaW9uIDE4NjI3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlh
bGl6YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCwxMiBAQCB2b2lkIEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjpkdW1wCiAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIo
dGhpcyksICI6IiwgR3JhcGg6Om9wTmFtZShtX3R5cGUpLCAiKCIsIGxpc3REdW1wKG1fcHJvcGVy
dGllcyksICIpIik7CiB9CiAKK3ZvaWQgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OnZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNl
cykgY29uc3QKK3sKKyAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0
aWVzKQorICAgICAgICB2YWx1ZS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMp
OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDE4NjI3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAorICAgIHZvaWQgdmFsaWRh
dGVSZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKSBj
b25zdDsKKyAgICAKIHByaXZhdGU6CiAgICAgREZHOjpOb2RlVHlwZSBtX3R5cGU7CiAgICAgQ29k
ZU9yaWdpbiBtX29yaWdpbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEyNiwxMiBAQCB2
b2lkIEV4aXRWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgZHVtcEluQ29udGV4
dChvdXQsIDApOwogfQogCit2b2lkIEV4aXRWYWx1ZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0
IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKSBjb25zdAoreworICAgIGlmIChp
c0NvbnN0YW50KCkgJiYgISFjb25zdGFudCgpICYmIGNvbnN0YW50KCkuaXNDZWxsKCkpCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrZWRSZWZlcmVuY2VzLmNvbnRhaW5zKGNvbnN0YW50KCku
YXNDZWxsKCkpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZh
bHVlLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMiw2ICsyMjIsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKKyAgICB2b2lkIHZhbGlk
YXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNlcykg
Y29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIEV4aXRWYWx1ZUtpbmQgbV9raW5kOwogICAgIHVu
aW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2
aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTI1LDYgKzEyNSwxNCBAQCBERkc6OkNvbW1vbkRhdGEqIEpJVENv
ZGU6OmRmZ0NvbW1vbigpCiAgICAgcmV0dXJuICZjb21tb247CiB9CiAKK3ZvaWQgSklUQ29kZTo6
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVu
Y2VzKQoreworICAgIGNvbW1vbi52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMp
OworICAgIAorICAgIGZvciAoT1NSRXhpdCYgZXhpdCA6IG9zckV4aXQpCisgICAgICAgIGV4aXQu
dmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDYgKzY3
LDggQEAgcHVibGljOgogICAgIHZvaWQgaW5pdGlhbGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KENv
ZGVSZWYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUFkZHJlc3NGb3JDYWxsKENvZGVQdHIpOwogICAg
IAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8SlNDZWxsKj4mIHRy
YWNrZWRSZWZlcmVuY2VzKSBvdmVycmlkZTsKKyAgICAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+PiYgaGFuZGxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFu
ZGxlczsgfQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+PiYgZGF0YVNlY3Rp
b25zKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhU2VjdGlvbnM7IH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsMTUgQEAgQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25G
bwogICAgICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQpOwogfQogCit2b2lkIE9TUkV4aXQ6OnZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2VkUmVmZXJlbmNl
cykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3ZhbHVlcy5zaXplKCk7IGktLTspCisgICAg
ICAgIG1fdmFsdWVzW2ldLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cisg
ICAgCisgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0
aW9uIDogbV9tYXRlcmlhbGl6YXRpb25zKQorICAgICAgICBtYXRlcmlhbGl6YXRpb24tPnZhbGlk
YXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5
LDggQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIHsKICAg
ICAgICAgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2Zp
bGVkQ29kZUJsb2NrLCBFeGl0RnJvbUZUTCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgdmFsaWRh
dGVSZWZlcmVuY2VzKGNvbnN0IEhhc2hTZXQ8SlNDZWxsKj4mIHRyYWNrZWRSZWZlcmVuY2VzKTsK
IH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTAgQEAgY29u
c3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQogICAgIH0KIH0KIAordm9pZCBK
SVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgSGFzaFNldDxKU0NlbGwqPiYpCit7Cit9
CisKIEpTVmFsdWUgSklUQ29kZTo6ZXhlY3V0ZShWTSogdm0sIFByb3RvQ2FsbEZyYW1lKiBwcm90
b0NhbGxGcmFtZSkKIHsKICAgICB2b2lkKiBlbnRyeUFkZHJlc3M7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Myw2ICsxODMsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBGVEw6OkpJVENvZGUqIGZ0bCgpOwogICAgIHZpcnR1YWwgRlRM
OjpGb3JPU1JFbnRyeUpJVENvZGUqIGZ0bEZvck9TUkVudHJ5KCk7CiAgICAgCisgICAgdmlydHVh
bCB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBIYXNoU2V0PEpTQ2VsbCo+JiB0cmFja2Vk
UmVmZXJlbmNlcyk7CisgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKFZNKiwgUHJvdG9DYWxsRnJh
bWUqKTsKICAgICAKICAgICB2b2lkKiBzdGFydCgpIHsgcmV0dXJuIGRhdGFBZGRyZXNzQXRPZmZz
ZXQoMCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1v
c3ItZW50cnktdmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9kZWFkLW9zci1lbnRyeS12YWx1ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1vc3ItZW50cnktdmFsdWUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBv
ID0ge2Y6NDJ9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIE9TUkV4aXQoKTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgaWYgKCFERkdUcnVlKCkpCisg
ICAgICAgICAgICByZXN1bHQgKz0gby5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIGZvbygpOworICAgIGZ1bGxH
QygpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256160</attachid>
            <date>2015-07-04 13:56:46 -0700</date>
            <delta_ts>2015-07-04 19:18:10 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56269</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4NjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMTEwLDYgKzExMCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKICAgICBieXRlY29kZS9TdHJ1
Y3R1cmVTdHViSW5mby5jcHAKICAgICBieXRlY29kZS9Ub1RoaXNTdGF0dXMuY3BwCisgICAgYnl0
ZWNvZGUvVHJhY2tlZFJlZmVyZW5jZXMuY3BwCiAgICAgYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suY3BwCiAgICAgYnl0ZWNvZGUvVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAKICAgICBi
eXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtMTkzLDYgKzE5NCw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0xvbmdMaXZlZFN0YXRlLmNwcAogICAgIGRmZy9E
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHTWF5RXhpdC5jcHAK
KyAgICBkZmcvREZHTWluaWZpZWRHcmFwaC5jcHAKICAgICBkZmcvREZHTWluaWZpZWROb2RlLmNw
cAogICAgIGRmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAogICAgIGRmZy9ERkdOYWl2ZURv
bWluYXRvcnMuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw2
ICszNTEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxTdHJ1Y3R1cmVTdHViSW5mby5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxUb1RoaXNTdGF0dXMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcVHJhY2tlZFJlZmVyZW5jZXMuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRDb2RlQmxvY2suY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVJlY292ZXJ5
LmNwcCIgLz4KQEAgLTQzMSw2ICs0MzIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0xvbmdMaXZlZFN0YXRlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdOYWl2ZURvbWluYXRvcnMuY3BwIiAvPgpAQCAtMTAxMyw2ICsx
MDE1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFN0cnVjdHVyZVN0dWJJbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxUb1RoaXNTdGF0dXMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXFRyYWNrZWRSZWZlcmVuY2VzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxUeXBlTG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFVubGlua2VkQ29kZUJsb2NrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiIC8+CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQAogCQkwRjEzOTEyQzE2NzcxQzNEMDA5Q0NC
MDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzkxMjcxNjc3MUMzMDAwOUNDQjA3IC8qIFByb2Zp
bGVyUHJvZmlsZWRCeXRlY29kZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTNF
MDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovOyB9OwogCQkwRjE1RjE1
RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RjE1RDE0QjdBNzNBMDA1REUzN0QgLyog
Q29tbW9uU2xvd1BhdGhzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGgu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzI1
RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovOyB9OwogCQkwRjE5
MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE5MENBQTE4OUQ4MkY2
MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi87IH07CiAJCTBGMTkwQ0FE
MTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE5MENBQjE4OUQ4MkY2MDAwQUU1
RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUREODRBMThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjFERDg0OTE4QTk0NUJFMDAyNkYzRkEgLyogSlNDSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NTEsNiArNDUyLDggQEAKIAkJMEY5
MzMyQTUxNENBN0RERDAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5MzMyOUIxNENBN0RDMTAwODVGM0M2IC8q
IFN0cnVjdHVyZVNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBNzE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwICovOyB9OwogCQkwRjkzQjRBQTE4
QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGOTUyQUJDMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQTFC
NDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovOyB9OworCQkwRjk1MkFC
RDFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2
MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyog
Q29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklU
VHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGOTc0OTcxMTY4N0FERTQwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk3NDk2RjE2ODdBREUyMDBBNEZG
NkEgLyogSlNDZWxsSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xODUxLDYgKzE4NTQsNyBAQAogCQkwRjEzOTEyNzE2NzcxQzMwMDA5
Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmg7IHBhdGggPSBwcm9maWxl
ci9Qcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5kZXhpbmdUeXBlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUYxNUQxNEI3QTczQTAwNURFMzdEIC8qIENvbW1vblNs
b3dQYXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21tb25TbG93UGF0
aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMz
QTU1IC8qIERGR01pbmlmaWVkR3JhcGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHTWluaWZpZWRHcmFwaC5jcHA7IHBhdGggPSBkZmcvREZHTWluaWZpZWRHcmFw
aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTkwQ0FBMTg5RDgyRjYwMDBB
RTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBwYXRoID0gcHJvZmls
ZXIvUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMTkwQ0FCMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVySmV0dGlzb25SZWFzb24u
aDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE5NCw2ICsyMTk4LDggQEAKIAkJMEY5MzMyOUIxNENB
N0RDMTAwODVGM0M2IC8qIFN0cnVjdHVyZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJ1Y3R1cmVTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
M0I0QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY5M0I0QTgxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJp
YW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFB1dEJ5SWRWYXJpYW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAv
KiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUcmFja2VkUmVmZXJlbmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUcmFja2VkUmVmZXJlbmNlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyog
Q29kZUJsb2NrV2l0aEpJVFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q29kZUJsb2NrV2l0aEpJVFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
NzQ5NkYxNjg3QURFMjAwQTRGRjZBIC8qIEpTQ2VsbElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDZWxsSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNTAxMSw2ICs1MDE3LDcgQEAKIAkJCQkwRjU4NzRFQjE5NEZFQjEyMDBBQUIyQzEg
LyogREZHTWF5RXhpdC5jcHAgKi8sCiAJCQkJMEY1ODc0RUMxOTRGRUIxMjAwQUFCMkMxIC8qIERG
R01heUV4aXQuaCAqLywKIAkJCQlBNzA0RDkwMjE3QTBCQUE4MDA2QkE1NTQgLyogREZHTWVyZ2VN
b2RlLmggKi8sCisJCQkJMEYxNzI1RkUxQjQ4NzE5QTAwQUMzQTU1IC8qIERGR01pbmlmaWVkR3Jh
cGguY3BwICovLAogCQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkxMCAvKiBERkdNaW5pZmllZEdy
YXBoLmggKi8sCiAJCQkJMEZCNEI1MTAxNkIzQTk2NDAwM0Y2OTZCIC8qIERGR01pbmlmaWVkSUQu
aCAqLywKIAkJCQkwRjJCREM0QzE1MjI4MTgzMDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNw
cCAqLywKQEAgLTUyOTMsNiArNTMwMCw4IEBACiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhG
IC8qIERhdGFGb3JtYXQuaCAqLywKIAkJCQkwRkM3MTJEQzE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLywKIAkJCQkwRkM3MTJERDE3Q0Q4Nzc4MDA4
Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCisJCQkJRkU1MDY4NjYx
QUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgKi8sCisJCQkJRkU1MDY4
NjQxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oICovLAogCQkJCTBGQkMw
QUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCQzBB
RTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8sCiAJCQkJOTY5QTA3OTIw
RUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKQEAgLTUzNDAsOCArNTM0OSw2
IEBACiAJCQkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAq
LywKIAkJCQkxNDI5RDg4MzBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmNwcCAqLywK
IAkJCQkxNDI5RDg4NDBFRDIxQzNEMDBCODk2MTkgLyogU2FtcGxpbmdUb29sLmggKi8sCi0JCQkJ
RkU1MDY4NjYxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgKi8sCi0J
CQkJRkU1MDY4NjQxQUUyNDYzOTAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5oICovLAog
CQkJCTBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8sCiAJ
CQkJMEY1NTQxQjAxNjEzQzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi8sCiAJCQkJ
MEZEODJFODQxNDFGM0ZEQTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCAqLywKQEAgLTUz
NTQsNiArNTM2MSw4IEBACiAJCQkJQkNDRjBEMDcwRUYwQUFCOTAwNDEzQzhGIC8qIFN0cnVjdHVy
ZVN0dWJJbmZvLmggKi8sCiAJCQkJMEYyRDRERTUxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0
YXR1cy5jcHAgKi8sCiAJCQkJMEYyRDRERTYxOTgzMkRBQzAwN0Q0QjE5IC8qIFRvVGhpc1N0YXR1
cy5oICovLAorCQkJCTBGOTUyQUJBMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNl
cy5jcHAgKi8sCisJCQkJMEY5NTJBQkIxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVu
Y2VzLmggKi8sCiAJCQkJMEYyRDRERTcxOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5o
ICovLAogCQkJCUE3OUU3ODFFMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVCbG9jay5j
cHAgKi8sCiAJCQkJQTc5RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2Nr
LmggKi8sCkBAIC02MDcwLDYgKzYwNzksNyBAQAogCQkJCUE1ODQwRTI5MTg3Q0E1RTYwMDg0M0Ix
MCAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0cy1hbmQtc2NyaXB0cy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjRFNTU2MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI3MThBMUIyNTkwMDI2RDg4RiAvKiBJbnB1
dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8q
IFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTkzQ0Y3RjE4NDAzNjJD
MDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNF
MDFBQjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU5M0NGODcxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0
cnkuaCBpbiBIZWFkZXJzICovLApAQCAtNzQ5Myw2ICs3NTAzLDcgQEAKIAkJCQk2NTVFQjI5QjEw
Q0UyNTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1
NDZGNTIxMUEzMkIzMTMwMDZGMDdENSAvKiBOdWxsR2V0dGVyRnVuY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNjU1MjVGQzUxQTZERDgwMTAwN0I1NDk1IC8qIE51bGxTZXR0ZXJGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjE3MjVGRjFCNDg3MTlBMDBBQzNBNTUgLyogREZH
TWluaWZpZWRHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFMjEwN0VDN0U3MDA2
NTA0NDYgLyogTnVtYmVyQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlE
RTMxMDdFQzdFNzAwNjUwNDQ2IC8qIE51bWJlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDQ2OURFNDEwN0VDN0U3MDA2NTA0NDYgLyogTnVtYmVyUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzU2OCw2ICs3NTc5LDcgQEAKIAkJCQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdG
MTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1
ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDEy
MDJGMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGOTUyQUJDMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVmZXJlbmNlcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0SXRlcmF0b3JQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0ODAwNUY1RkY5
IC8qIFNldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjcwNDE3QjZCNUFC
MDBBN0FFM0YgLyogU2ltcGxlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MDEsNiArMjgwMSwxMyBAQCB2b2lkIENvZGVC
bG9jazo6c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAg
ICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgaXMgYW4gYW50aXBhdHRlcm4gZm9yIHR3byByZWFzb25zLiBSZWZlcmVuY2Vz
IGludHJvZHVjZWQgYnkgdGhlIERGRworICAgICAgICAvLyB0aGF0IGFyZW4ndCBpbiB0aGUgb3Jp
Z2luYWwgQ29kZUJsb2NrIGJlaW5nIGNvbXBpbGVkIHNob3VsZCBiZSB3ZWFrbHkgcmVmZXJlbmNl
ZC4KKyAgICAgICAgLy8gSW5saW5lIGNhbGwgZnJhbWVzIGFyZW4ndCBpbiB0aGUgb3JpZ2luYWwg
Q29kZUJsb2NrLCBzbyB0aGV5IHF1YWxpZnkgYXMgd2Vhay4gQWxzbywKKyAgICAgICAgLy8gdGhv
c2Ugd2VhayByZWZlcmVuY2VzIHNob3VsZCBhbHJlYWR5IGJlIHRyYWNrZWQgaW4gdGhlIERGRyBh
cyB3ZWFrIEZyb3plblZhbHVlcy4gU28sCisgICAgICAgIC8vIHRoZXJlIGlzIHByb2JhYmx5IG5v
IG5lZWQgZm9yIHRoaXMuIFdlIGFscmVhZHkgaGF2ZSBhc3NlcnRpb25zIHRoYXQgdGhpcyBzaG91
bGQgYmUKKyAgICAgICAgLy8gdW5uZWNlc3NhcnkuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MTMKICAgICAgICAgREZHOjpDb21tb25EYXRh
KiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRmZ0NvbW1vbigpOwogICAgICAgICBpZiAoZGZnQ29t
bW9uLT5pbmxpbmVDYWxsRnJhbWVzLmdldCgpKQogICAgICAgICAgICAgZGZnQ29tbW9uLT5pbmxp
bmVDYWxsRnJhbWVzLT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE4NjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCwxNSBAQCBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6
OmNhbGxlZUNvbnN0CiAKIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhbiBhbnRpcGF0dGVy
biBmb3IgdHdvIHJlYXNvbnMuIFJlZmVyZW5jZXMgaW50cm9kdWNlZCBieSB0aGUgREZHCisgICAg
Ly8gdGhhdCBhcmVuJ3QgaW4gdGhlIG9yaWdpbmFsIENvZGVCbG9jayBiZWluZyBjb21waWxlZCBz
aG91bGQgYmUgd2Vha2x5IHJlZmVyZW5jZWQuCisgICAgLy8gSW5saW5lIGNhbGwgZnJhbWVzIGFy
ZW4ndCBpbiB0aGUgb3JpZ2luYWwgQ29kZUJsb2NrLCBzbyB0aGV5IHF1YWxpZnkgYXMgd2Vhay4g
QWxzbywKKyAgICAvLyB0aG9zZSB3ZWFrIHJlZmVyZW5jZXMgc2hvdWxkIGFscmVhZHkgYmUgdHJh
Y2tlZCBpbiB0aGUgREZHIGFzIHdlYWsgRnJvemVuVmFsdWVzLiBTbywKKyAgICAvLyB0aGVyZSBp
cyBwcm9iYWJseSBubyBuZWVkIGZvciB0aGlzLiBXZSBhbHJlYWR5IGhhdmUgYXNzZXJ0aW9ucyB0
aGF0IHRoaXMgc2hvdWxkIGJlCisgICAgLy8gdW5uZWNlc3NhcnkuIEZpbmFsbHksIGp1c3QgbWFy
a2luZyB0aGUgZXhlY3V0YWJsZSBhbmQgbm90IGFueXRoaW5nIGVsc2UgaW4gdGhlIGlubGluZQor
ICAgIC8vIGNhbGwgZnJhbWUgaXMgYWxtb3N0IGNlcnRhaW5seSBpbnN1ZmZpY2llbnQgZm9yIHdo
YXQgdGhpcyBtZXRob2QgdGhvdWdodCBpdCB3YXMgZ29pbmcKKyAgICAvLyB0byBhY2NvbXBsaXNo
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MTMK
ICAgICB2aXNpdG9yLmFwcGVuZCgmZXhlY3V0YWJsZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTQ5LDYgKzE0OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkp
OyB9CisgICAgY29uc3QgVCYgb3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMp
LT5vcGVyYW5kKG9wZXJhbmQpKTsgfQogICAgIAogICAgIGJvb2wgaGFzT3BlcmFuZChpbnQgb3Bl
cmFuZCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIAogI2luY2x1ZGUgIkRGR0Fi
c3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgogI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC05Niw1ICs5NywxMyBA
QCB2b2lkIFN0cnVjdHVyZVNldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiAgICAgZHVtcEluQ29u
dGV4dChvdXQsIG51bGxwdHIpOwogfQogCit2b2lkIFN0cnVjdHVyZVNldDo6dmFsaWRhdGVSZWZl
cmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykgY29uc3QK
K3sKKyAgICBmb3JFYWNoKAorICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhzdHJ1Y3R1cmUpOworICAgICAgICB9
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMTMgKzI3LDE1IEBACiAjZGVmaW5lIFN0cnVjdHVyZVNldF9oCiAKICNpbmNsdWRlICJB
cnJheVByb2ZpbGUuaCIKKyNpbmNsdWRlICJEdW1wQ29udGV4dC5oIgogI2luY2x1ZGUgIlNwZWN1
bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCi0jaW5jbHVkZSAiRHVtcENvbnRl
eHQuaCIKICNpbmNsdWRlIDx3dGYvVGlueVB0clNldC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKIG5hbWVzcGFjZSBERkcgewogY2xhc3MgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTsKIHN0cnVjdCBBYnN0cmFjdFZhbHVlOwpAQCAtNzcsNiArNzksOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVt
cENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYp
IGNvbnN0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVHJhY2tlZFJlZmVyZW5jZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UcmFja2VkUmVmZXJlbmNlcy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHJhY2tlZFJlZmVyZW5jZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlRyYWNrZWRSZWZlcmVuY2VzLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworVHJhY2tlZFJlZmVy
ZW5jZXM6OlRyYWNrZWRSZWZlcmVuY2VzKCkKK3sKK30KKworVHJhY2tlZFJlZmVyZW5jZXM6On5U
cmFja2VkUmVmZXJlbmNlcygpCit7Cit9CisKK3ZvaWQgVHJhY2tlZFJlZmVyZW5jZXM6OmFkZChK
U0NlbGwqIGNlbGwpCit7CisgICAgaWYgKGNlbGwpCisgICAgICAgIG1fcmVmZXJlbmNlcy5hZGQo
Y2VsbCk7Cit9CisKK3ZvaWQgVHJhY2tlZFJlZmVyZW5jZXM6OmFkZChKU1ZhbHVlIHZhbHVlKQor
eworICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgYWRkKHZhbHVlLmFzQ2VsbCgpKTsK
K30KKwordm9pZCBUcmFja2VkUmVmZXJlbmNlczo6Y2hlY2soSlNDZWxsKiBjZWxsKSBjb25zdAor
eworICAgIGlmICghY2VsbCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX3JlZmVy
ZW5jZXMuY29udGFpbnMoY2VsbCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBkYXRhTG9n
KCJGb3VuZCB1bnRyYWNrZWQgcmVmZXJlbmNlOiAiLCBSYXdQb2ludGVyKGNlbGwpLCAiXG4iKTsK
KyAgICBkYXRhTG9nKCJBbGwgdHJhY2tlZCByZWZlcmVuY2VzOiAiLCAqdGhpcywgIlxuIik7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBUcmFja2VkUmVmZXJl
bmNlczo6Y2hlY2soSlNWYWx1ZSB2YWx1ZSkgY29uc3QKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxs
KCkpCisgICAgICAgIGNoZWNrKHZhbHVlLmFzQ2VsbCgpKTsKK30KKwordm9pZCBUcmFja2VkUmVm
ZXJlbmNlczo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKKyAgICBmb3IgKEpTQ2VsbCogY2VsbCA6IG1fcmVmZXJlbmNlcykKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKGNlbGwpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UcmFja2VkUmVmZXJl
bmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UcmFj
a2VkUmVmZXJlbmNlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1RyYWNrZWRSZWZlcmVuY2VzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFRyYWNrZWRSZWZlcmVuY2VzX2gKKyNkZWZpbmUgVHJhY2tlZFJlZmVyZW5jZXNfaAorCisjaW5j
bHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlcyB7CitwdWJsaWM6CisgICAgVHJhY2tlZFJlZmVy
ZW5jZXMoKTsKKyAgICB+VHJhY2tlZFJlZmVyZW5jZXMoKTsKKyAgICAKKyAgICB2b2lkIGFkZChK
U0NlbGwqKTsKKyAgICB2b2lkIGFkZChKU1ZhbHVlKTsKKyAgICAKKyAgICB2b2lkIGNoZWNrKEpT
Q2VsbCopIGNvbnN0OworICAgIHZvaWQgY2hlY2soSlNWYWx1ZSkgY29uc3Q7CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEhhc2hT
ZXQ8SlNDZWxsKj4gbV9yZWZlcmVuY2VzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBUcmFja2VkUmVmZXJlbmNlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00MjQsNiArNDI1LDEyIEBAIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICBvdXQucHJpbnQoIikiKTsKIH0KIAor
dm9pZCBBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVy
ZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKQoreworICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNr
KG1fdmFsdWUpOworICAgIG1fc3RydWN0dXJlLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVm
ZXJlbmNlcyk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSwxMSBAQAog
I2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKLW5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBU
cmFja2VkUmVmZXJlbmNlczsKKworbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogc3Ry
dWN0IE5vZGU7CkBAIC0zMzAsNiArMzM0LDggQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCisgICAgdm9pZCB2YWxpZGF0
ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKTsKKyAgICAKICAgICAvLyBUaGlz
IGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVl
IGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50
IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQogICAgIC8vIGJlIFRP
UCwgaW5kaWNhdGluZyB0aGF0IGl0IGlzIHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHN0cnVjdHVy
ZXMsIGluIHdoaWNoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMjIsNiAr
NDAyMiw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAg
ICAgQVNTRVJUKGNhbGxzaXRlQmxvY2tIZWFkKTsKICAgICAgICAgCiAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lID0gYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFt
ZXMtPmFkZCgpOworICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5mcmVlemUoY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSk7CiAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJy
aWVyRm9ySW5saW5lQ2FsbEZyYW1lRXhlY3V0YWJsZSgKICAgICAgICAgICAgIGJ5dGVDb2RlUGFy
c2VyLT5tX2dyYXBoLm1fcGxhbi53cml0ZUJhcnJpZXJzLAogICAgICAgICAgICAgbV9pbmxpbmVD
YWxsRnJhbWUtPmV4ZWN1dGFibGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgogI2luY2x1ZGUgIlZN
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTcyLDYgKzczLDI0IEBA
IGJvb2wgQ29tbW9uRGF0YTo6aW52YWxpZGF0ZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Zv
aWQgQ29tbW9uRGF0YTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2Vz
JiB0cmFja2VkUmVmZXJlbmNlcykKK3sKKyAgICBpZiAoSW5saW5lQ2FsbEZyYW1lU2V0KiBzZXQg
PSBpbmxpbmVDYWxsRnJhbWVzLmdldCgpKSB7CisgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgOiAqc2V0KSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlUmVjb3Zl
cnkmIHJlY292ZXJ5IDogaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgICAgICB0cmFj
a2VkUmVmZXJlbmNlcy5jaGVjayhyZWNvdmVyeS5jb25zdGFudCgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpCisgICAgICAgICAgICAgICAg
dHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soZXhlY3V0YWJsZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOworICAgICAgICB9CisgICAgfQorfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCShyZXZpc2lvbiAxODYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgQ29kZUJs
b2NrOwogY2xhc3MgSWRlbnRpZmllcjsKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogCiBuYW1l
c3BhY2UgREZHIHsKIApAQCAtODYsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBy
ZXR1cm4gc3RkOjptYXgoZnJhbWVSZWdpc3RlckNvdW50LCByZXF1aXJlZFJlZ2lzdGVyQ291bnRG
b3JFeGl0KTsKICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
VHJhY2tlZFJlZmVyZW5jZXMmKTsKIAogICAgIFJlZlB0cjxJbmxpbmVDYWxsRnJhbWVTZXQ+IGlu
bGluZUNhbGxGcmFtZXM7CiAgICAgVmVjdG9yPENvZGVPcmlnaW4sIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiBjb2RlT3JpZ2luczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RnJvemVuVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Zyb3plblZhbHVlLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRnJvemVuVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBtX3N0cmVuZ3RoID0gbWVyZ2UobV9zdHJlbmd0aCwgc3RyZW5n
dGgpOwogICAgIH0KICAgICAKKyAgICBib29sIHBvaW50c1RvSGVhcCgpIGNvbnN0IHsgcmV0dXJu
ICEhdmFsdWUoKSAmJiB2YWx1ZSgpLmlzQ2VsbCgpOyB9CisgICAgCiAgICAgLy8gVGhlIHN0cmVu
Z3RoIG9mIHRoZSB2YWx1ZSBpdHNlbGYuIFRoZSBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHZpZXdlZCBh
cyBmcmFnaWxlCiAgICAgLy8gZXhjZXB0IGlmIGl0IGlzIHdhdGNoZWQsIGluIHdoaWNoIGNhc2Ug
aXQncyB3ZWFrLiBOb3RlIHRoYXQgY3VycmVudGx5IHdlCiAgICAgLy8gd2F0Y2ggYWxsIHdhdGNo
YWJsZSBzdHJ1Y3R1cmVzIGluZGlzY3JpbWluYW50bHksIGFuZCBzbyB3ZSBhbHNvIG1hcmsgdGhl
bQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4
NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MjksNiArNTI5LDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcEMKICAgICAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIH0KICAgICAKKyAgICBv
dXQucHJpbnQoIkdDIFZhbHVlczpcbiIpOworICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDog
bV9mcm96ZW5WYWx1ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5wb2ludHNUb0hlYXAoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGluQ29udGV4dCgqdmFsdWUsICZteUNvbnRleHQp
LCAiXG4iKTsKKyAgICB9CisgICAgCiAgICAgaWYgKCFteUNvbnRleHQuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIG15Q29udGV4dC5kdW1wKG91dCk7CiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkocmV2aXNpb24gMTg2
MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTcwLDYgKzE3MSwxOCBAQCB2b2lk
IEpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhCiB9CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCiAKK3ZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNr
ZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykKK3sKKyAgICBjb21tb24udmFsaWRhdGVS
ZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKKyAgICAKKyAgICBmb3IgKE9TUkVudHJ5RGF0
YSYgZW50cnkgOiBvc3JFbnRyeSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbnRyeS5t
X2V4cGVjdGVkVmFsdWVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGVudHJ5Lm1fZXhwZWN0
ZWRWYWx1ZXNbaV0udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKKyAgICB9
CisgICAgCisgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVu
Y2VzKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2
aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsMTEgQEAKICNpbmNsdWRlICJKSVRDb2RlLmgi
CiAjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7
CisKK25hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRDb21waWxlcjsKIApAQCAtMTA3LDYgKzEx
MSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25D
b21waWxhdGlvblJlc3VsdChDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CiAjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29u
c3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBvdmVycmlkZTsKKyAgICAKICAgICB2b2lkIHNocmlua1Rv
Rml0KCk7CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzUsNiAr
NDc1LDU0IEBAIHZvaWQqIEpJVENvbXBpbGVyOjphZGRyZXNzT2ZEb3VibGVDb25zdGEKIH0KICNl
bmRpZgogCit2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeShCYXNpY0Jsb2NrJiBiYXNp
Y0Jsb2NrLCBKSVRDb21waWxlcjo6TGFiZWwgYmxvY2tIZWFkLCBMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKQoreworICAgIC8vIE9TUiBlbnRyeSBpcyBub3QgYWxsb3dlZCBpbnRvIGJsb2NrcyBkZWVt
ZWQgdW5yZWFjaGFibGUgYnkgY29udHJvbCBmbG93IGFuYWx5c2lzLgorICAgIGlmICghYmFzaWNC
bG9jay5pbnRlcnNlY3Rpb25PZkNGQUhhc1Zpc2l0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IG1faml0Q29kZS0+YXBwZW5kT1NSRW50cnlE
YXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5vZmZzZXRPZihibG9ja0hl
YWQpKTsKKyAgICAKKyAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9IGJhc2ljQmxvY2suaW50
ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkOworICAgICAgICAKKyAgICAvLyBGaXggdGhlIGV4
cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFibGUgd2lsbCBoYXZl
IGFuIGV4cGVjdGVkCisgICAgLy8gdmFsdWUgb2YgKE5vbmUsIFtdKS4gQnV0IHRoZSBvbGQgSklU
IG1heSBzdGFzaCBzb21lIHZhbHVlcyB0aGVyZS4gU28gd2UgcmVhbGx5CisgICAgLy8gbmVlZCAo
VG9wLCBUT1ApLgorICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNp
Y0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVu
dChhcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSkKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50
KS5tYWtlSGVhcFRvcCgpOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2Fs
IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkg
eworICAgICAgICBOb2RlKiBub2RlID0gYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwo
bG9jYWwpOworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFrZUhlYXBU
b3AoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBlbnRyeS0+
bV9tYWNoaW5lU3RhY2tVc2VkLnNldCh2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkudG9Mb2NhbCgp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAg
ICAgICBlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuc2V0KGxvY2FsKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAg
ICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuc2V0KGxvY2FsKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKKyAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9yZXNodWZmbGluZ3MuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBPU1JF
bnRyeVJlc2h1ZmZsaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmxvY2Fs
KCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBlbnRyeS0+bV9yZXNodWZm
bGluZ3Muc2hyaW5rVG9GaXQoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjY1LDUzICsyNjUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICB2b2lkIG5v
dGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENvbXBpbGVyOjpMYWJlbCBi
bG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCi0gICAgewotICAgICAgICAvLyBPU1Ig
ZW50cnkgaXMgbm90IGFsbG93ZWQgaW50byBibG9ja3MgZGVlbWVkIHVucmVhY2hhYmxlIGJ5IGNv
bnRyb2wgZmxvdyBhbmFseXNpcy4KLSAgICAgICAgaWYgKCFiYXNpY0Jsb2NrLmludGVyc2VjdGlv
bk9mQ0ZBSGFzVmlzaXRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAg
IE9TUkVudHJ5RGF0YSogZW50cnkgPSBtX2ppdENvZGUtPmFwcGVuZE9TUkVudHJ5RGF0YShiYXNp
Y0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGxpbmtCdWZmZXIub2Zmc2V0T2YoYmxvY2tIZWFkKSk7Ci0g
ICAgICAgIAotICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9IGJhc2ljQmxvY2suaW50
ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkOwotICAgICAgICAKLSAgICAgICAgLy8gRml4IHRo
ZSBleHBlY3RlZCB2YWx1ZXM6IGluIG91ciBwcm90b2NvbCwgYSBkZWFkIHZhcmlhYmxlIHdpbGwg
aGF2ZSBhbiBleHBlY3RlZAotICAgICAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBCdXQgdGhl
IG9sZCBKSVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkKLSAgICAg
ICAgLy8gbmVlZCAoVG9wLCBUT1ApLgotICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFy
aWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAgICAgIGlmICghbm9kZSB8
fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBl
Y3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZUhlYXBUb3AoKTsKLSAgICAgICAgfQot
ICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzaWNCbG9jay52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewotICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKLSAgICAgICAg
ICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFrZUhlYXBUb3AoKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICBlbnRy
eS0+bV9tYWNoaW5lU3RhY2tVc2VkLnNldCh2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkudG9Mb2Nh
bCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxl
LT5mbHVzaEZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgot
ICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuc2V0KGxvY2Fs
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBGbHVz
aGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1hY2hp
bmVJbnQuc2V0KGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+bG9j
YWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZW50cnktPm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIE9T
UkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUt
PmxvY2FsKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZzZXQoKSkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLnNocmlua1RvRml0KCk7Ci0gICAgfQorICAgIHZv
aWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYsIEpJVENvbXBpbGVyOjpMYWJlbCBibG9ja0hl
YWQsIExpbmtCdWZmZXImKTsKICAgICAKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZSgpIHsg
cmV0dXJuIG1faml0Q29kZTsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZEdyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJU
cmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3ZvaWQgTWluaWZpZWRHcmFwaDo6cHJlcGFyZUFuZFNocmluaygpCit7CisgICAgc3RkOjpzb3J0
KG1fbGlzdC5iZWdpbigpLCBtX2xpc3QuZW5kKCksIE1pbmlmaWVkTm9kZTo6Y29tcGFyZUJ5Tm9k
ZUluZGV4KTsKKyAgICBtX2xpc3Quc2hyaW5rVG9GaXQoKTsKK30KKwordm9pZCBNaW5pZmllZEdy
YXBoOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWRS
ZWZlcmVuY2VzKQoreworICAgIGZvciAoTWluaWZpZWROb2RlJiBub2RlIDogbV9saXN0KSB7Cisg
ICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICB0cmFja2VkUmVmZXJl
bmNlcy5jaGVjayhub2RlLmNvbnN0YW50KCkpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCShyZXZpc2lvbiAxODYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzMsNyArMzMsMTEgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CisKK25hbWVzcGFj
ZSBERkcgewogCiBjbGFzcyBNaW5pZmllZEdyYXBoIHsKIHB1YmxpYzoKQEAgLTUwLDExICs1NCw5
IEBAIHB1YmxpYzoKICAgICAgICAgbV9saXN0LmFwcGVuZChub2RlKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBwcmVwYXJlQW5kU2hyaW5rKCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6c29ydChtX2xp
c3QuYmVnaW4oKSwgbV9saXN0LmVuZCgpLCBNaW5pZmllZE5vZGU6OmNvbXBhcmVCeU5vZGVJbmRl
eCk7Ci0gICAgICAgIG1fbGlzdC5zaHJpbmtUb0ZpdCgpOwotICAgIH0KKyAgICB2b2lkIHByZXBh
cmVBbmRTaHJpbmsoKTsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBU
cmFja2VkUmVmZXJlbmNlcyYpOwogICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8TWluaWZpZWRO
b2RlPiBtX2xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
LmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDkg
KzM1LDYxIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNTdGFja0lubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQgT1NSRW50cnlEYXRhOjpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRlY29kZUluZGV4LCAiLCBtYWNoaW5lIGNv
ZGUgb2Zmc2V0ID0gIiwgbV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgb3V0LnByaW50KCIsIHN0
YWNrIHJ1bGVzID0gWyIpOworICAgIAorICAgIGF1dG8gcHJpbnRPcGVyYW5kID0gWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9leHBlY3Rl
ZFZhbHVlcy5vcGVyYW5kKHJlZyksIGNvbnRleHQpLCAiICgiKTsKKyAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHRvUmVnOworICAgICAgICBib29sIG92ZXJ3cml0dGVuID0gZmFsc2U7CisgICAgICAg
IGZvciAoT1NSRW50cnlSZXNodWZmbGluZyByZXNodWZmbGluZyA6IG1fcmVzaHVmZmxpbmdzKSB7
CisgICAgICAgICAgICBpZiAocmVnID09IFZpcnR1YWxSZWdpc3RlcihyZXNodWZmbGluZy5mcm9t
T2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIHRvUmVnID0gVmlydHVhbFJlZ2lzdGVyKHJlc2h1
ZmZsaW5nLnRvT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChyZWcgPT0gVmlydHVhbFJlZ2lzdGVyKHJlc2h1ZmZsaW5nLnRvT2Zm
c2V0KSkKKyAgICAgICAgICAgICAgICBvdmVyd3JpdHRlbiA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFvdmVyd3JpdHRlbiAmJiAhdG9SZWcuaXNWYWxpZCgpKQorICAgICAgICAgICAg
dG9SZWcgPSByZWc7CisgICAgICAgIGlmICh0b1JlZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAg
IGlmICh0b1JlZy5pc0xvY2FsKCkgJiYgIW1fbWFjaGluZVN0YWNrVXNlZC5nZXQodG9SZWcudG9M
b2NhbCgpKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoImlnbm9yZWQiKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIm1hcHMgdG8gIiwgdG9SZWcpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgib3ZlcndyaXR0ZW4iKTsKKyAg
ICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgbV9sb2NhbHNGb3JjZWREb3VibGUuZ2V0KHJlZy50
b0xvY2FsKCkpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIGZvcmNlZCBkb3VibGUiKTsKKyAg
ICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgbV9sb2NhbHNGb3JjZWRNYWNoaW5lSW50LmdldChy
ZWcudG9Mb2NhbCgpKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCBmb3JjZWQgbWFjaGluZSBp
bnQiKTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgfTsKKyAgICAKKyAgICBDb21tYVBy
aW50ZXIgY29tbWE7CisgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRleCA9IG1fZXhwZWN0ZWRW
YWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0tOykgeworICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIpOworICAgICAgICBwcmlu
dE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnRJbmRleCkpOworICAg
IH0KKyAgICBmb3IgKHNpemVfdCBsb2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8IG1fZXhwZWN0
ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbEluZGV4KSB7CisgICAgICAgIG91dC5w
cmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6Iik7CisgICAgICAgIHByaW50T3BlcmFu
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbEluZGV4KSk7CisgICAgfQorICAgIAorICAg
IG91dC5wcmludCgiXSwgbWFjaGluZSBzdGFjayB1c2VkID0gIiwgbV9tYWNoaW5lU3RhY2tVc2Vk
KTsKK30KKwordm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisKIHZvaWQqIHByZXBhcmVP
U1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoY29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjAsNiArNjAsOSBAQCBz
dHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICBCaXRWZWN0b3IgbV9sb2NhbHNGb3JjZWRNYWNoaW5l
SW50OwogICAgIFZlY3RvcjxPU1JFbnRyeVJlc2h1ZmZsaW5nPiBtX3Jlc2h1ZmZsaW5nczsKICAg
ICBCaXRWZWN0b3IgbV9tYWNoaW5lU3RhY2tVc2VkOworICAgIAorICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlEYXRh
Qnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYs
NyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMu
aCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVy
ZW5jZXMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogI2lmIEVOQUJMRShGVExf
SklUKQpAQCAtNTM2LDYgKzUzNywyMSBAQCBDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6
ZVdpdGhvdXROCiAgICAgCiAgICAgcmVhbGx5QWRkKGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdD
b21tb24oKSk7CiAgICAgCisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsKKyAgICAgICAg
VHJhY2tlZFJlZmVyZW5jZXMgdHJhY2tlZFJlZmVyZW5jZXM7CisgICAgICAgIAorICAgICAgICBm
b3IgKFdyaXRlQmFycmllcjxKU0NlbGw+JiByZWZlcmVuY2UgOiBjb2RlQmxvY2stPmppdENvZGUo
KS0+ZGZnQ29tbW9uKCktPndlYWtSZWZlcmVuY2VzKQorICAgICAgICAgICAgdHJhY2tlZFJlZmVy
ZW5jZXMuYWRkKHJlZmVyZW5jZS5nZXQoKSk7CisgICAgICAgIGZvciAoV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4mIHJlZmVyZW5jZSA6IGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+
d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCisgICAgICAgICAgICB0cmFja2VkUmVmZXJlbmNlcy5h
ZGQocmVmZXJlbmNlLmdldCgpKTsKKyAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGNvbnN0YW50IDogY29kZUJsb2NrLT5jb25zdGFudHMoKSkKKyAgICAgICAgICAgIHRyYWNrZWRS
ZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVj
ayB0aGF0IGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgd2UgaGF2ZSBhbnl3aGVyZSBpbiB0aGUg
SklUQ29kZSBhcmUgYWxzbworICAgICAgICAvLyB0cmFja2VkIGVpdGhlciBzdHJvbmdseSBvciB3
ZWFrbHkuCisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZSgpLT52YWxpZGF0ZVJlZmVyZW5jZXMo
dHJhY2tlZFJlZmVyZW5jZXMpOworICAgIH0KKyAgICAKICAgICByZXR1cm4gQ29tcGlsYXRpb25T
dWNjZXNzZnVsOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MzEs
NiArMTYzMSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NSRW50cmllcyhMaW5rCiAg
ICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KCpibG9jaywgbV9vc3JFbnRyeUhlYWRzW29zckVu
dHJ5SW5kZXgrK10sIGxpbmtCdWZmZXIpOwogICAgIH0KICAgICBBU1NFUlQob3NyRW50cnlJbmRl
eCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKKyAgICAKKyAgICBpZiAodmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIER1bXBDb250ZXh0IGR1bXBDb250ZXh0OworICAg
ICAgICBkYXRhTG9nKCJPU1IgRW50cmllczpcbiIpOworICAgICAgICBmb3IgKE9TUkVudHJ5RGF0
YSYgZW50cnlEYXRhIDogbV9qaXQuaml0Q29kZSgpLT5vc3JFbnRyeSkKKyAgICAgICAgICAgIGRh
dGFMb2coIiAgICAiLCBpbkNvbnRleHQoZW50cnlEYXRhLCAmZHVtcENvbnRleHQpLCAiXG4iKTsK
KyAgICAgICAgaWYgKCFkdW1wQ29udGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICBkdW1wQ29u
dGV4dC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRG91YmxlUHV0QnlWYWwoTm9kZSogbm9kZSwgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQmIGJhc2UsIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCYgcHJvcGVydHkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw2
ICszODYsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKFByaW50UwogICAg
IGR1bXBJbkNvbnRleHQob3V0LCAwKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWRSZWZl
cmVuY2VzKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAg
bV9zZXQudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDEx
IEBACiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIK
IAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCituYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSB7CiBwdWJsaWM6CkBAIC0yMTQsNiArMjE4LDggQEAgcHVibGljOgog
ICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAgICAg
Ym9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7
CiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5j
ZXMmKSBjb25zdDsKKyAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBj
bG9iYmVyZWRGbGFnID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZEZsYWc7CiAgICAgc3RhdGljIGNv
bnN0IHVpbnRwdHJfdCB0b3BWYWx1ZSA9IFN0cnVjdHVyZVNldDo6cmVzZXJ2ZWRWYWx1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAx
ODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRp
b24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5jb25zdGFudCgpLT5wb2lu
dHNUb0hlYXAoKSB8fCBub2RlLT5jb25zdGFudCgpLT5zdHJlbmd0aCgpID49IFdlYWtWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgRG91Ymxl
Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmlzTnVtYmVyQ29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZp
c2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0
eVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTEgQEAgdm9pZCBFeGl0UHJv
cGVydHlWYWx1ZTo6ZHVtcChQcmludFN0cmVhbQogICAgIG91dC5wcmludChtX2xvY2F0aW9uLCAi
ID0+ICIsIG1fdmFsdWUpOwogfQogCit2b2lkIEV4aXRQcm9wZXJ0eVZhbHVlOjp2YWxpZGF0ZVJl
ZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKSBjb25z
dAoreworICAgIG1fdmFsdWUudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsK
K30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVy
dHlWYWx1ZS5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDExIEBA
CiAjaW5jbHVkZSAiREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKICNpbmNsdWRlICJGVExFeGl0
VmFsdWUuaCIKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCituYW1lc3BhY2UgRlRMIHsKIAogY2xh
c3MgRXhpdFByb3BlcnR5VmFsdWUgewogcHVibGljOgpAQCAtNTQsNiArNTgsOCBAQCBwdWJsaWM6
CiAgICAgRXhpdFByb3BlcnR5VmFsdWUgd2l0aExvY2Fsc09mZnNldChpbnQgb2Zmc2V0KSBjb25z
dDsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisg
ICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1fbG9j
YXRpb247CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMTg2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFs
aXphdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDEyIEBAIHZvaWQgRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmR1bXAKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0
aGlzKSwgIjoiLCBHcmFwaDo6b3BOYW1lKG1fdHlwZSksICIoIiwgbGlzdER1bXAobV9wcm9wZXJ0
aWVzKSwgIikiKTsKIH0KIAordm9pZCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6dmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNl
cykgY29uc3QKK3sKKyAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0
aWVzKQorICAgICAgICB2YWx1ZS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMp
OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RN
YXRlcmlhbGl6YXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDE4NjI3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsMTEgQEAKICNpbmNsdWRlICJGVExFeGl0
VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAotbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVu
Y2VzOworCituYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6
YXRpb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKQpAQCAtNTMsNiArNTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2Vz
KGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykgY29uc3Q7CisgICAg
CiBwcml2YXRlOgogICAgIERGRzo6Tm9kZVR5cGUgbV90eXBlOwogICAgIENvZGVPcmlnaW4gbV9v
cmlnaW47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3Bw
CShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIApAQCAtMTI2LDYgKzEyNywxMiBAQCB2b2lkIEV4aXRWYWx1ZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjCiAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwogfQogCit2b2lk
IEV4aXRWYWx1ZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0
cmFja2VkUmVmZXJlbmNlcykgY29uc3QKK3sKKyAgICBpZiAoaXNDb25zdGFudCgpKQorICAgICAg
ICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhjb25zdGFudCgpKTsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDcgKzM0LDExIEBACiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworbmFtZXNwYWNlIEZU
TCB7CiAKIC8vIFRoaXMgaXMgbGlrZSBWYWx1ZVJlY292ZXJ5LCBidXQgcmVzcGVjdHMgdGhlIHdh
eSB0aGF0IHRoZSBGVEwgZG9lcyBPU1IKIC8vIGV4aXQ6IHRoZSBsaXZlIG5vbi1jb25zdGFudCBu
b24tZmx1c2hlZCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMKQEAgLTIyMiw2ICsyMjYs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAK
KyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNv
bnN0OworICAgIAogcHJpdmF0ZToKICAgICBFeGl0VmFsdWVLaW5kIG1fa2luZDsKICAgICB1bmlv
biB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlz
aW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEyNSw2ICsxMjUsMTQgQEAgREZHOjpDb21tb25EYXRhKiBKSVRDb2Rl
OjpkZmdDb21tb24oKQogICAgIHJldHVybiAmY29tbW9uOwogfQogCit2b2lkIEpJVENvZGU6OnZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5j
ZXMpCit7CisgICAgY29tbW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7
CisgICAgCisgICAgZm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkKKyAgICAgICAgZXhpdC52
YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcs
MTEgQEAKIAogI2RlZmluZSBTRUNUSU9OX05BTUUoTkFNRSkgKFNFQ1RJT05fTkFNRV9QUkVGSVgg
TkFNRSkKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCituYW1lc3BhY2UgRlRMIHsKIAogY2xhc3Mg
SklUQ29kZSA6IHB1YmxpYyBKU0M6OkpJVENvZGUgewogcHVibGljOgpAQCAtNjcsNiArNzEsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBpbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJl
Zik7CiAgICAgdm9pZCBpbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0cik7CiAgICAgCisg
ICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBvdmVy
cmlkZTsKKyAgICAKICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+PiYgaGFuZGxlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlczsgfQogICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+PiYgZGF0YVNlY3Rpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9kYXRhU2VjdGlvbnM7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTUgQEAgQ29k
ZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25GbwogICAgICAgICBtX3BhdGNoYWJs
ZUNvZGVPZmZzZXQpOwogfQogCit2b2lkIE9TUkV4aXQ6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25z
dCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV92YWx1ZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3ZhbHVlc1tpXS52YWxp
ZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOworICAgIAorICAgIGZvciAoRXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IG1fbWF0ZXJpYWxpemF0
aW9ucykKKyAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tl
ZFJlZmVyZW5jZXMpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dC5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsMTEgQEAKICNpbmNsdWRlICJWYWx1
ZVByb2ZpbGUuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZl
cmVuY2VzOworCituYW1lc3BhY2UgRlRMIHsKIAogLy8gVHJhY2tzIG9uZSBPU1IgZXhpdCBzaXRl
IHdpdGhpbiB0aGUgRlRMIEpJVC4gT1NSIGV4aXQgaW4gRlRMIHdvcmtzIGJ5IGRlY29uc3RydWN0
aW5nCiAvLyB0aGUgY3JhenkgdGhhdCBpcyBPU1IgZG93biB0byBzaW1wbGUgU1NBIENGRyBwcmlt
aXRpdmVzIHRoYXQgYW55IGNvbXBpbGVyIGJhY2tlbmQKQEAgLTE1OSw2ICsxNjMsOCBAQCBzdHJ1
Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgewogICAgICAgICBPU1JF
eGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRDb2RlQmxv
Y2ssIEV4aXRGcm9tRlRMKTsKICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5j
ZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24g
MTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsNiArNjQsMTAgQEAgY29uc3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUo
SklUVHlwZSBqaQogICAgIH0KIH0KIAordm9pZCBKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMo
Y29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKQoreworfQorCiBKU1ZhbHVlIEpJVENvZGU6OmV4ZWN1
dGUoVk0qIHZtLCBQcm90b0NhbGxGcmFtZSogcHJvdG9DYWxsRnJhbWUpCiB7CiAgICAgdm9pZCog
ZW50cnlBZGRyZXNzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlz
aW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIGNsYXNzIEpJVENvZGU7CiB9CiAKIHN0cnVjdCBQ
cm90b0NhbGxGcmFtZTsKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogY2xhc3MgVk07CiAKIGNs
YXNzIEpJVENvZGUgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUQ29kZT4gewpAQCAt
MTgzLDYgKzE4NCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZUTDo6SklUQ29kZSogZnRsKCk7
CiAgICAgdmlydHVhbCBGVEw6OkZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsK
ICAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRS
ZWZlcmVuY2VzJik7CisgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKFZNKiwgUHJvdG9DYWxsRnJh
bWUqKTsKICAgICAKICAgICB2b2lkKiBzdGFydCgpIHsgcmV0dXJuIGRhdGFBZGRyZXNzQXRPZmZz
ZXQoMCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1v
c3ItZW50cnktdmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9kZWFkLW9zci1lbnRyeS12YWx1ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1vc3ItZW50cnktdmFsdWUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBv
ID0ge2Y6NDJ9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIE9TUkV4aXQoKTsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgaWYgKCFERkdUcnVlKCkpCisg
ICAgICAgICAgICByZXN1bHQgKz0gby5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIGZvbygpOworICAgIGZ1bGxH
QygpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256165</attachid>
            <date>2015-07-04 19:18:10 -0700</date>
            <delta_ts>2015-07-07 11:40:41 -0700</delta_ts>
            <desc>probably done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>81679</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg2Mjg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5OCBA
QAorMjAxNS0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBmcmFnaWxlIGZyb3plbiB2YWx1ZXMgYXJlIGZ1bmRhbWVudGFsbHkgYnJva2VuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY2MDIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
Y2hhbmdlIGdldHMgcmlkIG9mIHRoZSBGcmFnaWxlVmFsdWUgdmFsdWUgc3RyZW5ndGgsIGJlY2F1
c2UgaXQgd2FzIGZ1bmRhbWVudGFsbHkKKyAgICAgICAgYnJva2VuLgorICAgICAgICAKKyAgICAg
ICAgRnJhZ2lsZVZhbHVlIHdhcyBhIHZhbHVlIGtub3duIHRvIHRoZSBjb21waWxlciBidXQgbm90
IHRyYWNrZWQgYnkgdGhlIEdDIGluIGFueSB3YXkgLQorICAgICAgICBpdCB3YXNuJ3QgbWFya2Vk
IGFuZCBpdCB3YXNuJ3Qgd2Vhay4gVGhpcyB3YXMgdXNlZCB0byBzdXBwb3J0IEFJIGJvb3RzdHJh
cCBmb3IgT1NSCisgICAgICAgIG11c3QtaGFuZGxlIHZhbHVlcy4gVGhlIHBoaWxvc29waHkgd2Fz
IHRoYXQgaWYgdGhlIGNvbXBpbGVyIGRpZCB1c2UgdGhlIHZhbHVlIGZvcgorICAgICAgICBvcHRp
bWl6YXRpb24sIGl0IHdvdWxkIGhhdmUgYmVlbiBzdHJlbmd0aGVuZWQgdG8gYSB3ZWFrIHZhbHVl
IChvciBtYXliZSBldmVuIGEgc3Ryb25nCisgICAgICAgIHZhbHVlLCB0aG91Z2ggd2UgcHJvYmFi
bHkgd29uJ3QgZG8gdGhhdCkuIEJ1dCB0aGlzIHdhcyB0b28gbXVjaCBvZiBhIHBpcGUgZHJlYW0u
IEkndmUKKyAgICAgICAgZm91bmQgYXQgbGVhc3Qgb25lIGNhc2Ugd2hlcmUgdGhlIGNvbXBpbGVy
IGRpZCB1c2UgdGhlIHZhbHVlLCBidXQgbmV2ZXIgc3RyZW5ndGhlbmUKKyAgICAgICAgaXQ6IGl0
IHdvdWxkIGhhcHBlbiBpZiB0aGUgdmFsdWUgZW5kZWQgdXAgaW4gYW4gT1NSIGVudHJ5IGRhdGEg
ZXhwZWN0ZWQgdmFsdWUuIFRoZW4gaWYKKyAgICAgICAgd2UgR0NlZCwgd2UgbWlnaHQgaGF2ZSBr
aWxsZWQgdGhlIHZhbHVlLCBidXQgT1NSIGVudHJ5IHdvdWxkIHN0aWxsIHRyeSB0byB1c2UgaXQg
Zm9yCisgICAgICAgIHZhbGlkYXRpb24uIFRoYXQgbWlnaHQgaGF2ZSBzb3J0IG9mIGp1c3Qgd29y
a2VkLCBidXQgaXQncyBjbGVhcmx5IHNoYWR5LgorCisgICAgICAgIFRoZSByZWFzb24gd2h5IHdl
IG1hZGUgbXVzdC1oYW5kbGUgdmFsdWVzIGZyYWdpbGUgYW5kIG5vdCB3ZWFrIGlzIHRoYXQgbW9z
dCBvZiB0aGUgdGltZQorICAgICAgICB0aGUgdmFsdWVzIGRpc2FwcGVhciBmcm9tIHRoZSBhYnN0
cmFjdCBzdGF0ZTogdGhleSBhcmUgTFVCZWQgdG8gYSBub24tY29uc3RhbnQuIElmIHdlCisgICAg
ICAgIGtlcHQgdGhlbSBhcm91bmQgYXMgd2Vhaywgd2UnZCBoYXZlIHRvbyBtYW55IGNhc2VzIG9m
IHRoZSBHQyBraWxsaW5nIHRoZSBjb2RlIGJlY2F1c2UKKyAgICAgICAgaXQgdGhvdWdodCB0aGF0
IHRoZSB2YWx1ZSB3YXMgc29tZWhvdyBtZWFuaW5nZnVsIHRvIHRoZSBjb2RlIHdoZW4gaXQgd2Fz
IG9ubHkgdXNlZCBhcyBhCisgICAgICAgIHRlbXBvcmFyeSBhcnRpZmFjdCBvZiBvcHRpbWl6YXRp
b24uCisKKyAgICAgICAgU28sIGl0J3MgdHJ1ZSB0aGF0IGl0J3MgdmVyeSBpbXBvcnRhbnQgZm9y
IG11c3QtaGFuZGxlIHZhbHVlcyBub3QgdG8gYXV0b21hdGljYWxseSBiZQorICAgICAgICB3ZWFr
IG9yIHN0cm9uZy4gSXQncyBhbHNvIHRydWUgdGhhdCB0aGUgdmFsdWVzIGFyZSBuZWNlc3Nhcnkg
Zm9yIEFJIGJvb3RzdHJhcCBiZWNhdXNlCisgICAgICAgIHdlIG5lZWQgdG8ga25vdyB3aGF0IHZh
bHVlcyBPU1IgZW50cnkgd2lsbCByZXF1aXJlLiBCdXQgd2Ugc2hvdWxkbid0IGFjY29tcGxpc2gg
dGhlc2UKKyAgICAgICAgZ29hbHMgYnkgaGF2aW5nIHRoZSBjb21waWxlciBob2xkIG9udG8gd2hh
dCBhcmUgZXNzZW50aWFsbHkgZGFuZ2xpbmcgcG9pbnRlcnMuCisgICAgICAgIAorICAgICAgICBU
aGlzIGltcGxlbWVudHMgYSBiZXR0ZXIgc29sdXRpb246IGluc3RlYWQgb2YgaGF2aW5nIEluUGxh
Y2VBYnN0cmFjdFN0YXRlIGJvb3RzdHJhcCB0aGUKKyAgICAgICAgQUkgd2l0aCBtdXN0LWhhbmRs
ZSB2YWx1ZXMgYXQgdGhlIGJlZ2lubmluZywgd2Ugbm93IHdpZGVuIHRoZSB2YWx1ZXNBdEhlYWQg
b2YgdGhlCisgICAgICAgIG11c3QtaGFuZGxlIGJsb2NrIGFmdGVyIEFJIGNvbnZlcmdlcy4gVGhp
cyB3aWRlbmluZyBpcyBkb25lIGluIENGQVBoYXNlLiBUaGlzIGFsbG93cyB1cworICAgICAgICB0
byBzZWUgaWYgdGhlIG11c3QtaGFuZGxlIHZhbHVlcyBhcmUgbmVjZXNzYXJ5IGF0IGFsbC4gSW4g
bW9zdCBjYXNlcywgdGhlIHdpZGVuaW5nCisgICAgICAgIHRha2VzIGEgbm9uLWNvbnN0YW50IGFi
c3RyYWN0IHZhbHVlIGFuZCBzaW1wbHkgYW1lbmRzIHNvbWV0aGluZyB0byBpdHMgdHlwZSBiYXNl
ZCBvbgorICAgICAgICB0aGUgdHlwZSBvZiB0aGUgbXVzdC1oYW5kbGUgdmFsdWUsIGFuZCBzbyB0
aGUgbXVzdC1oYW5kbGUgdmFsdWUgbmV2ZXIgYWN0dWFsbHkgc2hvd3MgdXAKKyAgICAgICAgaW4g
ZWl0aGVyIHRoZSBJUiBvciBhbnkgYWJzdHJhY3QgdmFsdWUuIEluIHRoZSB1bmxpa2VseSBldmVu
dCB0aGF0IHRoZSB2YWx1ZSBhdCBoZWFkIGlzCisgICAgICAgIGJvdHRvbSwgd2UgZnJlZXplIHRo
ZSBtdXN0LWhhbmRsZSB2YWx1ZS4gVGhpcyBjaGFuZ2UgcmVtb3ZlcyBGcmFnaWxlVmFsdWUsIGFu
ZCB0aGlzCisgICAgICAgIGZyZWV6aW5nIHVzZXMgV2Vha1ZhbHVlIGFzIHRoZSBzdHJlbmd0aC4g
VGhhdCBtYWtlcyBzZW5zZTogc2luY2UgdGhlIGFic3RyYWN0IHZhbHVlIHdhcworICAgICAgICBi
b3R0b20sIHRoZSBtdXN0LWhhbmRsZSB2YWx1ZSBiZWNvbWVzIGludGVncmFsIHRvIHRoZSBJUiBh
bmQgc28gaXQgbWFrZXMgbm8gc2Vuc2UgZm9yCisgICAgICAgIHRoZSBHQyB0byBrZWVwIHRoZSBy
ZXN1bHRpbmcgQ29kZUJsb2NrIGFsaXZlIGlmIHRoYXQgbXVzdC1oYW5kbGUgdmFsdWUgZGllcy4g
VGhpcyB3aWxsCisgICAgICAgIHNvbWV0aW1lcyBoYXBwZW4gZm9yIGV4YW1wbGUgaWYgeW91IGhh
dmUgYSB2ZXJ5IGxvbmctcnVubmluZyBsb29wIHdob3NlIHByZS1oZWFkZXIKKyAgICAgICAgYWxs
b2NhdGVzIHNvbWUgb2JqZWN0LCBidXQgdGhhdCBwcmUtaGVhZGVyIGFwcGVhcnMgdG8gYWx3YXlz
IGV4aXQgdG8gdGhlIG9wdGltaXppbmcgSklUCisgICAgICAgIGJlY2F1c2UgaXQgd2FzIG9ubHkg
cHJvZmlsZWQgb25jZSBpbiB0aGUgTExJbnQgYW5kIHRoYXQgcHJvZmlsaW5nIGFwcGVhcnMgaW5z
dWZmaWNpZW50CisgICAgICAgIHRvIHRoZSBERkcuIEluIHRoYXQgY2FzZSwgd2UnbGwgZWZmZWN0
aXZlbHkgY29uc3RhbnQtZm9sZCB0aGUgcmVmZXJlbmNlcyB0byB0aGUgb2JqZWN0CisgICAgICAg
IGluc2lkZSB0aGUgbG9vcCwgd2hpY2ggaXMgYm90aCBlZmZpY2llbnQgKHlheSBjb25zdGFudCBm
b2xkaW5nISkgYW5kIG5lY2VzYXJ5CisgICAgICAgIChvdGhlcndpc2Ugd2Ugd291bGRuJ3Qga25v
dyB3aGF0IHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZSBzaG91bGQgaGF2ZSBiZWVuKS4KKyAgICAg
ICAgCisgICAgICAgIFRlc3RpbmcgYW5kIGRlYnVnZ2luZyB0aGlzIGlzIGNvbXBsaWNhdGVkLiBT
bywgdGhpcyBhZGRzIHNvbWUgbmV3IGNhcGFiaWxpdGllczoKKyAgICAgICAgCisgICAgICAgIC0g
REZHIElSIGR1bXBzIGFsc28gZHVtcCBhbGwgb2YgdGhlIEZyb3plblZhbHVlcyB0aGF0IHBvaW50
IHRvIHRoZSBoZWFwIGFsb25nIHdpdGgKKyAgICAgICAgICB0aGVpciBzdHJlbmd0aHMsIHNvIHRo
YXQgaXQncyBlYXN5IHRvIHNlZSB3aGF0IEdDIG9iamVjdHMgdGhlIERGRyBmZWVscyBhcmUgbmVj
ZXNzYXJ5CisgICAgICAgICAgZm9yIHRoZSBjb21waWxhdGlvbi4KKyAgICAgICAgCisgICAgICAg
IC0gREZHIE9TUiBlbnRyeSBwcmVwYXJhdGlvbiBwcmludHMgb3V0IHRoZSBPU1IgZW50cnkgZGF0
YSBzdHJ1Y3R1cmVzLCBzbyB0aGF0IGl0J3MgZWFzeQorICAgICAgICAgIHRvIHNlZSB3aGF0IEdD
IHBvaW50ZXJzIChhbmQgb3RoZXIgdGhpbmdzKSBhcmUgdXNlZCBmb3IgT1NSIGVudHJ5IHZhbGlk
YXRpb24uIFRoZQorICAgICAgICAgIHByaW50b3V0cyBhcmUgcXVpdGUgZGV0YWlsZWQsIGFuZCBz
aG91bGQgYWxzbyBoZWxwIG90aGVyIGtpbmRzIG9mIE9TUiBlbnRyeQorICAgICAgICAgIGRlYnVn
Z2luZy4KKyAgICAgICAgCisgICAgICAgIC0gREZHOjpQbGFuIG5vdyB2YWxpZGF0ZXMgd2hldGhl
ciBhbGwgb2YgdGhlIEdDIHBvaW50ZXJzIHBsYW50ZWQgaW4gdGhlIHZhcmlvdXMgSklUQ29kZQor
ICAgICAgICAgIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxzbyBwcm9wZXJseSByZWdpc3RlcmVkIGFz
IGVpdGhlciB3ZWFrIG9yIHN0cm9uZyBwb2ludGVycyBpbiB0aGUKKyAgICAgICAgICBDb2RlQmxv
Y2suIFRoaXMgdmFsaWRhdGlvbiBjaGVjayBwcmV2aW91c2x5IGZhaWxlZCBkdWUgdG8gZnJhZ2ls
ZSB2YWx1ZXMgZW5kaW5nIHVwIGluCisgICAgICAgICAgdGhlIE9TUiBlbnRyeSBkYXRhIHN0cnVj
dHVyZXMsIGJvdGggaW4gdGhlIG5ld2x5IGFkZGVkIHRlc3QgKGRlYWQtb3NyLWVudHJ5LXZhbHVl
LmpzKQorICAgICAgICAgIGFuZCBpbiBzb21lIHByZS1leGlzdGluZyB0ZXN0cyAobGlrZSBlYXJs
ZXktYm95ZXIgYW5kIDNkLXJheXRyYWNlKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVP
cmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRl
KToKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5k
czo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6Ok9wZXJhbmRzOjpoYXNPcGVyYW5kKToKKyAgICAg
ICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
ZXQ6OmR1bXApOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnZhbGlkYXRlUmVmZXJlbmNl
cyk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU2V0Lmg6CisgICAgICAgICogYnl0ZWNv
ZGUvVHJhY2tlZFJlZmVyZW5jZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VHJhY2tlZFJl
ZmVyZW5jZXM6OlRyYWNrZWRSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6VHJhY2tlZFJlZmVy
ZW5jZXM6On5UcmFja2VkUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OlRyYWNrZWRSZWZlcmVu
Y2VzOjphZGQpOgorICAgICAgICAoSlNDOjpUcmFja2VkUmVmZXJlbmNlczo6Y2hlY2spOgorICAg
ICAgICAoSlNDOjpUcmFja2VkUmVmZXJlbmNlczo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUv
VHJhY2tlZFJlZmVyZW5jZXMuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0
aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6c2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OnNldE9TUkVudHJ5VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZnVsbFRv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRm
Zy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnJ1bik6Cisg
ICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1v
bkRhdGE6OmludmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkNvbW1vbkRhdGE6OnZhbGlk
YXRlUmVmZXJlbmNlcyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbkRhdGEuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpDb21tb25EYXRhOjpyZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25B
bmRFeGl0KToKKyAgICAgICAgKiBkZmcvREZHRnJvemVuVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpGcm96ZW5WYWx1ZTo6RnJvemVuVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkZyb3pl
blZhbHVlOjpzdHJlbmd0aGVuVG8pOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVlOjpw
b2ludHNUb0hlYXApOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVlOjpzdHJlbmd0aCk6
CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OmZyZWV6ZSk6CisgICAgICAgICogZGZn
L0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6cmVn
aXN0ZXJGcm96ZW5WYWx1ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZnJlZXplKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6ZnJlZXplU3Ryb25nKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZnJl
ZXplRnJhZ2lsZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
ICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJ
blBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0pJVENv
ZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVz
aG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29k
ZTo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZS5oOgorICAg
ICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29t
cGlsZXI6OmFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5o
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpicmFuY2hTdHJ1Y3R1cmVQdHIpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpqaXRDb2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdNaW5pZmllZEdyYXBoLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6TWluaWZp
ZWRHcmFwaDo6cHJlcGFyZUFuZFNocmluayk6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWRH
cmFwaDo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBkZmcvREZHTWluaWZpZWRHcmFw
aC5oOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkR3JhcGg6OmFwcGVuZCk6CisgICAgICAg
IChKU0M6OkRGRzo6TWluaWZpZWRHcmFwaDo6cHJlcGFyZUFuZFNocmluayk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR09TUkVudHJ5LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFbnRy
eURhdGE6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5RGF0YTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRW50cnkuaDoKKyAgICAgICAgKEpTQzo6REZHOjpnZXRPU1JFbnRyeURhdGFCeXRl
Y29kZUluZGV4KToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmxpbmtPU1JFbnRyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZURvdWJsZVB1dEJ5VmFsKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6dmFsaWRh
dGVSZWZlcmVuY2VzKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
OgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFs
aWRhdGU6OnZhbGlkYXRlKToKKyAgICAgICAgKiBkZmcvREZHVmFsdWVTdHJlbmd0aC5jcHA6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVN0cmVu
Z3RoLmg6CisgICAgICAgIChKU0M6OkRGRzo6bWVyZ2UpOgorICAgICAgICAqIGZ0bC9GVExFeGl0
UHJvcGVydHlWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFByb3BlcnR5VmFsdWU6
OmR1bXApOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRQcm9wZXJ0eVZhbHVlOjp2YWxpZGF0ZVJl
ZmVyZW5jZXMpOgorICAgICAgICAqIGZ0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oOgorICAgICAg
ICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb246OmR1bXApOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uOjp2YWxpZGF0ZVJlZmVyZW5j
ZXMpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oOgor
ICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRW
YWx1ZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjp2YWxpZGF0ZVJlZmVy
ZW5jZXMpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuaDoKKyAgICAgICAgKiBmdGwvRlRM
SklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6ZGZnQ29tbW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMpOgorICAgICAgICAq
IGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6aGFuZGxlcyk6
CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6ZGF0YVNlY3Rpb25zKToKKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29kZUxvY2F0
aW9uRm9yUmVwYXRjaCk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6dmFsaWRhdGVSZWZl
cmVuY2VzKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOgorICAgICAgICAoSlNDOjpGVEw6
Ok9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKiBq
aXQvSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkpJVENvZGU6OnR5cGVOYW1lKToKKyAgICAg
ICAgKEpTQzo6SklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6SklU
Q29kZTo6ZXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6
SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kZWFkLW9zci1lbnRyeS12
YWx1ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorCiAyMDE1LTA3LTA0ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgRHJvcCBSZWZQdHI6OmNsZWFyKCkgbWV0
aG9kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTExMCw2ICsxMTAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGJ5
dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCiAgICAgYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uY3BwCiAgICAgYnl0ZWNvZGUvVG9UaGlzU3RhdHVzLmNwcAorICAg
IGJ5dGVjb2RlL1RyYWNrZWRSZWZlcmVuY2VzLmNwcAogICAgIGJ5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAogICAgIGJ5dGVjb2RlL1VubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwCiAg
ICAgYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5jcHAKQEAgLTE5Myw2ICsxOTQsNyBAQCBzZXQoSmF2
YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdMb25nTGl2ZWRTdGF0ZS5jcHAKICAgICBk
ZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR01heUV4aXQu
Y3BwCisgICAgZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwCiAgICAgZGZnL0RGR01pbmlmaWVkTm9k
ZS5jcHAKICAgICBkZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAKICAgICBkZmcvREZHTmFp
dmVEb21pbmF0b3JzLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
NTEsNiArMzUxLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcU3RydWN0dXJlU3R1YkluZm8uY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcVG9UaGlzU3RhdHVzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFRyYWNrZWRSZWZlcmVuY2VzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkQ29kZUJsb2NrLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJl
YW0uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFsdWVSZWNv
dmVyeS5jcHAiIC8+CkBAIC00MzEsNiArNDMyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkR3JhcGguY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTmFpdmVEb21pbmF0b3JzLmNwcCIgLz4KQEAgLTEwMTMs
NiArMTAxNSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxTdHJ1Y3R1cmVTdHViSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcVG9UaGlzU3RhdHVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxUcmFja2VkUmVmZXJlbmNlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcVHlwZUxvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIiAvPgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAKIAkJMEYxMzkxMkMxNjc3MUMzRDAw
OUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5MTI3MTY3NzFDMzAwMDlDQ0IwNyAvKiBQ
cm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5n
VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLzsgfTsKIAkJMEYx
NUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUYxNUQxNEI3QTczQTAwNURFMzdE
IC8qIENvbW1vblNsb3dQYXRocy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMTcyNUZGMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdy
YXBoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLzsgfTsKIAkJ
MEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUExODlE
ODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwICovOyB9OwogCQkwRjE5
MENBRDE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxOTBDQUIxODlEODJGNjAw
MEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjFERDg0QTE4QTk0NUJFMDAyNkYzRkEgLyog
SlNDSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxREQ4NDkxOEE5NDVCRTAwMjZGM0ZBIC8qIEpTQ0lubGluZXMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDUxLDYgKzQ1Miw4IEBACiAJ
CTBGOTMzMkE1MTRDQTdEREQwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTMzMjlCMTRDQTdEQzEwMDg1RjND
NiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5M0I0
QTcxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCAqLzsgfTsKIAkJMEY5M0I0
QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkzQjRBODE4QjkyQzREMDAxNzhBM0YgLyog
UHV0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjk1MkFCQzFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NTJB
QkExQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmNwcCAqLzsgfTsKKwkJMEY5
NTJBQkQxQjQ4N0E3NzAwQzM2N0M1IC8qIFRyYWNrZWRSZWZlcmVuY2VzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk1MkFCQjFCNDg3QTc3MDBDMzY3
QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2
M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUz
IC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjk2RUJCMTE2Njc2RUY0MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0
aEpJVFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjk3NDk3MTE2ODdBREU0MDBBNEZGNkEgLyogSlNDZWxsSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NzQ5NkYxNjg3QURFMjAw
QTRGRjZBIC8qIEpTQ2VsbElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTg1MSw2ICsxODU0LDcgQEAKIAkJMEYxMzkxMjcxNjc3MUMz
MDAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjEzRTA0QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZGV4aW5nVHlwZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVGMTVEMTRCN0E3M0EwMDVERTM3RCAvKiBDb21t
b25TbG93UGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tbW9uU2xv
d1BhdGhzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMTcyNUZFMUI0ODcxOUEw
MEFDM0E1NSAvKiBERkdNaW5pZmllZEdyYXBoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR01pbmlmaWVkR3JhcGguY3BwOyBwYXRoID0gZGZnL0RGR01pbmlmaWVk
R3JhcGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE5MENBQTE4OUQ4MkY2
MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcDsgcGF0aCA9IHBy
b2ZpbGVyL1Byb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjE5MENBQjE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlckpldHRpc29uUmVh
c29uLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckpldHRpc29uUmVhc29uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMUREODQ5MThBOTQ1QkUwMDI2RjNGQSAvKiBKU0NJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ0lubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxOTQsNiArMjE5OCw4IEBACiAJCTBGOTMzMjlC
MTRDQTdEQzEwMDg1RjNDNiAvKiBTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTNCNEE3MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQdXRCeUlkVmFyaWFudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTNCNEE4MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlk
VmFyaWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXRCeUlkVmFyaWFu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk1MkFCQTFCNDg3QTc3MDBDMzY3
QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjk1MkFCQjFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJhY2tlZFJlZmVyZW5jZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVl
UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NkVCQjExNjY3NkVGNDAwOEJBREUz
IC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvZGVCbG9ja1dpdGhKSVRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGOTc0OTZGMTY4N0FERTIwMEE0RkY2QSAvKiBKU0NlbGxJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2VsbElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUwMTEsNiArNTAxNyw3IEBACiAJCQkJMEY1ODc0RUIxOTRGRUIxMjAwQUFC
MkMxIC8qIERGR01heUV4aXQuY3BwICovLAogCQkJCTBGNTg3NEVDMTk0RkVCMTIwMEFBQjJDMSAv
KiBERkdNYXlFeGl0LmggKi8sCiAJCQkJQTcwNEQ5MDIxN0EwQkFBODAwNkJBNTU0IC8qIERGR01l
cmdlTW9kZS5oICovLAorCQkJCTBGMTcyNUZFMUI0ODcxOUEwMEFDM0E1NSAvKiBERkdNaW5pZmll
ZEdyYXBoLmNwcCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZp
ZWRHcmFwaC5oICovLAogCQkJCTBGQjRCNTEwMTZCM0E5NjQwMDNGNjk2QiAvKiBERkdNaW5pZmll
ZElELmggKi8sCiAJCQkJMEYyQkRDNEMxNTIyODE4MzAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9k
ZS5jcHAgKi8sCkBAIC01MjkzLDYgKzUzMDAsOCBAQAogCQkJCTBGNDI2QTRBMTQ2MENENkIwMDEz
MUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCiAJCQkJMEZDNzEyREMxN0NEODc3ODAwOENDOTNDIC8q
IERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCiAJCQkJMEZDNzEyREQxN0NEODc3
ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAorCQkJCUZFNTA2
ODY2MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICovLAorCQkJCUZF
NTA2ODY0MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAqLywKIAkJCQkw
RkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovLAogCQkJCTBG
QkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovLAogCQkJCTk2OUEw
NzkyMEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hlLmggKi8sCkBAIC01MzQwLDggKzUz
NDksNiBAQAogCQkJCTBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNl
LmggKi8sCiAJCQkJMTQyOUQ4ODMwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5jcHAg
Ki8sCiAJCQkJMTQyOUQ4ODQwRUQyMUMzRDAwQjg5NjE5IC8qIFNhbXBsaW5nVG9vbC5oICovLAot
CQkJCUZFNTA2ODY2MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwICov
LAotCQkJCUZFNTA2ODY0MUFFMjQ2MzkwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuaCAq
LywKIAkJCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuY3BwICov
LAogCQkJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oICovLAog
CQkJCTBGRDgyRTg0MTQxRjNGREEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgKi8sCkBA
IC01MzU0LDYgKzUzNjEsOCBAQAogCQkJCUJDQ0YwRDA3MEVGMEFBQjkwMDQxM0M4RiAvKiBTdHJ1
Y3R1cmVTdHViSW5mby5oICovLAogCQkJCTBGMkQ0REU1MTk4MzJEQUMwMDdENEIxOSAvKiBUb1Ro
aXNTdGF0dXMuY3BwICovLAogCQkJCTBGMkQ0REU2MTk4MzJEQUMwMDdENEIxOSAvKiBUb1RoaXNT
dGF0dXMuaCAqLywKKwkJCQkwRjk1MkFCQTFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVy
ZW5jZXMuY3BwICovLAorCQkJCTBGOTUyQUJCMUI0ODdBNzcwMEMzNjdDNSAvKiBUcmFja2VkUmVm
ZXJlbmNlcy5oICovLAogCQkJCTBGMkQ0REU3MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRp
b24uaCAqLywKIAkJCQlBNzlFNzgxRTE1RUVDQkE4MDA0N0M4NTUgLyogVW5saW5rZWRDb2RlQmxv
Y2suY3BwICovLAogCQkJCUE3OUU3ODFGMTVFRUNCQTgwMDQ3Qzg1NSAvKiBVbmxpbmtlZENvZGVC
bG9jay5oICovLApAQCAtNjA3MCw2ICs2MDc5LDcgQEAKIAkJCQlBNTg0MEUyOTE4N0NBNUU2MDA4
NDNCMTAgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVzaGVldHMtYW5kLXNjcmlwdHMucHkgaW4g
SGVhZGVycyAqLywKIAkJCQkwRjI0RTU1NjE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZy
YW1lU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNzE4QTFCMjU5MDAyNkQ4OEYgLyog
SW5wdXRDdXJzb3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTUyQUJEMUI0ODdBNzcwMEMzNjdD
NSAvKiBUcmFja2VkUmVmZXJlbmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU5M0NGN0YxODQw
MzYyQzAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1OTNDRjg3MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJl
Z2lzdHJ5LmggaW4gSGVhZGVycyAqLywKQEAgLTc0OTMsNiArNzUwMyw3IEBACiAJCQkJNjU1RUIy
OUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NTQ2RjUyMTFBMzJCMzEzMDA2RjA3RDUgLyogTnVsbEdldHRlckZ1bmN0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTY1NTI1RkM1MUE2REQ4MDEwMDdCNTQ5NSAvKiBOdWxsU2V0dGVyRnVu
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYxNzI1RkYxQjQ4NzE5QTAwQUMzQTU1IC8q
IERGR01pbmlmaWVkR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTIxMDdFQzdF
NzAwNjUwNDQ2IC8qIE51bWJlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
NDY5REUzMTA3RUM3RTcwMDY1MDQ0NiAvKiBOdW1iZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ0NjlERTQxMDdFQzdFNzAwNjUwNDQ2IC8qIE51bWJlclByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc1NjgsNiArNzU3OSw3IEBACiAJCQkJQTU0Q0YyRjUxODRFQUIyNDAw
MjM3RjE5IC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REE1MTdE
MTI4NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQxMjAyRjFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjk1MkFCQzFCNDg3QTc3MDBDMzY3QzUgLyogVHJhY2tlZFJlZmVyZW5jZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc5MERENkQxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJh
dG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REExMTdEMTI4NDgwMDVG
NUZGOSAvKiBTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY3MDQxN0I2
QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODAxLDYgKzI4MDEsMTMgQEAgdm9pZCBD
b2RlQmxvY2s6OnN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcgogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGFuIGFudGlwYXR0ZXJuIGZvciB0d28gcmVhc29ucy4gUmVmZXJl
bmNlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBERkcKKyAgICAgICAgLy8gdGhhdCBhcmVuJ3QgaW4gdGhl
IG9yaWdpbmFsIENvZGVCbG9jayBiZWluZyBjb21waWxlZCBzaG91bGQgYmUgd2Vha2x5IHJlZmVy
ZW5jZWQuCisgICAgICAgIC8vIElubGluZSBjYWxsIGZyYW1lcyBhcmVuJ3QgaW4gdGhlIG9yaWdp
bmFsIENvZGVCbG9jaywgc28gdGhleSBxdWFsaWZ5IGFzIHdlYWsuIEFsc28sCisgICAgICAgIC8v
IHRob3NlIHdlYWsgcmVmZXJlbmNlcyBzaG91bGQgYWxyZWFkeSBiZSB0cmFja2VkIGluIHRoZSBE
RkcgYXMgd2VhayBGcm96ZW5WYWx1ZXMuIFNvLAorICAgICAgICAvLyB0aGVyZSBpcyBwcm9iYWJs
eSBubyBuZWVkIGZvciB0aGlzLiBXZSBhbHJlYWR5IGhhdmUgYXNzZXJ0aW9ucyB0aGF0IHRoaXMg
c2hvdWxkIGJlCisgICAgICAgIC8vIHVubmVjZXNzYXJ5LgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NjEzCiAgICAgICAgIERGRzo6Q29tbW9u
RGF0YSogZGZnQ29tbW9uID0gbV9qaXRDb2RlLT5kZmdDb21tb24oKTsKICAgICAgICAgaWYgKGRm
Z0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKSkKICAgICAgICAgICAgIGRmZ0NvbW1vbi0+
aW5saW5lQ2FsbEZyYW1lcy0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxODYy
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw2ICsxNTAsMTUgQEAgSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZy
YW1lOjpjYWxsZWVDb25zdAogCiB2b2lkIElubGluZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUo
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgYW4gYW50aXBh
dHRlcm4gZm9yIHR3byByZWFzb25zLiBSZWZlcmVuY2VzIGludHJvZHVjZWQgYnkgdGhlIERGRwor
ICAgIC8vIHRoYXQgYXJlbid0IGluIHRoZSBvcmlnaW5hbCBDb2RlQmxvY2sgYmVpbmcgY29tcGls
ZWQgc2hvdWxkIGJlIHdlYWtseSByZWZlcmVuY2VkLgorICAgIC8vIElubGluZSBjYWxsIGZyYW1l
cyBhcmVuJ3QgaW4gdGhlIG9yaWdpbmFsIENvZGVCbG9jaywgc28gdGhleSBxdWFsaWZ5IGFzIHdl
YWsuIEFsc28sCisgICAgLy8gdGhvc2Ugd2VhayByZWZlcmVuY2VzIHNob3VsZCBhbHJlYWR5IGJl
IHRyYWNrZWQgaW4gdGhlIERGRyBhcyB3ZWFrIEZyb3plblZhbHVlcy4gU28sCisgICAgLy8gdGhl
cmUgaXMgcHJvYmFibHkgbm8gbmVlZCBmb3IgdGhpcy4gV2UgYWxyZWFkeSBoYXZlIGFzc2VydGlv
bnMgdGhhdCB0aGlzIHNob3VsZCBiZQorICAgIC8vIHVubmVjZXNzYXJ5LiBGaW5hbGx5LCBqdXN0
IG1hcmtpbmcgdGhlIGV4ZWN1dGFibGUgYW5kIG5vdCBhbnl0aGluZyBlbHNlIGluIHRoZSBpbmxp
bmUKKyAgICAvLyBjYWxsIGZyYW1lIGlzIGFsbW9zdCBjZXJ0YWlubHkgaW5zdWZmaWNpZW50IGZv
ciB3aGF0IHRoaXMgbWV0aG9kIHRob3VnaHQgaXQgd2FzIGdvaW5nCisgICAgLy8gdG8gYWNjb21w
bGlzaC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2
NjEzCiAgICAgdmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTg2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0OSw2ICsxNDksNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJh
bmQpKTsgfQorICAgIGNvbnN0IFQmIG9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0
aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KICAgICAKICAgICBib29sIGhhc09wZXJhbmQoaW50
IG9wZXJhbmQpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCiAKICNpbmNsdWRlICJE
RkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNpbmNs
dWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtOTYsNSArOTcs
MTMgQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogICAgIGR1bXBJ
bkNvbnRleHQob3V0LCBudWxscHRyKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVTZXQ6OnZhbGlkYXRl
UmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMpIGNv
bnN0Cit7CisgICAgZm9yRWFjaCgKKyAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
eworICAgICAgICAgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2soc3RydWN0dXJlKTsKKyAgICAg
ICAgfSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDEzICsyNywxNSBAQAogI2RlZmluZSBTdHJ1Y3R1cmVTZXRfaAogCiAjaW5jbHVk
ZSAiQXJyYXlQcm9maWxlLmgiCisjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKICNpbmNsdWRlICJT
cGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgotI2luY2x1ZGUgIkR1bXBD
b250ZXh0LmgiCiAjaW5jbHVkZSA8d3RmL1RpbnlQdHJTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWU7CiBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZTsKQEAgLTc3LDYgKzc5
LDggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYs
IER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5j
ZXMmKSBjb25zdDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1RyYWNrZWRSZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHJhY2tlZFJlZmVyZW5jZXMuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1RyYWNrZWRSZWZlcmVu
Y2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1RyYWNrZWRS
ZWZlcmVuY2VzOjpUcmFja2VkUmVmZXJlbmNlcygpCit7Cit9CisKK1RyYWNrZWRSZWZlcmVuY2Vz
Ojp+VHJhY2tlZFJlZmVyZW5jZXMoKQoreworfQorCit2b2lkIFRyYWNrZWRSZWZlcmVuY2VzOjph
ZGQoSlNDZWxsKiBjZWxsKQoreworICAgIGlmIChjZWxsKQorICAgICAgICBtX3JlZmVyZW5jZXMu
YWRkKGNlbGwpOworfQorCit2b2lkIFRyYWNrZWRSZWZlcmVuY2VzOjphZGQoSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgIGFkZCh2YWx1ZS5hc0NlbGwo
KSk7Cit9CisKK3ZvaWQgVHJhY2tlZFJlZmVyZW5jZXM6OmNoZWNrKEpTQ2VsbCogY2VsbCkgY29u
c3QKK3sKKyAgICBpZiAoIWNlbGwpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9y
ZWZlcmVuY2VzLmNvbnRhaW5zKGNlbGwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZGF0
YUxvZygiRm91bmQgdW50cmFja2VkIHJlZmVyZW5jZTogIiwgUmF3UG9pbnRlcihjZWxsKSwgIlxu
Iik7CisgICAgZGF0YUxvZygiQWxsIHRyYWNrZWQgcmVmZXJlbmNlczogIiwgKnRoaXMsICJcbiIp
OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgVHJhY2tlZFJl
ZmVyZW5jZXM6OmNoZWNrKEpTVmFsdWUgdmFsdWUpIGNvbnN0Cit7CisgICAgaWYgKHZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICBjaGVjayh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKK3ZvaWQgVHJhY2tl
ZFJlZmVyZW5jZXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBDb21tYVBy
aW50ZXIgY29tbWE7CisgICAgZm9yIChKU0NlbGwqIGNlbGwgOiBtX3JlZmVyZW5jZXMpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihjZWxsKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHJhY2tlZFJl
ZmVyZW5jZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VHJhY2tlZFJlZmVyZW5jZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9UcmFja2VkUmVmZXJlbmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBUcmFja2VkUmVmZXJlbmNlc19oCisjZGVmaW5lIFRyYWNrZWRSZWZlcmVuY2VzX2gKKwor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXMgeworcHVibGljOgorICAgIFRyYWNrZWRS
ZWZlcmVuY2VzKCk7CisgICAgflRyYWNrZWRSZWZlcmVuY2VzKCk7CisgICAgCisgICAgdm9pZCBh
ZGQoSlNDZWxsKik7CisgICAgdm9pZCBhZGQoSlNWYWx1ZSk7CisgICAgCisgICAgdm9pZCBjaGVj
ayhKU0NlbGwqKSBjb25zdDsKKyAgICB2b2lkIGNoZWNrKEpTVmFsdWUpIGNvbnN0OworICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBI
YXNoU2V0PEpTQ2VsbCo+IG1fcmVmZXJlbmNlczsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gVHJhY2tlZFJlZmVyZW5jZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkBAIC00NywyNCArNDgsNiBAQCB2b2lkIEFi
c3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9ucyhjCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogfQogCi12b2lkIEFic3RyYWN0VmFsdWU6OnNldE9TUkVudHJ5VmFsdWUoR3JhcGgmIGdyYXBo
LCBjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUu
dmFsdWUoKS5pc0NlbGwoKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
LnN0cnVjdHVyZSgpOwotICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAg
bV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIG1fYXJy
YXlNb2RlcyA9IDA7Ci0gICAgfQotICAgICAgICAKLSAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZy
b21WYWx1ZSh2YWx1ZS52YWx1ZSgpKTsKLSAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKLSAg
ICAgICAgCi0gICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIGFzc2VydElzUmVnaXN0ZXJlZChn
cmFwaCk7Ci19Ci0KIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3Qg
RnJvemVuVmFsdWUmIHZhbHVlLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQog
ewogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkpIHsKQEAgLTE3Miw2
ICsxNTUsNDAgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YQogICAg
IGZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihncmFwaCwgbm9kZS0+cmVzdWx0KCksIG5vZGUpOwog
fQogCitib29sIEFic3RyYWN0VmFsdWU6Om1lcmdlT1NSRW50cnlWYWx1ZShHcmFwaCYgZ3JhcGgs
IEpTVmFsdWUgdmFsdWUpCit7CisgICAgQWJzdHJhY3RWYWx1ZSBvbGRNZSA9ICp0aGlzOworICAg
IAorICAgIGlmIChpc0NsZWFyKCkpIHsKKyAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plblZhbHVl
ID0gZ3JhcGguZnJlZXplKHZhbHVlKTsKKyAgICAgICAgaWYgKGZyb3plblZhbHVlLT5wb2ludHNU
b0hlYXAoKSkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBmcm96ZW5WYWx1ZS0+c3RydWN0
dXJlKCk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoZnJvemVuVmFs
dWUtPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9hcnJheU1vZGVzID0g
MDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9t
VmFsdWUodmFsdWUpOworICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVl
KSk7CisgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgICAgIGdyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICBtZXJnZUFycmF5TW9kZXMobV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWVyZ2UoU3RydWN0dXJl
U2V0KHN0cnVjdHVyZSkpOworICAgICAgICB9CisgICAgICAgIGlmIChtX3ZhbHVlICE9IHZhbHVl
KQorICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzUmVnaXN0ZXJlZChncmFwaCk7CisgICAgCisg
ICAgcmV0dXJuIG9sZE1lICE9ICp0aGlzOworfQorCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0
VmFsdWU6OmZpbHRlcihHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiB7
CiAgICAgaWYgKGlzQ2xlYXIoKSkKQEAgLTQyNCw2ICs0NDEsMTIgQEAgdm9pZCBBYnN0cmFjdFZh
bHVlOjpkdW1wSW5Db250ZXh0KFByaW50UwogICAgIG91dC5wcmludCgiKSIpOwogfQogCit2b2lk
IEFic3RyYWN0VmFsdWU6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNl
cyYgdHJhY2tlZFJlZmVyZW5jZXMpCit7CisgICAgdHJhY2tlZFJlZmVyZW5jZXMuY2hlY2sobV92
YWx1ZSk7CisgICAgbV9zdHJ1Y3R1cmUudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVu
Y2VzKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDExIEBACiAjaW5j
bHVkZSAiRHVtcENvbnRleHQuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKIAotbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNr
ZWRSZWZlcmVuY2VzOworCituYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR3JhcGg7CiBzdHJ1Y3Qg
Tm9kZTsKQEAgLTE5Myw4ICsxOTcsNiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0T1NSRW50cnlWYWx1ZShH
cmFwaCYsIGNvbnN0IEZyb3plblZhbHVlJik7Ci0gICAgCiAgICAgdm9pZCBzZXQoR3JhcGgmLCBj
b25zdCBGcm96ZW5WYWx1ZSYsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CiAgICAgdm9pZCBzZXQo
R3JhcGgmLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IFN0cnVjdHVy
ZVNldCYpOwpAQCAtMjU0LDYgKzI1Niw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgYm9vbCBtZXJnZU9TUkVudHJ5VmFs
dWUoR3JhcGgmLCBKU1ZhbHVlKTsKKyAgICAKICAgICB2b2lkIG1lcmdlKFNwZWN1bGF0ZWRUeXBl
IHR5cGUpCiAgICAgewogICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwgdHlwZSk7CkBA
IC0zMzAsNiArMzM0LDggQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMo
Y29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKTsKKyAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVu
IGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlIHJp
Z2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHZhbHVlIG11c3Qg
YmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQogICAgIC8vIGJlIFRPUCwgaW5kaWNhdGlu
ZyB0aGF0IGl0IGlzIHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMsIGluIHdoaWNo
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMjIsNiArNDAyMiw3IEBAIEJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgQVNTRVJUKGNh
bGxzaXRlQmxvY2tIZWFkKTsKICAgICAgICAgCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0g
Ynl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXMtPmFkZCgpOwor
ICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5mcmVlemUoY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSk7CiAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9ySW5saW5l
Q2FsbEZyYW1lRXhlY3V0YWJsZSgKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBo
Lm1fcGxhbi53cml0ZUJhcnJpZXJzLAogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmV4
ZWN1dGFibGUsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNw
cAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODAsMTIgKzgwLDUyIEBA
IHB1YmxpYzoKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChtX2dyYXBoLm1fZm9ybSAhPSBTU0EpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jaGFu
Z2VkKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2lkZW4gdGhlIGFic3RyYWN0IHZh
bHVlcyBhdCB0aGUgYmxvY2sgdGhhdCBzZXJ2ZXMgYXMgdGhlIG11c3QtaGFuZGxlIE9TUiBlbnRy
eS4KKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrLT5pc09TUlRhcmdldCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5ieXRlY29kZUJlZ2luICE9
IG1fZ3JhcGgubV9wbGFuLm9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGgubV9w
bGFuLm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAg
IGludCBvcGVyYW5kID0gbV9ncmFwaC5tX3BsYW4ubXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLm1f
cGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHRh
cmdldCA9IGJsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSB0YXJnZXQubWVyZ2VPU1JFbnRyeVZhbHVlKG1fZ3JhcGgsIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZpeFR5cGVGb3JSZXByZXNlbnRhdGlv
bigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHJlc3VsdEZvcihub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkgeworICAgICAgICAg
ICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBibG9jay0+
Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBQcm9wYWdhdGUgYW55IG9mIHRoZSBjaGFuZ2VzIHdlIGp1c3Qg
aW50cm9kdWNlZC4KKyAgICAgICAgICAgIHdoaWxlIChtX2NoYW5nZWQpIHsKKyAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBwZXJmb3JtRm9yd2FyZENG
QSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBNYWtlIHN1
cmUgd2UgcmVjb3JkIHRoZSBpbnRlcnNlY3Rpb24gb2YgYWxsIHByb29mcyB0aGF0IHdlIGV2ZXIg
YWxsb3dlZCB0aGUKICAgICAgICAgICAgIC8vIGNvbXBpbGVyIHRvIHJlbHkgdXBvbi4KICAgICAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgewogICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBibG9jay0+aW50ZXJzZWN0aW9uT2ZDRkFIYXNWaXNpdGVkICY9IGJsb2NrLT5jZmFIYXNW
aXNpdGVkOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5pbnRlcnNl
Y3Rpb25PZlBhc3RWYWx1ZXNBdEhlYWQuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgICAgICAg
ICBibG9jay0+aW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkW2ldLmZpbHRlcihibG9jay0+
dmFsdWVzQXRIZWFkW2ldKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29t
bW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b21tb25EYXRhLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZlcmVuY2VzLmgiCiAjaW5jbHVkZSAiVk0uaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNzIsNiArNzMsMjQgQEAgYm9v
bCBDb21tb25EYXRhOjppbnZhbGlkYXRlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBD
b21tb25EYXRhOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRy
YWNrZWRSZWZlcmVuY2VzKQoreworICAgIGlmIChJbmxpbmVDYWxsRnJhbWVTZXQqIHNldCA9IGlu
bGluZUNhbGxGcmFtZXMuZ2V0KCkpIHsKKyAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA6ICpzZXQpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgOiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cykgeworICAgICAgICAgICAgICAg
IGlmIChyZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIHRyYWNrZWRS
ZWZlcmVuY2VzLmNoZWNrKHJlY292ZXJ5LmNvbnN0YW50KCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoU2NyaXB0RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSkKKyAgICAgICAgICAgICAgICB0cmFj
a2VkUmVmZXJlbmNlcy5jaGVjayhleGVjdXRhYmxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmNoZWNrKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmgJKHJldmlzaW9uIDE4NjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBDb2RlQmxvY2s7
CiBjbGFzcyBJZGVudGlmaWVyOworY2xhc3MgVHJhY2tlZFJlZmVyZW5jZXM7CiAKIG5hbWVzcGFj
ZSBERkcgewogCkBAIC04Niw2ICs4Nyw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVy
biBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQsIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4
aXQpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFj
a2VkUmVmZXJlbmNlcyYpOwogCiAgICAgUmVmUHRyPElubGluZUNhbGxGcmFtZVNldD4gaW5saW5l
Q2FsbEZyYW1lczsKICAgICBWZWN0b3I8Q29kZU9yaWdpbiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IGNvZGVPcmlnaW5zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96
ZW5WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJv
emVuVmFsdWUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGcm96ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNCArNDEsMTQgQEAgY2xh
c3MgRnJvemVuVmFsdWUgewogcHVibGljOgogICAgIEZyb3plblZhbHVlKCkKICAgICAgICAgOiBt
X3N0cnVjdHVyZShudWxscHRyKQotICAgICAgICAsIG1fc3RyZW5ndGgoRnJhZ2lsZVZhbHVlKQor
ICAgICAgICAsIG1fc3RyZW5ndGgoV2Vha1ZhbHVlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAg
RnJvemVuVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKICAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAg
ICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCi0gICAgICAgICwgbV9zdHJlbmd0aChGcmFnaWxl
VmFsdWUpCisgICAgICAgICwgbV9zdHJlbmd0aChXZWFrVmFsdWUpCiAgICAgewogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKTsKICAgICB9CkBAIC02MCw3
ICs2MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVCgoISF2YWx1ZSAmJiB2YWx1
ZS5pc0NlbGwoKSkgPT0gISFzdHJ1Y3R1cmUpOwogICAgICAgICBBU1NFUlQoIXZhbHVlIHx8ICF2
YWx1ZS5pc0NlbGwoKSB8fCB2YWx1ZS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCkgPT0gc3RydWN0dXJl
LT5jbGFzc0luZm8oKSk7Ci0gICAgICAgIEFTU0VSVCghIXN0cnVjdHVyZSB8fCAoc3RyZW5ndGgg
PT0gRnJhZ2lsZVZhbHVlKSk7CisgICAgICAgIEFTU0VSVCghIXN0cnVjdHVyZSB8fCAoc3RyZW5n
dGggPT0gV2Vha1ZhbHVlKSk7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSog
ZW1wdHlTaW5nbGV0b24oKTsKQEAgLTg5LDEyICs4OSw5IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1fc3RyZW5ndGggPSBtZXJnZShtX3N0cmVuZ3RoLCBzdHJlbmd0aCk7CiAgICAgfQogICAgIAot
ICAgIC8vIFRoZSBzdHJlbmd0aCBvZiB0aGUgdmFsdWUgaXRzZWxmLiBUaGUgc3RydWN0dXJlIHNo
b3VsZCBiZSB2aWV3ZWQgYXMgZnJhZ2lsZQotICAgIC8vIGV4Y2VwdCBpZiBpdCBpcyB3YXRjaGVk
LCBpbiB3aGljaCBjYXNlIGl0J3Mgd2Vhay4gTm90ZSB0aGF0IGN1cnJlbnRseSB3ZQotICAgIC8v
IHdhdGNoIGFsbCB3YXRjaGFibGUgc3RydWN0dXJlcyBpbmRpc2NyaW1pbmFudGx5LCBhbmQgc28g
d2UgYWxzbyBtYXJrIHRoZW0KLSAgICAvLyB3ZWFrbHkuIFdlIGNvdWxkIGltcHJvdmUgb24gdGhp
czogYW55IG9wdGltaXphdGlvbiB0aGF0IG1ha2VzIHVzZSBvZiBhCi0gICAgLy8gc3RydWN0dXJl
IGNvdWxkIHNpZ25hbCB0aGF0IGl0IGhhcyBkb25lIHNvLCBhbmQgd2UgY291bGQgYXZvaWQgd2F0
Y2hpbmcKLSAgICAvLyB3YXRjaGFibGUgc3RydWN0dXJlcyB0aGF0IHdlIGhhZCBuZXZlciBtYXJr
ZWQgaW4gc3VjaCBhIHdheS4KKyAgICBib29sIHBvaW50c1RvSGVhcCgpIGNvbnN0IHsgcmV0dXJu
ICEhdmFsdWUoKSAmJiB2YWx1ZSgpLmlzQ2VsbCgpOyB9CisgICAgCisgICAgLy8gVGhlIHN0cmVu
Z3RoIG9mIHRoZSB2YWx1ZSBpdHNlbGYuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxtb3N0IGFsd2F5cyB3
ZWFrLgogICAgIFZhbHVlU3RyZW5ndGggc3RyZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3N0cmVu
Z3RoOyB9CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdDsKQEAgLTExNiw3ICsxMTMsNyBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gRnJvemVuVmFsdWUoCiAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAg
ICAgICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKSA6IG51bGxwdHIsCi0gICAgICAgICAgICBGcmFnaWxlVmFsdWUpOworICAgICAgICAgICAg
V2Vha1ZhbHVlKTsKICAgICB9CiAKICAgICBKU1ZhbHVlIG1fdmFsdWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcg
KzYyLDYgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgICwg
bV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jay5nZXQoKSkKICAgICAsIG1fcHJvZmlsZWRCbG9j
ayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkKICAgICAsIG1fYWxsb2NhdG9yKGxvbmdMaXZl
ZFN0YXRlLm1fYWxsb2NhdG9yKQotICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKE9wZXJhbmRzTGlr
ZSwgcGxhbi5tdXN0SGFuZGxlVmFsdWVzKQogICAgICwgbV9uZXh0TWFjaGluZUxvY2FsKDApCiAg
ICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCiAgICAgLCBtX3N0cnVjdHVyZVJl
Z2lzdHJhdGlvblN0YXRlKEhhdmVOb3RTdGFydGVkUmVnaXN0ZXJpbmcpCkBAIC03Miw5ICs3MSw2
IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXYKIHsKICAgICBBU1NF
UlQobV9wcm9maWxlZEJsb2NrKTsKICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX211c3RI
YW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX211c3RIYW5kbGVWYWx1ZXNbaV0g
PSBmcmVlemVGcmFnaWxlKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7Ci0KICAgICBtX2hhc0Rl
YnVnZ2VyRW5hYmxlZCA9IG1fcHJvZmlsZWRCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmhhc0RlYnVn
Z2VyKCkKICAgICAgICAgfHwgT3B0aW9uczo6Zm9yY2VEZWJ1Z2dlckJ5dGVjb2RlR2VuZXJhdGlv
bigpOwogfQpAQCAtNTI5LDYgKzUyNSwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIER1bXBDCiAgICAgICAgIG91dC5wcmludCgiXG4iKTsKICAgICB9CiAgICAgCisgICAg
b3V0LnByaW50KCJHQyBWYWx1ZXM6XG4iKTsKKyAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6
IG1fZnJvemVuVmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZS0+cG9pbnRzVG9IZWFwKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbkNvbnRleHQoKnZhbHVlLCAmbXlDb250ZXh0
KSwgIlxuIik7CisgICAgfQorICAgIAogICAgIGlmICghbXlDb250ZXh0LmlzRW1wdHkoKSkgewog
ICAgICAgICBteUNvbnRleHQuZHVtcChvdXQpOwogICAgICAgICBvdXQucHJpbnQoIlxuIik7CkBA
IC0xMTA2LDEzICsxMTA4LDEzIEBAIHZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkK
ICAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkucmVzaXplKDApOwogICAgIG1fY29kZUJsb2Nr
LT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24oKS5yZXNpemUoMCk7CiAgICAgZm9y
IChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgewotICAgICAgICBpZiAodmFs
dWUtPnN0cnVjdHVyZSgpKQotICAgICAgICAgICAgQVNTRVJUKG1fcGxhbi53ZWFrUmVmZXJlbmNl
cy5jb250YWlucyh2YWx1ZS0+c3RydWN0dXJlKCkpKTsKKyAgICAgICAgaWYgKCF2YWx1ZS0+cG9p
bnRzVG9IZWFwKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVCh2YWx1ZS0+c3RydWN0dXJlKCkpOworICAgICAgICBBU1NFUlQobV9wbGFuLndlYWtSZWZl
cmVuY2VzLmNvbnRhaW5zKHZhbHVlLT5zdHJ1Y3R1cmUoKSkpOwogICAgICAgICAKICAgICAgICAg
c3dpdGNoICh2YWx1ZS0+c3RyZW5ndGgoKSkgewotICAgICAgICBjYXNlIEZyYWdpbGVWYWx1ZTog
ewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBXZWFrVmFsdWU6
IHsKICAgICAgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodmFsdWUtPnZh
bHVlKCkuYXNDZWxsKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjAyLDcgKzEyMDQsNyBA
QCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgfQogfQogCi1G
cm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZUZyYWdpbGUoSlNWYWx1ZSB2YWx1ZSkKK0Zyb3plblZh
bHVlKiBHcmFwaDo6ZnJlZXplKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKFVOTElLRUxZKCF2
YWx1ZSkpCiAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKTsKQEAg
LTEyMjEsMTYgKzEyMjMsOSBAQCBGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZUZyYWdpbGUoSlNW
YWx1CiAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX2Zyb3plblZhbHVlcy5h
ZGQoZnJvemVuVmFsdWUpOwogfQogCi1Gcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShKU1ZhbHVl
IHZhbHVlKQotewotICAgIEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVlemVGcmFnaWxlKHZhbHVl
KTsKLSAgICByZXN1bHQtPnN0cmVuZ3RoZW5UbyhXZWFrVmFsdWUpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KIEZyb3plblZhbHVlKiBHcmFwaDo6ZnJlZXplU3Ryb25nKEpTVmFsdWUgdmFsdWUp
CiB7Ci0gICAgRnJvemVuVmFsdWUqIHJlc3VsdCA9IGZyZWV6ZUZyYWdpbGUodmFsdWUpOworICAg
IEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVlemUodmFsdWUpOwogICAgIHJlc3VsdC0+c3RyZW5n
dGhlblRvKFN0cm9uZ1ZhbHVlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsOSArMTg2
LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkZXRocmVhZCgpOwogICAgIAotICAgIEZyb3plblZh
bHVlKiBmcmVlemVGcmFnaWxlKEpTVmFsdWUgdmFsdWUpOwotICAgIEZyb3plblZhbHVlKiBmcmVl
emUoSlNWYWx1ZSB2YWx1ZSk7IC8vIFdlIHVzZSB3ZWFrIGZyZWV6aW5nIGJ5IGRlZmF1bHQuIFNo
b3J0aGFuZCBmb3IgZnJlZXplRnJhZ2lsZSh2YWx1ZSktPnN0cmVuZ3RoZW5UbyhXZWFrVmFsdWUp
OwotICAgIEZyb3plblZhbHVlKiBmcmVlemVTdHJvbmcoSlNWYWx1ZSB2YWx1ZSk7IC8vIFNob3J0
aGFuZCBmb3IgZnJlZXplRnJhZ2lsZSh2YWx1ZSktPnN0cmVuZ3RoZW5UbyhTdHJvbmdWYWx1ZSku
CisgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlIHZhbHVlKTsgLy8gV2UgdXNlIHdlYWsg
ZnJlZXppbmcgYnkgZGVmYXVsdC4KKyAgICBGcm96ZW5WYWx1ZSogZnJlZXplU3Ryb25nKEpTVmFs
dWUgdmFsdWUpOyAvLyBTaG9ydGhhbmQgZm9yIGZyZWV6ZSh2YWx1ZSktPnN0cmVuZ3RoZW5UbyhT
dHJvbmdWYWx1ZSkuCiAgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2Rl
LCBGcm96ZW5WYWx1ZSogdmFsdWUpOwogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSog
bm9kZSwgSlNWYWx1ZSB2YWx1ZSk7CkBAIC04MDAsOCArNzk5LDYgQEAgcHVibGljOgogICAgIAog
ICAgIE5vZGVBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogCi0gICAgT3BlcmFuZHM8RnJvemVuVmFs
dWUqPiBtX211c3RIYW5kbGVWYWx1ZXM7Ci0gICAgCiAgICAgVmVjdG9yPCBSZWZQdHI8QmFzaWNC
bG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRy
ZW47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTUwLDI2ICsxNTAsNiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXpl
KCkKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdEhlYWQubG9jYWwoaSkuY2xlYXIoKTsKICAg
ICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwoaSkuY2xlYXIoKTsKICAgICAgICAg
fQotICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmICghYmxvY2stPmlzT1NSVGFyZ2V0KQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxhbi5v
c3JFbnRyeUJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgaWYgKCFub2RlKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBzb3Vy
Y2U7Ci0gICAgICAgICAgICBzb3VyY2Uuc2V0T1NSRW50cnlWYWx1ZShtX2dyYXBoLCAqbV9ncmFw
aC5tX211c3RIYW5kbGVWYWx1ZXNbaV0pOwotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdGFy
Z2V0ID0gYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0
KCk7Ci0gICAgICAgICAgICB0YXJnZXQubWVyZ2Uoc291cmNlKTsKLSAgICAgICAgICAgIHRhcmdl
dC5maXhUeXBlRm9yUmVwcmVzZW50YXRpb24obV9ncmFwaCwgcmVzdWx0Rm9yKGZvcm1hdCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKICAgICB9
CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICBmb3IgKEJsb2NrSW5k
ZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2Js
b2NrSW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmNw
cAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlRyYWNrZWRSZWZl
cmVuY2VzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTcwLDYg
KzE3MSwxOCBAQCB2b2lkIEpJVENvZGU6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAKK3ZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVu
Y2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykKK3sKKyAgICBj
b21tb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKKyAgICAKKyAgICBm
b3IgKE9TUkVudHJ5RGF0YSYgZW50cnkgOiBvc3JFbnRyeSkgeworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBlbnRyeS5tX2V4cGVjdGVkVmFsdWVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAg
IGVudHJ5Lm1fZXhwZWN0ZWRWYWx1ZXNbaV0udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZl
cmVuY2VzKTsKKyAgICB9CisgICAgCisgICAgbWluaWZpZWRERkcudmFsaWRhdGVSZWZlcmVuY2Vz
KHRyYWNrZWRSZWZlcmVuY2VzKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsMTEgQEAKICNpbmNs
dWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSA8d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgogCi1uYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJh
Y2tlZFJlZmVyZW5jZXM7CisKK25hbWVzcGFjZSBERkcgewogCiBjbGFzcyBKSVRDb21waWxlcjsK
IApAQCAtMTA3LDYgKzExMSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE9wdGltaXphdGlvblRo
cmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChDb2RlQmxvY2sqLCBDb21waWxhdGlvblJl
c3VsdCk7CiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCiAgICAgCisgICAgdm9pZCB2YWxpZGF0
ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBvdmVycmlkZTsKKyAgICAKICAg
ICB2b2lkIHNocmlua1RvRml0KCk7CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NzUsNiArNDc1LDU0IEBAIHZvaWQqIEpJVENvbXBpbGVyOjphZGRyZXNzT2ZEb3Vi
bGVDb25zdGEKIH0KICNlbmRpZgogCit2b2lkIEpJVENvbXBpbGVyOjpub3RpY2VPU1JFbnRyeShC
YXNpY0Jsb2NrJiBiYXNpY0Jsb2NrLCBKSVRDb21waWxlcjo6TGFiZWwgYmxvY2tIZWFkLCBMaW5r
QnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIC8vIE9TUiBlbnRyeSBpcyBub3QgYWxsb3dlZCBp
bnRvIGJsb2NrcyBkZWVtZWQgdW5yZWFjaGFibGUgYnkgY29udHJvbCBmbG93IGFuYWx5c2lzLgor
ICAgIGlmICghYmFzaWNCbG9jay5pbnRlcnNlY3Rpb25PZkNGQUhhc1Zpc2l0ZWQpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IG1faml0Q29kZS0+
YXBwZW5kT1NSRW50cnlEYXRhKGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgbGlua0J1ZmZlci5v
ZmZzZXRPZihibG9ja0hlYWQpKTsKKyAgICAKKyAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9
IGJhc2ljQmxvY2suaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkOworICAgICAgICAKKyAg
ICAvLyBGaXggdGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFy
aWFibGUgd2lsbCBoYXZlIGFuIGV4cGVjdGVkCisgICAgLy8gdmFsdWUgb2YgKE5vbmUsIFtdKS4g
QnV0IHRoZSBvbGQgSklUIG1heSBzdGFzaCBzb21lIHZhbHVlcyB0aGVyZS4gU28gd2UgcmVhbGx5
CisgICAgLy8gbmVlZCAoVG9wLCBUT1ApLgorICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2FyZ3VtZW50KSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBiYXNpY0Jsb2NrLnZhcmlhYmxl
c0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFy
Z3VtZW50KGFyZ3VtZW50KS5tYWtlSGVhcFRvcCgpOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBs
b2NhbCA9IDA7IGxvY2FsIDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKTsgKytsb2NhbCkgeworICAgICAgICBOb2RlKiBub2RlID0gYmFzaWNCbG9jay52YXJpYWJs
ZXNBdEhlYWQubG9jYWwobG9jYWwpOworICAgICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChs
b2NhbCkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICBlbnRyeS0+bV9tYWNoaW5lU3RhY2tVc2VkLnNldCh2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJs
ZToKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9sb2NhbHNGb3JjZWREb3VibGUuc2V0KGxvY2Fs
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDUy
OgorICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xvY2Fsc0ZvcmNlZE1hY2hpbmVJbnQuc2V0KGxv
Y2FsKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsK
KyAgICAgICAgICAgICAgICBlbnRyeS0+bV9yZXNodWZmbGluZ3MuYXBwZW5kKAorICAgICAgICAg
ICAgICAgICAgICBPU1JFbnRyeVJlc2h1ZmZsaW5nKAorICAgICAgICAgICAgICAgICAgICAgICAg
dmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKS5vZmZz
ZXQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICAgICAKKyAgICBl
bnRyeS0+bV9yZXNodWZmbGluZ3Muc2hyaW5rVG9GaXQoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjY1LDUzICsyNjUsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9
CiAKLSAgICB2b2lkIG5vdGljZU9TUkVudHJ5KEJhc2ljQmxvY2smIGJhc2ljQmxvY2ssIEpJVENv
bXBpbGVyOjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCi0gICAgewot
ICAgICAgICAvLyBPU1IgZW50cnkgaXMgbm90IGFsbG93ZWQgaW50byBibG9ja3MgZGVlbWVkIHVu
cmVhY2hhYmxlIGJ5IGNvbnRyb2wgZmxvdyBhbmFseXNpcy4KLSAgICAgICAgaWYgKCFiYXNpY0Js
b2NrLmludGVyc2VjdGlvbk9mQ0ZBSGFzVmlzaXRlZCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIE9TUkVudHJ5RGF0YSogZW50cnkgPSBtX2ppdENvZGUtPmFwcGVuZE9T
UkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGxpbmtCdWZmZXIub2Zmc2V0T2Yo
YmxvY2tIZWFkKSk7Ci0gICAgICAgIAotICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9
IGJhc2ljQmxvY2suaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkOwotICAgICAgICAKLSAg
ICAgICAgLy8gRml4IHRoZSBleHBlY3RlZCB2YWx1ZXM6IGluIG91ciBwcm90b2NvbCwgYSBkZWFk
IHZhcmlhYmxlIHdpbGwgaGF2ZSBhbiBleHBlY3RlZAotICAgICAgICAvLyB2YWx1ZSBvZiAoTm9u
ZSwgW10pLiBCdXQgdGhlIG9sZCBKSVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3
ZSByZWFsbHkKLSAgICAgICAgLy8gbmVlZCAoVG9wLCBUT1ApLgotICAgICAgICBmb3IgKHNpemVf
dCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKLSAgICAgICAg
ICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZUhlYXBUb3Ao
KTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFz
aWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgewotICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxv
Y2FsKTsKLSAgICAgICAgICAgIGlmICghbm9kZSB8fCAhbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkK
LSAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFr
ZUhlYXBUb3AoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgICAgICAgICBlbnRyeS0+bV9tYWNoaW5lU3RhY2tVc2VkLnNldCh2YXJpYWJsZS0+bWFjaGlu
ZUxvY2FsKCkudG9Mb2NhbCgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBG
bHVzaGVkRG91YmxlOgotICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bV9sb2NhbHNGb3JjZWRE
b3VibGUuc2V0KGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBGbHVzaGVkSW50NTI6Ci0gICAgICAgICAgICAgICAgICAgIGVudHJ5LT5tX2xv
Y2Fsc0ZvcmNlZE1hY2hpbmVJbnQuc2V0KGxvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICh2YXJpYWJsZS0+bG9jYWwoKSAhPSB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLmFwcGVuZCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE9TUkVudHJ5UmVzaHVmZmxpbmcoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPmxvY2FsKCkub2Zmc2V0KCksIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwo
KS5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgZW50cnktPm1fcmVzaHVmZmxpbmdzLnNocmlua1RvRml0KCk7
Ci0gICAgfQorICAgIHZvaWQgbm90aWNlT1NSRW50cnkoQmFzaWNCbG9jayYsIEpJVENvbXBpbGVy
OjpMYWJlbCBibG9ja0hlYWQsIExpbmtCdWZmZXImKTsKICAgICAKICAgICBSZWZQdHI8SklUQ29k
ZT4gaml0Q29kZSgpIHsgcmV0dXJuIG1faml0Q29kZTsgfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkR3JhcGguY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZEdyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdNaW5pZmll
ZEdyYXBoLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKKyNpbmNsdWRlICJUcmFja2VkUmVmZXJlbmNlcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgTWluaWZpZWRHcmFwaDo6cHJlcGFyZUFuZFNocmluaygpCit7
CisgICAgc3RkOjpzb3J0KG1fbGlzdC5iZWdpbigpLCBtX2xpc3QuZW5kKCksIE1pbmlmaWVkTm9k
ZTo6Y29tcGFyZUJ5Tm9kZUluZGV4KTsKKyAgICBtX2xpc3Quc2hyaW5rVG9GaXQoKTsKK30KKwor
dm9pZCBNaW5pZmllZEdyYXBoOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVy
ZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKQoreworICAgIGZvciAoTWluaWZpZWROb2RlJiBub2Rl
IDogbV9saXN0KSB7CisgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpCisgICAgICAgICAg
ICB0cmFja2VkUmVmZXJlbmNlcy5jaGVjayhub2RlLmNvbnN0YW50KCkpOworICAgIH0KK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRHcmFwaC5oCShy
ZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
R3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNyArMzMsMTEgQEAKICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVHJhY2tlZFJlZmVyZW5j
ZXM7CisKK25hbWVzcGFjZSBERkcgewogCiBjbGFzcyBNaW5pZmllZEdyYXBoIHsKIHB1YmxpYzoK
QEAgLTUwLDExICs1NCw5IEBAIHB1YmxpYzoKICAgICAgICAgbV9saXN0LmFwcGVuZChub2RlKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlQW5kU2hyaW5rKCkKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c29ydChtX2xpc3QuYmVnaW4oKSwgbV9saXN0LmVuZCgpLCBNaW5pZmllZE5vZGU6OmNv
bXBhcmVCeU5vZGVJbmRleCk7Ci0gICAgICAgIG1fbGlzdC5zaHJpbmtUb0ZpdCgpOwotICAgIH0K
KyAgICB2b2lkIHByZXBhcmVBbmRTaHJpbmsoKTsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlUmVm
ZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpOwogICAgIAogcHJpdmF0ZToKICAgICBW
ZWN0b3I8TWluaWZpZWROb2RlPiBtX2xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM1LDkgKzM1LDYxIEBACiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSlNT
dGFja0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQg
T1NSRW50cnlEYXRhOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYmMjIiwgbV9ieXRlY29kZUluZGV4
LCAiLCBtYWNoaW5lIGNvZGUgb2Zmc2V0ID0gIiwgbV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAg
b3V0LnByaW50KCIsIHN0YWNrIHJ1bGVzID0gWyIpOworICAgIAorICAgIGF1dG8gcHJpbnRPcGVy
YW5kID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSB7CisgICAgICAgIG91dC5wcmludChpbkNv
bnRleHQobV9leHBlY3RlZFZhbHVlcy5vcGVyYW5kKHJlZyksIGNvbnRleHQpLCAiICgiKTsKKyAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHRvUmVnOworICAgICAgICBib29sIG92ZXJ3cml0dGVuID0g
ZmFsc2U7CisgICAgICAgIGZvciAoT1NSRW50cnlSZXNodWZmbGluZyByZXNodWZmbGluZyA6IG1f
cmVzaHVmZmxpbmdzKSB7CisgICAgICAgICAgICBpZiAocmVnID09IFZpcnR1YWxSZWdpc3Rlcihy
ZXNodWZmbGluZy5mcm9tT2Zmc2V0KSkgeworICAgICAgICAgICAgICAgIHRvUmVnID0gVmlydHVh
bFJlZ2lzdGVyKHJlc2h1ZmZsaW5nLnRvT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZWcgPT0gVmlydHVhbFJlZ2lzdGVyKHJl
c2h1ZmZsaW5nLnRvT2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBvdmVyd3JpdHRlbiA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFvdmVyd3JpdHRlbiAmJiAhdG9SZWcuaXNWYWxpZCgp
KQorICAgICAgICAgICAgdG9SZWcgPSByZWc7CisgICAgICAgIGlmICh0b1JlZy5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgICAgIGlmICh0b1JlZy5pc0xvY2FsKCkgJiYgIW1fbWFjaGluZVN0YWNrVXNl
ZC5nZXQodG9SZWcudG9Mb2NhbCgpKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoImlnbm9y
ZWQiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIm1hcHMg
dG8gIiwgdG9SZWcpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgib3Zl
cndyaXR0ZW4iKTsKKyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgbV9sb2NhbHNGb3JjZWRE
b3VibGUuZ2V0KHJlZy50b0xvY2FsKCkpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIGZvcmNl
ZCBkb3VibGUiKTsKKyAgICAgICAgaWYgKHJlZy5pc0xvY2FsKCkgJiYgbV9sb2NhbHNGb3JjZWRN
YWNoaW5lSW50LmdldChyZWcudG9Mb2NhbCgpKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCBm
b3JjZWQgbWFjaGluZSBpbnQiKTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgfTsKKyAg
ICAKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChzaXplX3QgYXJndW1lbnRJbmRl
eCA9IG1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRleC0t
OykgeworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIp
OworICAgICAgICBwcmludE9wZXJhbmQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnRJbmRleCkpOworICAgIH0KKyAgICBmb3IgKHNpemVfdCBsb2NhbEluZGV4ID0gMDsgbG9jYWxJ
bmRleCA8IG1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbEluZGV4KSB7
CisgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6Iik7CisgICAg
ICAgIHByaW50T3BlcmFuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChsb2NhbEluZGV4KSk7Cisg
ICAgfQorICAgIAorICAgIG91dC5wcmludCgiXSwgbWFjaGluZSBzdGFjayB1c2VkID0gIiwgbV9t
YWNoaW5lU3RhY2tVc2VkKTsKK30KKwordm9pZCBPU1JFbnRyeURhdGE6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7Cit9CisK
IHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChKSVRDb2RlOjppc09w
dGltaXppbmdKSVQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjAsNiArNjAsOSBAQCBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICBCaXRWZWN0b3IgbV9sb2Nh
bHNGb3JjZWRNYWNoaW5lSW50OwogICAgIFZlY3RvcjxPU1JFbnRyeVJlc2h1ZmZsaW5nPiBtX3Jl
c2h1ZmZsaW5nczsKICAgICBCaXRWZWN0b3IgbV9tYWNoaW5lU3RhY2tVc2VkOworICAgIAorICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7Cisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQg
Z2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTg2Mjcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJP
cGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCisjaW5jbHVk
ZSAiVHJhY2tlZFJlZmVyZW5jZXMuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAog
I2lmIEVOQUJMRShGVExfSklUKQpAQCAtNTM2LDYgKzUzNywyMSBAQCBDb21waWxhdGlvblJlc3Vs
dCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROCiAgICAgCiAgICAgcmVhbGx5QWRkKGNvZGVCbG9jay0+
aml0Q29kZSgpLT5kZmdDb21tb24oKSk7CiAgICAgCisgICAgaWYgKHZhbGlkYXRpb25FbmFibGVk
KCkpIHsKKyAgICAgICAgVHJhY2tlZFJlZmVyZW5jZXMgdHJhY2tlZFJlZmVyZW5jZXM7CisgICAg
ICAgIAorICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxKU0NlbGw+JiByZWZlcmVuY2UgOiBjb2Rl
QmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPndlYWtSZWZlcmVuY2VzKQorICAgICAgICAg
ICAgdHJhY2tlZFJlZmVyZW5jZXMuYWRkKHJlZmVyZW5jZS5nZXQoKSk7CisgICAgICAgIGZvciAo
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4mIHJlZmVyZW5jZSA6IGNvZGVCbG9jay0+aml0Q29kZSgp
LT5kZmdDb21tb24oKS0+d2Vha1N0cnVjdHVyZVJlZmVyZW5jZXMpCisgICAgICAgICAgICB0cmFj
a2VkUmVmZXJlbmNlcy5hZGQocmVmZXJlbmNlLmdldCgpKTsKKyAgICAgICAgZm9yIChXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIGNvbnN0YW50IDogY29kZUJsb2NrLT5jb25zdGFudHMoKSkKKyAgICAg
ICAgICAgIHRyYWNrZWRSZWZlcmVuY2VzLmFkZChjb25zdGFudC5nZXQoKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBDaGVjayB0aGF0IGFueSBvdGhlciByZWZlcmVuY2VzIHRoYXQgd2UgaGF2ZSBh
bnl3aGVyZSBpbiB0aGUgSklUQ29kZSBhcmUgYWxzbworICAgICAgICAvLyB0cmFja2VkIGVpdGhl
ciBzdHJvbmdseSBvciB3ZWFrbHkuCisgICAgICAgIGNvZGVCbG9jay0+aml0Q29kZSgpLT52YWxp
ZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOworICAgIH0KKyAgICAKICAgICByZXR1
cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MzEsNiArMTYzMSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rT1NS
RW50cmllcyhMaW5rCiAgICAgICAgIG1faml0Lm5vdGljZU9TUkVudHJ5KCpibG9jaywgbV9vc3JF
bnRyeUhlYWRzW29zckVudHJ5SW5kZXgrK10sIGxpbmtCdWZmZXIpOwogICAgIH0KICAgICBBU1NF
UlQob3NyRW50cnlJbmRleCA9PSBtX29zckVudHJ5SGVhZHMuc2l6ZSgpKTsKKyAgICAKKyAgICBp
ZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgIER1bXBDb250ZXh0IGR1
bXBDb250ZXh0OworICAgICAgICBkYXRhTG9nKCJPU1IgRW50cmllczpcbiIpOworICAgICAgICBm
b3IgKE9TUkVudHJ5RGF0YSYgZW50cnlEYXRhIDogbV9qaXQuaml0Q29kZSgpLT5vc3JFbnRyeSkK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBpbkNvbnRleHQoZW50cnlEYXRhLCAmZHVtcENv
bnRleHQpLCAiXG4iKTsKKyAgICAgICAgaWYgKCFkdW1wQ29udGV4dC5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBkdW1wQ29udGV4dC5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgfQogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlUHV0QnlWYWwoTm9kZSogbm9kZSwgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQmIGJhc2UsIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCYgcHJv
cGVydHkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4Niw2ICszODYsMTMgQEAgdm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpk
dW1wKFByaW50UwogICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKIH0KIAordm9pZCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5j
ZXMmIHRyYWNrZWRSZWZlcmVuY2VzKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9zZXQudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2Vz
KTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDExIEBACiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKICNpbmNsdWRlICJT
dHJ1Y3R1cmVTZXQuaCIKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCituYW1lc3BhY2UgREZHIHsK
IAogY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB7CiBwdWJsaWM6CkBAIC0yMTQsNiArMjE4
LDggQEAgcHVibGljOgogICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cikgY29uc3Q7CiAgICAgYm9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikgY29uc3Q7CiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
VHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKKyAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0IHVpbnRwdHJfdCBjbG9iYmVyZWRGbGFnID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZEZsYWc7
CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0b3BWYWx1ZSA9IFN0cnVjdHVyZVNldDo6cmVz
ZXJ2ZWRWYWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1MiwxMyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICF2YXJpYW50Lm9sZFN0cnVj
dHVyZUZvclRyYW5zaXRpb24oKS0+ZGZnU2hvdWxkV2F0Y2goKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBK
U0NvbnN0YW50OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5j
b25zdGFudCgpLT5wb2ludHNUb0hlYXAoKSB8fCBub2RlLT5jb25zdGFudCgpLT5zdHJlbmd0aCgp
ID49IFdlYWtWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0
YW50OgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmlzTnVtYmVy
Q29uc3RhbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTdHJlbmd0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVN0cmVuZ3RoLmNw
cAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1
ZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsOSArMzUsNiBAQCB1c2luZyBuYW1lc3Bh
Y2UgSlNDOjpERkc7CiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVT
dHJlbmd0aCBzdHJlbmd0aCkKIHsKICAgICBzd2l0Y2ggKHN0cmVuZ3RoKSB7Ci0gICAgY2FzZSBG
cmFnaWxlVmFsdWU6Ci0gICAgICAgIG91dC5wcmludCgiRnJhZ2lsZSIpOwotICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBXZWFrVmFsdWU6CiAgICAgICAgIG91dC5wcmludCgiV2VhayIpOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU3Ry
ZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVl
U3RyZW5ndGguaAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYWx1ZVN0cmVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDEyICszMyw2IEBACiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGVudW0gVmFsdWVTdHJlbmd0aCB7Ci0gICAg
Ly8gVGhlIHZhbHVlIGlzIGtub3duIHRvIHRoZSBERkcgYnV0IG5vIG9wdGltaXphdGlvbnMgaGF2
ZSBiZWVuIHBlcmZvcm1lZCB0aGF0IHJlcXVpcmUgdGhlCi0gICAgLy8gdmFsdWUgdG8gYmUga2Vw
dCBhbGl2ZS4gQWxsIE9TUiBlbnRyeSB2YWx1ZXMgYXJlIGZyYWdpbGUgdW50aWwgd2UgZG8gc29t
ZSBvcHRpbWl6YXRpb24gdGhhdAotICAgIC8vIHVzZXMgdGhlbSwgbGlrZSBhY3R1YWxseSBjb25z
dGFudCBmb2xkaW5nIGEgdmFyaWFibGUgdG8gdGhhdCB2YWx1ZS4gQnkgY29udmVudGlvbiB3ZSBz
YXkKLSAgICAvLyB0aGF0IGFsbCBub24tY2VsbHMgYXJlIGZyYWdpbGUuCi0gICAgRnJhZ2lsZVZh
bHVlLAotICAgIAogICAgIC8vIFRoZSB2YWx1ZSBoYXMgYmVlbiB1c2VkIGZvciBvcHRpbWl6YXRp
b24gYW5kIGl0IGFyb3NlIHRocm91Z2ggaW5mZXJlbmNlLiBXZSBkb24ndCB3YW50IHRoZQogICAg
IC8vIGZhY3QgdGhhdCB3ZSBvcHRpbWl6ZWQgdGhlIGNvZGUgdG8gcmVzdWx0IGluIHRoZSBHQyBr
ZWVwaW5nIHRoaXMgdmFsdWUgYWxpdmUgdW5uZWNlc3NhcmlseSwKICAgICAvLyBzbyB3ZSdkIHJh
dGhlciBraWxsIHRoZSBjb2RlIGFuZCByZWNvbXBpbGUgdGhhbiBrZWVwIHRoZSBvYmplY3QgYWxp
dmUgbG9uZ2VyLgpAQCAtNTIsMTggKzQ2LDE0IEBAIGVudW0gVmFsdWVTdHJlbmd0aCB7CiBpbmxp
bmUgVmFsdWVTdHJlbmd0aCBtZXJnZShWYWx1ZVN0cmVuZ3RoIGEsIFZhbHVlU3RyZW5ndGggYikK
IHsKICAgICBzd2l0Y2ggKGEpIHsKLSAgICBjYXNlIEZyYWdpbGVWYWx1ZToKLSAgICAgICAgcmV0
dXJuIGI7CiAgICAgY2FzZSBXZWFrVmFsdWU6Ci0gICAgICAgIGlmIChiID09IFN0cm9uZ1ZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuIFN0cm9uZ1ZhbHVlOwotICAgICAgICByZXR1cm4gV2Vha1Zh
bHVlOworICAgICAgICByZXR1cm4gYjsKICAgICBjYXNlIFN0cm9uZ1ZhbHVlOgogICAgICAgICBy
ZXR1cm4gU3Ryb25nVmFsdWU7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKLSAgICByZXR1cm4gRnJhZ2lsZVZhbHVlOworICAgIHJldHVybiBXZWFrVmFsdWU7CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFByb3BlcnR5VmFsdWUuY3BwCShyZXZpc2lvbiAxODYyNzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsMTEgQEAgdm9pZCBFeGl0UHJvcGVydHlWYWx1ZTo6
ZHVtcChQcmludFN0cmVhbQogICAgIG91dC5wcmludChtX2xvY2F0aW9uLCAiID0+ICIsIG1fdmFs
dWUpOwogfQogCit2b2lkIEV4aXRQcm9wZXJ0eVZhbHVlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29u
c3QgVHJhY2tlZFJlZmVyZW5jZXMmIHRyYWNrZWRSZWZlcmVuY2VzKSBjb25zdAoreworICAgIG1f
dmFsdWUudmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9wZXJ0eVZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0UHJvcGVydHlWYWx1ZS5oCShy
ZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRQcm9w
ZXJ0eVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDExIEBACiAjaW5jbHVkZSAi
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIKICNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKIAot
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IFRyYWNrZWRSZWZlcmVuY2VzOworCituYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgRXhpdFByb3Bl
cnR5VmFsdWUgewogcHVibGljOgpAQCAtNTQsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgRXhpdFBy
b3BlcnR5VmFsdWUgd2l0aExvY2Fsc09mZnNldChpbnQgb2Zmc2V0KSBjb25zdDsKICAgICAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgdm9pZCB2YWxp
ZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBERkc6OlByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIG1fbG9jYXRpb247CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRU
aW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDEyIEBAIHZvaWQgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb246OmR1bXAKICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcih0aGlzKSwgIjoiLCBH
cmFwaDo6b3BOYW1lKG1fdHlwZSksICIoIiwgbGlzdER1bXAobV9wcm9wZXJ0aWVzKSwgIikiKTsK
IH0KIAordm9pZCBFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbjo6dmFsaWRhdGVSZWZlcmVu
Y2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykgY29uc3QKK3sK
KyAgICBmb3IgKEV4aXRQcm9wZXJ0eVZhbHVlIHZhbHVlIDogbV9wcm9wZXJ0aWVzKQorICAgICAg
ICB2YWx1ZS52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaW1l
T2JqZWN0TWF0ZXJpYWxpemF0aW9uLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsMTEgQEAKICNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCituYW1l
c3BhY2UgRlRMIHsKIAogY2xhc3MgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24gewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKQpAQCAt
NTMsNiArNTcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OwogICAgIAorICAgIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNr
ZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNlcykgY29uc3Q7CisgICAgCiBwcml2YXRlOgog
ICAgIERGRzo6Tm9kZVR5cGUgbV90eXBlOwogICAgIENvZGVPcmlnaW4gbV9vcmlnaW47CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAx
ODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkZUTEV4aXRUaW1lT2Jq
ZWN0TWF0ZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
IlRyYWNrZWRSZWZlcmVuY2VzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
IApAQCAtMTI2LDYgKzEyNywxMiBAQCB2b2lkIEV4aXRWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjCiAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwogfQogCit2b2lkIEV4aXRWYWx1ZTo6
dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJl
bmNlcykgY29uc3QKK3sKKyAgICBpZiAoaXNDb25zdGFudCgpKQorICAgICAgICB0cmFja2VkUmVm
ZXJlbmNlcy5jaGVjayhjb25zdGFudCgpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDE4NjI3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDEx
IEBACiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBUcmFja2VkUmVmZXJlbmNlczsKKworbmFtZXNwYWNlIEZUTCB7CiAKIC8vIFRo
aXMgaXMgbGlrZSBWYWx1ZVJlY292ZXJ5LCBidXQgcmVzcGVjdHMgdGhlIHdheSB0aGF0IHRoZSBG
VEwgZG9lcyBPU1IKIC8vIGV4aXQ6IHRoZSBsaXZlIG5vbi1jb25zdGFudCBub24tZmx1c2hlZCB2
YWx1ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMKQEAgLTIyMiw2ICsyMjYsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICAKKyAgICB2b2lkIHZh
bGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpIGNvbnN0OworICAgIAog
cHJpdmF0ZToKICAgICBFeGl0VmFsdWVLaW5kIG1fa2luZDsKICAgICB1bmlvbiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE4NjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTEyNSw2ICsxMjUsMTQgQEAgREZHOjpDb21tb25EYXRhKiBKSVRDb2RlOjpkZmdDb21tb24o
KQogICAgIHJldHVybiAmY29tbW9uOwogfQogCit2b2lkIEpJVENvZGU6OnZhbGlkYXRlUmVmZXJl
bmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMpCit7CisgICAg
Y29tbW9uLnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CisgICAgCisgICAg
Zm9yIChPU1JFeGl0JiBleGl0IDogb3NyRXhpdCkKKyAgICAgICAgZXhpdC52YWxpZGF0ZVJlZmVy
ZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNyArNDcsMTEgQEAKIAogI2Rl
ZmluZSBTRUNUSU9OX05BTUUoTkFNRSkgKFNFQ1RJT05fTkFNRV9QUkVGSVggTkFNRSkKIAotbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRy
YWNrZWRSZWZlcmVuY2VzOworCituYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgSklUQ29kZSA6IHB1
YmxpYyBKU0M6OkpJVENvZGUgewogcHVibGljOgpAQCAtNjcsNiArNzEsOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBpbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoQ29kZVJlZik7CiAgICAgdm9p
ZCBpbml0aWFsaXplQWRkcmVzc0ZvckNhbGwoQ29kZVB0cik7CiAgICAgCisgICAgdm9pZCB2YWxp
ZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVyZW5jZXMmKSBvdmVycmlkZTsKKyAgICAK
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+PiYgaGFuZGxl
cygpIGNvbnN0IHsgcmV0dXJuIG1faGFuZGxlczsgfQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
RGF0YVNlY3Rpb24+PiYgZGF0YVNlY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhU2VjdGlv
bnM7IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNw
cAkocmV2aXNpb24gMTg2MjcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMTUgQEAgQ29kZUxvY2F0aW9uSnVt
cCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25GbwogICAgICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQp
OwogfQogCit2b2lkIE9TUkV4aXQ6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVm
ZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV92
YWx1ZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICBtX3ZhbHVlc1tpXS52YWxpZGF0ZVJlZmVyZW5j
ZXModHJhY2tlZFJlZmVyZW5jZXMpOworICAgIAorICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IG1fbWF0ZXJpYWxpemF0aW9ucykKKyAgICAg
ICAgbWF0ZXJpYWxpemF0aW9uLT52YWxpZGF0ZVJlZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMp
OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lv
biAxODYyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDEsNyArNDEsMTEgQEAKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIK
ICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOworCitu
YW1lc3BhY2UgRlRMIHsKIAogLy8gVHJhY2tzIG9uZSBPU1IgZXhpdCBzaXRlIHdpdGhpbiB0aGUg
RlRMIEpJVC4gT1NSIGV4aXQgaW4gRlRMIHdvcmtzIGJ5IGRlY29uc3RydWN0aW5nCiAvLyB0aGUg
Y3JhenkgdGhhdCBpcyBPU1IgZG93biB0byBzaW1wbGUgU1NBIENGRyBwcmltaXRpdmVzIHRoYXQg
YW55IGNvbXBpbGVyIGJhY2tlbmQKQEAgLTE1OSw2ICsxNjMsOCBAQCBzdHJ1Y3QgT1NSRXhpdCA6
IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgewogICAgICAgICBPU1JFeGl0QmFzZTo6Y29u
c2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRGcm9t
RlRMKTsKICAgICB9CisgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJh
Y2tlZFJlZmVyZW5jZXMmKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkocmV2aXNpb24gMTg2MjcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNiArNjQsMTAgQEAgY29uc3QgY2hhciogSklUQ29kZTo6dHlwZU5hbWUoSklUVHlwZSBqaQog
ICAgIH0KIH0KIAordm9pZCBKSVRDb2RlOjp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tl
ZFJlZmVyZW5jZXMmKQoreworfQorCiBKU1ZhbHVlIEpJVENvZGU6OmV4ZWN1dGUoVk0qIHZtLCBQ
cm90b0NhbGxGcmFtZSogcHJvdG9DYWxsRnJhbWUpCiB7CiAgICAgdm9pZCogZW50cnlBZGRyZXNz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE4NjI3MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw2ICs0Niw3IEBAIGNsYXNzIEpJVENvZGU7CiB9CiAKIHN0cnVjdCBQcm90b0NhbGxGcmFt
ZTsKK2NsYXNzIFRyYWNrZWRSZWZlcmVuY2VzOwogY2xhc3MgVk07CiAKIGNsYXNzIEpJVENvZGUg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8SklUQ29kZT4gewpAQCAtMTgzLDYgKzE4NCw4
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZUTDo6SklUQ29kZSogZnRsKCk7CiAgICAgdmlydHVh
bCBGVEw6OkZvck9TUkVudHJ5SklUQ29kZSogZnRsRm9yT1NSRW50cnkoKTsKICAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJik7
CisgICAgCiAgICAgSlNWYWx1ZSBleGVjdXRlKFZNKiwgUHJvdG9DYWxsRnJhbWUqKTsKICAgICAK
ICAgICB2b2lkKiBzdGFydCgpIHsgcmV0dXJuIGRhdGFBZGRyZXNzQXRPZmZzZXQoMCk7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1vc3ItZW50cnktdmFs
dWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9k
ZWFkLW9zci1lbnRyeS12YWx1ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1vc3ItZW50cnktdmFsdWUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBvID0ge2Y6NDJ9Owor
ICAgIHZhciByZXN1bHQgPSAwOworICAgIE9TUkV4aXQoKTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgaWYgKCFERkdUcnVlKCkpCisgICAgICAgICAgICBy
ZXN1bHQgKz0gby5mOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIGZvbygpOworICAgIGZ1bGxHQygpOworfQorCg==
</data>
<flag name="review"
          id="281253"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>