<?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>137168</bug_id>
          
          <creation_ts>2014-09-26 20:22:33 -0700</creation_ts>
          <short_desc>FTL should sink PutLocals</short_desc>
          <delta_ts>2014-10-04 10:19:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>137242</dependson>
    
    <dependson>137315</dependson>
    
    <dependson>137408</dependson>
          <blocked>137126</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1037612</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-26 20:22:33 -0700</bug_when>
    <thetext>This&apos;ll be fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037782</commentid>
    <comment_count>1</comment_count>
      <attachid>238816</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-28 10:30:18 -0700</bug_when>
    <thetext>Created attachment 238816
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037798</commentid>
    <comment_count>2</comment_count>
      <attachid>238823</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-28 14:54:10 -0700</bug_when>
    <thetext>Created attachment 238823
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037801</commentid>
    <comment_count>3</comment_count>
      <attachid>238826</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-28 15:13:00 -0700</bug_when>
    <thetext>Created attachment 238826
it is written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1037806</commentid>
    <comment_count>4</comment_count>
      <attachid>238829</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-28 15:53:22 -0700</bug_when>
    <thetext>Created attachment 238829
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038133</commentid>
    <comment_count>5</comment_count>
      <attachid>238903</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-29 19:52:55 -0700</bug_when>
    <thetext>Created attachment 238903
it&apos;s getting real

This is now allowing allocation sinking in raytrace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038134</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-29 19:55:48 -0700</bug_when>
    <thetext>Attachment 238903 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGSetLocalSinkingPhase.cpp:89:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSetLocalSinkingPhase.cpp:93:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/dfg/DFGSetLocalSinkingPhase.cpp:99:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSetLocalSinkingPhase.cpp:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSetLocalSinkingPhase.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSetLocalSinkingPhase.cpp:303:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGSetLocalSinkingPhase.cpp:329:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:25:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:41:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 13 in 26 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>1038226</commentid>
    <comment_count>7</comment_count>
      <attachid>238928</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-30 09:22:19 -0700</bug_when>
    <thetext>Created attachment 238928
it runs more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038240</commentid>
    <comment_count>8</comment_count>
      <attachid>238928</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-09-30 10:01:22 -0700</bug_when>
    <thetext>Comment on attachment 238928
it runs more things

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

&gt; Source/JavaScriptCore/dfg/DFGClobberSet.h:108
&gt; +    mutable bool m_result;

mmmmmmmmmmmutable

&gt; Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:105
&gt; +            m_read(virtualRegisterForArgument(i));

a quick question - i&apos;m totally out of date with the behaviour of the dfg - what happens with captured arguments that have been moved? Also, what happens if i put captured arguments into the activation - so they become GetFromScope

&gt; Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:145
&gt; +    const ReadFunctor&amp; m_read;
&gt; +    const WriteFunctor&amp; m_write;
&gt; +    const DefFunctor&amp; m_def;

I don&apos;t like these names - I think it would be clearer if you actually name them m_readFunctor or some such</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038293</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-30 12:30:14 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 238928 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=238928&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGClobberSet.h:108
&gt; &gt; +    mutable bool m_result;
&gt; 
&gt; mmmmmmmmmmmutable
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:105
&gt; &gt; +            m_read(virtualRegisterForArgument(i));
&gt; 
&gt; a quick question - i&apos;m totally out of date with the behaviour of the dfg - what happens with captured arguments that have been moved?

What do you mean by moved?

&gt; Also, what happens if i put captured arguments into the activation - so they become GetFromScope

Last I checked there was the whole SlowArguments thing.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:145
&gt; &gt; +    const ReadFunctor&amp; m_read;
&gt; &gt; +    const WriteFunctor&amp; m_write;
&gt; &gt; +    const DefFunctor&amp; m_def;
&gt; 
&gt; I don&apos;t like these names - I think it would be clearer if you actually name them m_readFunctor or some such

read/write/def as opposed to readFunctor/writeFunctor/defFunctor is what clobberize() has always used.  I think it&apos;s better for the names of these functions to be a verb.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038425</commentid>
    <comment_count>10</comment_count>
      <attachid>238983</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-30 17:41:39 -0700</bug_when>
    <thetext>Created attachment 238983
slightly different approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1038445</commentid>
    <comment_count>11</comment_count>
      <attachid>238991</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-09-30 20:41:42 -0700</bug_when>
    <thetext>Created attachment 238991
better

This includes the code for https://bugs.webkit.org/show_bug.cgi?id=137242.  This should be a much saner approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039082</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-02 18:11:26 -0700</bug_when>
    <thetext>Wow.  2% speed-up on Octane because of a tremendous win on Raytrace, as expected.  Also a big win on AsmBench.  But then there&apos;s a regression on SunSpider and CompressionBench, and I&apos;m sort of not sure why.

I&apos;ll need to verify these results.  It&apos;s probably good enough to land.


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

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

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                PutLocalSink                                   
SunSpider:
   3d-cube                                            8.0375+-0.1264     ?      8.0461+-0.1806        ?
   3d-morph                                           9.7625+-0.0890            9.6490+-0.0909          might be 1.0118x faster
   3d-raytrace                                        9.7220+-0.1254     ?      9.7865+-0.2430        ?
   access-binary-trees                                2.9493+-0.1175     ?      2.9830+-0.1403        ? might be 1.0114x slower
   access-fannkuch                                    9.5824+-0.1100     ?      9.6967+-0.1534        ? might be 1.0119x slower
   access-nbody                                       4.7216+-0.1084     ?      4.7677+-0.0866        ?
   access-nsieve                                      5.6322+-0.0498            5.5173+-0.0954          might be 1.0208x faster
   bitops-3bit-bits-in-byte                           2.0195+-0.0437     ?      2.0346+-0.0336        ?
   bitops-bits-in-byte                                6.8996+-0.1632     ?      7.0101+-0.0960        ? might be 1.0160x slower
   bitops-bitwise-and                                 3.3562+-0.0120     ?      3.3866+-0.0240        ?
   bitops-nsieve-bits                                 5.8123+-0.1191     ?      5.8406+-0.0267        ?
   controlflow-recursive                              3.0934+-0.0115     ?      3.1336+-0.0392        ? might be 1.0130x slower
   crypto-aes                                         6.2886+-0.1243     ?      6.3477+-0.0428        ?
   crypto-md5                                         3.6616+-0.0694     ?      3.7114+-0.0779        ? might be 1.0136x slower
   crypto-sha1                                        3.8406+-0.0196     ?      3.9175+-0.0764        ? might be 1.0200x slower
   date-format-tofte                                 13.1297+-0.2357           12.9888+-0.1922          might be 1.0109x faster
   date-format-xparb                                  8.3951+-0.2125            8.1937+-0.1587          might be 1.0246x faster
   math-cordic                                        4.8265+-0.0447            4.8107+-0.0486        
   math-partial-sums                                 10.6298+-0.1045     ?     10.6470+-0.1428        ?
   math-spectral-norm                                 3.2342+-0.0561     ?      3.2474+-0.0508        ?
   regexp-dna                                        11.8535+-0.0513     ?     12.0653+-0.2202        ? might be 1.0179x slower
   string-base64                                      6.5574+-0.0902     ?      6.5656+-0.0287        ?
   string-fasta                                      10.4286+-0.1458           10.3933+-0.2569        
   string-tagcloud                                   15.0290+-0.1655     ?     15.1302+-0.1355        ?
   string-unpack-code                                31.5492+-0.2459     !     33.4525+-1.2767        ! definitely 1.0603x slower
   string-validate-input                              7.3988+-0.1496     ?      7.5411+-0.0765        ? might be 1.0192x slower

   &lt;arithmetic&gt; *                                     8.0158+-0.0252     !      8.1101+-0.0650        ! definitely 1.0118x slower
   &lt;geometric&gt;                                        6.6214+-0.0212     ?      6.6642+-0.0283        ? might be 1.0065x slower
   &lt;harmonic&gt;                                         5.5777+-0.0238     ?      5.6137+-0.0196        ? might be 1.0064x slower

                                                        TipOfTree                PutLocalSink                                   
LongSpider:
   3d-cube                                         1395.2070+-12.9071        1387.8363+-10.8838       
   3d-morph                                        2279.8200+-6.4583         2278.5280+-8.1088        
   3d-raytrace                                     1293.4965+-19.0228        1287.7495+-7.7043        
   access-binary-trees                             1628.0865+-5.4993         1625.7843+-5.5841        
   access-fannkuch                                  522.7480+-12.7587    ?    528.3347+-20.3430       ? might be 1.0107x slower
   access-nbody                                    1223.3409+-1.1760     ?   1223.6287+-4.2173        ?
   access-nsieve                                   1538.3647+-3.6213         1536.4247+-5.6844        
   bitops-3bit-bits-in-byte                          57.1924+-0.6823     ?     57.6049+-0.5589        ?
   bitops-bits-in-byte                              384.5490+-11.6905         376.4255+-6.4065          might be 1.0216x faster
   bitops-nsieve-bits                              1141.7739+-1.9863     ?   1150.9476+-7.3881        ?
   controlflow-recursive                            870.5566+-1.5206          869.7130+-1.3920        
   crypto-aes                                      1100.8203+-5.6821     ?   1103.9043+-4.0001        ?
   crypto-md5                                       961.3815+-4.0116          961.3782+-4.1599        
   crypto-sha1                                     1204.7223+-3.4645     ^   1163.0105+-11.4018       ^ definitely 1.0359x faster
   date-format-tofte                               1149.1792+-10.2197    ?   1167.2183+-10.4733       ? might be 1.0157x slower
   date-format-xparb                               1175.1964+-11.3258    ?   1219.2829+-141.5483      ? might be 1.0375x slower
   math-cordic                                      815.2417+-3.9016          813.4804+-0.9454        
   math-partial-sums                               1318.9708+-4.2953     ?   1337.4242+-29.8783       ? might be 1.0140x slower
   math-spectral-norm                              1300.7848+-1.9529         1299.6128+-2.3694        
   string-base64                                    573.8923+-3.5138          571.7122+-2.9024        
   string-fasta                                     706.1168+-5.8596          705.4448+-6.6123        
   string-tagcloud                                  358.5563+-1.0827     ?    365.6825+-7.4426        ? might be 1.0199x slower

   &lt;arithmetic&gt;                                    1045.4544+-2.0210     ?   1046.8695+-6.6075        ? might be 1.0014x slower
   &lt;geometric&gt; *                                    872.9867+-2.0795     ?    874.2492+-5.3086        ? might be 1.0014x slower
   &lt;harmonic&gt;                                       533.4850+-2.5238     ?    535.4293+-3.4760        ? might be 1.0036x slower

                                                        TipOfTree                PutLocalSink                                   
V8Spider:
   crypto                                            83.6087+-0.9985           82.7563+-0.5410          might be 1.0103x faster
   deltablue                                        119.8343+-0.9417          119.4505+-0.8887        
   earley-boyer                                      73.3476+-1.7161           71.4194+-2.0498          might be 1.0270x faster
   raytrace                                          44.1761+-1.0614     ?     45.1481+-0.9010        ? might be 1.0220x slower
   regexp                                           105.4157+-0.3850     !    106.8053+-0.1847        ! definitely 1.0132x slower
   richards                                         112.1943+-1.0281     ?    112.6431+-0.7042        ?
   splay                                             49.8605+-1.2182     ?     51.0800+-0.9879        ? might be 1.0245x slower

   &lt;arithmetic&gt;                                      84.0625+-0.5979     ?     84.1861+-0.2666        ? might be 1.0015x slower
   &lt;geometric&gt; *                                     78.9588+-0.7326     ?     79.2169+-0.3180        ? might be 1.0033x slower
   &lt;harmonic&gt;                                        73.6464+-0.8425     ?     74.1183+-0.4248        ? might be 1.0064x slower

                                                        TipOfTree                PutLocalSink                                   
Octane:
   encrypt                                           0.40642+-0.00539    ^     0.38971+-0.00415       ^ definitely 1.0429x faster
   decrypt                                           7.17428+-0.02471    ^     6.82313+-0.02210       ^ definitely 1.0515x faster
   deltablue                                x2       0.32356+-0.00059    ^     0.32120+-0.00145       ^ definitely 1.0073x faster
   earley                                            1.35665+-0.01112          1.34826+-0.00324       
   boyer                                            10.07429+-0.07817    ^     9.87321+-0.07221       ^ definitely 1.0204x faster
   navier-stokes                            x2       7.75663+-0.00730    ?     7.76416+-0.01272       ?
   raytrace                                 x2       2.53314+-0.02206    ^     1.98765+-0.01142       ^ definitely 1.2744x faster
   richards                                 x2       0.20099+-0.00206    ?     0.20269+-0.00384       ?
   splay                                    x2       0.60640+-0.00312          0.60474+-0.00450       
   regexp                                   x2      60.52546+-0.41683    !    61.54964+-0.29370       ! definitely 1.0169x slower
   pdfjs                                    x2      84.49160+-0.45755    !    85.62928+-0.26531       ! definitely 1.0135x slower
   mandreel                                 x2      91.95326+-0.30973    ^    89.09704+-0.24156       ^ definitely 1.0321x faster
   gbemu                                    x2      70.40447+-1.14746         70.39369+-1.28096       
   closure                                           0.90335+-0.00244    !     0.93227+-0.02362       ! definitely 1.0320x slower
   jquery                                           11.26889+-0.01984    !    11.43269+-0.02978       ! definitely 1.0145x slower
   box2d                                    x2      23.25676+-0.41223         22.91602+-0.13719         might be 1.0149x faster
   zlib                                     x2     787.36457+-2.87383        781.85160+-3.68591       
   typescript                               x2    1224.45365+-4.94409    ?  1231.24618+-7.91881       ?

   &lt;arithmetic&gt;                                    157.96416+-0.52502        157.93090+-0.49607         might be 1.0002x faster
   &lt;geometric&gt; *                                    11.77374+-0.01906    ^    11.54268+-0.03552       ^ definitely 1.0200x faster
   &lt;harmonic&gt;                                        1.18540+-0.00404          1.17277+-0.01137         might be 1.0108x faster

                                                        TipOfTree                PutLocalSink                                   
Kraken:
   ai-astar                                          530.529+-1.326      ?     530.938+-1.710         ?
   audio-beat-detection                              189.287+-4.227      !     199.380+-2.480         ! definitely 1.0533x slower
   audio-dft                                         254.313+-2.090      ?     260.222+-11.494        ? might be 1.0232x slower
   audio-fft                                         130.499+-0.694      ?     131.247+-0.476         ?
   audio-oscillator                                  375.881+-1.246      ?     376.092+-1.133         ?
   imaging-darkroom                                  288.255+-1.848            286.281+-1.447         
   imaging-desaturate                                113.815+-1.853      ?     113.991+-2.551         ?
   imaging-gaussian-blur                             184.172+-0.439            183.864+-1.945         
   json-parse-financial                               81.998+-0.937      !      85.306+-1.400         ! definitely 1.0403x slower
   json-stringify-tinderbox                           99.310+-0.925      ?     100.335+-0.510         ? might be 1.0103x slower
   stanford-crypto-aes                                99.732+-0.933      ?     100.153+-0.860         ?
   stanford-crypto-ccm                                96.915+-0.906             91.648+-10.947          might be 1.0575x faster
   stanford-crypto-pbkdf2                            272.993+-2.413      ?     276.242+-4.412         ? might be 1.0119x slower
   stanford-crypto-sha256-iterative                  107.059+-0.732      ?     107.516+-1.246         ?

   &lt;arithmetic&gt; *                                    201.768+-0.519      !     203.087+-0.563         ! definitely 1.0065x slower
   &lt;geometric&gt;                                       170.401+-0.338      ?     171.413+-1.078         ? might be 1.0059x slower
   &lt;harmonic&gt;                                        147.788+-0.207      ?     148.365+-1.969         ? might be 1.0039x slower

                                                        TipOfTree                PutLocalSink                                   
JSRegress:
   abs-boolean                                        4.4836+-0.1422            4.4650+-0.0846        
   adapt-to-double-divide                            20.4083+-0.3318     ?     20.4725+-0.4288        ?
   aliased-arguments-getbyval                         1.1741+-0.0179     ?      1.2030+-0.0364        ? might be 1.0246x slower
   allocate-big-object                                3.8801+-0.1162     ?      4.0445+-0.0696        ? might be 1.0424x slower
   arity-mismatch-inlining                            1.1425+-0.0138     ?      1.1521+-0.0186        ?
   array-access-polymorphic-structure                10.9283+-0.1376     ?     11.0759+-0.1088        ? might be 1.0135x slower
   array-nonarray-polymorhpic-access                 61.0306+-0.2757           60.9854+-1.1495        
   array-prototype-every                            121.9843+-1.7254     ?    124.7555+-2.5857        ? might be 1.0227x slower
   array-prototype-forEach                          121.5375+-2.3519     ?    122.0131+-1.0966        ?
   array-prototype-map                              145.4501+-0.6546     ?    147.4444+-2.4995        ? might be 1.0137x slower
   array-prototype-some                             120.2097+-0.5922     ?    123.6385+-5.6919        ? might be 1.0285x slower
   array-splice-contiguous                           68.7650+-0.6598           68.2942+-0.6264        
   array-with-double-add                              6.6000+-0.0562            6.5904+-0.0677        
   array-with-double-increment                        4.7726+-0.0442     ?      4.7758+-0.0551        ?
   array-with-double-mul-add                          8.4269+-0.1081            8.3258+-0.1722          might be 1.0121x faster
   array-with-double-sum                              5.0363+-0.0474     ?      5.1149+-0.0597        ? might be 1.0156x slower
   array-with-int32-add-sub                          11.2762+-0.2225     ?     11.3037+-0.1733        ?
   array-with-int32-or-double-sum                     5.2192+-0.0162            5.1918+-0.0737        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     57.4394+-0.9837     ?     58.7526+-0.8771        ? might be 1.0229x slower
   ArrayBuffer-DataView-alloc-long-lived             23.1079+-0.3782     !     24.3758+-0.6677        ! definitely 1.0549x slower
   ArrayBuffer-Int32Array-byteOffset                  5.4712+-0.0724            5.4476+-0.0115        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     61.1474+-2.0334     ?     63.7353+-1.0256        ? might be 1.0423x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     39.2977+-1.0576     ?     40.0468+-0.5115        ? might be 1.0191x slower
   ArrayBuffer-Int8Array-alloc-long-lived            21.7593+-0.3732     !     23.3800+-0.5392        ! definitely 1.0745x slower
   ArrayBuffer-Int8Array-alloc                       18.3818+-0.4697     !     19.7210+-0.5349        ! definitely 1.0729x slower
   asmjs_bool_bug                                    10.3230+-0.1524     ?     10.3924+-0.1522        ?
   assign-custom-setter-polymorphic                   5.0320+-0.1362     ?      5.0530+-0.1761        ?
   assign-custom-setter                               6.7631+-0.0503     ?      6.7874+-0.1621        ?
   basic-set                                         15.4467+-0.1319     ?     15.8560+-0.5077        ? might be 1.0265x slower
   big-int-mul                                        6.7684+-0.1249     ?      6.8609+-0.1186        ? might be 1.0137x slower
   boolean-test                                       4.9744+-0.0893            4.9497+-0.0495        
   branch-fold                                        5.4201+-0.0601            5.3993+-0.0911        
   by-val-generic                                    12.9619+-0.3008           12.9048+-0.2793        
   call-spread-apply                                 20.8643+-0.1757     ?     21.2384+-0.6630        ? might be 1.0179x slower
   call-spread-call                                   9.1102+-0.1687            8.9875+-0.0469          might be 1.0137x faster
   captured-assignments                               0.6139+-0.0055     ?      0.6162+-0.0042        ?
   cast-int-to-double                                 9.5512+-0.0868     ?      9.6724+-0.1460        ? might be 1.0127x slower
   cell-argument                                     11.2406+-0.2816           11.1732+-0.2333        
   cfg-simplify                                       4.2650+-0.0109     ?      4.2968+-0.0333        ?
   chain-getter-access                               13.7425+-0.2860     ?     13.7826+-0.2177        ?
   cmpeq-obj-to-obj-other                            13.7468+-0.4113           13.5193+-0.3031          might be 1.0168x faster
   constant-test                                      8.9705+-0.2024     ?      9.0677+-0.0368        ? might be 1.0108x slower
   DataView-custom-properties                        65.7047+-0.9374     !     68.2561+-1.4540        ! definitely 1.0388x slower
   delay-tear-off-arguments-strictmode                3.7739+-0.0572     ?      3.7938+-0.0318        ?
   destructuring-arguments                            9.1611+-0.1673            9.1475+-0.1373        
   destructuring-swap                                 9.1839+-0.0851            9.1374+-0.1084        
   direct-arguments-getbyval                          1.2930+-0.0277     ?      1.3139+-0.0267        ? might be 1.0162x slower
   div-boolean-double                                 6.6388+-0.0352            6.5550+-0.1653          might be 1.0128x faster
   div-boolean                                       11.8409+-0.1247           11.7714+-0.1647        
   double-get-by-val-out-of-bounds                    6.7495+-0.1504     ?      7.0024+-0.3183        ? might be 1.0375x slower
   double-pollution-getbyval                         11.5356+-0.1379           11.5020+-0.2164        
   double-pollution-putbyoffset                       6.3817+-0.1274            6.3615+-0.1717        
   double-to-int32-typed-array-no-inline              3.2813+-0.0512            3.2593+-0.0630        
   double-to-int32-typed-array                        2.6712+-0.0631            2.6613+-0.0682        
   double-to-uint32-typed-array-no-inline             3.3429+-0.0616            3.3084+-0.0813          might be 1.0104x faster
   double-to-uint32-typed-array                       2.8814+-0.0487     ?      2.9148+-0.0692        ? might be 1.0116x slower
   elidable-new-object-dag                           63.0408+-0.7877     ?     63.5194+-1.8957        ?
   elidable-new-object-roflcopter                   241.8535+-1.7415     ?    248.9102+-6.5529        ? might be 1.0292x slower
   elidable-new-object-tree                          71.5932+-0.7162     ?     71.8291+-1.8671        ?
   empty-string-plus-int                              8.0030+-0.0369     !      8.3595+-0.1500        ! definitely 1.0445x slower
   emscripten-cube2hash                              53.3261+-0.5643     ?     53.5196+-0.5680        ?
   external-arguments-getbyval                        2.1694+-0.0210     ?      2.1855+-0.0290        ?
   external-arguments-putbyval                        3.1081+-0.0548     ?      3.1305+-0.0459        ?
   fixed-typed-array-storage-var-index                1.6306+-0.0177     ?      1.6660+-0.0378        ? might be 1.0217x slower
   fixed-typed-array-storage                          1.2256+-0.0221     ?      1.2556+-0.0566        ? might be 1.0245x slower
   Float32Array-matrix-mult                           6.7458+-0.0584     ?      6.7814+-0.0564        ?
   Float32Array-to-Float64Array-set                  91.6375+-1.6777     ?     92.2727+-1.4533        ?
   Float64Array-alloc-long-lived                    102.2153+-0.4961     ?    103.2623+-0.7992        ? might be 1.0102x slower
   Float64Array-to-Int16Array-set                   115.5170+-0.3154     ?    115.7315+-0.5616        ?
   fold-double-to-int                                19.9392+-0.1884     ?     20.0208+-0.3355        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     24.6234+-0.4373           23.8928+-0.4702          might be 1.0306x faster
   fold-get-by-id-to-multi-get-by-offset             23.1231+-0.4750           22.6472+-0.4518          might be 1.0210x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                     17.8785+-0.1777           17.5278+-0.7393          might be 1.0200x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     18.0865+-0.2099     ^     17.4095+-0.1398        ^ definitely 1.0389x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     18.6677+-0.9554           18.1070+-0.5083          might be 1.0310x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                     16.3385+-0.0862     ^     15.7457+-0.2789        ^ definitely 1.0376x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     23.4566+-1.6513           22.5210+-0.5847          might be 1.0415x faster
   fold-put-by-id-to-multi-put-by-offset             23.7290+-0.4070           22.9810+-0.4511          might be 1.0325x faster
   fold-put-structure                                17.2961+-0.2436     ^     16.5260+-0.0810        ^ definitely 1.0466x faster
   for-of-iterate-array-entries                       8.5368+-0.1523     ?      8.6036+-0.1739        ?
   for-of-iterate-array-keys                          4.0226+-0.1177            4.0150+-0.0615        
   for-of-iterate-array-values                        3.3495+-0.0714     ?      3.4299+-0.0865        ? might be 1.0240x slower
   fround                                            23.9205+-0.2885           23.8842+-0.3121        
   ftl-library-inlining-dataview                    115.7030+-2.3449     ^    109.2030+-0.5038        ^ definitely 1.0595x faster
   ftl-library-inlining                             117.9329+-2.4829          117.8029+-2.6721        
   function-dot-apply                                 2.5385+-0.0966            2.5129+-0.0546          might be 1.0102x faster
   function-test                                      5.3416+-0.0430     ?      5.3691+-0.1027        ?
   function-with-eval                               106.6779+-1.4045     ?    107.5798+-0.8318        ?
   gcse-poly-get-less-obvious                        29.3077+-0.2306           29.2606+-0.5643        
   gcse-poly-get                                     29.7911+-0.2872           29.7078+-0.1664        
   gcse                                               7.6956+-0.0466     ?      7.6985+-0.0412        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.7765+-0.0454     ?      3.8395+-0.0527        ? might be 1.0167x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.7909+-0.1419            9.7771+-0.2257        
   get-by-id-chain-from-try-block                     7.9877+-0.1998     ?      8.0298+-0.1153        ?
   get-by-id-check-structure-elimination              8.8942+-0.1005     ?      8.9187+-0.1241        ?
   get-by-id-proto-or-self                           25.3542+-2.1157           25.1075+-1.8095        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.6045+-0.0414            4.5876+-0.0607        
   get-by-id-self-or-proto                           24.2843+-0.5256     ?     25.8223+-1.5392        ? might be 1.0633x slower
   get-by-val-out-of-bounds                           6.6788+-0.0739     ?      6.8077+-0.0699        ? might be 1.0193x slower
   get_callee_monomorphic                             5.8576+-0.2670     ?      6.0216+-0.1238        ? might be 1.0280x slower
   get_callee_polymorphic                             4.9295+-0.1020     ?      4.9609+-0.1233        ?
   getter-no-activation                               6.8763+-0.0599            6.8737+-0.0852        
   getter-richards                                  152.6164+-7.3798     ?    154.6352+-7.8504        ? might be 1.0132x slower
   getter                                             7.5853+-0.1179     ?      7.6901+-0.0952        ? might be 1.0138x slower
   global-var-const-infer-fire-from-opt               1.1723+-0.0245     ?      1.1850+-0.0176        ? might be 1.0109x slower
   global-var-const-infer                             1.2476+-0.0246     ?      1.2521+-0.0265        ?
   HashMap-put-get-iterate-keys                      40.8246+-0.3767           40.6982+-0.8830        
   HashMap-put-get-iterate                           40.9416+-0.8524           39.9241+-0.3872          might be 1.0255x faster
   HashMap-string-put-get-iterate                    38.5650+-0.7476     ?     39.4292+-0.4653        ? might be 1.0224x slower
   hoist-make-rope                                   14.7525+-1.9844           13.8047+-1.3201          might be 1.0687x faster
   hoist-poly-check-structure-effectful-loop   
                                                      7.6200+-0.2666            7.6061+-0.1272        
   hoist-poly-check-structure                         5.7345+-0.0838     ?      5.7645+-0.0574        ?
   imul-double-only                                   9.8451+-0.1774     ?     10.2891+-0.5421        ? might be 1.0451x slower
   imul-int-only                                     13.1496+-0.3708           12.9045+-0.3720          might be 1.0190x faster
   imul-mixed                                         9.9644+-0.5920            9.3471+-0.6640          might be 1.0660x faster
   in-four-cases                                     28.4803+-0.9682           28.2992+-0.4537        
   in-one-case-false                                 14.8944+-0.3362           14.8288+-0.1129        
   in-one-case-true                                  14.9668+-0.1093           14.9575+-0.3855        
   in-two-cases                                      15.5769+-0.3042           15.4682+-0.0860        
   indexed-properties-in-objects                      4.5035+-0.0792            4.4934+-0.0631        
   infer-closure-const-then-mov-no-inline             5.1448+-0.1723            5.1395+-0.1744        
   infer-closure-const-then-mov                      29.5859+-0.1301           29.5055+-0.4318        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.5585+-0.1438     ?     17.6306+-0.1288        ?
   infer-closure-const-then-put-to-scope             33.3217+-0.1339     ?     33.4908+-0.2991        ?
   infer-closure-const-then-reenter-no-inline   
                                                     77.1855+-0.2127     ?     77.5270+-0.3015        ?
   infer-closure-const-then-reenter                  33.5004+-0.1494     ?     33.5604+-0.1555        ?
   infer-constant-global-property                     5.5315+-0.0315     ?      5.5604+-0.0591        ?
   infer-constant-property                            3.7983+-0.0704     ?      3.8304+-0.0635        ?
   infer-one-time-closure-ten-vars                   16.7059+-0.4264           16.5326+-0.1756          might be 1.0105x faster
   infer-one-time-closure-two-vars                   16.0446+-0.1591           15.8617+-0.2411          might be 1.0115x faster
   infer-one-time-closure                            15.9530+-0.2361           15.6367+-0.2456          might be 1.0202x faster
   infer-one-time-deep-closure                       28.4680+-0.3962           28.3368+-0.2079        
   inline-arguments-access                            2.4018+-0.0488     ?      2.4209+-0.0453        ?
   inline-arguments-aliased-access                    2.7249+-0.0854     ?      2.7650+-0.0807        ? might be 1.0147x slower
   inline-arguments-local-escape                     20.5462+-0.3971     ?     20.8547+-0.1991        ? might be 1.0150x slower
   inline-get-scoped-var                              6.6929+-0.0738            6.6221+-0.1279          might be 1.0107x faster
   inlined-put-by-id-transition                      16.0681+-0.1741           15.8001+-0.5245          might be 1.0170x faster
   int-or-other-abs-then-get-by-val                   8.1700+-0.1049            8.1517+-0.0614        
   int-or-other-abs-zero-then-get-by-val             30.3252+-0.2656           30.1698+-0.2931        
   int-or-other-add-then-get-by-val                   6.9668+-0.0843            6.9222+-0.1278        
   int-or-other-add                                   9.1660+-0.1382     ?      9.1706+-0.1443        ?
   int-or-other-div-then-get-by-val                   6.1233+-0.0630            6.1016+-0.0541        
   int-or-other-max-then-get-by-val                   7.7828+-0.3679            7.5603+-0.1251          might be 1.0294x faster
   int-or-other-min-then-get-by-val                   6.2184+-0.0556     ?      6.2310+-0.0830        ?
   int-or-other-mod-then-get-by-val                   6.0474+-0.0357            6.0257+-0.1146        
   int-or-other-mul-then-get-by-val                   5.8300+-0.1237            5.8153+-0.0303        
   int-or-other-neg-then-get-by-val                   7.3465+-0.1410            7.3000+-0.1641        
   int-or-other-neg-zero-then-get-by-val             30.3920+-0.1380     ?     30.4924+-0.4085        ?
   int-or-other-sub-then-get-by-val                   6.9756+-0.1303            6.9353+-0.1347        
   int-or-other-sub                                   6.0142+-0.1961     ?      6.1503+-0.0334        ? might be 1.0226x slower
   int-overflow-local                                 6.7642+-0.1413     ?      6.8440+-0.1659        ? might be 1.0118x slower
   Int16Array-alloc-long-lived                       73.2496+-1.0032           73.1989+-0.5509        
   Int16Array-bubble-sort-with-byteLength            45.0249+-0.6489           44.4467+-0.2454          might be 1.0130x faster
   Int16Array-bubble-sort                            43.1863+-0.1048     ?     43.6127+-0.5418        ?
   Int16Array-load-int-mul                            2.1979+-0.0444     ?      2.2158+-0.0507        ?
   Int16Array-to-Int32Array-set                      83.9347+-1.4090     ?     84.6241+-1.2826        ?
   Int32Array-alloc-large                            42.8000+-1.6346           42.7861+-1.9422        
   Int32Array-alloc-long-lived                       81.8606+-0.5959           81.7326+-1.1474        
   Int32Array-alloc                                   4.8693+-0.0492            4.8364+-0.1824        
   Int32Array-Int8Array-view-alloc                   11.3857+-0.2616     !     12.1136+-0.1776        ! definitely 1.0639x slower
   int52-spill                                       10.1145+-0.1064     ?     10.3122+-0.2623        ? might be 1.0195x slower
   Int8Array-alloc-long-lived                        67.5031+-0.8910           67.4471+-1.0539        
   Int8Array-load-with-byteLength                     5.5890+-0.0571     ?      5.5941+-0.0656        ?
   Int8Array-load                                     5.5468+-0.0781     ?      5.5968+-0.0689        ?
   integer-divide                                    17.0052+-0.2015     ?     17.1349+-0.2645        ?
   integer-modulo                                     3.1247+-0.2970     ?      3.1972+-0.2861        ? might be 1.0232x slower
   large-int-captured                                11.1353+-0.2908     ?     11.4019+-0.2432        ? might be 1.0239x slower
   large-int-neg                                     24.3664+-0.2934     ?     24.4308+-0.1494        ?
   large-int                                         21.5812+-0.1929     ?     21.6598+-0.2988        ?
   logical-not                                        6.9758+-0.0556     ?      7.2405+-0.2190        ? might be 1.0379x slower
   lots-of-fields                                    16.1184+-0.1119           16.1113+-0.1007        
   make-indexed-storage                               4.4699+-0.2787     ?      4.7961+-0.1377        ? might be 1.0730x slower
   make-rope-cse                                      6.2650+-0.0628     ?      6.3111+-0.0862        ?
   marsaglia-larger-ints                             60.4432+-0.5849     !     64.1210+-0.4854        ! definitely 1.0608x slower
   marsaglia-osr-entry                               31.9141+-0.4579           31.6181+-0.4615        
   max-boolean                                        4.0362+-0.3700            3.8654+-0.0636          might be 1.0442x faster
   method-on-number                                  28.3729+-1.2919     ?     29.2640+-0.9480        ? might be 1.0314x slower
   min-boolean                                        3.7749+-0.0887     ?      3.8064+-0.0504        ?
   minus-boolean-double                               4.9258+-0.0452     ?      4.9698+-0.0147        ?
   minus-boolean                                      3.7858+-0.0661     ?      3.8148+-0.0258        ?
   misc-strict-eq                                    58.2067+-0.8427     ?     58.3632+-0.8584        ?
   mod-boolean-double                                13.9601+-0.1907     ?     13.9615+-0.1282        ?
   mod-boolean                                       10.7300+-0.1268           10.6847+-0.2477        
   mul-boolean-double                                 5.7592+-0.0271     ?      5.7722+-0.0285        ?
   mul-boolean                                        4.0940+-0.0602     ?      4.1216+-0.0113        ?
   neg-boolean                                        5.0640+-0.0547            5.0636+-0.0283        
   negative-zero-divide                               0.4660+-0.0041     ?      0.4822+-0.0170        ? might be 1.0347x slower
   negative-zero-modulo                               0.4624+-0.0034     !      0.4726+-0.0030        ! definitely 1.0220x slower
   negative-zero-negate                               0.4321+-0.0024     !      0.4394+-0.0022        ! definitely 1.0168x slower
   nested-function-parsing                           46.0711+-0.4500           45.8176+-0.1988        
   new-array-buffer-dead                              4.2624+-0.1002            4.2499+-0.1013        
   new-array-buffer-push                             10.6513+-0.0890     ?     10.6696+-0.3118        ?
   new-array-dead                                    14.7337+-0.2964     ?     14.8127+-0.2650        ?
   new-array-push                                     7.3298+-0.2200     ?      7.5193+-0.1705        ? might be 1.0258x slower
   number-test                                        4.8477+-0.0604     ?      4.8660+-0.0467        ?
   object-closure-call                                9.3531+-0.1803     ?      9.4478+-0.1265        ? might be 1.0101x slower
   object-test                                        5.2103+-0.0595     ?      5.2984+-0.1663        ? might be 1.0169x slower
   obvious-sink-pathology-taken                     209.1611+-2.0163          208.8765+-2.1720        
   obvious-sink-pathology                           200.4086+-4.2908          199.2419+-0.8061        
   obviously-elidable-new-object                     51.2263+-0.5797     ?     52.0683+-1.3935        ? might be 1.0164x slower
   plus-boolean-arith                                 3.8468+-0.0656     ?      3.8713+-0.0654        ?
   plus-boolean-double                                4.9720+-0.0364     ?      4.9935+-0.0318        ?
   plus-boolean                                       3.7284+-0.0637            3.7013+-0.0508        
   poly-chain-access-different-prototypes-simple   
                                                      4.5620+-0.0537            4.5434+-0.0563        
   poly-chain-access-different-prototypes             3.7746+-0.0551            3.7615+-0.0205        
   poly-chain-access-simpler                          4.5244+-0.0566     ?      4.5444+-0.0697        ?
   poly-chain-access                                  3.2984+-0.4335     ?      3.3809+-0.3040        ? might be 1.0250x slower
   poly-stricteq                                     85.3973+-1.6788           84.3003+-0.1939          might be 1.0130x faster
   polymorphic-array-call                             2.3637+-0.0313     ?      2.3863+-0.0381        ?
   polymorphic-get-by-id                              4.9059+-0.0362     ?      4.9170+-0.0672        ?
   polymorphic-put-by-id                             74.4146+-25.3722    ?     79.7898+-47.0354       ? might be 1.0722x slower
   polymorphic-structure                             26.4555+-1.7997           26.2903+-1.5269        
   polyvariant-monomorphic-get-by-id                 13.0865+-0.3640           12.9796+-0.4143        
   proto-getter-access                               13.6796+-0.1839     ?     13.7382+-0.1424        ?
   put-by-id-replace-and-transition                  12.9830+-0.2162           12.8879+-0.2671        
   put-by-id-slightly-polymorphic                     4.1155+-0.0618     ?      4.1772+-0.0394        ? might be 1.0150x slower
   put-by-id                                         21.1279+-0.4370     ?     21.5806+-0.3607        ? might be 1.0214x slower
   put-by-val-direct                                  0.8050+-0.0010     !      0.8159+-0.0026        ! definitely 1.0136x slower
   put-by-val-large-index-blank-indexing-type   
                                                     10.3942+-0.2479            9.9355+-0.2352          might be 1.0462x faster
   put-by-val-machine-int                             4.7923+-0.2555     ?      4.8284+-0.0978        ?
   rare-osr-exit-on-local                            21.6075+-0.2433     ?     21.6197+-0.1068        ?
   register-pressure-from-osr                        31.8002+-0.2143           31.6907+-0.4097        
   setter                                             7.6876+-0.0659     ?      7.7124+-0.0785        ?
   simple-activation-demo                            35.1626+-0.0373     !     35.3582+-0.0803        ! definitely 1.0056x slower
   simple-getter-access                              20.1410+-0.2152     ?     20.3668+-0.1203        ? might be 1.0112x slower
   simple-poly-call-nested                           21.7451+-0.4591     ?     21.8466+-0.6845        ?
   simple-poly-call                                   1.7496+-0.0347     ?      1.7530+-0.0214        ?
   sin-boolean                                       23.6221+-0.8974     ?     24.2232+-0.8688        ? might be 1.0254x slower
   sinkable-new-object-dag                           95.7383+-1.0234     ?     96.6428+-1.0687        ?
   sinkable-new-object-taken                         79.4953+-0.6728           79.0372+-2.9783        
   sinkable-new-object                               54.8878+-1.6578     ?     55.1162+-1.3535        ?
   slow-array-profile-convergence                     4.2805+-0.1518            4.2802+-0.1214        
   slow-convergence                                   5.0830+-0.0292     ?      5.0944+-0.0312        ?
   sparse-conditional                                 1.6507+-0.0504            1.6443+-0.0183        
   splice-to-remove                                  27.6777+-0.9257     ?     27.9076+-0.3822        ?
   string-char-code-at                               23.5945+-0.1240           23.5803+-0.0872        
   string-concat-object                               3.3155+-0.1344            3.2806+-0.0955          might be 1.0106x faster
   string-concat-pair-object                          3.2028+-0.0922            3.1834+-0.0505        
   string-concat-pair-simple                         18.6085+-0.4158     ?     18.8378+-0.4007        ? might be 1.0123x slower
   string-concat-simple                              19.1068+-0.2977     ?     19.1179+-0.1410        ?
   string-cons-repeat                                11.9024+-0.1452     ?     11.9950+-0.2203        ?
   string-cons-tower                                 10.9368+-0.0601     ?     11.2723+-0.4056        ? might be 1.0307x slower
   string-equality                                   26.6673+-0.2848           26.5566+-0.1632        
   string-get-by-val-big-char                        11.5380+-0.3158     ?     12.0318+-0.2692        ? might be 1.0428x slower
   string-get-by-val-out-of-bounds-insane             6.4394+-0.2135            6.4274+-0.1707        
   string-get-by-val-out-of-bounds                    8.0011+-0.1876            7.9738+-0.0799        
   string-get-by-val                                  5.6567+-0.0448     ?      5.6954+-0.0462        ?
   string-hash                                        3.1427+-0.0530     ?      3.1474+-0.0492        ?
   string-long-ident-equality                        21.4320+-0.2419     ?     21.4421+-0.2406        ?
   string-repeat-arith                               48.7305+-0.4458     !     49.8230+-0.3007        ! definitely 1.0224x slower
   string-sub                                        96.2670+-0.9469     ?     97.0968+-0.9072        ?
   string-test                                        4.8658+-0.0638            4.8321+-0.0592        
   string-var-equality                               52.2812+-0.1589           52.2456+-0.2050        
   structure-hoist-over-transitions                   3.9223+-0.0941     ?      3.9471+-0.1392        ?
   substring-concat-weird                            62.5198+-0.7140     ?     62.6710+-0.4655        ?
   substring-concat                                  65.6963+-0.3381     ?     65.8656+-0.6028        ?
   substring                                         73.9785+-0.1767     ?     74.7710+-0.8264        ? might be 1.0107x slower
   switch-char-constant                               3.8459+-0.0326     ?      3.8786+-0.0510        ?
   switch-char                                        9.3674+-0.1151            9.3670+-0.1363        
   switch-constant                                   11.9442+-0.4000     !     16.2518+-2.2199        ! definitely 1.3606x slower
   switch-string-basic-big-var                       24.5665+-2.3352     ?     25.5165+-2.5044        ? might be 1.0387x slower
   switch-string-basic-big                           26.8410+-2.7623           26.3771+-3.1604          might be 1.0176x faster
   switch-string-basic-var                           33.5327+-0.6913           32.2789+-1.6204          might be 1.0388x faster
   switch-string-basic                               29.0537+-0.3494     ?     29.4135+-0.4890        ? might be 1.0124x slower
   switch-string-big-length-tower-var                30.1313+-0.1149     ?     30.1648+-0.1317        ?
   switch-string-length-tower-var                    24.1027+-0.1105     ?     24.3555+-0.4464        ? might be 1.0105x slower
   switch-string-length-tower                        17.8802+-0.1380           17.7303+-0.1192        
   switch-string-short                               17.7144+-0.2723     ?     17.8260+-0.0691        ?
   switch                                            19.3742+-0.1620           17.1014+-2.3226          might be 1.1329x faster
   tear-off-arguments-simple                          2.5948+-0.0735     ?      2.6314+-0.0488        ? might be 1.0141x slower
   tear-off-arguments                                 4.1078+-0.0180     ?      4.1189+-0.0803        ?
   temporal-structure                                20.5651+-0.2717           20.5529+-0.2154        
   to-int32-boolean                                  24.8319+-0.2677     ?     25.0665+-0.5040        ?
   undefined-test                                     5.0337+-0.0468            4.9941+-0.0619        
   unprofiled-licm                                   30.7004+-0.4629     !     31.5710+-0.3137        ! definitely 1.0284x slower
   weird-inlining-const-prop                          2.9589+-0.1059     ?      3.0392+-0.0384        ? might be 1.0271x slower

   &lt;arithmetic&gt;                                      24.3642+-0.1414     ?     24.5117+-0.1642        ? might be 1.0061x slower
   &lt;geometric&gt; *                                     11.9766+-0.0318     ?     12.0349+-0.0301        ? might be 1.0049x slower
   &lt;harmonic&gt;                                         5.9025+-0.0201     !      5.9544+-0.0149        ! definitely 1.0088x slower

                                                        TipOfTree                PutLocalSink                                   
AsmBench:
   bigfib.cpp                                       794.3587+-3.7223          793.3438+-2.3014        
   cray.c                                           792.5867+-2.4435     ?    801.5517+-17.7625       ? might be 1.0113x slower
   dry.c                                            788.6799+-2.1216     ?    790.1557+-16.5137       ?
   FloatMM.c                                       1151.0216+-1.8634         1149.9484+-1.8483        
   gcc-loops.cpp                                   7533.8278+-18.3277    ^   7086.1461+-15.2830       ^ definitely 1.0632x faster
   n-body.c                                        2035.7213+-2.3654     ^   2017.9369+-7.7172        ^ definitely 1.0088x faster
   Quicksort.c                                      711.8525+-1.6207     ^    701.8254+-3.8012        ^ definitely 1.0143x faster
   stepanov_container.cpp                          5810.2185+-8.7377     ^   5751.9154+-27.9677       ^ definitely 1.0101x faster
   Towers.c                                         472.0988+-2.1771     ^    465.1057+-2.0910        ^ definitely 1.0150x faster

   &lt;arithmetic&gt;                                    2232.2629+-2.2375     ^   2173.1032+-7.6397        ^ definitely 1.0272x faster
   &lt;geometric&gt; *                                   1371.0174+-1.7617     ^   1356.0795+-6.9380        ^ definitely 1.0110x faster
   &lt;harmonic&gt;                                      1002.6273+-1.9044          996.7420+-5.5238          might be 1.0059x faster

                                                        TipOfTree                PutLocalSink                                   
CompressionBench:
   huffman                                          721.8922+-2.4994     ?    722.0678+-4.9314        ?
   arithmetic-simple                                682.5204+-2.3997     ?    684.0263+-2.1909        ?
   arithmetic-precise                               506.9364+-2.1375     ?    510.8844+-5.0998        ?
   arithmetic-complex-precise                       504.8447+-1.5650          503.8185+-1.8638        
   arithmetic-precise-order-0                       726.1965+-7.2641     ?    734.5980+-7.8931        ? might be 1.0116x slower
   arithmetic-precise-order-1                       562.1729+-3.7369     ?    565.9546+-7.0548        ?
   arithmetic-precise-order-2                       625.9554+-3.2714     ?    627.2934+-5.5553        ?
   arithmetic-simple-order-1                        700.9144+-3.7195     ?    703.1039+-5.2511        ?
   arithmetic-simple-order-2                        787.6263+-4.5500          784.2328+-6.3608        
   lz-string                                        529.3470+-6.0566     ?    540.9207+-6.1717        ? might be 1.0219x slower

   &lt;arithmetic&gt;                                     634.8406+-0.7214     !    637.6900+-1.6896        ! definitely 1.0045x slower
   &lt;geometric&gt; *                                    627.1663+-0.8107     !    630.2359+-1.5474        ! definitely 1.0049x slower
   &lt;harmonic&gt;                                       619.4557+-0.9565     !    622.7261+-1.4368        ! definitely 1.0053x slower

                                                        TipOfTree                PutLocalSink                                   
All benchmarks:
   &lt;arithmetic&gt;                                     163.7660+-0.1794     ^    162.7220+-0.3727        ^ definitely 1.0064x faster
   &lt;geometric&gt;                                       20.4632+-0.0376     ?     20.5153+-0.0418        ? might be 1.0025x slower
   &lt;harmonic&gt;                                         5.1179+-0.0158     ?      5.1288+-0.0191        ? might be 1.0021x slower

                                                        TipOfTree                PutLocalSink                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                  103.8385+-0.1723     ?    103.8627+-0.1611        ? might be 1.0002x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039086</commentid>
    <comment_count>13</comment_count>
      <attachid>239169</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-02 18:21:37 -0700</bug_when>
    <thetext>Created attachment 239169
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039087</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-02 18:24:04 -0700</bug_when>
    <thetext>Attachment 239169 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:25:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:42:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:43:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPreciseLocalClobberize.h:46:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:210:  There should be exactly one empty line instead of 0 between &quot;disassembler/ARM64/A64DOpcode.cpp&quot; and &quot;disassembler/ARMv7/ARMv7DOpcode.cpp&quot;.  [list/emptyline] [5]
ERROR: Source/JavaScriptCore/dfg/DFGObjectAllocationSinkingPhase.cpp:458:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutLocalSinkingPhase.cpp:167:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutLocalSinkingPhase.cpp:171:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/dfg/DFGPutLocalSinkingPhase.cpp:177:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutLocalSinkingPhase.cpp:245:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutLocalSinkingPhase.cpp:254:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutLocalSinkingPhase.cpp:423:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 14 in 29 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>1039296</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-03 12:38:40 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/174275</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039363</commentid>
    <comment_count>16</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-10-03 15:01:00 -0700</bug_when>
    <thetext>This seems to be causing problems on the internal bots. Rolling out since I can&apos;t find Phil or Oliver.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039364</commentid>
    <comment_count>17</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2014-10-03 15:02:36 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; This seems to be causing problems on the internal bots. Rolling out since I can&apos;t find Phil or Oliver.

Phil I will email you the failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039366</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-03 15:03:23 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 137408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039510</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-10-04 10:19:13 -0700</bug_when>
    <thetext>Relanded in http://trac.webkit.org/changeset/174318</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238816</attachid>
            <date>2014-09-28 10:30:18 -0700</date>
            <delta_ts>2014-09-28 14:54:10 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22189</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwog
ICAgIH0KLQorICAgIAogICAgIGJvb2wgaXNDYXB0dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0OwogICAgIAogICAgIGludCBmcmFtZVBvaW50
ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjkzLDEyICszNjkzLDggQEAg
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAKICAgICAg
ICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycyA9IG1faW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bV9u
dW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
ZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSkpCi0gICAgICAg
ICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KGkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX291dGVy
bW9zdENhcHR1cmVkVmFyczsKIAogICAgICAgICBmb3IgKGludCBpID0gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7IGktLTspIHsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3Io
KShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhl
YXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3NldC5hZGQoaGVhcCk7CiAgICAgfQpAQCAtOTYs
NyArOTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBo
ZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9yZXN1bHQgfD0gbV9zZXQub3ZlcmxhcHMoaGVh
cCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAg
ICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7Ci0gICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBtdXRh
YmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiB2b2lkIGFkZFJlYWRzKEdyYXBoJiwgTm9kZSosIENs
b2JiZXJTZXQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSAvKgorLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0
ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci12b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwg
RGVmRnVuY3RvciYgZGVmKQordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNv
bnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC04
OTksNyArODk5LDcgQEAgY2xhc3MgTm9PcENsb2JiZXJpemUgewogcHVibGljOgogICAgIE5vT3BD
bG9iYmVyaXplKCkgeyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9w
ZXJhdG9yKCkoVC4uLikgeyB9CisgICAgdm9pZCBvcGVyYXRvcigpKFQuLi4pIGNvbnN0IHsgfQog
fTsKIAogY2xhc3MgQ2hlY2tDbG9iYmVyaXplIHsKQEAgLTkxMCwxMiArOTEwLDEyIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9w
ZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0KKyAgICB2b2lkIG9wZXJhdG9yKCko
VC4uLikgY29uc3QgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAgICAKICAgICBib29sIHJlc3VsdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCiBwcml2YXRlOgotICAgIGJvb2wgbV9y
ZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVzdWx0OwogfTsKIAogYm9vbCBkb2VzV3JpdGVz
KEdyYXBoJiwgTm9kZSopOwpAQCAtOTI4LDcgKzkyOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgb3RoZXJIZWFwKQorICAg
IHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgb3RoZXJIZWFwKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKG1fcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTM5LDcgKzkzOSw3
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBBYnN0cmFjdEhlYXAgbV9oZWFwOwotICAgIGJv
b2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVzdWx0OwogfTsKIAogYm9vbCBhY2Nl
c3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKQEAgLTk1Niw3ICs5NTYs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJz
dHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBj
b25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5yZWFkKGhlYXApOwogICAgIH0KQEAgLTk3Miw3
ICs5NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBo
ZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS53cml0ZShoZWFwKTsKICAgICB9CkBA
IC05ODgsMTIgKzk4OCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lk
IG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQorICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFs
dWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBtX3ZhbHVlLmRlZih2YWx1ZSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUq
IG5vZGUpCisgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSog
bm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDExIEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4m
IHBsYW4sIExvbmdMaXYKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX211c3RIYW5kbGVW
YWx1ZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX211c3RIYW5kbGVWYWx1ZXNbaV0gPSBmcmVl
emVGcmFnaWxlKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgaS0tOykgeworICAgICAgICBpZiAobV9j
b2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQorICAgICAg
ICAgICAgbV9vdXRlcm1vc3RDYXB0dXJlZFZhcnMuc2V0KGkpOworICAgIH0KIH0KIAogR3JhcGg6
On5HcmFwaCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBt
X3Byb2ZpbGVkQmxvY2spOwogICAgIH0KICAgICAKKyAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1
cmVkVmFyc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAg
ICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0ZXJtb3N0
Q2FwdHVyZWRWYXI7CisgICAgICAgIHJldHVybiBpbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFy
czsKKyAgICB9CisgICAgCiAgICAgYm9vbCBpc1N0cmljdE1vZGVGb3IoQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQogICAgIHsKICAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkK
QEAgLTg4OCw2ICs4OTUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90
czsKICAgICBpbnQgbV9tYWNoaW5lQ2FwdHVyZVN0YXJ0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxT
bG93QXJndW1lbnRbXT4gbV9zbG93QXJndW1lbnRzOworICAgIEJpdFZlY3RvciBtX291dGVybW9z
dENhcHR1cmVkVmFyczsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgc3RkOjp1bm9yZGVy
ZWRfbWFwPGludDY0X3QsIGRvdWJsZSo+IG1fZG91YmxlQ29uc3RhbnRzTWFwOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2lmbmRlZiBERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplX2gKKyNkZWZpbmUgREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgor
Y2xhc3MgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3IgeworcHVibGljOgorICAgIFByZWNp
c2VMb2NhbENsb2JiZXJpemVBZGFwdG9yKAorICAgICAgICBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsCisgICAgICAgIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1bmN0b3Im
IHdyaXRlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkK
KyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX3JlYWQocmVhZCkKKyAgICAgICAg
LCBtX3dyaXRlKHdyaXRlKQorICAgICAgICAsIG1fZGVmKGRlZikKKyAgICB7CisgICAgfQorICAg
IAorICAgIHZvaWQgcmVhZChBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIGlmICho
ZWFwLmtpbmQoKSA9PSBWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgIGlmIChoZWFwLnBheWxvYWQo
KS5pc1RvcCgpKSB7CisgICAgICAgICAgICAgICAgcmVhZFRvcCgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9yZWFk
KFZpcnR1YWxSZWdpc3RlcihoZWFwLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhlYXAub3ZlcmxhcHMoVmFyaWFibGVzKSkg
eworICAgICAgICAgICAgcmVhZFRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgewor
ICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gVmFyaWFibGVzKSB7CisgICAgICAgICAgICBpZiAo
aGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkgeworICAgICAgICAgICAgICAgIHdyaXRlVG9wKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX3dyaXRlKFZpcnR1YWxSZWdpc3RlcihoZWFwLnZhbHVlKCkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhlYXAub3Zlcmxh
cHMoVmFyaWFibGVzKSkgeworICAgICAgICAgICAgd3JpdGVUb3AoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGRlZihQdXJlVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICAvLyBQdXJlVmFsdWUgZGVmcyBuZXZlciBoYXZlIGFueXRoaW5n
IHRvIGRvIHdpdGggbG9jYWxzLCBzbyBpZ25vcmUgdGhpcy4KKyAgICB9CisgICAgCisgICAgdm9p
ZCBkZWYoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKGxvY2F0aW9uLmtpbmQoKSAhPSBWYXJpYWJsZUxvYykKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmhlYXAoKS5raW5kKCkg
PT0gVmFyaWFibGVzKTsKKyAgICAgICAgCisgICAgICAgIG1fZGVmKFZpcnR1YWxSZWdpc3Rlcihs
b2NhdGlvbi5oZWFwKCkucGF5bG9hZCgpLnZhbHVlKCkpLCBub2RlKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHZvaWQgcmVhZFRvcCgpCisgICAgeworICAgICAgICAvLyBBbGwgb2YgdGhl
IG91dGVybW9zdCBhcmd1bWVudHMsIGV4Y2VwdCB0aGlzLCBhcmUgZGVmaW5pdGVseSByZWFkLgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgbV9yZWFkKHZpcnR1YWxSZWdpc3RlckZvckFy
Z3VtZW50KGkpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBzdGFjayBoZWFkZXIgaXMgcmVh
ZC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEpTU3RhY2s6OlRoaXNBcmd1bWVu
dDsgKytpKQorICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpKSk7CisgICAgICAg
IAorICAgICAgICAvLyBSZWFkIGFsbCBvZiB0aGUgY2FwdHVyZWQgdmFyaWFibGVzLgorICAgICAg
ICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFycyA9CisgICAgICAgICAgICBtX2dyYXBoLmNh
cHR1cmVkVmFyc0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgOiBjYXB0dXJlZFZhcnMuc2V0Qml0cygpKQorICAgICAg
ICAgICAgbV9yZWFkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFJlYWQgYWxsIG9mIHRoZSBpbmxpbmUgYXJndW1lbnRzIGFuZCBjYWxsIGZyYW1lIGhl
YWRlcnMgdGhhdCB3ZSBkaWRuJ3QgYWxyZWFkeSBjYXB0dXJlLgorICAgICAgICBmb3IgKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpOyBpLS0gPiAxOykKKyAg
ICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQoKSkpOworICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkgeworICAgICAgICAg
ICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dCArIEpTU3RhY2s6OlNjb3BlQ2hhaW4pKTsKKyAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHdyaXRl
VG9wKCkKKyAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fY29kZUJsb2NrLT51c2VzQXJndW1l
bnRzKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9jb2RlQmxv
Y2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCisgICAgICAgICAgICAgICAgbV93cml0ZSh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFycyA9CisgICAgICAgICAgICBtX2dyYXBoLmNhcHR1cmVk
VmFyc0ZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgOiBjYXB0dXJlZFZhcnMuc2V0Qml0cygpKQorICAgICAgICAgICAg
bV93cml0ZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgfQorICAgIAorICAgIEdy
YXBoJiBtX2dyYXBoOworICAgIE5vZGUqIG1fbm9kZTsKKyAgICBjb25zdCBSZWFkRnVuY3RvciYg
bV9yZWFkOworICAgIGNvbnN0IFdyaXRlRnVuY3RvciYgbV93cml0ZTsKKyAgICBjb25zdCBEZWZG
dW5jdG9yJiBtX2RlZjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBl
bmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Cit2b2lkIHByZWNpc2VMb2Nh
bENsb2JiZXJpemUoCisgICAgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLAorICAgIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBEZWZGdW5j
dG9yJiBkZWYpCit7CisgICAgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I8UmVhZEZ1bmN0
b3IsIFdyaXRlRnVuY3RvciwgRGVmRnVuY3Rvcj4KKyAgICAgICAgYWRhcHRvcihncmFwaCwgbm9k
ZSwgcmVhZCwgd3JpdGUsIGRlZik7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRhcHRv
cik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
ZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NldExvY2FsU2lua2luZ1BoYXNlLmgiCisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
REZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgiCisjaW5j
bHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgU2V0TG9jYWxTaW5raW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFNldExvY2FsU2lua2luZ1BoYXNlKEdy
YXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNldExvY2FsIHNpbmtpbmciKQor
ICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAgICAgLCBtX2luc2VydGlvblNl
dChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgdmFyaW91cyBsb2NhbHMgYXJlIGxpdmUuCisg
ICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRIZWFkKG1fZ3JhcGgpOworICAg
ICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8
Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAg
IGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGl2ZUF0SGVhZFti
bG9ja10uZmlsbChmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZh
bHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsg
YmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxv
Y2FsQ2xvYmJlcml6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0g
KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBO
b2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlID09
IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxv
YWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobGl2ZSA9PSBsaXZlQXRIZWFkW2Js
b2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBsaXZlOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlLnNpemUoKTsgaS0tOykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdW2ldIHw9IGxpdmVbaV07CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0gd2hpbGUg
KGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gTmV4dCBpZGVudGlmeSB3aGVyZSB3ZSB3
b3VsZCB3YW50IHRvIHNpbmsgU2V0TG9jYWxzIHRvLgorICAgICAgICBCbG9ja01hcDxPcGVyYW5k
czxib29sPj4gbWF0ZXJpYWxpemVkQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxP
cGVyYW5kczxib29sPj4gbWF0ZXJpYWxpemVkQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgbWF0ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXSA9IE9wZXJhbmRz
PGJvb2w+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAg
ICBtYXRlcmlhbGl6ZWRBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbWF0
ZXJpYWxpemVkQXRIZWFkW2Jsb2NrXS5maWxsKHRydWUpOworICAgICAgICAgICAgbWF0ZXJpYWxp
emVkQXRUYWlsW2Jsb2NrXS5maWxsKHRydWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRz
PGJvb2w+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHdpbGwgbWF0ZXJpYWxpemUganVzdCBiZWZvcmUgYW55IHJlYWRzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZC5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgd3JpdGVzLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGVyaWFsaXplZC5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YXRlcmlhbGl6ZWQub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChtYXRlcmlhbGl6ZWQgPT0gbWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbWF0ZXJpYWxpemVkQXRUYWlsW2Jsb2NrXSA9IG1hdGVyaWFsaXplZDsKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hdGVyaWFsaXplZC5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtzdWNjZXNzb3Jd
W2ldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6ZWRBdEhlYWRb
YmxvY2tdW2ldICY9IG1hdGVyYWxpemVkW2ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0gd2hp
bGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lzaCB0byBpbnNlcnQgU2V0
TG9jYWxzIGF0IGFsbCBvZiB0aGUgbWF0ZXJpYWxpemF0aW9uIHBvaW50cywgd2hpY2ggYXJlIGRl
ZmluZWQKKyAgICAgICAgLy8gaW1wbGljaXRseSBhcyB0aGUgcGxhY2VzIHdoZXJlIHdlIHNldCBt
YXRlcmlhbGl6ZWQgdG8gdHJ1ZSBldmVuIHRob3VnaCBpdCB3YXMgcHJldmlvdXNseQorICAgICAg
ICAvLyBmYWxzZS4gVG8gZG8gdGhpcywgd2UgbWF5IG5lZWQgdG8gYnVpbGQgc29tZSBQaGkgZnVu
Y3Rpb25zIHRvIGhhbmRsZSBzdHVmZiBsaWtlIHRoaXM6CisgICAgICAgIC8vCisgICAgICAgIC8v
IEJlZm9yZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGlmIChwKQorICAgICAgICAvLyAg
ICAgICAgIFNldExvY2FsKHI0MiwgQHgpCisgICAgICAgIC8vICAgICBlbHNlCisgICAgICAgIC8v
ICAgICAgICAgU2V0TG9jYWwocjQyLCBAeSkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWZ0ZXI6
CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBpZiAocCkKKyAgICAgICAgLy8gICAgICAgICBV
cHNpbG9uKEB4LCBeeikKKyAgICAgICAgLy8gICAgIGVsc2UKKyAgICAgICAgLy8gICAgICAgICBV
cHNpbG9uKEB5LCBeeikKKyAgICAgICAgLy8gICAgIHo6IFBoaSgpCisgICAgICAgIC8vICAgICBT
ZXRMb2NhbChyNDIsIEB6KQorICAgIH0KKworcHJpdmF0ZToKKyAgICAKKyAgICAKKyAgICBTU0FD
YWxjdWxhdG9yIG1fc3NhQ2FsY3VsYXRvcjsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25T
ZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtU2V0TG9jYWxTaW5raW5nKEdyYXBoJiBncmFwaCkK
K3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFNldExvY2FsIFNpbmtp
bmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U2V0TG9jYWxTaW5raW5nUGhhc2U+KGdy
YXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw1OCBA
QCBwdWJsaWM6IAogICAgICAgICByZXR1cm4gSW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKHZhbHVl
KTsKICAgICB9CiAgICAgCisgICAgY2xhc3MgU2V0Qml0c0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNldEJpdHNJdGVyYWJsZShjb25zdCBCaXRWZWN0b3ImIGJpdFZlY3RvcikKKyAg
ICAgICAgICAgIDogbV9iaXRWZWN0b3IoYml0VmVjdG9yKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9iaXRWZWN0b3IobnVsbHB0
cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgQml0VmVjdG9y
JiBiaXRWZWN0b3IsIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fYml0VmVjdG9y
KCZiaXRWZWN0b3IpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3Qgb3Bl
cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV9pbmRleCA9IG1fYml0VmVjdG9yLT5maW5kQml0KG1faW5kZXggKyAxLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBCaXRWZWN0b3IqIG1fYml0VmVjdG9y
OworICAgICAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAg
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fYml0VmVjdG9y
LCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvciht
X2JpdFZlY3RvciwgbV9iaXRWZWN0b3Iuc2l6ZSgpKTsgfQorICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBCaXRWZWN0b3ImIG1fYml0VmVjdG9yOworICAgIH07CisgICAgCisg
ICAgU2V0Qml0c0l0ZXJhYmxlIHNldEJpdHMoKSBjb25zdCB7IHJldHVybiBTZXRCaXRzSXRlcmFi
bGUoKnRoaXMpOyB9CisgICAgCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Q
b2ludGVyKCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238823</attachid>
            <date>2014-09-28 14:54:10 -0700</date>
            <delta_ts>2014-09-28 15:13:00 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31874</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwog
ICAgIH0KLQorICAgIAogICAgIGJvb2wgaXNDYXB0dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0OwogICAgIAogICAgIGludCBmcmFtZVBvaW50
ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3RlcnMoaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjkzLDEyICszNjkzLDggQEAg
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAKICAgICAg
ICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycyA9IG1faW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bV9u
dW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5dGVDb2RlUGFyc2VyLT5tX2Nv
ZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSkpCi0gICAgICAg
ICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMuc2V0KGkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1faW5saW5l
Q2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX291dGVy
bW9zdENhcHR1cmVkVmFyczsKIAogICAgICAgICBmb3IgKGludCBpID0gYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXM7IGktLTspIHsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVu
dCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3
ICs4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3Io
KShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhl
YXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3NldC5hZGQoaGVhcCk7CiAgICAgfQpAQCAtOTYs
NyArOTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBo
ZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9yZXN1bHQgfD0gbV9zZXQub3ZlcmxhcHMoaGVh
cCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAg
ICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7Ci0gICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBtdXRh
YmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiB2b2lkIGFkZFJlYWRzKEdyYXBoJiwgTm9kZSosIENs
b2JiZXJTZXQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSAvKgorLyoKICAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0
ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci12b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwg
RGVmRnVuY3RvciYgZGVmKQordm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNv
bnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC04
OTksNyArODk5LDcgQEAgY2xhc3MgTm9PcENsb2JiZXJpemUgewogcHVibGljOgogICAgIE5vT3BD
bG9iYmVyaXplKCkgeyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9w
ZXJhdG9yKCkoVC4uLikgeyB9CisgICAgdm9pZCBvcGVyYXRvcigpKFQuLi4pIGNvbnN0IHsgfQog
fTsKIAogY2xhc3MgQ2hlY2tDbG9iYmVyaXplIHsKQEAgLTkxMCwxMiArOTEwLDEyIEBAIHB1Ymxp
YzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9w
ZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0KKyAgICB2b2lkIG9wZXJhdG9yKCko
VC4uLikgY29uc3QgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAgICAKICAgICBib29sIHJlc3VsdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCiBwcml2YXRlOgotICAgIGJvb2wgbV9y
ZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVzdWx0OwogfTsKIAogYm9vbCBkb2VzV3JpdGVz
KEdyYXBoJiwgTm9kZSopOwpAQCAtOTI4LDcgKzkyOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgb3RoZXJIZWFwKQorICAg
IHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgb3RoZXJIZWFwKSBjb25zdAogICAgIHsKICAg
ICAgICAgaWYgKG1fcmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTM5LDcgKzkzOSw3
IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBBYnN0cmFjdEhlYXAgbV9oZWFwOwotICAgIGJv
b2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVzdWx0OwogfTsKIAogYm9vbCBhY2Nl
c3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RIZWFwKTsKQEAgLTk1Niw3ICs5NTYs
NyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJz
dHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBj
b25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5yZWFkKGhlYXApOwogICAgIH0KQEAgLTk3Miw3
ICs5NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBo
ZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS53cml0ZShoZWFwKTsKICAgICB9CkBA
IC05ODgsMTIgKzk4OCwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lk
IG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQorICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFs
dWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBtX3ZhbHVlLmRlZih2YWx1ZSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUq
IG5vZGUpCisgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSog
bm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5o
CShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
Rm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTcgQEAgaW5saW5lIERhdGFG
b3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogICAgIHJldHVybiBEYXRhRm9ybWF0RGVhZDsK
IH0KIAoraW5saW5lIEZsdXNoRm9ybWF0IG1lcmdlKEZsdXNoRm9ybWF0IGEsIEZsdXNoRm9ybWF0
IGIpCit7CisgICAgaWYgKGEgPT0gRGVhZEZsdXNoKQorICAgICAgICByZXR1cm4gYjsKKyAgICBp
ZiAoYiA9PSBEZWFkRmx1c2gpCisgICAgICAgIHJldHVybiBhOworICAgIGlmIChhID09IGIpCisg
ICAgICAgIHJldHVybiBhOworICAgIHJldHVybiBDb25mbGljdGluZ0ZsdXNoOworfQorCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3
NSwxMSBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKICAg
ICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0gZnJlZXplRnJhZ2lsZShwbGFuLm11c3RIYW5k
bGVWYWx1ZXNbaV0pOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IG1fY29kZUJsb2NrLT5t
X251bVZhcnM7IGktLTspIHsKKyAgICAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKKyAgICAgICAgICAgIG1fb3V0ZXJtb3N0Q2FwdHVy
ZWRWYXJzLnNldChpKTsKKyAgICB9CiB9CiAKIEdyYXBoOjp+R3JhcGgoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2lu
QW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKICAgICB9
CiAgICAgCisgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnNGb3IoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSkKKyAgICAgICAgICAgIHJldHVybiBtX291dGVybW9zdENhcHR1cmVkVmFyOworICAgICAgICBy
ZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7CisgICAgfQorICAgIAogICAgIGJv
b2wgaXNTdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAg
IGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCkBAIC04ODgsNiArODk1LDcgQEAgcHVi
bGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiAgICAgaW50IG1fbWFjaGluZUNh
cHR1cmVTdGFydDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0Fy
Z3VtZW50czsKKyAgICBCaXRWZWN0b3IgbV9vdXRlcm1vc3RDYXB0dXJlZFZhcnM7CiAKICNpZiBV
U0UoSlNWQUxVRTMyXzY0KQogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQ2NF90LCBkb3VibGUq
PiBtX2RvdWJsZUNvbnN0YW50c01hcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDggKzMyOSwxMCBAQCBQbGFuOjpDb21w
aWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1QaGFudG9tQ2Fu
b25pY2FsaXphdGlvbihkZmcpOyAvLyBSZWR1Y2UgdGhlIGdyYXBoIHNpemUgYSBsb3QuCiAgICAg
ICAgIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtU3RyZW5ndGhS
ZWR1Y3Rpb24oZGZnKTsKLSAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ3JpdGljYWxFZGdlQnJl
YWtpbmcoZGZnKTsKLSAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNp
bmtpbmcoZGZnKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZU9iamVjdEFsbG9jYXRvaW5T
aW5raW5nKCkpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNyaXRpY2FsRWRnZUJy
ZWFraW5nKGRmZyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1PYmplY3RBbGxvY2F0
aW9uU2lua2luZyhkZmcpOworICAgICAgICB9CiAgICAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAg
ICAgICAgICAvLyBTdGF0ZS1hdC10YWlsIGFuZCBzdGF0ZS1hdC1oZWFkIHdpbGwgYmUgaW52YWxp
ZCBpZiB3ZSBkaWQgc3RyZW5ndGggcmVkdWN0aW9uIHNpbmNlCiAgICAgICAgICAgICAvLyBpdCBt
aWdodCBpbmNyZWFzZSBsaXZlIHJhbmdlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpZm5kZWYgREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZV9oCisjZGVmaW5lIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1bmN0b3IsIHR5cGVuYW1l
IFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KK2NsYXNzIFByZWNpc2VMb2NhbENs
b2JiZXJpemVBZGFwdG9yIHsKK3B1YmxpYzoKKyAgICBQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRh
cHRvcigKKyAgICAgICAgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLAorICAgICAgICBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgRGVmRnVu
Y3RvciYgZGVmKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9ub2RlKG5v
ZGUpCisgICAgICAgICwgbV9yZWFkKHJlYWQpCisgICAgICAgICwgbV93cml0ZSh3cml0ZSkKKyAg
ICAgICAgLCBtX2RlZihkZWYpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlYWQoQWJz
dHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gVmFyaWFi
bGVzKSB7CisgICAgICAgICAgICBpZiAoaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkgeworICAgICAg
ICAgICAgICAgIHJlYWRUb3AoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaGVh
cC52YWx1ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChoZWFwLm92ZXJsYXBzKFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAgIHJlYWRU
b3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgaWYgKGhlYXAua2lu
ZCgpID09IFZhcmlhYmxlcykgeworICAgICAgICAgICAgaWYgKGhlYXAucGF5bG9hZCgpLmlzVG9w
KCkpIHsKKyAgICAgICAgICAgICAgICB3cml0ZVRvcCgpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV93cml0ZShWaXJ0
dWFsUmVnaXN0ZXIoaGVhcC52YWx1ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChoZWFwLm92ZXJsYXBzKFZhcmlhYmxlcykpIHsKKyAg
ICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
Ly8gUHVyZVZhbHVlIGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIGxvY2Fscywg
c28gaWdub3JlIHRoaXMuCisgICAgfQorICAgIAorICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChsb2NhdGlvbi5raW5kKCkg
IT0gVmFyaWFibGVMb2MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBS
RUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFZhcmlhYmxlcyk7CisgICAg
ICAgIAorICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9jYXRpb24uaGVhcCgpLnBheWxv
YWQoKS52YWx1ZSgpKSwgbm9kZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHJl
YWRUb3AoKQorICAgIHsKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRlcm1vc3QgYXJndW1lbnRz
LCBleGNlcHQgdGhpcywgYXJlIGRlZmluaXRlbHkgcmVhZC4KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKKyAg
ICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CisgICAgICAg
IAorICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQuCisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7ICsraSkKKyAgICAgICAgICAg
IG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOworICAgICAgICAKKyAgICAgICAgLy8gUmVhZCBh
bGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBj
YXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNGb3IobV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFs
UmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBSZWFkIGFsbCBvZiB0
aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFkZXJzIHRoYXQgd2UgZGlkbid0
IGFscmVhZHkgY2FwdHVyZS4KKyAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsgaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCisgICAgICAgICAgICAgICAgbV9yZWFk
KFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNo
YWluKSk7CisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB3cml0ZVRvcCgpCisgICAgeworICAgICAg
ICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoaSkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJl
ZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpIDog
Y2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lz
dGVyRm9yTG9jYWwoaSkpOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBO
b2RlKiBtX25vZGU7CisgICAgY29uc3QgUmVhZEZ1bmN0b3ImIG1fcmVhZDsKKyAgICBjb25zdCBX
cml0ZUZ1bmN0b3ImIG1fd3JpdGU7CisgICAgY29uc3QgRGVmRnVuY3RvciYgbV9kZWY7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0
eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAorICAgIEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29u
c3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoreworICAgIFBy
ZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yPFJlYWRGdW5jdG9yLCBXcml0ZUZ1bmN0b3IsIERl
ZkZ1bmN0b3I+CisgICAgICAgIGFkYXB0b3IoZ3JhcGgsIG5vZGUsIHJlYWQsIHdyaXRlLCBkZWYp
OworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkYXB0b3IpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgLy8gbm9uTG9jYWxSZWFjaGluZ0RlZigpIHdp
bGwgZmluZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhbHdheXMgc291bmQg
dG8gbm90CiAgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRvIGFsd2F5cyBoYXZlIHRo
ZSBmdW5jdG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51bGxwdHIpLgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+Ci0gICAgdm9pZCBjb21wdXRlUGhp
cyhQaGlJbnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisgICAgdm9pZCBjb21wdXRlUGhpcyhjb25z
dCBQaGlJbnNlcnRpb25GdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5n
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0
TG9jYWxTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NldExvY2FsU2lua2luZ1BoYXNl
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5l
cy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0Lmgi
CisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhbGlk
YXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgU2V0TG9j
YWxTaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFNldExvY2FsU2lu
a2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNldExvY2Fs
IHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAgICAgLCBt
X2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkK
KyAgICB7CisgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgdmFyaW91cyBsb2NhbHMg
YXJlIGxpdmUuCisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRIZWFkKG1f
Z3JhcGgpOworICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dy
YXBoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBo
LmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2td
ID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsK
KyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRUYWlsW2Js
b2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFu
Z2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5u
dW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAo
IWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgp
OyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJh
bmQpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAobGl2ZSA9PSBsaXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10g
PSBsaXZlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+
cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZl
LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2td
W2ldIHw9IGxpdmVbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8g
QWxsIG9mIHRoZSBsb2NhbHMgc2hvdWxkIGJlIGRlYWQgYXQgaGVhZCBvZiByb290LiBBbGwgb2Yg
dGhlIGFyZ3VtZW50cyBzaG91bGQgYmUgbGl2ZSBhdAorICAgICAgICAvLyBoZWFkIG9mIHJvb3Qu
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlQXRIZWFkWzBdLm51bWJlck9mTG9jYWxzKCk7
IGktLTspCisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsICFsaXZlQXRI
ZWFkWzBdLmxvY2FsKGkpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmVBdEhlYWRbMF0u
bnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbnVsbHB0ciwgbGl2ZUF0SGVhZFswXS5hcmd1bWVudChpKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBOZXh0IGlkZW50aWZ5IHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gc2luayBTZXRMb2NhbHMg
dG8uIFdlIHNheSB0aGF0IHRoZXJlIGlzIGEgZGVmZXJyZWQKKyAgICAgICAgLy8gZmx1c2ggaWYg
d2UgaGFkIGEgU2V0TG9jYWwgd2l0aCBhIGdpdmVuIGZsdXNoIGZvcm1hdCBidXQgaXQgaGFzbid0
IGJlZW4gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgLy8gRGVhZEZsdXNoIG1lYW5zIHRoYXQg
YWxvbmcgdGhpcyBnaXZlbiBwYXRoIHdlIGhhdmUgYWxyZWFkeSBtYXRlcmlhbGl6ZWQgYWxsIFNl
dExvY2FscyBhbmQKKyAgICAgICAgLy8gc28gdGhlcmUgaXMgbm90aGluZyBkZWZlcnJlZC4gV2Ug
ZG9uJ3QgYXNjcmliZSBtZWFuaW5nIHRvIENvbmZsaWN0aW5nRmx1c2g7IGlmIGEgbWVyZ2UoKQor
ICAgICAgICAvLyBwcm9kdWNlcyBpdCB0aGVuIGl0J3MgYW4gZXJyb3IuCisgICAgICAgIEJsb2Nr
TWFwPE9wZXJhbmRzPEZsdXNoRm9ybWF0Pj4gZGVmZXJyZWRBdEhlYWQobV9ncmFwaCk7CisgICAg
ICAgIEJsb2NrTWFwPE9wZXJhbmRzPEZsdXNoRm9ybWF0Pj4gZGVmZXJyZWRBdFRhaWwobV9ncmFw
aCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9j
a10gPSBPcGVyYW5kczxGbHVzaEZvcm1hdD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVz
QXRIZWFkKTsKKyAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9IE9wZXJhbmRzPEZs
dXNoRm9ybWF0PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9ja10uZmlsbChEZWFkRmx1c2gp
OworICAgICAgICAgICAgZGVmZXJyZWRBdFRhaWxbYmxvY2tdLmZpbGwoRGVhZEZsdXNoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsK
KyAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFk
W2Jsb2NrXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5v
ZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVh
ZHMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5k
KSA9IERlYWRGbHVzaDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgd3Jp
dGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFu
ZCkgPSBEZWFkRmx1c2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5mbHVzaEZv
cm1hdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBkZWZlcnJl
ZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9IGRlZmVycmVk
OworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3Nv
cnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6
ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbc3Vj
Y2Vzc29yXVtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQg
Zm9ybWF0ID0gbWVyZ2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhl
YWRbYmxvY2tdW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkW2ldKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgZm9y
bWF0ICE9IENvbmZsaWN0aW5nRmx1c2gpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9ja11baV0gPSBmb3JtYXQ7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAg
ICAvLyBXZSB3aXNoIHRvIGluc2VydCBTZXRMb2NhbHMgYXQgYWxsIG9mIHRoZSBtYXRlcmlhbGl6
YXRpb24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAorICAgICAgICAvLyBpbXBsaWNpdGx5IGFz
IHRoZSBwbGFjZXMgd2hlcmUgd2Ugc2V0IG1hdGVyaWFsaXplZCB0byB0cnVlIGV2ZW4gdGhvdWdo
IGl0IHdhcyBwcmV2aW91c2x5CisgICAgICAgIC8vIGZhbHNlLiBUbyBkbyB0aGlzLCB3ZSBtYXkg
bmVlZCB0byBidWlsZCBzb21lIFBoaSBmdW5jdGlvbnMgdG8gaGFuZGxlIHN0dWZmIGxpa2UgdGhp
czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmVmb3JlOgorICAgICAgICAvLworICAgICAgICAv
LyAgICAgaWYgKHApCisgICAgICAgIC8vICAgICAgICAgU2V0TG9jYWwocjQyLCBAeCkKKyAgICAg
ICAgLy8gICAgIGVsc2UKKyAgICAgICAgLy8gICAgICAgICBTZXRMb2NhbChyNDIsIEB5KQorICAg
ICAgICAvLworICAgICAgICAvLyBBZnRlcjoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGlm
IChwKQorICAgICAgICAvLyAgICAgICAgIFVwc2lsb24oQHgsIF56KQorICAgICAgICAvLyAgICAg
ZWxzZQorICAgICAgICAvLyAgICAgICAgIFVwc2lsb24oQHksIF56KQorICAgICAgICAvLyAgICAg
ejogUGhpKCkKKyAgICAgICAgLy8gICAgIFNldExvY2FsKHI0MiwgQHopCisgICAgICAgIC8vCisg
ICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIGFuIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlIGZvciBlYWNoIGxvY2FsLCBhbmQgYSBEZWYgaXMgYW55CisgICAgICAgIC8vIFNldExvY2Fs
IGluIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBUaGUgb3JpZ2luYWwgU2V0TG9jYWxzIHdpbGwgc2lt
cGx5IHZhbmlzaC4KKyAgICAgICAgCisgICAgICAgIE9wZXJhbmRzPFNTQUNhbGN1bGF0b3I6OlZh
cmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFibGU7CisgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXI+IGluZGV4VG9PcGVyYW5kOworICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm9wZXJh
bmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAg
ICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwor
ICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5k
ZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQob3BlcmFuZCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHNldExvY2Fsc1RvU2luazsK
KyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFNldExvY2FsKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBzZXRMb2NhbHNUb1NpbmsuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3Vs
YXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJh
bmQobm9kZS0+bG9jYWwoKSksIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29t
cHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSwgQmFzaWNCbG9jayogYmxjb2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYWRbdmFyaWFibGUtPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10u
b3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGgu
YWRkTm9kZShTcGVjVG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7
CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBmb3JtYXQgIT0g
RGVhZEZsdXNoICYmIGZvcm1hdCAhPSBDb25mbGljdGluZ0ZsdXNoKTsKKyAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5tZXJnZUZsYWdzKHJlc3VsdEZvcihmb3JtYXQpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbV9t
YXBwaW5nID0gT3BlcmFuZHM8Tm9kZSo+KE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgbV9tYXBwaW5nLmZpbGwo
bnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX21h
cHBpbmcuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQobV9tYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFu
ZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywg
dmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX21hcHBpbmcu
b3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3Nh
Q2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50
LCBOb2RlT3JpZ2luKCksIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX21hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURlZi0+dmFs
dWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9kZWZlcnJl
ZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
d2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRlcmlhbGl6ZShvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg
ICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkg
d3JpdGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemUob3BlcmFuZCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHNvdXJjZSA9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZs
dXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxv
Y2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBi
bG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAo
U1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2Nr
KHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0g
cGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4
KCldOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1fbWFwcGluZy5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSogdXBzaWxvbiA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAg
ICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNp
bG9uT3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHBoaU5vZGUpLCBpbmNv
bWluZy0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIG1hdGVyaWFsaXplKFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG1fZGVmZXJyZWQub3BlcmFu
ZChvcGVyYW5kKSA9PSBEZWFkRmx1c2gpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBTZXRMb2NhbC4KKyAgICAgICAgLy8gRklYTUU6IFdl
IHJlYWxseSBuZWVkIGEgVmFyaWFibGVBY2Nlc3NEYXRhKi4gV2UgZG9uJ3QgaGF2ZSBvbmUuIDot
KCBJIGJlbGlldmUgdGhhdCB0aGUKKyAgICAgICAgLy8gdHJpY2sgaXMgdG8gaGF2ZSBtX2RlZmVy
cmVkIGhvbGQgcG9pbnRlcnMgdG8gVkFEJ3MuCisgICAgICAgIAorICAgICAgICBtX2RlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRz
PE5vZGUqPiBtX21hcHBpbmc7CisgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IG1fZGVmZXJyZWQ7
CisgICAgU1NBQ2FsY3VsYXRvciBtX3NzYUNhbGN1bGF0b3I7CisgICAgSW5zZXJ0aW9uU2V0IG1f
aW5zZXJ0aW9uU2V0OworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybVNldExvY2FsU2lua2luZyhHcmFw
aCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTZXRM
b2NhbCBTaW5raW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFNldExvY2FsU2lua2lu
Z1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsNyBAQCB0eXBlZGVm
IGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGVuYWJsZUNhbGxFZGdlUHJv
ZmlsaW5nLCB0cnVlKSBcCiAgICAgdih1bnNpZ25lZCwgZnJlcXVlbnRDYWxsVGhyZXNob2xkLCAy
KSBcCiAgICAgdihib29sLCBvcHRpbWl6ZU5hdGl2ZUNhbGxzLCBmYWxzZSkgXAorICAgIHYoYm9v
bCwgZW5hYmxlT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUpIFwKICAgICBcCiAgICAgdihi
b29sLCBlbmFibGVDb25jdXJyZW50SklULCB0cnVlKSBcCiAgICAgdih1bnNpZ25lZCwgbnVtYmVy
T2ZERkdDb21waWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoMiwgMikg
LSAxKSBcCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw2ICsyNjksNTggQEAgcHVi
bGljOiAKICAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFzaCh2YWx1ZSk7CiAg
ICAgfQogICAgIAorICAgIGNsYXNzIFNldEJpdHNJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAg
ICAgICBTZXRCaXRzSXRlcmFibGUoY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IpCisgICAgICAg
ICAgICA6IG1fYml0VmVjdG9yKGJpdFZlY3RvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fYml0VmVjdG9yKG51bGxwdHIpCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IEJpdFZlY3RvciYgYml0
VmVjdG9yLCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2JpdFZlY3RvcigmYml0
VmVjdG9yKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1f
aW5kZXggPSBtX2JpdFZlY3Rvci0+ZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQml0VmVjdG9yKiBtX2JpdFZlY3RvcjsKKyAg
ICAgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2JpdFZlY3RvciwgMCk7
IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRW
ZWN0b3IsIG1fYml0VmVjdG9yLnNpemUoKSk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgY29uc3QgQml0VmVjdG9yJiBtX2JpdFZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFNl
dEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0
aGlzKTsgfQorICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRl
cigpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238826</attachid>
            <date>2014-09-28 15:13:00 -0700</date>
            <delta_ts>2014-09-28 15:53:22 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47321</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MDQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE0LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIFNldExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0QWRkOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpERkc6OkNoZWNrQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpERkc6OkRlZk1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAq
IGRmZy9ERkdGbHVzaEZvcm1hdC5oOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNh
cHR1cmVkVmFyc0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3cml0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OmRlZik6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3
cml0ZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpjb21wdXRlUGhpcyk6CisgICAgICAgICogZGZnL0RGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U2V0TG9jYWxTaW5raW5nUGhh
c2U6OlNldExvY2FsU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNp
bmtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNpbmtpbmdQaGFz
ZTo6bWF0ZXJpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TZXRMb2NhbFNpbmtp
bmcpOgorICAgICAgICAqIGRmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0yNiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgZnVuY3Rpb24uYXJndW1lbnRzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzQwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIxMiw2ICsyMTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NhZmVwb2ludC5jcHAKKyAgICBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZl
SklUNjQuY3BwIiAvPgpAQCAtMTEwNCw2ICsxMTA1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
cmVQb3N0TnVtYmVyaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCIgLz4KQEAgLTEx
MTgsNiArMTEyMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Nhbm5h
YmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2NvcmVCb2FyZC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3BlY3VsYXRpdmVKSVQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw2
ICsxNTYyLDkgQEAKIAkJQzQ5RkU0QUExOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IH07CiAJCUM0OUZFNEFCMTlBQUM4
NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBG
NDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM0OUZFNEFDMTlBQUM4NjEwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0Uw
MEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5MzE5
RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTAxOUQ4QkU2RjAwMDIz
RUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5NDE5RDhCRTZGMDAwMjNFQjAgLyog
REZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTExOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEQzAwMDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5r
aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUw
MDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9Owog
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZN
LmNwcCAqLzsgfTsKQEAgLTMyMjIsNiArMzIyNSw5IEBACiAJCUM0OUZFNEE4MTlBQUM4M0UwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MTE5RDhC
RTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREMwMDAzOTIxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1Bo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcGFxdWVKU1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
Nzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NTUsNiArNDc2MSw3IEBACiAJCQkJMEYyQjlDREYxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdQbGFuLmggKi8sCisJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFE
QjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCAqLywKQEAgLTQ3NzUsNiArNDc4Miw4IEBACiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJB
IC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJMEYy
RkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovLAogCQkJCTg2RUNBM0Y5
MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCisJCQkJREMwMDAzOTExOUQ4
QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQlEQzAw
MDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCAqLywKIAkJ
CQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
ICovLAogCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgKi8sCkBAIC01NTg2LDYgKzU1OTUsNyBAQAogCQkJCTBGRUEwQTA4MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4
QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyODE4N0RG
REVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNTkwNyw2ICs1OTE3LDcgQEAKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lu
a2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIg
LyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwODgsNiArNzA5OSw3IEBACiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJREMwMDAzOTQxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTkwQ0FDMTg5
RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmln
aW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgIH0KLQorICAgIAogICAgIGJvb2wgaXNDYXB0
dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0
OwogICAgIAogICAgIGludCBmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3Rl
cnMoaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjkzLDEyICszNjkzLDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OklubGluZQogICAgICAgICAKICAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXIuaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1
cmVkVmFycyA9IG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0
dXJlZFZhcnM7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJ5dGVD
b2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChpKSkpCi0gICAgICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
LT5jYXB0dXJlZFZhcnMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRl
Q29kZVBhcnNlci0+bV9ncmFwaC5tX291dGVybW9zdENhcHR1cmVkVmFyczsKIAogICAgICAgICBm
b3IgKGludCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsKICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJl
dmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lk
IG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3Nl
dC5hZGQoaGVhcCk7CiAgICAgfQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9y
ZXN1bHQgfD0gbV9zZXQub3ZlcmxhcHMoaGVhcCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBA
IHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7Ci0g
ICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiB2b2lk
IGFkZFJlYWRzKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLSAvKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3
IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+
Ci12b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYg
cmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYgZGVmKQordm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAv
LyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC04OTksNyArODk5LDcgQEAgY2xhc3MgTm9PcENsb2Ji
ZXJpemUgewogcHVibGljOgogICAgIE5vT3BDbG9iYmVyaXplKCkgeyB9CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9CisgICAgdm9pZCBv
cGVyYXRvcigpKFQuLi4pIGNvbnN0IHsgfQogfTsKIAogY2xhc3MgQ2hlY2tDbG9iYmVyaXplIHsK
QEAgLTkxMCwxMiArOTEwLDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRy
dWU7IH0KKyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgY29uc3QgeyBtX3Jlc3VsdCA9IHRydWU7
IH0KICAgICAKICAgICBib29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAg
ICAgCiBwcml2YXRlOgotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVz
dWx0OwogfTsKIAogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwpAQCAtOTI4LDcgKzky
OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShB
YnN0cmFjdEhlYXAgb3RoZXJIZWFwKQorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAg
b3RoZXJIZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcmVzdWx0KQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtOTM5LDcgKzkzOSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBB
YnN0cmFjdEhlYXAgbV9oZWFwOwotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29s
IG1fcmVzdWx0OwogfTsKIAogYm9vbCBhY2Nlc3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJz
dHJhY3RIZWFwKTsKQEAgLTk1Niw3ICs5NTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5y
ZWFkKGhlYXApOwogICAgIH0KQEAgLTk3Miw3ICs5NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92
YWx1ZS53cml0ZShoZWFwKTsKICAgICB9CkBAIC05ODgsMTIgKzk4OCwxMiBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQor
ICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAg
ICBtX3ZhbHVlLmRlZih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShI
ZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgdm9pZCBvcGVyYXRvcigpKEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1f
dmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsMTcgQEAgaW5saW5lIERhdGFGb3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgog
ICAgIHJldHVybiBEYXRhRm9ybWF0RGVhZDsKIH0KIAoraW5saW5lIEZsdXNoRm9ybWF0IG1lcmdl
KEZsdXNoRm9ybWF0IGEsIEZsdXNoRm9ybWF0IGIpCit7CisgICAgaWYgKGEgPT0gRGVhZEZsdXNo
KQorICAgICAgICByZXR1cm4gYjsKKyAgICBpZiAoYiA9PSBEZWFkRmx1c2gpCisgICAgICAgIHJl
dHVybiBhOworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiBhOworICAgIHJldHVybiBD
b25mbGljdGluZ0ZsdXNoOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVz
cGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMSBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQ
bGFuJiBwbGFuLCBMb25nTGl2CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0g
ZnJlZXplRnJhZ2lsZShwbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKKyAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKKyAg
ICAgICAgICAgIG1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzLnNldChpKTsKKyAgICB9CiB9CiAKIEdy
YXBoOjp+R3JhcGgoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdp
biwgbV9wcm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAgCisgICAgY29uc3QgQml0VmVjdG9yJiBj
YXB0dXJlZFZhcnNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgewor
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtX291dGVy
bW9zdENhcHR1cmVkVmFyOworICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJl
ZFZhcnM7CisgICAgfQorICAgIAogICAgIGJvb2wgaXNTdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpCkBAIC04ODgsNiArODk1LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVy
U2xvdHM7CiAgICAgaW50IG1fbWFjaGluZUNhcHR1cmVTdGFydDsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsKKyAgICBCaXRWZWN0b3IgbV9vdXRl
cm1vc3RDYXB0dXJlZFZhcnM7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0ZDo6dW5v
cmRlcmVkX21hcDxpbnQ2NF90LCBkb3VibGUqPiBtX2RvdWJsZUNvbnN0YW50c01hcDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTc0MDMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIkRGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1NT
QUxvd2VyaW5nUGhhc2UuaCIKKyNpbmNsdWRlICJERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGF0aWNFeGVj
dXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckVs
aXNpb25QaGFzZS5oIgpAQCAtMzIyLDYgKzMyMyw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgcGVyZm9ybUNQU1JldGhyZWFkaW5nKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1TU0FDb252ZXJzaW9uKGRmZyk7CiAgICAgICAgIHBlcmZvcm1TU0FMb3dl
cmluZyhkZmcpOworICAgICAgICBwZXJmb3JtU2V0TG9jYWxTaW5raW5nKGRmZyk7CiAgICAgICAg
IHBlcmZvcm1HbG9iYWxDU0UoZGZnKTsKICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMo
ZGZnKTsKICAgICAgICAgcGVyZm9ybUNGQShkZmcpOwpAQCAtMzI5LDggKzMzMSwxMCBAQCBQbGFu
OjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1QaGFu
dG9tQ2Fub25pY2FsaXphdGlvbihkZmcpOyAvLyBSZWR1Y2UgdGhlIGdyYXBoIHNpemUgYSBsb3Qu
CiAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtU3Ry
ZW5ndGhSZWR1Y3Rpb24oZGZnKTsKLSAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ3JpdGljYWxF
ZGdlQnJlYWtpbmcoZGZnKTsKLSAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmcoZGZnKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZU9iamVjdEFsbG9j
YXRvaW5TaW5raW5nKCkpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNyaXRpY2Fs
RWRnZUJyZWFraW5nKGRmZyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1PYmplY3RB
bGxvY2F0aW9uU2lua2luZyhkZmcpOworICAgICAgICB9CiAgICAgICAgIGlmIChjaGFuZ2VkKSB7
CiAgICAgICAgICAgICAvLyBTdGF0ZS1hdC10YWlsIGFuZCBzdGF0ZS1hdC1oZWFkIHdpbGwgYmUg
aW52YWxpZCBpZiB3ZSBkaWQgc3RyZW5ndGggcmVkdWN0aW9uIHNpbmNlCiAgICAgICAgICAgICAv
LyBpdCBtaWdodCBpbmNyZWFzZSBsaXZlIHJhbmdlcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVy
aXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpZm5kZWYgREZHUHJlY2lzZUxvY2FsQ2xv
YmJlcml6ZV9oCisjZGVmaW5lIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1bmN0b3IsIHR5
cGVuYW1lIFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KK2NsYXNzIFByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yIHsKK3B1YmxpYzoKKyAgICBQcmVjaXNlTG9jYWxDbG9iYmVy
aXplQWRhcHRvcigKKyAgICAgICAgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLAorICAgICAgICBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3Qg
RGVmRnVuY3RvciYgZGVmKQorICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9u
b2RlKG5vZGUpCisgICAgICAgICwgbV9yZWFkKHJlYWQpCisgICAgICAgICwgbV93cml0ZSh3cml0
ZSkKKyAgICAgICAgLCBtX2RlZihkZWYpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIHJl
YWQoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0g
VmFyaWFibGVzKSB7CisgICAgICAgICAgICBpZiAoaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkgewor
ICAgICAgICAgICAgICAgIHJlYWRUb3AoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0
ZXIoaGVhcC52YWx1ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChoZWFwLm92ZXJsYXBzKFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAg
IHJlYWRUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgaWYgKGhl
YXAua2luZCgpID09IFZhcmlhYmxlcykgeworICAgICAgICAgICAgaWYgKGhlYXAucGF5bG9hZCgp
LmlzVG9wKCkpIHsKKyAgICAgICAgICAgICAgICB3cml0ZVRvcCgpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV93cml0
ZShWaXJ0dWFsUmVnaXN0ZXIoaGVhcC52YWx1ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoZWFwLm92ZXJsYXBzKFZhcmlhYmxlcykp
IHsKKyAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgLy8gUHVyZVZhbHVlIGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIGxv
Y2Fscywgc28gaWdub3JlIHRoaXMuCisgICAgfQorICAgIAorICAgIHZvaWQgZGVmKEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChsb2NhdGlvbi5r
aW5kKCkgIT0gVmFyaWFibGVMb2MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFZhcmlhYmxlcyk7
CisgICAgICAgIAorICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9jYXRpb24uaGVhcCgp
LnBheWxvYWQoKS52YWx1ZSgpKSwgbm9kZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2
b2lkIHJlYWRUb3AoKQorICAgIHsKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRlcm1vc3QgYXJn
dW1lbnRzLCBleGNlcHQgdGhpcywgYXJlIGRlZmluaXRlbHkgcmVhZC4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAx
OykKKyAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7ICsraSkKKyAgICAg
ICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOworICAgICAgICAKKyAgICAgICAgLy8g
UmVhZCBhbGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICAgICAgY29uc3QgQml0VmVj
dG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1fcmVhZCh2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBSZWFkIGFs
bCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFkZXJzIHRoYXQgd2Ug
ZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KKyAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsg
aW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCisgICAgICAgICAgICAgICAg
bV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWQo
VmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpT
Y29wZUNoYWluKSk7CisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3Rlcihpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB3cml0ZVRvcCgpCisgICAgewor
ICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBj
YXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNGb3IobV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1fd3JpdGUodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsK
KyAgICBOb2RlKiBtX25vZGU7CisgICAgY29uc3QgUmVhZEZ1bmN0b3ImIG1fcmVhZDsKKyAgICBj
b25zdCBXcml0ZUZ1bmN0b3ImIG1fd3JpdGU7CisgICAgY29uc3QgRGVmRnVuY3RvciYgbV9kZWY7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5j
dG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAor
ICAgIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQorewor
ICAgIFByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yPFJlYWRGdW5jdG9yLCBXcml0ZUZ1bmN0
b3IsIERlZkZ1bmN0b3I+CisgICAgICAgIGFkYXB0b3IoZ3JhcGgsIG5vZGUsIHJlYWQsIHdyaXRl
LCBkZWYpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkYXB0b3IpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTc0MDMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgLy8gbm9uTG9jYWxSZWFjaGluZ0Rl
ZigpIHdpbGwgZmluZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhbHdheXMg
c291bmQgdG8gbm90CiAgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRvIGFsd2F5cyBo
YXZlIHRoZSBmdW5jdG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51bGxwdHIpLgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+Ci0gICAgdm9pZCBjb21w
dXRlUGhpcyhQaGlJbnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisgICAgdm9pZCBjb21wdXRlUGhp
cyhjb25zdCBQaGlJbnNlcnRpb25GdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZG9taW5hdG9ycy5pc1ZhbGlkKCkp
OwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxT
aW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jsb2NrTWFw
SW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcmVjaXNlTG9jYWxD
bG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRG
R1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3Mg
U2V0TG9jYWxTaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFNldExv
Y2FsU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNl
dExvY2FsIHNpbmtpbmciKQorICAgICAgICAsIG1fc3NhQ2FsY3VsYXRvcihncmFwaCkKKyAgICAg
ICAgLCBtX2luc2VydGlvblNldChncmFwaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgdmFyaW91cyBs
b2NhbHMgYXJlIGxpdmUuCisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRI
ZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFp
bChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGxpdmVBdEhlYWRb
YmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3Bl
cmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7CisgICAgICAgICAgICBsaXZlQXRU
YWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9n
cmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFti
bG9ja107CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+
c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9
IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5k
KG9wZXJhbmQpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlLT5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiAobGl2ZSA9PSBsaXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZFti
bG9ja10gPSBsaXZlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBi
bG9jay0+cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBsaXZlLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWxb
YmxvY2tdW2ldIHw9IGxpdmVbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAg
ICAgLy8gQWxsIG9mIHRoZSBsb2NhbHMgc2hvdWxkIGJlIGRlYWQgYXQgaGVhZCBvZiByb290LiBB
bGwgb2YgdGhlIGFyZ3VtZW50cyBzaG91bGQgYmUgbGl2ZSBhdAorICAgICAgICAvLyBoZWFkIG9m
IHJvb3QuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlQXRIZWFkWzBdLm51bWJlck9mTG9j
YWxzKCk7IGktLTspCisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsICFs
aXZlQXRIZWFkWzBdLmxvY2FsKGkpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmVBdEhl
YWRbMF0ubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbnVsbHB0ciwgbGl2ZUF0SGVhZFswXS5hcmd1bWVudChpKSk7CisgICAgICAgIAor
ICAgICAgICAvLyBOZXh0IGlkZW50aWZ5IHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gc2luayBTZXRM
b2NhbHMgdG8uIFdlIHNheSB0aGF0IHRoZXJlIGlzIGEgZGVmZXJyZWQKKyAgICAgICAgLy8gZmx1
c2ggaWYgd2UgaGFkIGEgU2V0TG9jYWwgd2l0aCBhIGdpdmVuIFZhcmlhYmxlQWNjZXNzRGF0YSog
YnV0IGl0IGhhc24ndCBiZWVuCisgICAgICAgIC8vIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAg
IEJsb2NrTWFwPE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+PiBkZWZlcnJlZEF0SGVhZCht
X2dyYXBoKTsKKyAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4+
IGRlZmVycmVkQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAg
ICAgZGVmZXJyZWRBdEhlYWRbYmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJp
YWJsZUFjY2Vzc0RhdGEqPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwor
ICAgICAgICAgICAgZGVmZXJyZWRBdFRhaWxbYmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVy
YW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9ja10u
ZmlsbChudWxscHRyKTsKKyAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXS5maWxsKG51
bGxwdHIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+
IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIG1hdGVy
aWFsaXplIGp1c3QgYmVmb3JlIGFueSByZWFkcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlh
bGl6ZSBqdXN0IGJlZm9yZSBhbnkgd3JpdGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
b3VyY2UgPT0gbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgbG9hZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoZGVmZXJyZWQgPT0gZGVmZXJyZWRBdFRhaWxbYmxvY2tdKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZlcnJlZEF0VGFpbFtibG9ja10gPSBkZWZlcnJlZDsKKyAgICAgICAgICAgICAgICBjaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGRlZmVycmVkLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFkW3N1Y2Nlc3Nvcl1baV0pCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghZGVmZXJyZWRbaV0pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghZGVmZXJyZWRBdEhlYWRbYmxvY2tdW2ldKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbYmxvY2tdW2ldID0gZGVmZXJyZWRbaV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChkZWZlcnJlZEF0SGVhZFtibG9ja11baV0gPT0gZGVmZXJyZWRbaV0pCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBudWxscHRyLCAiQ29u
ZmxpY3RpbmcgVmFyaWFibGVBY2Nlc3NEYXRhKiBtZXJnZSIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lzaCB0byBp
bnNlcnQgU2V0TG9jYWxzIGF0IGFsbCBvZiB0aGUgbWF0ZXJpYWxpemF0aW9uIHBvaW50cywgd2hp
Y2ggYXJlIGRlZmluZWQKKyAgICAgICAgLy8gaW1wbGljaXRseSBhcyB0aGUgcGxhY2VzIHdoZXJl
IHdlIHNldCBtYXRlcmlhbGl6ZWQgdG8gdHJ1ZSBldmVuIHRob3VnaCBpdCB3YXMgcHJldmlvdXNs
eQorICAgICAgICAvLyBmYWxzZS4gVG8gZG8gdGhpcywgd2UgbWF5IG5lZWQgdG8gYnVpbGQgc29t
ZSBQaGkgZnVuY3Rpb25zIHRvIGhhbmRsZSBzdHVmZiBsaWtlIHRoaXM6CisgICAgICAgIC8vCisg
ICAgICAgIC8vIEJlZm9yZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGlmIChwKQorICAg
ICAgICAvLyAgICAgICAgIFNldExvY2FsKHI0MiwgQHgpCisgICAgICAgIC8vICAgICBlbHNlCisg
ICAgICAgIC8vICAgICAgICAgU2V0TG9jYWwocjQyLCBAeSkKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gQWZ0ZXI6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBpZiAocCkKKyAgICAgICAgLy8g
ICAgICAgICBVcHNpbG9uKEB4LCBeeikKKyAgICAgICAgLy8gICAgIGVsc2UKKyAgICAgICAgLy8g
ICAgICAgICBVcHNpbG9uKEB5LCBeeikKKyAgICAgICAgLy8gICAgIHo6IFBoaSgpCisgICAgICAg
IC8vICAgICBTZXRMb2NhbChyNDIsIEB6KQorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgd2UgaGF2ZSBhbiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSBmb3IgZWFjaCBsb2Nh
bCwgYW5kIGEgRGVmIGlzIGFueQorICAgICAgICAvLyBTZXRMb2NhbCBpbiB0aGUgb3JpZ2luYWwg
cHJvZ3JhbS4gVGhlIG9yaWdpbmFsIFNldExvY2FscyB3aWxsIHNpbXBseSB2YW5pc2guCisgICAg
ICAgIAorICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG9wZXJhbmRU
b1ZhcmlhYmxlOworICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFu
ZDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0
SGVhZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
KG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBtX3NzYUNhbGN1bGF0b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG9wZXJhbmRU
b1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCkgPSB2YXJpYWJsZTsKKyAgICAgICAgICAgIEFTU0VS
VChpbmRleFRvT3BlcmFuZC5zaXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAg
ICAgaW5kZXhUb09wZXJhbmQuYXBwZW5kKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBWZWN0b3I8Tm9kZSo+IHNldExvY2Fsc1RvU2luazsKKyAgICAgICAgCisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZXRMb2NhbHNUb1Npbmsu
YXBwZW5kKG5vZGUpOworICAgICAgICAgICAgICAgIG1fc3NhQ2FsY3VsYXRvci5uZXdEZWYoCisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSksIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX3NzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCisgICAg
ICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9j
ayogYmxjb2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZCA9IGluZGV4VG9PcGVyYWRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5k
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjVG9w
LCBQaGksIE5vZGVPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0
ID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCktPmZsdXNoRm9ybWF0KCk7
CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBmb3JtYXQgIT0g
RGVhZEZsdXNoICYmIGZvcm1hdCAhPSBDb25mbGljdGluZ0ZsdXNoKTsKKyAgICAgICAgICAgICAg
ICBwaGlOb2RlLT5tZXJnZUZsYWdzKHJlc3VsdEZvcihmb3JtYXQpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbV9t
YXBwaW5nID0gT3BlcmFuZHM8Tm9kZSo+KE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgbV9tYXBwaW5nLmZpbGwo
bnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX21h
cHBpbmcuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQobV9tYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFu
ZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpEZWYqIGRlZiA9IG1fc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywg
dmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX21hcHBpbmcu
b3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IG1fc3Nh
Q2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmlu
ZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIDAsIFNwZWNOb25lLCBNb3ZIaW50
LCBOb2RlT3JpZ2luKCksIE9wSW5mbyhvcGVyYW5kLm9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX21hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURlZi0+dmFs
dWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9kZWZlcnJl
ZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9k
ZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAg
ICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
d2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBtYXRlcmlhbGl6ZShub2RlSW5kZXgsIG5vZGUsIG9wZXJhbmQpOworICAgICAgICAg
ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIG1hdGVyaWFsaXpl
IGp1c3QgYmVmb3JlIGFueSB3cml0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICBtYXRlcmlh
bGl6ZShub2RlSW5kZXgsIG5vZGUsIG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBz
b3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gbm9kZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgp
IC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0
KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sg
OiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxh
dG9yOjpEZWYqIHBoaURlZiA6IG1fc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29y
QmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbV9tYXBwaW5nLm9wZXJhbmQob3BlcmFu
ZCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiB1cHNp
bG9uID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIGluY29taW5nLT5kZWZh
dWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbGx5IGVsaW1pbmF0ZSB0aGUgc3Vua2VuIFNldExv
Y2FscyBieSB0dXJuaW5nIHRoZW0gaW50byBQaGFudG9tcy4gVGhpcyBrZWVwcyB3aGF0ZXZlcgor
ICAgICAgICAvLyB0eXBlIGNoZWNrIHRoZXkgd2VyZSBkb2luZy4KKyAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogc2V0TG9jYWxzVG9TaW5rKQorICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRl
OgorICAgIHZvaWQgbWF0ZXJpYWxpemUodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlKiBub2RlLCBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIGlmICghbV9kZWZlcnJlZC5v
cGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
Ly8gR290dGEgaW5zZXJ0IGEgU2V0TG9jYWwuCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbV9kZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgU2V0TG9jYWwsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSks
CisgICAgICAgICAgICBFZGdlKG1fbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpLCB1c2VLaW5kRm9y
KHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgCisgICAgICAg
IG1fZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CisgICAgfQorICAgIAorICAg
IE9wZXJhbmRzPE5vZGUqPiBtX21hcHBpbmc7CisgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NE
YXRhKj4gbV9kZWZlcnJlZDsKKyAgICBTU0FDYWxjdWxhdG9yIG1fc3NhQ2FsY3VsYXRvcjsKKyAg
ICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9OworICAgIAorYm9vbCBwZXJmb3JtU2V0
TG9jYWxTaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIFNldExvY2FsIFNpbmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhh
c2U8U2V0TG9jYWxTaW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NldExvY2FsU2lua2luZ1Bo
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorIC8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTZXRMb2NhbFNpbmtpbmdQ
aGFzZV9oCisjZGVmaW5lIERGR1NldExvY2FsU2lua2luZ1BoYXNlX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBTaW5rcyBTZXRMb2NhbHMgdG8gdGhlIGFic29sdXRlIGxhdGVzdCBwb2ludCB3aGVy
ZSB0aGV5IGNhbiBwb3NzaWJseSBoYXBwZW4sIHdoaWNoIGlzIHVzdWFsbHkKKy8vIHNpZGUtZWZm
ZWN0cyB0aGF0IG1heSBvYnNlcnZlIHRoZW0uIFRoaXMgZWxpbWluYXRlcyBTZXRMb2NhbHMgaWYg
aXQgc2lua3MgdGhlbSBwYXN0IHRoZSBwb2ludCBvZgorLy8gdGhlaXIgZGVhdGhzLgorCitib29s
IHBlcmZvcm1TZXRMb2NhbFNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdTZXRMb2Nh
bFNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09w
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYgKzE3Niw3IEBAIHR5cGVkZWYgY29u
c3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZW5hYmxlQ2FsbEVkZ2VQcm9maWxp
bmcsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBmcmVxdWVudENhbGxUaHJlc2hvbGQsIDIpIFwK
ICAgICB2KGJvb2wsIG9wdGltaXplTmF0aXZlQ2FsbHMsIGZhbHNlKSBcCisgICAgdihib29sLCBl
bmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSkgXAogICAgIFwKICAgICB2KGJvb2ws
IGVuYWJsZUNvbmN1cnJlbnRKSVQsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBudW1iZXJPZkRG
R0NvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9mV29ya2VyVGhyZWFkcygyLCAyKSAtIDEp
IFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNzQwNDUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNob3VsZCBzaW5rIFNldExvY2FscworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWtl
IHRoZSBzZXQgYml0cyBvZiBhIEJpdFZlY3RvciBpdGVyYWJsZS4KKworICAgICAgICAqIHd0Zi9C
aXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6OlNl
dEJpdHNJdGVyYWJsZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxl
OjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OlNldEJpdHNJ
dGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6
U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OkJp
dFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjpiZWdpbik6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjplbmQpOgorICAgICAgICAoV1RG
OjpCaXRWZWN0b3I6OnNldEJpdHMpOgorCiAyMDE0LTA5LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBPU09iamVjdFB0ciB3aXRoIFJldGFpblB0ci9h
ZG9wdE9TCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw2ICsyNjksNTggQEAgcHVi
bGljOiAKICAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFzaCh2YWx1ZSk7CiAg
ICAgfQogICAgIAorICAgIGNsYXNzIFNldEJpdHNJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAg
ICAgICBTZXRCaXRzSXRlcmFibGUoY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IpCisgICAgICAg
ICAgICA6IG1fYml0VmVjdG9yKGJpdFZlY3RvcikKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fYml0VmVjdG9yKG51bGxwdHIpCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IEJpdFZlY3RvciYgYml0
VmVjdG9yLCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2JpdFZlY3RvcigmYml0
VmVjdG9yKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1f
aW5kZXggPSBtX2JpdFZlY3Rvci0+ZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1ZSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQml0VmVjdG9yKiBtX2JpdFZlY3RvcjsKKyAg
ICAgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICB9OworICAgICAgICAKKyAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2JpdFZlY3RvciwgMCk7
IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRW
ZWN0b3IsIG1fYml0VmVjdG9yLnNpemUoKSk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgY29uc3QgQml0VmVjdG9yJiBtX2JpdFZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFNl
dEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0
aGlzKTsgfQorICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRl
cigpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238829</attachid>
            <date>2014-09-28 15:53:22 -0700</date>
            <delta_ts>2014-09-29 19:52:55 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47342</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MDQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE0LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIFNldExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0QWRkOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpERkc6OkNoZWNrQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpERkc6OkRlZk1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAq
IGRmZy9ERkdGbHVzaEZvcm1hdC5oOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNh
cHR1cmVkVmFyc0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3cml0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OmRlZik6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3
cml0ZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpjb21wdXRlUGhpcyk6CisgICAgICAgICogZGZnL0RGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U2V0TG9jYWxTaW5raW5nUGhh
c2U6OlNldExvY2FsU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNp
bmtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNpbmtpbmdQaGFz
ZTo6bWF0ZXJpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TZXRMb2NhbFNpbmtp
bmcpOgorICAgICAgICAqIGRmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0yNiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgZnVuY3Rpb24uYXJndW1lbnRzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzQwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIxMiw2ICsyMTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NhZmVwb2ludC5jcHAKKyAgICBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZl
SklUNjQuY3BwIiAvPgpAQCAtMTEwNCw2ICsxMTA1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
cmVQb3N0TnVtYmVyaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCIgLz4KQEAgLTEx
MTgsNiArMTEyMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Nhbm5h
YmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2NvcmVCb2FyZC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3BlY3VsYXRpdmVKSVQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw2
ICsxNTYyLDkgQEAKIAkJQzQ5RkU0QUExOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IH07CiAJCUM0OUZFNEFCMTlBQUM4
NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBG
NDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM0OUZFNEFDMTlBQUM4NjEwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0Uw
MEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5MzE5
RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTAxOUQ4QkU2RjAwMDIz
RUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5NDE5RDhCRTZGMDAwMjNFQjAgLyog
REZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTExOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEQzAwMDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5r
aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUw
MDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9Owog
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZN
LmNwcCAqLzsgfTsKQEAgLTMyMjIsNiArMzIyNSw5IEBACiAJCUM0OUZFNEE4MTlBQUM4M0UwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MTE5RDhC
RTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREMwMDAzOTIxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1Bo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcGFxdWVKU1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
Nzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NTUsNiArNDc2MSw3IEBACiAJCQkJMEYyQjlDREYxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdQbGFuLmggKi8sCisJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFE
QjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCAqLywKQEAgLTQ3NzUsNiArNDc4Miw4IEBACiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJB
IC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJMEYy
RkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovLAogCQkJCTg2RUNBM0Y5
MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCisJCQkJREMwMDAzOTExOUQ4
QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQlEQzAw
MDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCAqLywKIAkJ
CQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
ICovLAogCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgKi8sCkBAIC01NTg2LDYgKzU1OTUsNyBAQAogCQkJCTBGRUEwQTA4MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4
QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyODE4N0RG
REVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNTkwNyw2ICs1OTE3LDcgQEAKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lu
a2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIg
LyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwODgsNiArNzA5OSw3IEBACiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJREMwMDAzOTQxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTkwQ0FDMTg5
RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmln
aW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgIH0KLQorICAgIAogICAgIGJvb2wgaXNDYXB0
dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0
OwogICAgIAogICAgIGludCBmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3Rl
cnMoaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNjkzLDEyICszNjkzLDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OklubGluZQogICAgICAgICAKICAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXIuaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1
cmVkVmFycyA9IG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0
dXJlZFZhcnM7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJ5dGVD
b2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVn
aXN0ZXJGb3JMb2NhbChpKSkpCi0gICAgICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
LT5jYXB0dXJlZFZhcnMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRl
Q29kZVBhcnNlci0+bV9ncmFwaC5tX291dGVybW9zdENhcHR1cmVkVmFyczsKIAogICAgICAgICBm
b3IgKGludCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsKICAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJl
dmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lk
IG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3Nl
dC5hZGQoaGVhcCk7CiAgICAgfQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9y
ZXN1bHQgfD0gbV9zZXQub3ZlcmxhcHMoaGVhcCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBA
IHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7Ci0g
ICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiB2b2lk
IGFkZFJlYWRzKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLSAvKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3
IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+
Ci12b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYg
cmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYgZGVmKQordm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAv
LyBTb21lIG5vdGVzOgogICAgIC8vCkBAIC04OTksNyArODk5LDcgQEAgY2xhc3MgTm9PcENsb2Ji
ZXJpemUgewogcHVibGljOgogICAgIE5vT3BDbG9iYmVyaXplKCkgeyB9CiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9CisgICAgdm9pZCBv
cGVyYXRvcigpKFQuLi4pIGNvbnN0IHsgfQogfTsKIAogY2xhc3MgQ2hlY2tDbG9iYmVyaXplIHsK
QEAgLTkxMCwxMiArOTEwLDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRy
dWU7IH0KKyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgY29uc3QgeyBtX3Jlc3VsdCA9IHRydWU7
IH0KICAgICAKICAgICBib29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAg
ICAgCiBwcml2YXRlOgotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVz
dWx0OwogfTsKIAogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwpAQCAtOTI4LDcgKzky
OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShB
YnN0cmFjdEhlYXAgb3RoZXJIZWFwKQorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAg
b3RoZXJIZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcmVzdWx0KQogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtOTM5LDcgKzkzOSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBB
YnN0cmFjdEhlYXAgbV9oZWFwOwotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29s
IG1fcmVzdWx0OwogfTsKIAogYm9vbCBhY2Nlc3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJz
dHJhY3RIZWFwKTsKQEAgLTk1Niw3ICs5NTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5y
ZWFkKGhlYXApOwogICAgIH0KQEAgLTk3Miw3ICs5NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92
YWx1ZS53cml0ZShoZWFwKTsKICAgICB9CkBAIC05ODgsMTIgKzk4OCwxMiBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQor
ICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAg
ICBtX3ZhbHVlLmRlZih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShI
ZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgdm9pZCBvcGVyYXRvcigpKEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1f
dmFsdWUuZGVmKGxvY2F0aW9uLCBub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsMTcgQEAgaW5saW5lIERhdGFGb3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgog
ICAgIHJldHVybiBEYXRhRm9ybWF0RGVhZDsKIH0KIAoraW5saW5lIEZsdXNoRm9ybWF0IG1lcmdl
KEZsdXNoRm9ybWF0IGEsIEZsdXNoRm9ybWF0IGIpCit7CisgICAgaWYgKGEgPT0gRGVhZEZsdXNo
KQorICAgICAgICByZXR1cm4gYjsKKyAgICBpZiAoYiA9PSBEZWFkRmx1c2gpCisgICAgICAgIHJl
dHVybiBhOworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiBhOworICAgIHJldHVybiBD
b25mbGljdGluZ0ZsdXNoOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVz
cGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMSBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQ
bGFuJiBwbGFuLCBMb25nTGl2CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFu
ZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0g
ZnJlZXplRnJhZ2lsZShwbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKKyAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKKyAg
ICAgICAgICAgIG1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzLnNldChpKTsKKyAgICB9CiB9CiAKIEdy
YXBoOjp+R3JhcGgoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdp
biwgbV9wcm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAgCisgICAgY29uc3QgQml0VmVjdG9yJiBj
YXB0dXJlZFZhcnNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgewor
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtX291dGVy
bW9zdENhcHR1cmVkVmFyczsKKyAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+Y2FwdHVy
ZWRWYXJzOworICAgIH0KKyAgICAKICAgICBib29sIGlzU3RyaWN0TW9kZUZvcihDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQpAQCAtODg4LDYgKzg5NSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRl
clNsb3RzOwogICAgIGludCBtX21hY2hpbmVDYXB0dXJlU3RhcnQ7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFNsb3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgQml0VmVjdG9yIG1fb3V0
ZXJtb3N0Q2FwdHVyZWRWYXJzOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGQ6OnVu
b3JkZXJlZF9tYXA8aW50NjRfdCwgZG91YmxlKj4gbV9kb3VibGVDb25zdGFudHNNYXA7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhh
c2UuaCIKICNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdT
U0FMb3dlcmluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhl
Y3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuaCIKQEAgLTMyMiw2ICszMjMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGgg
UGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwog
ICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtU1NBTG93
ZXJpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybVNldExvY2FsU2lua2luZyhkZmcpOwogICAgICAg
ICBwZXJmb3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lz
KGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKQEAgLTMyOSw4ICszMzEsMTAgQEAgUGxh
bjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtUGhh
bnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFwaCBzaXplIGEgbG90
LgogICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybVN0
cmVuZ3RoUmVkdWN0aW9uKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNyaXRpY2Fs
RWRnZUJyZWFraW5nKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybU9iamVjdEFsbG9j
YXRpb25TaW5raW5nKGRmZyk7CisgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVPYmplY3RBbGxv
Y2F0aW9uU2lua2luZygpKSB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Dcml0aWNh
bEVkZ2VCcmVha2luZyhkZmcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmcoZGZnKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoY2hhbmdlZCkg
ewogICAgICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJl
IGludmFsaWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAg
Ly8gaXQgbWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaWZuZGVmIERGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemVfaAorI2RlZmluZSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0
eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+CitjbGFzcyBQcmVjaXNl
TG9jYWxDbG9iYmVyaXplQWRhcHRvciB7CitwdWJsaWM6CisgICAgUHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZUFkYXB0b3IoCisgICAgICAgIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICAgICAg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0
IERlZkZ1bmN0b3ImIGRlZikKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1f
bm9kZShub2RlKQorICAgICAgICAsIG1fcmVhZChyZWFkKQorICAgICAgICAsIG1fd3JpdGUod3Jp
dGUpCisgICAgICAgICwgbV9kZWYoZGVmKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBy
ZWFkKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgaWYgKGhlYXAua2luZCgpID09
IFZhcmlhYmxlcykgeworICAgICAgICAgICAgaWYgKGhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsK
KyAgICAgICAgICAgICAgICByZWFkVG9wKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lz
dGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhlYXAub3ZlcmxhcHMoVmFyaWFibGVzKSkgewor
ICAgICAgICAgICAgcmVhZFRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAg
ICAgICBpZiAoaGVhcC5raW5kKCkgPT0gVmFyaWFibGVzKSB7CisgICAgICAgICAgICBpZiAoaGVh
cC5wYXlsb2FkKCkuaXNUb3AoKSkgeworICAgICAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX3dyaXRlKFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoZWFw
Lm92ZXJsYXBzKFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZh
bHVlKQorICAgIHsKKyAgICAgICAgLy8gUHVyZVZhbHVlIGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGlu
ZyB0byBkbyB3aXRoIGxvY2Fscywgc28gaWdub3JlIHRoaXMuCisgICAgfQorICAgIAorICAgIHZv
aWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGlmIChsb2NhdGlvbi5raW5kKCkgIT0gVmFyaWFibGVMb2MpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgp
ID09IFZhcmlhYmxlcyk7CisgICAgICAgIAorICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIo
bG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKSwgbm9kZSk7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkIHJlYWRUb3AoKQorICAgIHsKKyAgICAgICAgLy8gQWxsIG9mIHRo
ZSBvdXRlcm1vc3QgYXJndW1lbnRzLCBleGNlcHQgdGhpcywgYXJlIGRlZmluaXRlbHkgcmVhZC4K
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1l
dGVycygpOyBpLS0gPiAxOykKKyAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJl
YWQuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1l
bnQ7ICsraSkKKyAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOworICAgICAg
ICAKKyAgICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICAg
ICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5j
YXB0dXJlZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAg
ICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgICAgIAorICAg
ICAgICAvLyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBo
ZWFkZXJzIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KKyAgICAgICAgZm9yIChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCisg
ICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAg
ICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAg
ICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVl
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB3cml0
ZVRvcCgpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3Vt
ZW50cygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIG1fd3JpdGUo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJl
ZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAg
IG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgIH0KKyAgICAKKyAgICBH
cmFwaCYgbV9ncmFwaDsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgY29uc3QgUmVhZEZ1bmN0b3Im
IG1fcmVhZDsKKyAgICBjb25zdCBXcml0ZUZ1bmN0b3ImIG1fd3JpdGU7CisgICAgY29uc3QgRGVm
RnVuY3RvciYgbV9kZWY7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlw
ZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBwcmVjaXNlTG9j
YWxDbG9iYmVyaXplKAorICAgIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICBjb25zdCBS
ZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgRGVmRnVu
Y3RvciYgZGVmKQoreworICAgIFByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yPFJlYWRGdW5j
dG9yLCBXcml0ZUZ1bmN0b3IsIERlZkZ1bmN0b3I+CisgICAgICAgIGFkYXB0b3IoZ3JhcGgsIG5v
ZGUsIHJlYWQsIHdyaXRlLCBkZWYpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkYXB0
b3IpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNp
b24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgLy8gbm9u
TG9jYWxSZWFjaGluZ0RlZigpIHdpbGwgZmluZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlzIGdl
bmVyYWxseSBhbHdheXMgc291bmQgdG8gbm90CiAgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRoYXQg
aXMsIHRvIGFsd2F5cyBoYXZlIHRoZSBmdW5jdG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0
dXJuIG51bGxwdHIpLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+
Ci0gICAgdm9pZCBjb21wdXRlUGhpcyhQaGlJbnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisgICAg
dm9pZCBjb21wdXRlUGhpcyhjb25zdCBQaGlJbnNlcnRpb25GdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZG9taW5h
dG9ycy5pc1ZhbGlkKCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R1NldExvY2FsU2lua2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJE
RkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5o
IgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vc3RhdGljIGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworCitjbGFzcyBTZXRMb2NhbFNpbmtpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7Citw
dWJsaWM6CisgICAgU2V0TG9jYWxTaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IFBoYXNlKGdyYXBoLCAiU2V0TG9jYWwgc2lua2luZyIpCisgICAgICAgICwgbV9zc2FDYWxjdWxh
dG9yKGdyYXBoKQorICAgICAgICAsIG1faW5zZXJ0aW9uU2V0KGdyYXBoKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91
dCB3aGVyZSB2YXJpb3VzIGxvY2FscyBhcmUgbGl2ZS4KKyAgICAgICAgQmxvY2tNYXA8T3BlcmFu
ZHM8Ym9vbD4+IGxpdmVBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRz
PGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBP
cGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAg
ICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNo
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE9wZXJhbmRzPGJvb2w+IGxp
dmUgPSBsaXZlQXRUYWlsW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHNvdXJjZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gbm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChsaXZlID09IGxpdmVBdEhlYWRbYmxvY2tdKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBsaXZlQXRIZWFkW2Jsb2NrXSA9IGxpdmU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IGxpdmUuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgICAg
ICAgICAgbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl1baV0gfD0gbGl2ZVtpXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hh
bmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBBbGwgb2YgdGhlIGxvY2FscyBzaG91bGQgYmUg
ZGVhZCBhdCBoZWFkIG9mIHJvb3QuIEFsbCBvZiB0aGUgYXJndW1lbnRzIHNob3VsZCBiZSBsaXZl
IGF0CisgICAgICAgIC8vIGhlYWQgb2Ygcm9vdC4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxp
dmVBdEhlYWQuYXRJbmRleCgwKS5udW1iZXJPZkxvY2FscygpOyBpLS07KQorICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCAhbGl2ZUF0SGVhZC5hdEluZGV4KDApLmxvY2Fs
KGkpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5udW1i
ZXJPZkFyZ3VtZW50cygpOyBpLS07KQorICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
dWxscHRyLCBsaXZlQXRIZWFkLmF0SW5kZXgoMCkuYXJndW1lbnQoaSkpOworICAgICAgICAKKyAg
ICAgICAgLy8gTmV4dCBpZGVudGlmeSB3aGVyZSB3ZSB3b3VsZCB3YW50IHRvIHNpbmsgU2V0TG9j
YWxzIHRvLiBXZSBzYXkgdGhhdCB0aGVyZSBpcyBhIGRlZmVycmVkCisgICAgICAgIC8vIGZsdXNo
IGlmIHdlIGhhZCBhIFNldExvY2FsIHdpdGggYSBnaXZlbiBWYXJpYWJsZUFjY2Vzc0RhdGEqIGJ1
dCBpdCBoYXNuJ3QgYmVlbgorICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICBC
bG9ja01hcDxPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPj4gZGVmZXJyZWRBdEhlYWQobV9n
cmFwaCk7CisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+PiBk
ZWZlcnJlZEF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAg
IGRlZmVycmVkQXRIZWFkW2Jsb2NrXSA9CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8VmFyaWFi
bGVBY2Nlc3NEYXRhKj4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAg
ICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9CisgICAgICAgICAgICAgICAgT3BlcmFu
ZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbYmxvY2tdLmZp
bGwobnVsbHB0cik7CisgICAgICAgICAgICBkZWZlcnJlZEF0VGFpbFtibG9ja10uZmlsbChudWxs
cHRyKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICAg
ICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVh
ZFtibG9ja107CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJp
emUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgbWF0ZXJpYWxpemUganVzdCBiZWZvcmUgYW55IHJl
YWRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFu
ZCkgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXZSB3aWxsIG1hdGVyaWFsaXplIGp1c3QgYmVmb3JlIGFueSB3cml0
ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5k
KSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBk
ZWZlcnJlZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9IGRl
ZmVycmVkOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJy
ZWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhl
YWRbc3VjY2Vzc29yXVtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFk
ZWZlcnJlZFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWZlcnJl
ZEF0SGVhZFtibG9ja11baV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZEF0SGVhZFtibG9ja11baV0gPSBkZWZlcnJlZFtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkQXRIZWFkW2Js
b2NrXVtpXSA9PSBkZWZlcnJlZFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG51bGxwdHIsICJDb25mbGljdGluZyBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG1lcmdlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7Cisg
ICAgICAgIAorICAgICAgICAvLyBXZSB3aXNoIHRvIGluc2VydCBTZXRMb2NhbHMgYXQgYWxsIG9m
IHRoZSBtYXRlcmlhbGl6YXRpb24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAorICAgICAgICAv
LyBpbXBsaWNpdGx5IGFzIHRoZSBwbGFjZXMgd2hlcmUgd2Ugc2V0IG1hdGVyaWFsaXplZCB0byB0
cnVlIGV2ZW4gdGhvdWdoIGl0IHdhcyBwcmV2aW91c2x5CisgICAgICAgIC8vIGZhbHNlLiBUbyBk
byB0aGlzLCB3ZSBtYXkgbmVlZCB0byBidWlsZCBzb21lIFBoaSBmdW5jdGlvbnMgdG8gaGFuZGxl
IHN0dWZmIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmVmb3JlOgorICAgICAg
ICAvLworICAgICAgICAvLyAgICAgaWYgKHApCisgICAgICAgIC8vICAgICAgICAgU2V0TG9jYWwo
cjQyLCBAeCkKKyAgICAgICAgLy8gICAgIGVsc2UKKyAgICAgICAgLy8gICAgICAgICBTZXRMb2Nh
bChyNDIsIEB5KQorICAgICAgICAvLworICAgICAgICAvLyBBZnRlcjoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAgIGlmIChwKQorICAgICAgICAvLyAgICAgICAgIFVwc2lsb24oQHgsIF56KQor
ICAgICAgICAvLyAgICAgZWxzZQorICAgICAgICAvLyAgICAgICAgIFVwc2lsb24oQHksIF56KQor
ICAgICAgICAvLyAgICAgejogUGhpKCkKKyAgICAgICAgLy8gICAgIFNldExvY2FsKHI0MiwgQHop
CisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIGFuIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlIGZvciBlYWNoIGxvY2FsLCBhbmQgYSBEZWYgaXMgYW55CisgICAg
ICAgIC8vIFNldExvY2FsIGluIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBUaGUgb3JpZ2luYWwgU2V0
TG9jYWxzIHdpbGwgc2ltcGx5IHZhbmlzaC4KKyAgICAgICAgCisgICAgICAgIE9wZXJhbmRzPFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFibGU7CisgICAgICAgIFZlY3Rv
cjxWaXJ0dWFsUmVnaXN0ZXI+IGluZGV4VG9PcGVyYW5kOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fc3NhQ2FsY3VsYXRvci5uZXdW
YXJpYWJsZSgpOworICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5k
KSA9IHZhcmlhYmxlOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9
PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQo
b3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxOb2RlKj4gc2V0
TG9jYWxzVG9TaW5rOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gU2V0
TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHNldExvY2Fsc1RvU2luay5hcHBlbmQobm9kZSk7CisgICAgICAgICAg
ICAgICAgbV9zc2FDYWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFu
ZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSwgYmxvY2ssIG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
c3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFy
aWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgh
bGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSog
cGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2luKCkp
OworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkQXRIZWFkW2Js
b2NrXS5vcGVyYW5kKG9wZXJhbmQpLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgZm9ybWF0ICE9IERlYWRGbHVzaCAmJiBmb3JtYXQg
IT0gQ29uZmxpY3RpbmdGbHVzaCk7CisgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFn
cyhyZXN1bHRGb3IoZm9ybWF0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIG1fbWFwcGluZyA9IE9wZXJhbmRzPE5v
ZGUqPihPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7Cisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpIHsKKyAgICAgICAgICAgIG1fbWFwcGluZy5maWxsKG51bGxwdHIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9tYXBwaW5nLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fbWFwcGluZy5vcGVy
YW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBtX3Nz
YUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWRlZikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9tYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBk
ZWYtPnZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX3NzYUNhbGN1bGF0b3IucGhpc0ZvckJs
b2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
aW5kZXhUb09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgTm9kZU9yaWdpbigpLCBPcElu
Zm8ob3BlcmFuZC5vZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIHBoaURlZi0+dmFsdWUo
KS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9t
YXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFti
bG9ja107CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsIG5vZGUsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgbWF0ZXJpYWxpemUganVz
dCBiZWZvcmUgYW55IHJlYWRzLgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemUo
bm9kZUluZGV4LCBub2RlLCBvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgd3Jp
dGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemUobm9kZUluZGV4LCBub2Rl
LCBvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAg
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9kZWZlcnJlZC5vcGVyYW5k
KG9wZXJhbmQpID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3Qg
dXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAgICAgICBO
b2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47CisgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMo
KSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBt
X3NzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlh
YmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5k
ZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBOb2Rl
KiBpbmNvbWluZyA9IG1fbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVw
c2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhp
Tm9kZSksIGluY29taW5nLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbGx5IGVsaW1p
bmF0ZSB0aGUgc3Vua2VuIFNldExvY2FscyBieSB0dXJuaW5nIHRoZW0gaW50byBQaGFudG9tcy4g
VGhpcyBrZWVwcyB3aGF0ZXZlcgorICAgICAgICAvLyB0eXBlIGNoZWNrIHRoZXkgd2VyZSBkb2lu
Zy4KKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogc2V0TG9jYWxzVG9TaW5rKQorICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbWF0ZXJpYWxpemUodW5zaWduZWQgbm9k
ZUluZGV4LCBOb2RlKiBub2RlLCBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9kZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgU2V0TG9jYWwuCisgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbV9kZWZlcnJlZC5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgU2V0TG9jYWwsIG5vZGUtPm9yaWdpbiwgT3BJbmZv
KHZhcmlhYmxlQWNjZXNzRGF0YSksCisgICAgICAgICAgICBFZGdlKG1fbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpLCB1c2VLaW5kRm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkp
KTsKKyAgICAgICAgCisgICAgICAgIG1fZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIE9wZXJhbmRzPE5vZGUqPiBtX21hcHBpbmc7CisgICAgT3Bl
cmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gbV9kZWZlcnJlZDsKKyAgICBTU0FDYWxjdWxhdG9y
IG1fc3NhQ2FsY3VsYXRvcjsKKyAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7Cit9Owor
ICAgIAorYm9vbCBwZXJmb3JtU2V0TG9jYWxTaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBT
YW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFNldExvY2FsIFNpbmtpbmcgUGhhc2Ui
KTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U2V0TG9jYWxTaW5raW5nUGhhc2U+KGdyYXBoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhh
c2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBA
QAorIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdTZXRMb2NhbFNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR1NldExvY2FsU2lua2luZ1Bo
YXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBTZXRMb2NhbHMgdG8gdGhlIGFic29s
dXRlIGxhdGVzdCBwb2ludCB3aGVyZSB0aGV5IGNhbiBwb3NzaWJseSBoYXBwZW4sIHdoaWNoIGlz
IHVzdWFsbHkKKy8vIHNpZGUtZWZmZWN0cyB0aGF0IG1heSBvYnNlcnZlIHRoZW0uIFRoaXMgZWxp
bWluYXRlcyBTZXRMb2NhbHMgaWYgaXQgc2lua3MgdGhlbSBwYXN0IHRoZSBwb2ludCBvZgorLy8g
dGhlaXIgZGVhdGhzLgorCitib29sIHBlcmZvcm1TZXRMb2NhbFNpbmtpbmcoR3JhcGgmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdTZXRMb2NhbFNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYg
KzE3Niw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwg
ZW5hYmxlQ2FsbEVkZ2VQcm9maWxpbmcsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBmcmVxdWVu
dENhbGxUaHJlc2hvbGQsIDIpIFwKICAgICB2KGJvb2wsIG9wdGltaXplTmF0aXZlQ2FsbHMsIGZh
bHNlKSBcCisgICAgdihib29sLCBlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSkg
XAogICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZUNvbmN1cnJlbnRKSVQsIHRydWUpIFwKICAgICB2
KHVuc2lnbmVkLCBudW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9mV29y
a2VyVGhyZWFkcygyLCAyKSAtIDEpIFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzQwNDUpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA5
LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNob3Vs
ZCBzaW5rIFNldExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBNYWtlIHRoZSBzZXQgYml0cyBvZiBhIEJpdFZlY3RvciBpdGVyYWJs
ZS4KKworICAgICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjpTZXRCaXRzSXRlcmFibGU6OlNldEJpdHNJdGVyYWJsZSk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoV1RG
OjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3Ir
Kyk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0
ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxl
OjplbmQpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldEJpdHMpOgorCiAyMDE0LTA5LTI2
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBPU09iamVj
dFB0ciB3aXRoIFJldGFpblB0ci9hZG9wdE9TCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24g
MTc0MDMxKQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2OSw2ICsyNjksNTggQEAgcHVibGljOiAKICAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0
cl90Pjo6aGFzaCh2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIGNsYXNzIFNldEJpdHNJdGVyYWJs
ZSB7CisgICAgcHVibGljOgorICAgICAgICBTZXRCaXRzSXRlcmFibGUoY29uc3QgQml0VmVjdG9y
JiBiaXRWZWN0b3IpCisgICAgICAgICAgICA6IG1fYml0VmVjdG9yKGJpdFZlY3RvcikKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
Yml0VmVjdG9yKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9y
KGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yLCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICAg
ICAgOiBtX2JpdFZlY3RvcigmYml0VmVjdG9yKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2l6ZV90IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1faW5kZXggPSBtX2JpdFZlY3Rvci0+ZmluZEJpdChtX2luZGV4
ICsgMSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQml0VmVj
dG9yKiBtX2JpdFZlY3RvcjsKKyAgICAgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICB9
OworICAgICAgICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2JpdFZlY3RvciwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IobV9iaXRWZWN0b3IsIG1fYml0VmVjdG9yLnNpemUoKSk7IH0KKyAgICAg
ICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBtX2JpdFZlY3RvcjsK
KyAgICB9OworICAgIAorICAgIFNldEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1
cm4gU2V0Qml0c0l0ZXJhYmxlKCp0aGlzKTsgfQorICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMg
dW5zaWduZWQgYml0c0luUG9pbnRlcigpCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238903</attachid>
            <date>2014-09-29 19:52:55 -0700</date>
            <delta_ts>2014-09-30 09:22:19 -0700</delta_ts>
            <desc>it&apos;s getting real</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53973</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MDQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE0LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIFNldExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0QWRkOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpERkc6OkNoZWNrQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpERkc6OkRlZk1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAq
IGRmZy9ERkdGbHVzaEZvcm1hdC5oOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNh
cHR1cmVkVmFyc0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3cml0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OmRlZik6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3
cml0ZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpjb21wdXRlUGhpcyk6CisgICAgICAgICogZGZnL0RGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U2V0TG9jYWxTaW5raW5nUGhh
c2U6OlNldExvY2FsU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNp
bmtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNpbmtpbmdQaGFz
ZTo6bWF0ZXJpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TZXRMb2NhbFNpbmtp
bmcpOgorICAgICAgICAqIGRmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0yNiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgZnVuY3Rpb24uYXJndW1lbnRzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzQwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIxMiw2ICsyMTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NhZmVwb2ludC5jcHAKKyAgICBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZl
SklUNjQuY3BwIiAvPgpAQCAtMTEwNCw2ICsxMTA1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
cmVQb3N0TnVtYmVyaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCIgLz4KQEAgLTEx
MTgsNiArMTEyMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Nhbm5h
YmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2NvcmVCb2FyZC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3BlY3VsYXRpdmVKSVQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw2
ICsxNTYyLDkgQEAKIAkJQzQ5RkU0QUExOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IH07CiAJCUM0OUZFNEFCMTlBQUM4
NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBG
NDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM0OUZFNEFDMTlBQUM4NjEwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0Uw
MEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5MzE5
RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTAxOUQ4QkU2RjAwMDIz
RUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5NDE5RDhCRTZGMDAwMjNFQjAgLyog
REZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTExOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEQzAwMDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5r
aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUw
MDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9Owog
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZN
LmNwcCAqLzsgfTsKQEAgLTMyMjIsNiArMzIyNSw5IEBACiAJCUM0OUZFNEE4MTlBQUM4M0UwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MTE5RDhC
RTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREMwMDAzOTIxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1Bo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcGFxdWVKU1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
Nzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NTUsNiArNDc2MSw3IEBACiAJCQkJMEYyQjlDREYxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdQbGFuLmggKi8sCisJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFE
QjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCAqLywKQEAgLTQ3NzUsNiArNDc4Miw4IEBACiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJB
IC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJMEYy
RkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovLAogCQkJCTg2RUNBM0Y5
MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCisJCQkJREMwMDAzOTExOUQ4
QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQlEQzAw
MDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCAqLywKIAkJ
CQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
ICovLAogCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgKi8sCkBAIC01NTg2LDYgKzU1OTUsNyBAQAogCQkJCTBGRUEwQTA4MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4
QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyODE4N0RG
REVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNTkwNyw2ICs1OTE3LDcgQEAKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lu
a2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIg
LyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwODgsNiArNzA5OSw3IEBACiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJREMwMDAzOTQxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTkwQ0FDMTg5
RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmln
aW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgIH0KLQorICAgIAogICAgIGJvb2wgaXNDYXB0
dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0
OwogICAgIAogICAgIGludCBmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3Rl
cnMoaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMTEgKzI1
Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdDsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRl
eHQob3V0LCAwKTsKLSAgICB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OwogICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShy
ZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDIyIEBAIHZvaWQgT3BlcmFu
ZHM8VCwgVHJhaXRzPjo6ZHVtcEluQ29udGV4dCgKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK3ZvaWQgT3BlcmFuZHM8VCwgVHJhaXRzPjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwor
ICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1
bWVudEluZGV4LS07KSB7CisgICAgICAgIGlmIChUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKGFyZ3Vt
ZW50KGFyZ3VtZW50SW5kZXgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIsIGFyZ3VtZW50KGFyZ3VtZW50
SW5kZXgpKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgbG9jYWxJbmRleCA9IDA7IGxvY2FsSW5k
ZXggPCBudW1iZXJPZkxvY2FscygpOyArK2xvY2FsSW5kZXgpIHsKKyAgICAgICAgaWYgKFRyYWl0
czo6aXNFbXB0eUZvckR1bXAobG9jYWwobG9jYWxJbmRleCkpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9j
YWwobG9jYWxJbmRleCkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBPcGVyYW5kc0lubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQog
ICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVh
bFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJh
bmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNIZWFkZXIoKSBj
b25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVy
IDwgSlNTdGFjazo6VGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJu
IG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50
KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjkzLDEyICszNjkzLDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICAgICAKICAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFy
cyA9IG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZh
cnM7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJ5dGVDb2RlUGFy
c2VyLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSkpCi0gICAgICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0
dXJlZFZhcnMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRlQ29kZVBh
cnNlci0+bV9ncmFwaC5tX291dGVybW9zdENhcHR1cmVkVmFyczsKIAogICAgICAgICBmb3IgKGlu
dCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsKICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJldmlzaW9u
IDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJh
dG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3NldC5hZGQo
aGVhcCk7CiAgICAgfQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9yZXN1bHQg
fD0gbV9zZXQub3ZlcmxhcHMoaGVhcCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1Ymxp
YzoKICAgICAKIHByaXZhdGU6CiAgICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7Ci0gICAgYm9v
bCBtX3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiB2b2lkIGFkZFJl
YWRzKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLSAvKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3IEBACiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlYWRG
dW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci12b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwg
V3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYgZGVmKQordm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdy
aXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21l
IG5vdGVzOgogICAgIC8vCkBAIC04OTksNyArODk5LDcgQEAgY2xhc3MgTm9PcENsb2JiZXJpemUg
ewogcHVibGljOgogICAgIE5vT3BDbG9iYmVyaXplKCkgeyB9CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9CisgICAgdm9pZCBvcGVyYXRv
cigpKFQuLi4pIGNvbnN0IHsgfQogfTsKIAogY2xhc3MgQ2hlY2tDbG9iYmVyaXplIHsKQEAgLTkx
MCwxMiArOTEwLDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0K
KyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgY29uc3QgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAg
ICAKICAgICBib29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCiBw
cml2YXRlOgotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVzdWx0Owog
fTsKIAogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwpAQCAtOTI4LDcgKzkyOCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFj
dEhlYXAgb3RoZXJIZWFwKQorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgb3RoZXJI
ZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcmVzdWx0KQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtOTM5LDcgKzkzOSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBBYnN0cmFj
dEhlYXAgbV9oZWFwOwotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVz
dWx0OwogfTsKIAogYm9vbCBhY2Nlc3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RI
ZWFwKTsKQEAgLTk1Niw3ICs5NTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAg
ICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigp
KEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5yZWFkKGhl
YXApOwogICAgIH0KQEAgLTk3Miw3ICs5NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS53
cml0ZShoZWFwKTsKICAgICB9CkBAIC05ODgsMTIgKzk4OCwxMiBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQorICAgIHZv
aWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBtX3Zh
bHVlLmRlZih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9j
YXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUu
ZGVmKGxvY2F0aW9uLCBub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsx
MTgsMTcgQEAgaW5saW5lIERhdGFGb3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogICAgIHJl
dHVybiBEYXRhRm9ybWF0RGVhZDsKIH0KIAoraW5saW5lIEZsdXNoRm9ybWF0IG1lcmdlKEZsdXNo
Rm9ybWF0IGEsIEZsdXNoRm9ybWF0IGIpCit7CisgICAgaWYgKGEgPT0gRGVhZEZsdXNoKQorICAg
ICAgICByZXR1cm4gYjsKKyAgICBpZiAoYiA9PSBEZWFkRmx1c2gpCisgICAgICAgIHJldHVybiBh
OworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiBhOworICAgIHJldHVybiBDb25mbGlj
dGluZ0ZsdXNoOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBX
VEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMSBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBw
bGFuLCBMb25nTGl2CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0gZnJlZXpl
RnJhZ2lsZShwbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKKyAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKKyAgICAgICAg
ICAgIG1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzLnNldChpKTsKKyAgICB9CiB9CiAKIEdyYXBoOjp+
R3JhcGgoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjcsNiArMzY3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9w
cm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAgCisgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJl
ZFZhcnNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtX291dGVybW9zdENh
cHR1cmVkVmFyczsKKyAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJz
OworICAgIH0KKyAgICAKICAgICBib29sIGlzU3RyaWN0TW9kZUZvcihDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiAgICAgewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQpA
QCAtODg4LDYgKzg5NSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3Rz
OwogICAgIGludCBtX21hY2hpbmVDYXB0dXJlU3RhcnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgQml0VmVjdG9yIG1fb3V0ZXJtb3N0
Q2FwdHVyZWRWYXJzOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8aW50NjRfdCwgZG91YmxlKj4gbV9kb3VibGVDb25zdGFudHNNYXA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYg
KzU3LDcgQEAKICNpbmNsdWRlICJERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTU0FMb3dl
cmluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCIKICNpbmNs
dWRlICJERkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UuaCIKQEAgLTMyMiw2ICszMjMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAg
ICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtU1NBTG93ZXJpbmco
ZGZnKTsKKyAgICAgICAgcGVyZm9ybVNldExvY2FsU2lua2luZyhkZmcpOwogICAgICAgICBwZXJm
b3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKQEAgLTMyOSw4ICszMzEsMTAgQEAgUGxhbjo6Q29t
cGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtUGhhbnRvbUNh
bm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFwaCBzaXplIGEgbG90LgogICAg
ICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybVN0cmVuZ3Ro
UmVkdWN0aW9uKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNyaXRpY2FsRWRnZUJy
ZWFraW5nKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybU9iamVjdEFsbG9jYXRpb25T
aW5raW5nKGRmZyk7CisgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVPYmplY3RBbGxvY2F0aW9u
U2lua2luZygpKSB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Dcml0aWNhbEVkZ2VC
cmVha2luZyhkZmcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmcoZGZnKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoY2hhbmdlZCkgewogICAg
ICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFs
aWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQg
bWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaWZuZGVmIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emVfaAorI2RlZmluZSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFt
ZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+CitjbGFzcyBQcmVjaXNlTG9jYWxD
bG9iYmVyaXplQWRhcHRvciB7CitwdWJsaWM6CisgICAgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFk
YXB0b3IoCisgICAgICAgIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3Qg
UmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1
bmN0b3ImIGRlZikKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fbm9kZShu
b2RlKQorICAgICAgICAsIG1fcmVhZChyZWFkKQorICAgICAgICAsIG1fd3JpdGUod3JpdGUpCisg
ICAgICAgICwgbV9kZWYoZGVmKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCByZWFkKEFi
c3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFZhcmlh
YmxlcykgeworICAgICAgICAgICAgaWYgKGhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKKyAgICAg
ICAgICAgICAgICByZWFkVG9wKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGhl
YXAucGF5bG9hZCgpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGhlYXAub3ZlcmxhcHMoVmFyaWFibGVzKSkgeworICAgICAg
ICAgICAgcmVhZFRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBp
ZiAoaGVhcC5raW5kKCkgPT0gVmFyaWFibGVzKSB7CisgICAgICAgICAgICBpZiAoaGVhcC5wYXls
b2FkKCkuaXNUb3AoKSkgeworICAgICAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBt
X3dyaXRlKFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZSgpKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoZWFwLm92ZXJs
YXBzKFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlKQor
ICAgIHsKKyAgICAgICAgLy8gUHVyZVZhbHVlIGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGluZyB0byBk
byB3aXRoIGxvY2Fscywgc28gaWdub3JlIHRoaXMuCisgICAgfQorICAgIAorICAgIHZvaWQgZGVm
KEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChs
b2NhdGlvbi5raW5kKCkgIT0gVmFyaWFibGVMb2MpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFZh
cmlhYmxlcyk7CisgICAgICAgIAorICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9jYXRp
b24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKSwgbm9kZSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICB2b2lkIHJlYWRUb3AoKQorICAgIHsKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRl
cm1vc3QgYXJndW1lbnRzLCBleGNlcHQgdGhpcywgYXJlIGRlZmluaXRlbHkgcmVhZC4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
OyBpLS0gPiAxOykKKyAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQuCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7ICsr
aSkKKyAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOworICAgICAgICAKKyAg
ICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICAgICAgY29u
c3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJl
ZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAg
IG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgICAgIAorICAgICAgICAv
LyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFkZXJz
IHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KKyAgICAgICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCisgICAgICAg
ICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAgICAg
ICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB3cml0ZVRvcCgp
CisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgQml0
VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1fd3Jp
dGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYg
bV9ncmFwaDsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgY29uc3QgUmVhZEZ1bmN0b3ImIG1fcmVh
ZDsKKyAgICBjb25zdCBXcml0ZUZ1bmN0b3ImIG1fd3JpdGU7CisgICAgY29uc3QgRGVmRnVuY3Rv
ciYgbV9kZWY7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUg
V3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBwcmVjaXNlTG9jYWxDbG9i
YmVyaXplKAorICAgIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgRGVmRnVuY3RvciYg
ZGVmKQoreworICAgIFByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yPFJlYWRGdW5jdG9yLCBX
cml0ZUZ1bmN0b3IsIERlZkZ1bmN0b3I+CisgICAgICAgIGFkYXB0b3IoZ3JhcGgsIG5vZGUsIHJl
YWQsIHdyaXRlLCBkZWYpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkYXB0b3IpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTc0
MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgLy8gbm9uTG9jYWxS
ZWFjaGluZ0RlZigpIHdpbGwgZmluZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxs
eSBhbHdheXMgc291bmQgdG8gbm90CiAgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRv
IGFsd2F5cyBoYXZlIHRoZSBmdW5jdG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51
bGxwdHIpLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+Ci0gICAg
dm9pZCBjb21wdXRlUGhpcyhQaGlJbnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisgICAgdm9pZCBj
b21wdXRlUGhpcyhjb25zdCBQaGlJbnNlcnRpb25GdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZG9taW5hdG9ycy5p
c1ZhbGlkKCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NldExv
Y2FsU2lua2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZH
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2lu
Y2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworY2xhc3MgU2V0TG9jYWxTaW5raW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFNldExvY2FsU2lua2luZ1BoYXNlKEdy
YXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlNldExvY2FsIHNpbmtpbmciKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBTZXRMb2NhbCBzaW5r
aW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgU1NBQ2FsY3VsYXRvciBzc2FDYWxjdWxhdG9yKG1fZ3JhcGgpOworICAgICAg
ICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAg
Ly8gRmlyc3QgZmlndXJlIG91dCB3aGVyZSB2YXJpb3VzIGxvY2FscyBhcmUgbGl2ZS4KKyAgICAg
ICAgQmxvY2tNYXA8T3BlcmFuZHM8Ym9vbD4+IGxpdmVBdEhlYWQobV9ncmFwaCk7CisgICAgICAg
IEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29s
PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgbGl2
ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2Nr
XS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdLmZpbGwoZmFsc2Up
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IE9wZXJhbmRzPGJvb2w+IGxpdmUgPSBsaXZlQXRUYWlsW2Jsb2NrXTsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCB0YWls
IG9mICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIjogIiwgbGl2ZSwgIlxuIik7CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYXV0byBlc2Nh
cGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgciIsIG9wZXJhbmQsICIgaXMg
bGl2ZSBhdCAiLCBub2RlICwiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3Bl
cmFuZChvcGVyYW5kKSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNj
YXBlSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIE5vZGUqIHNvdXJjZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzb3VyY2UgPT0gbm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG5vZGUtPm9wKCkgPT0gU2V0TG9jYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
dmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
IChsaXZlID09IGxpdmVBdEhlYWRbYmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXSA9
IGxpdmU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5w
cmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmUu
c2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbFtwcmVkZWNl
c3Nvcl1baV0gfD0gbGl2ZVtpXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAg
ICAvLyBBbGwgb2YgdGhlIGxvY2FscyBzaG91bGQgYmUgZGVhZCBhdCBoZWFkIG9mIHJvb3QuIEFs
bCBvZiB0aGUgYXJndW1lbnRzIHNob3VsZCBiZSBsaXZlIGF0CisgICAgICAgIC8vIGhlYWQgb2Yg
cm9vdC4KKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5udW1i
ZXJPZkxvY2FscygpOyBpLS07KQorICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxs
cHRyLCAhbGl2ZUF0SGVhZC5hdEluZGV4KDApLmxvY2FsKGkpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQor
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBsaXZlQXRIZWFkLmF0SW5k
ZXgoMCkuYXJndW1lbnQoaSkpOworICAgICAgICAKKyAgICAgICAgLy8gTmV4dCBpZGVudGlmeSB3
aGVyZSB3ZSB3b3VsZCB3YW50IHRvIHNpbmsgU2V0TG9jYWxzIHRvLiBXZSBzYXkgdGhhdCB0aGVy
ZSBpcyBhIGRlZmVycmVkCisgICAgICAgIC8vIGZsdXNoIGlmIHdlIGhhZCBhIFNldExvY2FsIHdp
dGggYSBnaXZlbiBWYXJpYWJsZUFjY2Vzc0RhdGEqIGJ1dCBpdCBoYXNuJ3QgYmVlbgorICAgICAg
ICAvLyBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPj4gZGVmZXJyZWRBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFw
PE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+PiBkZWZlcnJlZEF0VGFpbChtX2dyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW2Jsb2NrXSA9
CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4oT3BlcmFuZHNM
aWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIGRlZmVycmVkQXRUYWls
W2Jsb2NrXSA9CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4o
T3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmZXJyZWRBdEhlYWRbYmxvY2tdLmZpbGwobnVsbHB0cik7CisgICAgICAgICAg
ICBkZWZlcnJlZEF0VGFpbFtibG9ja10uZmlsbChudWxscHRyKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJ
bk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVBY2Nl
c3NEYXRhKj4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsK
KyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBlc2NhcGVIYW5kbGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUg
aXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkZWZlcnJl
ZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2Nr
XSA9IGRlZmVycmVkOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
ZGVmZXJyZWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxp
dmVBdEhlYWRbc3VjY2Vzc29yXVtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFkZWZlcnJlZFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFk
ZWZlcnJlZEF0SGVhZFtibG9ja11baV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZEF0SGVhZFtibG9ja11baV0gPSBkZWZlcnJlZFtpXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkQXRI
ZWFkW2Jsb2NrXVtpXSA9PSBkZWZlcnJlZFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG51bGxwdHIsICJDb25mbGljdGluZyBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIG1lcmdlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdl
ZCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3aXNoIHRvIGluc2VydCBTZXRMb2NhbHMgYXQg
YWxsIG9mIHRoZSBtYXRlcmlhbGl6YXRpb24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAorICAg
ICAgICAvLyBpbXBsaWNpdGx5IGFzIHRoZSBwbGFjZXMgd2hlcmUgd2Ugc2V0IGRlZmVycmVkIHRv
IERlYWQgd2hpbGUgaXQgd2FzIHByZXZpb3VzbHkgbm90IERlYWQuCisgICAgICAgIC8vIFRvIGRv
IHRoaXMsIHdlIG1heSBuZWVkIHRvIGJ1aWxkIHNvbWUgUGhpIGZ1bmN0aW9ucyB0byBoYW5kbGUg
c3R1ZmYgbGlrZSB0aGlzOgorICAgICAgICAvLworICAgICAgICAvLyBCZWZvcmU6CisgICAgICAg
IC8vCisgICAgICAgIC8vICAgICBpZiAocCkKKyAgICAgICAgLy8gICAgICAgICBTZXRMb2NhbChy
NDIsIEB4KQorICAgICAgICAvLyAgICAgZWxzZQorICAgICAgICAvLyAgICAgICAgIFNldExvY2Fs
KHI0MiwgQHkpCisgICAgICAgIC8vCisgICAgICAgIC8vIEFmdGVyOgorICAgICAgICAvLworICAg
ICAgICAvLyAgICAgaWYgKHApCisgICAgICAgIC8vICAgICAgICAgVXBzaWxvbihAeCwgXnopCisg
ICAgICAgIC8vICAgICBlbHNlCisgICAgICAgIC8vICAgICAgICAgVXBzaWxvbihAeSwgXnopCisg
ICAgICAgIC8vICAgICB6OiBQaGkoKQorICAgICAgICAvLyAgICAgU2V0TG9jYWwocjQyLCBAeikK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgYW4gU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUgZm9yIGVhY2ggbG9jYWwsIGFuZCBhIERlZiBpcyBhbnkKKyAgICAg
ICAgLy8gU2V0TG9jYWwgaW4gdGhlIG9yaWdpbmFsIHByb2dyYW0uIFRoZSBvcmlnaW5hbCBTZXRM
b2NhbHMgd2lsbCBzaW1wbHkgdmFuaXNoLgorICAgICAgICAKKyAgICAgICAgT3BlcmFuZHM8U1NB
Q2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKKyAgICAgICAgICAgIE9w
ZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5u
ZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVy
YW5kKSA9IHZhcmlhYmxlOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUo
KSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvT3BlcmFuZC5hcHBl
bmQob3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxOb2RlKj4g
c2V0TG9jYWxzVG9TaW5rOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
U2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHNldExvY2Fsc1RvU2luay5hcHBlbmQobm9kZSk7CisgICAgICAg
ICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSksIGJsb2NrLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBz
c2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9y
OjpWYXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJp
YWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFs
aXZlQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2RlKiBw
aGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7
CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJyZWRBdEhlYWRbYmxv
Y2tdLm9wZXJhbmQob3BlcmFuZCktPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBmb3JtYXQgIT0gRGVhZEZsdXNoICYmIGZvcm1hdCAh
PSBDb25mbGljdGluZ0ZsdXNoKTsKKyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdz
KHJlc3VsdEZvcihmb3JtYXQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IG1hcHBpbmco
T3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAg
ICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEqPiBkZWZlcnJlZDsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAg
ICAgICAgICAgbWFwcGluZy5maWxsKG51bGxwdHIpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUq
IHZhcmlhYmxlID0gb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdE
ZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlZikKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gZGVmLT52YWx1ZSgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiog
cGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZh
cmlhYmxlKCktPmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgMCwgU3BlY05vbmUs
IE1vdkhpbnQsIE5vZGVPcmlnaW4oKSwgT3BJbmZvKG9wZXJhbmQub2Zmc2V0KCkpLAorICAgICAg
ICAgICAgICAgICAgICBwaGlEZWYtPnZhbHVlKCktPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURl
Zi0+dmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVm
ZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7
CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkRlZmVycmVkIGF0ICIsIG5vZGUsICI6Iik7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChkZWZlcnJlZFtpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ciIsIGRlZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSwgIjoiLCBSYXdQb2ludGVyKGRlZmVycmVk
W2ldKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaW5jb21pbmcpOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgU2V0TG9j
YWwuCisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgU2V0TG9jYWwgZm9yIHIiLCBvcGVyYW5kLCAiIGF0
ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIHNldExvY2FsID0gaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTZXRMb2NhbCwgbm9k
ZS0+b3JpZ2luLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UoaW5jb21pbmcsIHVzZUtpbmRGb3IodmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVz
aEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAvLyBNYW4sIHRoaXMgaXMgYXdmdWwu
IFdlIHNob3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDIKKyAgICAgICAgICAg
ICAgICAgICAgc2V0TG9jYWwtPm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJh
bmQpID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCisgICAgICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHNvdXJjZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+
c2l6ZSgpIC0gMTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2Nr
LT5sYXN0KCktPm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FD
YWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nl
c3NvckJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVm
LT52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSog
dmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVy
YW5kKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlv
blBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgaW5jb21pbmctPmRlZmF1bHRFZGdlKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBGaW5hbGx5IGVsaW1pbmF0ZSB0aGUgc3Vua2VuIFNldExvY2FscyBieSB0dXJuaW5nIHRo
ZW0gaW50byBQaGFudG9tcy4gVGhpcyBrZWVwcyB3aGF0ZXZlcgorICAgICAgICAvLyB0eXBlIGNo
ZWNrIHRoZXkgd2VyZSBkb2luZy4KKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogc2V0TG9jYWxz
VG9TaW5rKQorICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAK
KyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVy
IFNldExvY2FsIHNpbmtpbmc6XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworICAgIAor
Ym9vbCBwZXJmb3JtU2V0TG9jYWxTaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGlu
Z1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFNldExvY2FsIFNpbmtpbmcgUGhhc2UiKTsKKyAg
ICByZXR1cm4gcnVuUGhhc2U8U2V0TG9jYWxTaW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nl
dExvY2FsU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorIC8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdT
ZXRMb2NhbFNpbmtpbmdQaGFzZV9oCisjZGVmaW5lIERGR1NldExvY2FsU2lua2luZ1BoYXNlX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIEdyYXBoOworCisvLyBTaW5rcyBTZXRMb2NhbHMgdG8gdGhlIGFic29sdXRlIGxh
dGVzdCBwb2ludCB3aGVyZSB0aGV5IGNhbiBwb3NzaWJseSBoYXBwZW4sIHdoaWNoIGlzIHVzdWFs
bHkKKy8vIHNpZGUtZWZmZWN0cyB0aGF0IG1heSBvYnNlcnZlIHRoZW0uIFRoaXMgZWxpbWluYXRl
cyBTZXRMb2NhbHMgaWYgaXQgc2lua3MgdGhlbSBwYXN0IHRoZSBwb2ludCBvZgorLy8gdGhlaXIg
ZGVhdGhzLgorCitib29sIHBlcmZvcm1TZXRMb2NhbFNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdTZXRMb2NhbFNpbmtpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyAr
NzQsNyBAQCBwdWJsaWM6CiAgICAgfSB3aGlsZSAoMCkKIAogICAgICNkZWZpbmUgbm90U2V0IChz
dGF0aWNfY2FzdDxzaXplX3Q+KC0xKSkKLQorICAgICAgICAKICAgICB2b2lkIHZhbGlkYXRlKCkK
ICAgICB7CiAgICAgICAgIC8vIE5CLiBUaGlzIGNvZGUgaXMgbm90IHdyaXR0ZW4gZm9yIHBlcmZv
cm1hbmNlLCBzaW5jZSBpdCBpcyBub3QgaW50ZW5kZWQgdG8gcnVuCkBAIC0yMTMsNiArMjEzLDkg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgY2Fub25pY2FsUmVzdWx0UmVwcmVzZW50YXRpb24obm9k
ZS0+cmVzdWx0KCkpID09IGNhbm9uaWNhbFJlc3VsdFJlcHJlc2VudGF0aW9uKG5vZGUtPmNoaWxk
MSgpLT5yZXN1bHQoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICEhbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIE1ha2VSb3BlOgogICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CiAg
ICAgICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDYgKzE3Niw3IEBA
IHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZW5hYmxlQ2Fs
bEVkZ2VQcm9maWxpbmcsIHRydWUpIFwKICAgICB2KHVuc2lnbmVkLCBmcmVxdWVudENhbGxUaHJl
c2hvbGQsIDIpIFwKICAgICB2KGJvb2wsIG9wdGltaXplTmF0aXZlQ2FsbHMsIGZhbHNlKSBcCisg
ICAgdihib29sLCBlbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZywgdHJ1ZSkgXAogICAgIFwK
ICAgICB2KGJvb2wsIGVuYWJsZUNvbmN1cnJlbnRKSVQsIHRydWUpIFwKICAgICB2KHVuc2lnbmVk
LCBudW1iZXJPZkRGR0NvbXBpbGVyVGhyZWFkcywgY29tcHV0ZU51bWJlck9mV29ya2VyVGhyZWFk
cygyLCAyKSAtIDEpIFwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzQwNDUpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA5LTI4ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgRlRMIHNob3VsZCBzaW5rIFNl
dExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBNYWtlIHRoZSBzZXQgYml0cyBvZiBhIEJpdFZlY3RvciBpdGVyYWJsZS4KKworICAg
ICAgICAqIHd0Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRz
SXRlcmFibGU6OlNldEJpdHNJdGVyYWJsZSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0
Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6
OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjpi
ZWdpbik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjplbmQpOgor
ICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OnNldEJpdHMpOgorCiAyMDE0LTA5LTI2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVwbGFjZSBPU09iamVjdFB0ciB3aXRo
IFJldGFpblB0ci9hZG9wdE9TCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTc0MDMxKQor
KysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw2ICsy
NjksNTggQEAgcHVibGljOiAKICAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFz
aCh2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIGNsYXNzIFNldEJpdHNJdGVyYWJsZSB7CisgICAg
cHVibGljOgorICAgICAgICBTZXRCaXRzSXRlcmFibGUoY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0
b3IpCisgICAgICAgICAgICA6IG1fYml0VmVjdG9yKGJpdFZlY3RvcikKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fYml0VmVjdG9y
KG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IEJp
dFZlY3RvciYgYml0VmVjdG9yLCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Jp
dFZlY3RvcigmYml0VmVjdG9yKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6
ZV90IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1faW5kZXggPSBtX2JpdFZlY3Rvci0+ZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQml0VmVjdG9yKiBtX2Jp
dFZlY3RvcjsKKyAgICAgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2Jp
dFZlY3RvciwgbV9iaXRWZWN0b3IuZmluZEJpdCgwLCB0cnVlKSk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRWZWN0b3IsIG1fYml0VmVjdG9y
LnNpemUoKSk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQml0VmVj
dG9yJiBtX2JpdFZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFNldEJpdHNJdGVyYWJsZSBzZXRC
aXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0aGlzKTsgfQorICAgIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigpCiAgICAgewpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1u
ZXctb2JqZWN0LXRoZW4tY2FsbC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZWxpZGFibGUtbmV3
LW9iamVjdC10aGVuLWNhbGwKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3
LW9iamVjdC10aGVuLWNhbGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxpZGFibGUtbmV3LW9i
amVjdC10aGVuLWNhbGwuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBzdW1PZkFyaXRoU2VyaWVzKGxpbWl0KSB7
CisgICAgcmV0dXJuIGxpbWl0ICogKGxpbWl0ICsgMSkgLyAyOworfQorCit2YXIgbiA9IDEwMDAw
MDAwOworCitmdW5jdGlvbiBiYXIocCwgbykgeworICAgIGlmIChwKQorICAgICAgICByZXR1cm4g
NTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiA2OworfQorCitmdW5jdGlvbiBmb28oKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAg
ICAgICAgdmFyIG8gPSB7ZjogaX07CisgICAgICAgIHZhciBwID0ge2Y6IGkgKyAxfTsKKyAgICAg
ICAgYmFyKGksIG8pOworICAgICAgICBiYXIoaSwgcCk7CisgICAgICAgIHJlc3VsdCArPSBvLmYg
KyBwLmY7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28o
KTsKK2lmIChyZXN1bHQgIT0gc3VtT2ZBcml0aFNlcmllcyhuIC0gMSkgKyBzdW1PZkFyaXRoU2Vy
aWVzKG4pKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238928</attachid>
            <date>2014-09-30 09:22:19 -0700</date>
            <delta_ts>2014-09-30 17:41:39 -0700</delta_ts>
            <desc>it runs more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56464</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MDQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE0LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIFNldExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0QWRkOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpERkc6OkNoZWNrQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpERkc6OkRlZk1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAq
IGRmZy9ERkdGbHVzaEZvcm1hdC5oOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNh
cHR1cmVkVmFyc0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3cml0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OmRlZik6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3
cml0ZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpjb21wdXRlUGhpcyk6CisgICAgICAgICogZGZnL0RGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U2V0TG9jYWxTaW5raW5nUGhh
c2U6OlNldExvY2FsU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNp
bmtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNpbmtpbmdQaGFz
ZTo6bWF0ZXJpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TZXRMb2NhbFNpbmtp
bmcpOgorICAgICAgICAqIGRmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0yNiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgZnVuY3Rpb24uYXJndW1lbnRzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzQwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIxMiw2ICsyMTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NhZmVwb2ludC5jcHAKKyAgICBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZl
SklUNjQuY3BwIiAvPgpAQCAtMTEwNCw2ICsxMTA1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
cmVQb3N0TnVtYmVyaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCIgLz4KQEAgLTEx
MTgsNiArMTEyMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Nhbm5h
YmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2NvcmVCb2FyZC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3BlY3VsYXRpdmVKSVQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw2
ICsxNTYyLDkgQEAKIAkJQzQ5RkU0QUExOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IH07CiAJCUM0OUZFNEFCMTlBQUM4
NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBG
NDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM0OUZFNEFDMTlBQUM4NjEwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0Uw
MEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5MzE5
RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTAxOUQ4QkU2RjAwMDIz
RUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5NDE5RDhCRTZGMDAwMjNFQjAgLyog
REZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTExOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEQzAwMDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5r
aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUw
MDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9Owog
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZN
LmNwcCAqLzsgfTsKQEAgLTMyMjIsNiArMzIyNSw5IEBACiAJCUM0OUZFNEE4MTlBQUM4M0UwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MTE5RDhC
RTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREMwMDAzOTIxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1Bo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcGFxdWVKU1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
Nzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NTUsNiArNDc2MSw3IEBACiAJCQkJMEYyQjlDREYxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdQbGFuLmggKi8sCisJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFE
QjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCAqLywKQEAgLTQ3NzUsNiArNDc4Miw4IEBACiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJB
IC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJMEYy
RkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovLAogCQkJCTg2RUNBM0Y5
MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCisJCQkJREMwMDAzOTExOUQ4
QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQlEQzAw
MDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCAqLywKIAkJ
CQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
ICovLAogCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgKi8sCkBAIC01NTg2LDYgKzU1OTUsNyBAQAogCQkJCTBGRUEwQTA4MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4
QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyODE4N0RG
REVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNTkwNyw2ICs1OTE3LDcgQEAKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lu
a2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIg
LyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwODgsNiArNzA5OSw3IEBACiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJREMwMDAzOTQxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTkwQ0FDMTg5
RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmln
aW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgIH0KLQorICAgIAogICAgIGJvb2wgaXNDYXB0
dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0
OwogICAgIAogICAgIGludCBmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3Rl
cnMoaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMTEgKzI1
Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdDsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRl
eHQob3V0LCAwKTsKLSAgICB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OwogICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShy
ZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDIyIEBAIHZvaWQgT3BlcmFu
ZHM8VCwgVHJhaXRzPjo6ZHVtcEluQ29udGV4dCgKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK3ZvaWQgT3BlcmFuZHM8VCwgVHJhaXRzPjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwor
ICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1
bWVudEluZGV4LS07KSB7CisgICAgICAgIGlmIChUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKGFyZ3Vt
ZW50KGFyZ3VtZW50SW5kZXgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIsIGFyZ3VtZW50KGFyZ3VtZW50
SW5kZXgpKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgbG9jYWxJbmRleCA9IDA7IGxvY2FsSW5k
ZXggPCBudW1iZXJPZkxvY2FscygpOyArK2xvY2FsSW5kZXgpIHsKKyAgICAgICAgaWYgKFRyYWl0
czo6aXNFbXB0eUZvckR1bXAobG9jYWwobG9jYWxJbmRleCkpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9j
YWwobG9jYWxJbmRleCkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBPcGVyYW5kc0lubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQog
ICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVh
bFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJh
bmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNIZWFkZXIoKSBj
b25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVy
IDwgSlNTdGFjazo6VGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJu
IG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50
KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjkzLDEyICszNjkzLDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICAgICAKICAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5s
aW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFy
cyA9IG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZh
cnM7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJ5dGVDb2RlUGFy
c2VyLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJG
b3JMb2NhbChpKSkpCi0gICAgICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0
dXJlZFZhcnMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRlQ29kZVBh
cnNlci0+bV9ncmFwaC5tX291dGVybW9zdENhcHR1cmVkVmFyczsKIAogICAgICAgICBmb3IgKGlu
dCBpID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsKICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBhcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJldmlzaW9u
IDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAg
IAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJh
dG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3NldC5hZGQo
aGVhcCk7CiAgICAgfQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9yZXN1bHQg
fD0gbV9zZXQub3ZlcmxhcHMoaGVhcCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1Ymxp
YzoKICAgICAKIHByaXZhdGU6CiAgICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7Ci0gICAgYm9v
bCBtX3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiB2b2lkIGFkZFJl
YWRzKEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLSAvKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3IEBACiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlYWRG
dW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci12b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwg
V3JpdGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYgZGVmKQordm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdy
aXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21l
IG5vdGVzOgogICAgIC8vCkBAIC04OTksNyArODk5LDcgQEAgY2xhc3MgTm9PcENsb2JiZXJpemUg
ewogcHVibGljOgogICAgIE5vT3BDbG9iYmVyaXplKCkgeyB9CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyB9CisgICAgdm9pZCBvcGVyYXRv
cigpKFQuLi4pIGNvbnN0IHsgfQogfTsKIAogY2xhc3MgQ2hlY2tDbG9iYmVyaXplIHsKQEAgLTkx
MCwxMiArOTEwLDEyIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgeyBtX3Jlc3VsdCA9IHRydWU7IH0K
KyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgY29uc3QgeyBtX3Jlc3VsdCA9IHRydWU7IH0KICAg
ICAKICAgICBib29sIHJlc3VsdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdWx0OyB9CiAgICAgCiBw
cml2YXRlOgotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVzdWx0Owog
fTsKIAogYm9vbCBkb2VzV3JpdGVzKEdyYXBoJiwgTm9kZSopOwpAQCAtOTI4LDcgKzkyOCw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFj
dEhlYXAgb3RoZXJIZWFwKQorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgb3RoZXJI
ZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fcmVzdWx0KQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtOTM5LDcgKzkzOSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBBYnN0cmFj
dEhlYXAgbV9oZWFwOwotICAgIGJvb2wgbV9yZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVz
dWx0OwogfTsKIAogYm9vbCBhY2Nlc3Nlc092ZXJsYXAoR3JhcGgmLCBOb2RlKiwgQWJzdHJhY3RI
ZWFwKTsKQEAgLTk1Niw3ICs5NTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAg
ICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigp
KEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5yZWFkKGhl
YXApOwogICAgIH0KQEAgLTk3Miw3ICs5NzIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAg
ICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVy
YXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS53
cml0ZShoZWFwKTsKICAgICB9CkBAIC05ODgsMTIgKzk4OCwxMiBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKQorICAgIHZv
aWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAgICBtX3Zh
bHVlLmRlZih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9j
YXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUpCisgICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUu
ZGVmKGxvY2F0aW9uLCBub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsx
MTgsMTcgQEAgaW5saW5lIERhdGFGb3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogICAgIHJl
dHVybiBEYXRhRm9ybWF0RGVhZDsKIH0KIAoraW5saW5lIEZsdXNoRm9ybWF0IG1lcmdlKEZsdXNo
Rm9ybWF0IGEsIEZsdXNoRm9ybWF0IGIpCit7CisgICAgaWYgKGEgPT0gRGVhZEZsdXNoKQorICAg
ICAgICByZXR1cm4gYjsKKyAgICBpZiAoYiA9PSBEZWFkRmx1c2gpCisgICAgICAgIHJldHVybiBh
OworICAgIGlmIChhID09IGIpCisgICAgICAgIHJldHVybiBhOworICAgIHJldHVybiBDb25mbGlj
dGluZ0ZsdXNoOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBX
VEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxMSBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBw
bGFuLCBMb25nTGl2CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgaS0tOykKICAgICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0gZnJlZXpl
RnJhZ2lsZShwbGFuLm11c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKKyAgICAgICAgaWYgKG1fY29k
ZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKSkKKyAgICAgICAg
ICAgIG1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzLnNldChpKTsKKyAgICB9CiB9CiAKIEdyYXBoOjp+
R3JhcGgoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjcsNiArMzY3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgbV9w
cm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAgCisgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJl
ZFZhcnNGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtX291dGVybW9zdENh
cHR1cmVkVmFyczsKKyAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJz
OworICAgIH0KKyAgICAKICAgICBib29sIGlzU3RyaWN0TW9kZUZvcihDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiAgICAgewogICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQpA
QCAtODg4LDYgKzg5NSw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlclNsb3Rz
OwogICAgIGludCBtX21hY2hpbmVDYXB0dXJlU3RhcnQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3dBcmd1bWVudFtdPiBtX3Nsb3dBcmd1bWVudHM7CisgICAgQml0VmVjdG9yIG1fb3V0ZXJtb3N0
Q2FwdHVyZWRWYXJzOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGQ6OnVub3JkZXJl
ZF9tYXA8aW50NjRfdCwgZG91YmxlKj4gbV9kb3VibGVDb25zdGFudHNNYXA7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYg
KzU3LDcgQEAKICNpbmNsdWRlICJERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTU0FMb3dl
cmluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCIKICNpbmNs
dWRlICJERkdTdGFja0xheW91dFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UuaCIKQEAgLTMyMiw2ICszMjMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAg
ICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtU1NBTG93ZXJpbmco
ZGZnKTsKKyAgICAgICAgcGVyZm9ybVNldExvY2FsU2lua2luZyhkZmcpOwogICAgICAgICBwZXJm
b3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7
CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKQEAgLTMyOSw4ICszMzEsMTAgQEAgUGxhbjo6Q29t
cGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBwZXJmb3JtUGhhbnRvbUNh
bm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFwaCBzaXplIGEgbG90LgogICAg
ICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybVN0cmVuZ3Ro
UmVkdWN0aW9uKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNyaXRpY2FsRWRnZUJy
ZWFraW5nKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybU9iamVjdEFsbG9jYXRpb25T
aW5raW5nKGRmZyk7CisgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVPYmplY3RBbGxvY2F0aW9u
U2lua2luZygpKSB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Dcml0aWNhbEVkZ2VC
cmVha2luZyhkZmcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBwZXJmb3JtT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmcoZGZnKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoY2hhbmdlZCkgewogICAg
ICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFs
aWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAgICAgICAgICAgLy8gaXQg
bWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaWZuZGVmIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emVfaAorI2RlZmluZSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFt
ZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+CitjbGFzcyBQcmVjaXNlTG9jYWxD
bG9iYmVyaXplQWRhcHRvciB7CitwdWJsaWM6CisgICAgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFk
YXB0b3IoCisgICAgICAgIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICAgICAgY29uc3Qg
UmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1
bmN0b3ImIGRlZikKKyAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAgICAgICAsIG1fbm9kZShu
b2RlKQorICAgICAgICAsIG1fcmVhZChyZWFkKQorICAgICAgICAsIG1fd3JpdGUod3JpdGUpCisg
ICAgICAgICwgbV9kZWYoZGVmKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCByZWFkKEFi
c3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFZhcmlh
YmxlcykgeworICAgICAgICAgICAgaWYgKGhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKKyAgICAg
ICAgICAgICAgICByZWFkVG9wKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGhl
YXAucGF5bG9hZCgpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGhlYXAub3ZlcmxhcHMoVmFyaWFibGVzKSkgeworICAgICAg
ICAgICAgcmVhZFRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgeworICAgICAgICBp
ZiAoaGVhcC5raW5kKCkgPT0gVmFyaWFibGVzKSB7CisgICAgICAgICAgICBpZiAoaGVhcC5wYXls
b2FkKCkuaXNUb3AoKSkgeworICAgICAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBt
X3dyaXRlKFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZSgpKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoZWFwLm92ZXJs
YXBzKFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZhbHVlKQor
ICAgIHsKKyAgICAgICAgLy8gUHVyZVZhbHVlIGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGluZyB0byBk
byB3aXRoIGxvY2Fscywgc28gaWdub3JlIHRoaXMuCisgICAgfQorICAgIAorICAgIHZvaWQgZGVm
KEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChs
b2NhdGlvbi5raW5kKCkgIT0gVmFyaWFibGVMb2MpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgpID09IFZh
cmlhYmxlcyk7CisgICAgICAgIAorICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9jYXRp
b24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKSwgbm9kZSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICB2b2lkIHJlYWRUb3AoKQorICAgIHsKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRl
cm1vc3QgYXJndW1lbnRzLCBleGNlcHQgdGhpcywgYXJlIGRlZmluaXRlbHkgcmVhZC4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
OyBpLS0gPiAxOykKKyAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQuCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7ICsr
aSkKKyAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOworICAgICAgICAKKyAg
ICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICAgICAgY29u
c3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJl
ZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAg
IG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgICAgIAorICAgICAgICAv
LyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFkZXJz
IHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KKyAgICAgICAgZm9yIChJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCisgICAgICAg
ICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAgICAg
ICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBK
U1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdp
c3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB3cml0ZVRvcCgp
CisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygp
KSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIG1fd3JpdGUodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgQml0
VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1fd3Jp
dGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgIH0KKyAgICAKKyAgICBHcmFwaCYg
bV9ncmFwaDsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgY29uc3QgUmVhZEZ1bmN0b3ImIG1fcmVh
ZDsKKyAgICBjb25zdCBXcml0ZUZ1bmN0b3ImIG1fd3JpdGU7CisgICAgY29uc3QgRGVmRnVuY3Rv
ciYgbV9kZWY7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUg
V3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgordm9pZCBwcmVjaXNlTG9jYWxDbG9i
YmVyaXplKAorICAgIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwKKyAgICBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdW5jdG9yJiB3cml0ZSwgY29uc3QgRGVmRnVuY3RvciYg
ZGVmKQoreworICAgIFByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yPFJlYWRGdW5jdG9yLCBX
cml0ZUZ1bmN0b3IsIERlZkZ1bmN0b3I+CisgICAgICAgIGFkYXB0b3IoZ3JhcGgsIG5vZGUsIHJl
YWQsIHdyaXRlLCBkZWYpOworICAgIGNsb2JiZXJpemUoZ3JhcGgsIG5vZGUsIGFkYXB0b3IpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTc0
MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgLy8gbm9uTG9jYWxS
ZWFjaGluZ0RlZigpIHdpbGwgZmluZCBpdCBsYXRlci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxs
eSBhbHdheXMgc291bmQgdG8gbm90CiAgICAgLy8gcHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRv
IGFsd2F5cyBoYXZlIHRoZSBmdW5jdG9yIGluc2VydCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51
bGxwdHIpLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBoaUluc2VydGlvbkZ1bmN0b3I+Ci0gICAg
dm9pZCBjb21wdXRlUGhpcyhQaGlJbnNlcnRpb25GdW5jdG9yIGZ1bmN0b3IpCisgICAgdm9pZCBj
b21wdXRlUGhpcyhjb25zdCBQaGlJbnNlcnRpb25GdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX2dyYXBoLm1fZG9taW5hdG9ycy5p
c1ZhbGlkKCkpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1NldExv
Y2FsU2lua2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZH
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2lu
Y2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworc3RhdGljIHZvaWQgZHVtcERlZmVycmVk
KGNvbnN0IE9wZXJhbmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+JiBkZWZlcnJlZCkKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGlmIChkZWZl
cnJlZFtpXSkKKyAgICAgICAgICAgIGRhdGFMb2coIiByIiwgZGVmZXJyZWQub3BlcmFuZEZvcklu
ZGV4KGkpLCAiOiIsIFJhd1BvaW50ZXIoZGVmZXJyZWRbaV0pKTsKKyAgICB9Cit9CisKK2NsYXNz
IFNldExvY2FsU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTZXRM
b2NhbFNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJT
ZXRMb2NhbCBzaW5raW5nIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlIHByb2JsZW1zIG9mIHRoaXMgYXBwcm9h
Y2ggaXMgdGhhdCBpdCB3aWxsIGNyZWF0ZSBhIGR1cGxpY2F0ZSBQaGkgZ3JhcGgKKyAgICAgICAg
Ly8gZm9yIHN1bmtlbiBTZXRMb2NhbHMgaW4gdGhlIHByZXNlbmNlIG9mIGludGVyZXN0aW5nIGNv
bnRyb2wgZmxvdyBtZXJnZXMsIGFuZCB3aGVyZSB0aGUKKyAgICAgICAgLy8gdmFsdWUgYmVpbmcg
U2V0TG9jYWwnZCBpcyBhbHNvIG90aGVyd2lzZSBsaXZlIGluIHRoZSBERkcgY29kZS4gV2UgY291
bGQgd29yayBhcm91bmQgdGhpcworICAgICAgICAvLyBieSBkb2luZyB0aGUgc2lua2luZyBvdmVy
IENQUywgb3IgbWF5YmUganVzdCBieSBkb2luZyByZWFsbHkgc21hcnQgaG9pc3RpbmcuIEl0J3Mg
YWxzbworICAgICAgICAvLyBwb3NzaWJsZSB0aGF0IHRoZSBkdXBsaWNhdGUgUGhpIGdyYXBoIGNh
biBiZSBkZWR1cGxpY2F0ZWQgYnkgTExWTS4gSXQgd291bGQgYmUgYmVzdCBpZiB3ZQorICAgICAg
ICAvLyBjb3VsZCBvYnNlcnZlIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhIFBoaSBncmFwaCBpbiBw
bGFjZSB0aGF0IGRvZXMgd2hhdCB3ZSB3YW50LiBJbgorICAgICAgICAvLyBwcmluY2lwbGUgaWYg
d2UgaGF2ZSBhIHJlcXVlc3QgdG8gcGxhY2UgYSBQaGkgYXQgYSBwYXJ0aWN1bGFyIHBsYWNlLCB3
ZSBjb3VsZCBqdXN0IGNoZWNrCisgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBQaGkg
dGhhdCBkb2VzIHdoYXQgd2Ugd2FudC4gQmVjYXVzZSBTZXRMb2NhbFNpbmtpbmdQaGFzZSBydW5z
IGp1c3QKKyAgICAgICAgLy8gYWZ0ZXIgU1NBIGNvbnZlcnNpb24sIHdlIGhhdmUgYWxtb3N0IGEg
Z3VhcmFudGVlIHRoYXQgdGhlIFBoaSBncmFwaCB3ZSBwcm9kdWNlIGhlcmUgd291bGQKKyAgICAg
ICAgLy8gYmUgdHJpdmlhbGx5IHJlZHVuZGFudCB0byB0aGUgb25lIHdlIGFscmVhZHkgaGF2ZS4K
KyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJH
cmFwaCBiZWZvcmUgU2V0TG9jYWwgc2lua2luZzpcbiIpOworICAgICAgICAgICAgbV9ncmFwaC5k
dW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNTQUNhbGN1bGF0b3Igc3NhQ2Fs
Y3VsYXRvcihtX2dyYXBoKTsKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dy
YXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgdmFyaW91
cyBsb2NhbHMgYXJlIGxpdmUuCisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZl
QXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0
VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGxpdmVBdEhl
YWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVz
QXRIZWFkKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4o
T3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7CisgICAgICAgICAgICBsaXZl
QXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFp
bFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9j
ay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgYXQgIiwgbm9kZSwgIjog
IiwgbGl2ZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICByIiwgb3Bl
cmFuZCwgIiBpcyBsaXZlIGF0ICIsIG5vZGUgLCJcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCBlc2NhcGVIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBTZXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGl2ZS5vcGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKGxpdmUgPT0gbGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGxpdmVBdEhl
YWRbYmxvY2tdID0gbGl2ZTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
IDogYmxvY2stPnByZWRlY2Vzc29ycykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gbGl2ZS5zaXplKCk7IGktLTspCisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlQXRU
YWlsW3ByZWRlY2Vzc29yXVtpXSB8PSBsaXZlW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEFsbCBvZiB0aGUgbG9jYWxzIHNob3VsZCBiZSBkZWFkIGF0IGhlYWQg
b2Ygcm9vdC4gQWxsIG9mIHRoZSBhcmd1bWVudHMgc2hvdWxkIGJlIGxpdmUgYXQKKyAgICAgICAg
Ly8gaGVhZCBvZiByb290LgorICAgICAgICBmb3IgKHNpemVfdCBpID0gbGl2ZUF0SGVhZC5hdElu
ZGV4KDApLm51bWJlck9mTG9jYWxzKCk7IGktLTspCisgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG51bGxwdHIsICFsaXZlQXRIZWFkLmF0SW5kZXgoMCkubG9jYWwoaSkpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbGl2ZUF0SGVhZC5hdEluZGV4KDApLm51bWJlck9mQXJndW1lbnRz
KCk7IGktLTspCisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGxpdmVB
dEhlYWQuYXRJbmRleCgwKS5hcmd1bWVudChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBOZXh0
IGlkZW50aWZ5IHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gc2luayBTZXRMb2NhbHMgdG8uIFdlIHNh
eSB0aGF0IHRoZXJlIGlzIGEgZGVmZXJyZWQKKyAgICAgICAgLy8gZmx1c2ggaWYgd2UgaGFkIGEg
U2V0TG9jYWwgd2l0aCBhIGdpdmVuIFZhcmlhYmxlQWNjZXNzRGF0YSogYnV0IGl0IGhhc24ndCBi
ZWVuCisgICAgICAgIC8vIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIEJsb2NrTWFwPE9wZXJh
bmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+PiBkZWZlcnJlZEF0SGVhZChtX2dyYXBoKTsKKyAgICAg
ICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4+IGRlZmVycmVkQXRUYWls
KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZGVmZXJyZWRBdEhl
YWRbYmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFjY2Vzc0RhdGEq
PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgZGVm
ZXJyZWRBdFRhaWxbYmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZUFj
Y2Vzc0RhdGEqPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9ja10uZmlsbChudWxscHRyKTsK
KyAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXS5maWxsKG51bGxwdHIpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxW
YXJpYWJsZUFjY2Vzc0RhdGEqPiBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6Iik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkdW1wRGVmZXJyZWQoZGVmZXJyZWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKKyAgICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBlc2NhcGVIYW5kbGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBk
ZWZlcnJlZEF0VGFpbFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9IGRl
ZmVycmVkOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJy
ZWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyByIiwgZGVm
ZXJyZWQub3BlcmFuZEZvckluZGV4KGkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+
IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIik7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbGl2ZUF0SGVhZFtzdWNjZXNzb3JdW2ldKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coIk5vdCBsaXZlLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVmZXJyZWRbaV0pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiV2UgaGF2ZSBub3RoaW5nLlxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVmZXJyZWRBdEhl
YWRbc3VjY2Vzc29yXVtpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJQcm9wYWdhdGlu
ZyAiLCBSYXdQb2ludGVyKGRlZmVycmVkW2ldKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9IGRlZmVycmVkW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9PSBkZWZlcnJlZFtpXSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb252ZXJnZWQuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG51bGxwdHIsICJDb25mbGljdGluZyBWYXJpYWJsZUFjY2Vzc0RhdGEqIG1lcmdlIik7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAv
LyBXZSB3aXNoIHRvIGluc2VydCBTZXRMb2NhbHMgYXQgYWxsIG9mIHRoZSBtYXRlcmlhbGl6YXRp
b24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAorICAgICAgICAvLyBpbXBsaWNpdGx5IGFzIHRo
ZSBwbGFjZXMgd2hlcmUgd2Ugc2V0IGRlZmVycmVkIHRvIERlYWQgd2hpbGUgaXQgd2FzIHByZXZp
b3VzbHkgbm90IERlYWQuCisgICAgICAgIC8vIFRvIGRvIHRoaXMsIHdlIG1heSBuZWVkIHRvIGJ1
aWxkIHNvbWUgUGhpIGZ1bmN0aW9ucyB0byBoYW5kbGUgc3R1ZmYgbGlrZSB0aGlzOgorICAgICAg
ICAvLworICAgICAgICAvLyBCZWZvcmU6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBpZiAo
cCkKKyAgICAgICAgLy8gICAgICAgICBTZXRMb2NhbChyNDIsIEB4KQorICAgICAgICAvLyAgICAg
ZWxzZQorICAgICAgICAvLyAgICAgICAgIFNldExvY2FsKHI0MiwgQHkpCisgICAgICAgIC8vCisg
ICAgICAgIC8vIEFmdGVyOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgaWYgKHApCisgICAg
ICAgIC8vICAgICAgICAgVXBzaWxvbihAeCwgXnopCisgICAgICAgIC8vICAgICBlbHNlCisgICAg
ICAgIC8vICAgICAgICAgVXBzaWxvbihAeSwgXnopCisgICAgICAgIC8vICAgICB6OiBQaGkoKQor
ICAgICAgICAvLyAgICAgU2V0TG9jYWwocjQyLCBAeikKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
VGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgYW4gU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGVh
Y2ggbG9jYWwsIGFuZCBhIERlZiBpcyBhbnkKKyAgICAgICAgLy8gU2V0TG9jYWwgaW4gdGhlIG9y
aWdpbmFsIHByb2dyYW0uIFRoZSBvcmlnaW5hbCBTZXRMb2NhbHMgd2lsbCBzaW1wbHkgdmFuaXNo
LgorICAgICAgICAKKyAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBv
cGVyYW5kVG9WYXJpYWJsZSgKKyAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9j
aygwKS0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4g
aW5kZXhUb09wZXJhbmQ7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDAp
LT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZv
ckluZGV4KGkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAg
ICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOworICAgICAg
ICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7
CisgICAgICAgICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQob3BlcmFuZCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxOb2RlKj4gc2V0TG9jYWxzVG9TaW5rOworICAgICAg
ICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gU2V0TG9jYWwpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHNldExv
Y2Fsc1RvU2luay5hcHBlbmQobm9kZSk7CisgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5u
ZXdEZWYoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9k
ZS0+bG9jYWwoKSksIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzc2FDYWxjdWxhdG9yLmNvbXB1dGVQaGlz
KAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUsIEJh
c2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFkW2Jsb2NrXS5vcGVyYW5k
KG9wZXJhbmQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgciIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1
bXAoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBOb2Rl
KiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVPcmlnaW4o
KSk7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0Rh
dGEgPSBkZWZlcnJlZEF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIHZhcmlhYmxlQWNjZXNzRGF0YSk7Cisg
ICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5m
bHVzaEZvcm1hdCgpOworICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0
Rm9yKGZvcm1hdCkpOworICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIAorICAgICAgICBPcGVyYW5kczxOb2RlKj4gbWFwcGluZyhPcGVyYW5k
c0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgIE9wZXJh
bmRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+IGRlZmVycmVkOworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAg
ICBtYXBwaW5nLmZpbGwobnVsbHB0cik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBvcGVyYW5kKG1hcHBpbmcub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFi
bGUgPSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAg
IFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhQ2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVh
ZChibG9jaywgdmFyaWFibGUpOworICAgICAgICAgICAgICAgIGlmICghZGVmKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBt
YXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYtPnZhbHVlKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhibG9jaykpIHsKKyAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUo
KS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGlu
dCwgTm9kZU9yaWdpbigpLCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksCisgICAgICAgICAgICAg
ICAgICAgIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZlcnJlZCA9
IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJy
ZWQgYXQgIiwgbm9kZSwgIjoiKTsKKyAgICAgICAgICAgICAgICAgICAgZHVtcERlZmVycmVkKGRl
ZmVycmVkKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gU2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CisgICAgICAg
ICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsm
XSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9w
ZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghZGVmZXJyZWQub3BlcmFu
ZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5v
cGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG5vZGUsIGluY29taW5nKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIC8vIEdvdHRhIGluc2VydCBhIFNldExvY2FsLgorICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFNl
dExvY2FsIGZvciByIiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBkZWZlcnJl
ZC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBzZXRMb2NhbCA9
IGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgU2V0TG9jYWwsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGluY29taW5nLCB1c2VLaW5k
Rm9yKHZhcmlhYmxlQWNjZXNzRGF0YS0+Zmx1c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gTWFuLCB0aGlzIGlzIGF3ZnVsLiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlz
LgorICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM3MjQyCisgICAgICAgICAgICAgICAgICAgIHNldExvY2FsLT5tZXJnZUZsYWdz
KE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9i
YmVyaXplKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVy
LCBlc2NhcGVIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciwgTm9kZSopIHsgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKKyAgICAg
ICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBo
aURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgeworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYt
PnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10ub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCB2YXJp
YWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQg
PSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAgICAgICAg
IFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUs
IFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8o
cGhpTm9kZSksIEVkZ2UoaW5jb21pbmcsIHVzZUtpbmQpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluYWxseSBlbGlt
aW5hdGUgdGhlIHN1bmtlbiBTZXRMb2NhbHMgYnkgdHVybmluZyB0aGVtIGludG8gUGhhbnRvbXMu
IFRoaXMga2VlcHMgd2hhdGV2ZXIKKyAgICAgICAgLy8gdHlwZSBjaGVjayB0aGV5IHdlcmUgZG9p
bmcuCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IHNldExvY2Fsc1RvU2luaykKKyAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBTZXRMb2NhbCBzaW5raW5n
OlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKyAgICAKK2Jvb2wgcGVyZm9ybVNldExv
Y2FsU2lua2luZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oIkRGRyBTZXRMb2NhbCBTaW5raW5nIFBoYXNlIik7CisgICAgcmV0dXJuIHJ1blBoYXNl
PFNldExvY2FsU2lua2luZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKyAvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU2V0TG9jYWxTaW5raW5nUGhh
c2VfaAorI2RlZmluZSBERkdTZXRMb2NhbFNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsK
KworLy8gU2lua3MgU2V0TG9jYWxzIHRvIHRoZSBhYnNvbHV0ZSBsYXRlc3QgcG9pbnQgd2hlcmUg
dGhleSBjYW4gcG9zc2libHkgaGFwcGVuLCB3aGljaCBpcyB1c3VhbGx5CisvLyBzaWRlLWVmZmVj
dHMgdGhhdCBtYXkgb2JzZXJ2ZSB0aGVtLiBUaGlzIGVsaW1pbmF0ZXMgU2V0TG9jYWxzIGlmIGl0
IHNpbmtzIHRoZW0gcGFzdCB0aGUgcG9pbnQgb2YKKy8vIHRoZWlyIGRlYXRocy4KKworYm9vbCBw
ZXJmb3JtU2V0TG9jYWxTaW5raW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU2V0TG9jYWxT
aW5raW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgog
ICAgIH0gd2hpbGUgKDApCiAKICAgICAjZGVmaW5lIG5vdFNldCAoc3RhdGljX2Nhc3Q8c2l6ZV90
PigtMSkpCi0KKyAgICAgICAgCiAgICAgdm9pZCB2YWxpZGF0ZSgpCiAgICAgewogICAgICAgICAv
LyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciBwZXJmb3JtYW5jZSwgc2luY2UgaXQg
aXMgbm90IGludGVuZGVkIHRvIHJ1bgpAQCAtMjEzLDYgKzIxMyw5IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICBjYXNlIElkZW50aXR5OgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSksIGNhbm9uaWNhbFJlc3VsdFJlcHJlc2VudGF0aW9uKG5vZGUtPnJlc3VsdCgpKSA9PSBj
YW5vbmljYWxSZXN1bHRSZXByZXNlbnRhdGlvbihub2RlLT5jaGlsZDEoKS0+cmVzdWx0KCkpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2Nh
bDoKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhIW5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNYWtl
Um9wZToKICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICAgICAgICAgIGNh
c2UgQXJpdGhBZGQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
CShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw2ICsxNzYsNyBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICB2KGJvb2wsIGVuYWJsZUNhbGxFZGdlUHJvZmlsaW5nLCB0
cnVlKSBcCiAgICAgdih1bnNpZ25lZCwgZnJlcXVlbnRDYWxsVGhyZXNob2xkLCAyKSBcCiAgICAg
dihib29sLCBvcHRpbWl6ZU5hdGl2ZUNhbGxzLCBmYWxzZSkgXAorICAgIHYoYm9vbCwgZW5hYmxl
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmcsIHRydWUpIFwKICAgICBcCiAgICAgdihib29sLCBlbmFi
bGVDb25jdXJyZW50SklULCB0cnVlKSBcCiAgICAgdih1bnNpZ25lZCwgbnVtYmVyT2ZERkdDb21w
aWxlclRocmVhZHMsIGNvbXB1dGVOdW1iZXJPZldvcmtlclRocmVhZHMoMiwgMikgLSAxKSBcCklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTc0MDQ1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNC0wOS0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIEZUTCBzaG91bGQgc2luayBTZXRMb2NhbHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzE2OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgTWFrZSB0aGUg
c2V0IGJpdHMgb2YgYSBCaXRWZWN0b3IgaXRlcmFibGUuCisKKyAgICAgICAgKiB3dGYvQml0VmVj
dG9yLmg6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjpTZXRCaXRz
SXRlcmFibGUpOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFi
bGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OlNldEJp
dHNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpCaXRWZWN0
b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RG
OjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAo
V1RGOjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKFdURjo6Qml0
VmVjdG9yOjpzZXRCaXRzKToKKwogMjAxNC0wOS0yNiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlcGxhY2UgT1NPYmplY3RQdHIgd2l0aCBSZXRhaW5QdHIvYWRvcHRP
UwpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjksNiArMjY5LDU4IEBAIHB1YmxpYzog
CiAgICAgICAgIHJldHVybiBJbnRIYXNoPHVpbnRwdHJfdD46Omhhc2godmFsdWUpOwogICAgIH0K
ICAgICAKKyAgICBjbGFzcyBTZXRCaXRzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
U2V0Qml0c0l0ZXJhYmxlKGNvbnN0IEJpdFZlY3RvciYgYml0VmVjdG9yKQorICAgICAgICAgICAg
OiBtX2JpdFZlY3RvcihiaXRWZWN0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBp
dGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2JpdFZlY3RvcihudWxscHRyKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBCaXRWZWN0b3ImIGJpdFZlY3Rv
ciwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9iaXRWZWN0b3IoJmJpdFZlY3Rv
cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemVfdCBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4
ID0gbV9iaXRWZWN0b3ItPmZpbmRCaXQobV9pbmRleCArIDEsIHRydWUpOworICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIGNvbnN0IEJpdFZlY3RvciogbV9iaXRWZWN0b3I7CisgICAgICAg
ICAgICBzaXplX3QgbV9pbmRleDsKKyAgICAgICAgfTsKKyAgICAgICAgCisgICAgICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRWZWN0b3IsIG1fYml0VmVj
dG9yLmZpbmRCaXQoMCwgdHJ1ZSkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKG1fYml0VmVjdG9yLCBtX2JpdFZlY3Rvci5zaXplKCkpOyB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgbV9iaXRWZWN0b3I7
CisgICAgfTsKKyAgICAKKyAgICBTZXRCaXRzSXRlcmFibGUgc2V0Qml0cygpIGNvbnN0IHsgcmV0
dXJuIFNldEJpdHNJdGVyYWJsZSgqdGhpcyk7IH0KKyAgICAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQogICAgIHsKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNh
bGwtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9l
bGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxs
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxs
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXct
b2JqZWN0LXRoZW4tY2FsbC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2Vs
aWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZWxp
ZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
OCBAQAorZnVuY3Rpb24gc3VtT2ZBcml0aFNlcmllcyhsaW1pdCkgeworICAgIHJldHVybiBsaW1p
dCAqIChsaW1pdCArIDEpIC8gMjsKK30KKwordmFyIG4gPSAxMDAwMDAwMDsKKworZnVuY3Rpb24g
YmFyKHAsIG8pIHsKKyAgICBpZiAocCkKKyAgICAgICAgcmV0dXJuIDU7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gNjsKK30KKworZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIHZhciBvID0ge2Y6
IGl9OworICAgICAgICB2YXIgcCA9IHtmOiBpICsgMX07CisgICAgICAgIGJhcihpLCBvKTsKKyAg
ICAgICAgYmFyKGksIHApOworICAgICAgICByZXN1bHQgKz0gby5mICsgcC5mOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gZm9vKCk7CitpZiAocmVzdWx0ICE9
IHN1bU9mQXJpdGhTZXJpZXMobiAtIDEpICsgc3VtT2ZBcml0aFNlcmllcyhuKSkKKyAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238983</attachid>
            <date>2014-09-30 17:41:39 -0700</date>
            <delta_ts>2014-09-30 20:41:42 -0700</delta_ts>
            <desc>slightly different approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57773</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MDQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE0LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIFNldExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0QWRkOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpERkc6OkNoZWNrQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpERkc6OkRlZk1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAq
IGRmZy9ERkdGbHVzaEZvcm1hdC5oOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNh
cHR1cmVkVmFyc0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3cml0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OmRlZik6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3
cml0ZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpjb21wdXRlUGhpcyk6CisgICAgICAgICogZGZnL0RGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U2V0TG9jYWxTaW5raW5nUGhh
c2U6OlNldExvY2FsU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNp
bmtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNpbmtpbmdQaGFz
ZTo6bWF0ZXJpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TZXRMb2NhbFNpbmtp
bmcpOgorICAgICAgICAqIGRmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0yNiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgZnVuY3Rpb24uYXJndW1lbnRzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzQwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIxMiw2ICsyMTIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NhZmVwb2ludC5jcHAKKyAgICBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2Uu
Y3BwCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTUsNiArNDU1LDcgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZl
SklUNjQuY3BwIiAvPgpAQCAtMTEwNCw2ICsxMTA1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQaGlDaGlsZHJlbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1BsYW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
cmVQb3N0TnVtYmVyaW5nLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCIgLz4KQEAgLTEx
MTgsNiArMTEyMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Nhbm5h
YmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2NvcmVCb2FyZC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3BlY3VsYXRpdmVKSVQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTU2Miw2
ICsxNTYyLDkgQEAKIAkJQzQ5RkU0QUExOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgKi87IH07CiAJCUM0OUZFNEFCMTlBQUM4
NjEwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDlGRTRBNzE5QUFDODNFMDBG
NDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUM0OUZFNEFDMTlBQUM4NjEwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0Uw
MEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5MzE5
RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTAxOUQ4QkU2RjAwMDIz
RUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzAwMDM5NDE5RDhCRTZGMDAwMjNFQjAgLyog
REZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTExOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2Fs
U2lua2luZ1BoYXNlLmNwcCAqLzsgfTsKKwkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEQzAwMDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5r
aW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUw
MDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9Owog
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZN
LmNwcCAqLzsgfTsKQEAgLTMyMjIsNiArMzIyNSw5IEBACiAJCUM0OUZFNEE4MTlBQUM4M0UwMEY0
MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAgLyogREZH
UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZHUHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzAwMDM5MTE5RDhC
RTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJREMwMDAzOTIxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1Bo
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmg7IHBhdGggPSBkZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBPcGFxdWVKU1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUx
Nzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxpemVUaHJlYWRpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3NTUsNiArNDc2MSw3IEBACiAJCQkJMEYyQjlDREYxOUQw
QkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmggKi8sCiAJCQkJQTc4QTk3NzIxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwICovLAogCQkJCUE3OEE5NzczMTc5NzM4QjgwMDlERjc0
NCAvKiBERkdQbGFuLmggKi8sCisJCQkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLywKIAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTgg
LyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkJFMEY2RTE2QzFE
QjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmggKi8sCiAJCQkJMEZG
RkM5NTExNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cCAqLywKQEAgLTQ3NzUsNiArNDc4Miw4IEBACiAJCQkJQTc0MTAxN0UxNzlEQUY4MDAwMkVCOEJB
IC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmggKi8sCiAJCQkJMEYy
RkNDRjYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oICovLAogCQkJCTg2RUNBM0Y5
MTMyREYyNUEwMDJCMkFENyAvKiBERkdTY29yZUJvYXJkLmggKi8sCisJCQkJREMwMDAzOTExOUQ4
QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQlEQzAw
MDM5MjE5RDhCRTZGMDAwMjNFQjAgLyogREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaCAqLywKIAkJ
CQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
ICovLAogCQkJCTBGMUUzQTUwMTUzN0MyQ0IwMDBGOTQ1NiAvKiBERkdTbG93UGF0aEdlbmVyYXRv
ci5oICovLAogCQkJCTg2RUM5REMyMTMyOERGODIwMDJCMkFENyAvKiBERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAgKi8sCkBAIC01NTg2LDYgKzU1OTUsNyBAQAogCQkJCTBGRUEwQTA4MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4
QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyODE4N0RG
REVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNTkwNyw2ICs1OTE3LDcgQEAKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJREMwMDAzOTUxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1NldExvY2FsU2lu
a2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIg
LyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwODgsNiArNzA5OSw3IEBACiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJREMwMDAzOTQxOUQ4QkU2RjAwMDIzRUIwIC8qIERG
R1NldExvY2FsU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTkwQ0FDMTg5
RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmln
aW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg0LDcgKzM4
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZUVuZCgpOwogICAgIH0KLQorICAgIAogICAgIGJvb2wgaXNDYXB0
dXJlZChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgSW5saW5lQ2FsbEZyYW1lKiA9IDApIGNvbnN0
OwogICAgIAogICAgIGludCBmcmFtZVBvaW50ZXJPZmZzZXRUb0dldEFjdGl2YXRpb25SZWdpc3Rl
cnMoaW50IG1hY2hpbmVDYXB0dXJlU3RhcnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTIsMTEgKzI1
Miw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdDsKLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRl
eHQob3V0LCAwKTsKLSAgICB9CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OwogICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCShy
ZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHNJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDIyIEBAIHZvaWQgT3BlcmFu
ZHM8VCwgVHJhaXRzPjo6ZHVtcEluQ29udGV4dCgKICAgICB9CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK3ZvaWQgT3BlcmFuZHM8VCwgVHJhaXRzPjo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwor
ICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50SW5kZXggPSBudW1iZXJPZkFyZ3VtZW50cygpOyBhcmd1
bWVudEluZGV4LS07KSB7CisgICAgICAgIGlmIChUcmFpdHM6OmlzRW1wdHlGb3JEdW1wKGFyZ3Vt
ZW50KGFyZ3VtZW50SW5kZXgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJhcmciLCBhcmd1bWVudEluZGV4LCAiOiIsIGFyZ3VtZW50KGFyZ3VtZW50
SW5kZXgpKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgbG9jYWxJbmRleCA9IDA7IGxvY2FsSW5k
ZXggPCBudW1iZXJPZkxvY2FscygpOyArK2xvY2FsSW5kZXgpIHsKKyAgICAgICAgaWYgKFRyYWl0
czo6aXNFbXB0eUZvckR1bXAobG9jYWwobG9jYWxJbmRleCkpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImxvYyIsIGxvY2FsSW5kZXgsICI6IiwgbG9j
YWwobG9jYWxJbmRleCkpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBPcGVyYW5kc0lubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZpcnR1YWxSZWdpc3Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAobV92aXJ0dWFsUmVnaXN0ZXIgIT0gc19pbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsgfQog
ICAgIGJvb2wgaXNMb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJhbmRJc0xvY2FsKG1fdmlydHVh
bFJlZ2lzdGVyKTsgfQogICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG9wZXJh
bmRJc0FyZ3VtZW50KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQorICAgIGJvb2wgaXNIZWFkZXIoKSBj
b25zdCB7IHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciA+PSAwICYmIG1fdmlydHVhbFJlZ2lzdGVy
IDwgSlNTdGFjazo6VGhpc0FyZ3VtZW50OyB9CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gc19maXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eDsgfQogICAgIGludCB0b0xvY2FsKCkgY29uc3QgeyBBU1NFUlQoaXNMb2NhbCgpKTsgcmV0dXJu
IG9wZXJhbmRUb0xvY2FsKG1fdmlydHVhbFJlZ2lzdGVyKTsgfQogICAgIGludCB0b0FyZ3VtZW50
KCkgY29uc3QgeyBBU1NFUlQoaXNBcmd1bWVudCgpKTsgcmV0dXJuIG9wZXJhbmRUb0FyZ3VtZW50
KG1fdmlydHVhbFJlZ2lzdGVyKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSwx
NiBAQCBib29sIEJhc2ljQmxvY2s6OmlzSW5CbG9jayhOb2RlKiBteU5vZGUpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitOb2RlT3JpZ2luIEJhc2ljQmxvY2s6OmZpcnN0T3JpZ2luKCkgY29uc3QK
K3sKKyAgICBmb3IgKE5vZGUqIG5vZGUgOiAqdGhpcykgeworICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLmlzU2V0KCkpCisgICAgICAgICAgICByZXR1cm4gbm9kZS0+b3JpZ2luOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBOb2RlT3JpZ2luKCk7
Cit9CisKIHZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxv
Y2spCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7
ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHQnJh
bmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHRmx1c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZH
Tm9kZS5oIgorI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CkBAIC05MCw2ICs5MSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRl
ZDxCYXNpY0Jsb2MKICAgICBCbG9ja05vZGVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IG1fbm9kZXMuYmVnaW4oKTsgfQogICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fbm9kZXMuZW5kKCk7IH0KICAgICAKKyAgICBOb2RlT3JpZ2luIGZpcnN0T3JpZ2lu
KCkgY29uc3Q7CisgICAgCiAgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIHsgcmV0dXJuIGxh
c3QoKS0+bnVtU3VjY2Vzc29ycygpOyB9CiAgICAgCiAgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5
MywxMiArMzY5Myw4IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUK
ICAgICAgICAgCiAgICAgICAgIGlmIChtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBt
X2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSBieXRlQ29kZVBhcnNlci0+
bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgaS0tOykgewotICAgICAgICAgICAgICAgIGlmIChieXRl
Q29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaSkpKQotICAgICAgICAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRW
YXJzLnNldChpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0gYnl0ZUNvZGVQYXJzZXIt
Pm1fZ3JhcGgubV9vdXRlcm1vc3RDYXB0dXJlZFZhcnM7CiAKICAgICAgICAgZm9yIChpbnQgaSA9
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyBpLS07KSB7CiAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgYXJndW1lbnQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCShyZXZpc2lvbiAxNzQw
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAg
ICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRvcigp
KEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9zZXQuYWRkKGhlYXAp
OwogICAgIH0KQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHZvaWQgb3BlcmF0b3Io
KShBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKICAgICB7CiAgICAgICAgIG1fcmVzdWx0IHw9IG1f
c2V0Lm92ZXJsYXBzKGhlYXApOwogICAgIH0KQEAgLTEwNSw3ICsxMDUsNyBAQCBwdWJsaWM6CiAg
ICAgCiBwcml2YXRlOgogICAgIGNvbnN0IENsb2JiZXJTZXQmIG1fc2V0OwotICAgIGJvb2wgbV9y
ZXN1bHQ7CisgICAgbXV0YWJsZSBib29sIG1fcmVzdWx0OwogfTsKIAogdm9pZCBhZGRSZWFkcyhH
cmFwaCYsIE5vZGUqLCBDbG9iYmVyU2V0Jik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci0gLyoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzcsNyArMzcsNyBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3Rv
ciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9yPgotdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRl
RnVuY3RvciYgd3JpdGUsIERlZkZ1bmN0b3ImIGRlZikKK3ZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
bmN0b3ImIHdyaXRlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCiB7CiAgICAgLy8gU29tZSBub3Rl
czoKICAgICAvLwpAQCAtODk5LDcgKzg5OSw3IEBAIGNsYXNzIE5vT3BDbG9iYmVyaXplIHsKIHB1
YmxpYzoKICAgICBOb09wQ2xvYmJlcml6ZSgpIHsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IFQ+Ci0gICAgdm9pZCBvcGVyYXRvcigpKFQuLi4pIHsgfQorICAgIHZvaWQgb3BlcmF0b3IoKShU
Li4uKSBjb25zdCB7IH0KIH07CiAKIGNsYXNzIENoZWNrQ2xvYmJlcml6ZSB7CkBAIC05MTAsMTIg
KzkxMCwxMiBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IFQ+Ci0gICAgdm9pZCBvcGVyYXRvcigpKFQuLi4pIHsgbV9yZXN1bHQgPSB0cnVlOyB9CisgICAg
dm9pZCBvcGVyYXRvcigpKFQuLi4pIGNvbnN0IHsgbV9yZXN1bHQgPSB0cnVlOyB9CiAgICAgCiAg
ICAgYm9vbCByZXN1bHQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3VsdDsgfQogICAgIAogcHJpdmF0
ZToKLSAgICBib29sIG1fcmVzdWx0OworICAgIG11dGFibGUgYm9vbCBtX3Jlc3VsdDsKIH07CiAK
IGJvb2wgZG9lc1dyaXRlcyhHcmFwaCYsIE5vZGUqKTsKQEAgLTkyOCw3ICs5MjgsNyBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFw
IG90aGVySGVhcCkKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIG90aGVySGVhcCkg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX3Jlc3VsdCkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTkzOSw3ICs5MzksNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgQWJzdHJhY3RIZWFw
IG1faGVhcDsKLSAgICBib29sIG1fcmVzdWx0OworICAgIG11dGFibGUgYm9vbCBtX3Jlc3VsdDsK
IH07CiAKIGJvb2wgYWNjZXNzZXNPdmVybGFwKEdyYXBoJiwgTm9kZSosIEFic3RyYWN0SGVhcCk7
CkBAIC05NTYsNyArOTU2LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0
cmFjdEhlYXAgaGVhcCkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUucmVhZChoZWFwKTsK
ICAgICB9CkBAIC05NzIsNyArOTcyLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHZvaWQgb3BlcmF0b3Io
KShBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUud3JpdGUo
aGVhcCk7CiAgICAgfQpAQCAtOTg4LDEyICs5ODgsMTIgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBvcGVyYXRvcigpKFB1cmVWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIG9w
ZXJhdG9yKCkoUHVyZVZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5k
ZWYodmFsdWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG9wZXJhdG9yKCkoSGVhcExvY2F0aW9u
IGxvY2F0aW9uLCBOb2RlKiBub2RlKQorICAgIHZvaWQgb3BlcmF0b3IoKShIZWFwTG9jYXRpb24g
bG9jYXRpb24sIE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgewogICAgICAgICBtX3ZhbHVlLmRlZihs
b2NhdGlvbiwgbm9kZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NyaXRpY2FsRWRnZUJy
ZWFraW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIGRvbid0IGtub3cgaXRzIGV4ZWN1dGlvbiBmcmVxdWVuY3kuCiAgICAgICAg
IEJhc2ljQmxvY2sqIHBhZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZSgqc3VjY2Vzc29y
LCBQTmFOKTsKICAgICAgICAgcGFkLT5hcHBlbmROb2RlKAotICAgICAgICAgICAgbV9ncmFwaCwg
U3BlY05vbmUsIEp1bXAsICgqc3VjY2Vzc29yKS0+YXQoMCktPm9yaWdpbiwgT3BJbmZvKCpzdWNj
ZXNzb3IpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCAoKnN1Y2Nlc3Nv
ciktPmZpcnN0T3JpZ2luKCksIE9wSW5mbygqc3VjY2Vzc29yKSk7CiAgICAgICAgIHBhZC0+cHJl
ZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CiAgICAgICAgICgqc3VjY2Vzc29yKS0+cmVw
bGFjZVByZWRlY2Vzc29yKHByZWRlY2Vzc29yLCBwYWQpOwogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE3NDAzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE4LDYgKzExOCwxNyBAQCBpbmxpbmUgRGF0YUZvcm1hdCBkYXRhRm9ybWF0Rm9y
KEZsdXNoRm9yCiAgICAgcmV0dXJuIERhdGFGb3JtYXREZWFkOwogfQogCitpbmxpbmUgRmx1c2hG
b3JtYXQgbWVyZ2UoRmx1c2hGb3JtYXQgYSwgRmx1c2hGb3JtYXQgYikKK3sKKyAgICBpZiAoYSA9
PSBEZWFkRmx1c2gpCisgICAgICAgIHJldHVybiBiOworICAgIGlmIChiID09IERlYWRGbHVzaCkK
KyAgICAgICAgcmV0dXJuIGE7CisgICAgaWYgKGEgPT0gYikKKyAgICAgICAgcmV0dXJuIGE7Cisg
ICAgcmV0dXJuIENvbmZsaWN0aW5nRmx1c2g7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDYgKzc1LDExIEBAIEdyYXBoOjpHcmFw
aChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXYKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX211c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX211c3RIYW5kbGVW
YWx1ZXNbaV0gPSBmcmVlemVGcmFnaWxlKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgaS0tOykgewor
ICAgICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwoaSkpKQorICAgICAgICAgICAgbV9vdXRlcm1vc3RDYXB0dXJlZFZhcnMuc2V0KGkpOworICAg
IH0KIH0KIAogR3JhcGg6On5HcmFwaCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw2ICszNjcsMTMgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgIH0KICAgICAKKyAgICBjb25zdCBC
aXRWZWN0b3ImIGNhcHR1cmVkVmFyc0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSkKKyAgICB7CisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0
dXJuIG1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzOworICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZy
YW1lLT5jYXB0dXJlZFZhcnM7CisgICAgfQorICAgIAogICAgIGJvb2wgaXNTdHJpY3RNb2RlRm9y
KENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpCkBAIC04ODgsNiArODk1LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IG1fcGFyYW1ldGVyU2xvdHM7CiAgICAgaW50IG1fbWFjaGluZUNhcHR1cmVTdGFydDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2xvd0FyZ3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsKKyAgICBCaXRW
ZWN0b3IgbV9vdXRlcm1vc3RDYXB0dXJlZFZhcnM7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQ2NF90LCBkb3VibGUqPiBtX2RvdWJsZUNvbnN0YW50
c01hcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNy
ZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBCYXNpY0Jsb2NrKiBjcmVhdGVQcmVI
ZWFkZXIoR3JhcGgmIGdyYXBoCiAgICAgLy8gRG9uJ3QgYm90aGVyIHRvIHByZXNlcnZlIGV4ZWN1
dGlvbiBmcmVxdWVuY2llcyBmb3Igbm93LgogICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciA9IGlu
c2VydGlvblNldC5pbnNlcnRCZWZvcmUoYmxvY2ssIFBOYU4pOwogICAgIHByZUhlYWRlci0+YXBw
ZW5kTm9kZSgKLSAgICAgICAgZ3JhcGgsIFNwZWNOb25lLCBKdW1wLCBibG9jay0+YXQoMCktPm9y
aWdpbiwgT3BJbmZvKGJsb2NrKSk7CisgICAgICAgIGdyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYmxv
Y2stPmZpcnN0T3JpZ2luKCksIE9wSW5mbyhibG9jaykpOwogICAgIAogICAgIGZvciAodW5zaWdu
ZWQgcHJlZGVjZXNzb3JJbmRleCA9IDA7IHByZWRlY2Vzc29ySW5kZXggPCBibG9jay0+cHJlZGVj
ZXNzb3JzLnNpemUoKTsgcHJlZGVjZXNzb3JJbmRleCsrKSB7CiAgICAgICAgIEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yID0gYmxvY2stPnByZWRlY2Vzc29yc1twcmVkZWNlc3NvckluZGV4XTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCShyZXZpc2lvbiAx
NzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAkod29y
a2luZyBjb3B5KQpAQCAtNDksNiArNDksNyBAQCBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgCiAg
ICAgYm9vbCBpc1NldCgpIGNvbnN0CiAgICAgeworICAgICAgICBBU1NFUlQoc2VtYW50aWMuaXNT
ZXQoKSA9PSBmb3JFeGl0LmlzU2V0KCkpOwogICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNTZXQo
KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJ
KHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlICJERkdSZXN1cnJl
Y3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhh
c2UuaCIKICNpbmNsdWRlICJERkdTU0FMb3dlcmluZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHU2V0
TG9jYWxTaW5raW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdTdGFja0xheW91dFBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCIKICNpbmNs
dWRlICJERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCIKQEAgLTMyMiw2ICszMjMsNyBAQCBQ
bGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1D
UFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwog
ICAgICAgICBwZXJmb3JtU1NBTG93ZXJpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybVNldExvY2Fs
U2lua2luZyhkZmcpOwogICAgICAgICBwZXJmb3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAgIHBl
cmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKQEAg
LTMyOSw4ICszMzEsMTAgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRo
cgogICAgICAgICBwZXJmb3JtUGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNl
IHRoZSBncmFwaCBzaXplIGEgbG90LgogICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAg
IGNoYW5nZWQgfD0gcGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZyk7Ci0gICAgICAgIGNoYW5n
ZWQgfD0gcGVyZm9ybUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQg
fD0gcGVyZm9ybU9iamVjdEFsbG9jYXRpb25TaW5raW5nKGRmZyk7CisgICAgICAgIGlmIChPcHRp
b25zOjplbmFibGVPYmplY3RBbGxvY2F0aW9uU2lua2luZygpKSB7CisgICAgICAgICAgICBjaGFu
Z2VkIHw9IHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOworICAgICAgICAgICAgY2hh
bmdlZCB8PSBwZXJmb3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoZGZnKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQg
c3RhdGUtYXQtaGVhZCB3aWxsIGJlIGludmFsaWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlv
biBzaW5jZQogICAgICAgICAgICAgLy8gaXQgbWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaWZu
ZGVmIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemVfaAorI2RlZmluZSBERkdQcmVjaXNlTG9jYWxD
bG9iYmVyaXplX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJl
cml6ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1
bmN0b3I+CitjbGFzcyBQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvciB7CitwdWJsaWM6Cisg
ICAgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3IoCisgICAgICAgIEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwKKyAgICAgICAgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRl
RnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKKyAgICAgICAgOiBtX2dyYXBo
KGdyYXBoKQorICAgICAgICAsIG1fbm9kZShub2RlKQorICAgICAgICAsIG1fcmVhZChyZWFkKQor
ICAgICAgICAsIG1fd3JpdGUod3JpdGUpCisgICAgICAgICwgbV9kZWYoZGVmKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdm9pZCByZWFkKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHsKKyAgICAg
ICAgaWYgKGhlYXAua2luZCgpID09IFZhcmlhYmxlcykgeworICAgICAgICAgICAgaWYgKGhlYXAu
cGF5bG9hZCgpLmlzVG9wKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkVG9wKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGhlYXAucGF5bG9hZCgpLnZhbHVlKCkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhlYXAub3Zl
cmxhcHMoVmFyaWFibGVzKSkgeworICAgICAgICAgICAgcmVhZFRvcCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgd3JpdGUoQWJzdHJhY3RI
ZWFwIGhlYXApCisgICAgeworICAgICAgICBpZiAoaGVhcC5raW5kKCkgPT0gVmFyaWFibGVzKSB7
CisgICAgICAgICAgICBpZiAoaGVhcC5wYXlsb2FkKCkuaXNUb3AoKSkgeworICAgICAgICAgICAg
ICAgIHdyaXRlVG9wKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX3dyaXRlKFZpcnR1YWxSZWdpc3RlcihoZWFwLnBh
eWxvYWQoKS52YWx1ZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChoZWFwLm92ZXJsYXBzKFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAg
IHdyaXRlVG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBkZWYoUHVyZVZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gUHVyZVZhbHVlIGRl
ZnMgbmV2ZXIgaGF2ZSBhbnl0aGluZyB0byBkbyB3aXRoIGxvY2Fscywgc28gaWdub3JlIHRoaXMu
CisgICAgfQorICAgIAorICAgIHZvaWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIGlmIChsb2NhdGlvbi5raW5kKCkgIT0gVmFyaWFibGVMb2Mp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChs
b2NhdGlvbi5oZWFwKCkua2luZCgpID09IFZhcmlhYmxlcyk7CisgICAgICAgIAorICAgICAgICBt
X2RlZihWaXJ0dWFsUmVnaXN0ZXIobG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKSwg
bm9kZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHJlYWRUb3AoKQorICAgIHsK
KyAgICAgICAgLy8gQWxsIG9mIHRoZSBvdXRlcm1vc3QgYXJndW1lbnRzLCBleGNlcHQgdGhpcywg
YXJlIGRlZmluaXRlbHkgcmVhZC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5t
X2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKKyAgICAgICAgICAgIG1fcmVh
ZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBU
aGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7ICsraSkKKyAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFs
UmVnaXN0ZXIoaSkpOworICAgICAgICAKKyAgICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGNhcHR1
cmVkIHZhcmlhYmxlcy4KKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQor
ICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRW
YXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3Vt
ZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFkZXJzIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVy
ZS4KKyAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxp
bmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnNpemUoKTsgaS0tID4gMTspCisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3Rl
cihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xv
c3VyZUNhbGwpIHsKKyAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAg
ICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCB3cml0ZVRvcCgpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5t
X2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50cygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQorICAg
ICAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAg
ICAgICB9CisKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAg
ICAgICAgbV9ncmFwaC5jYXB0dXJlZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNl
dEJpdHMoKSkKKyAgICAgICAgICAgIG1fd3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkp
OworICAgIH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBOb2RlKiBtX25vZGU7Cisg
ICAgY29uc3QgUmVhZEZ1bmN0b3ImIG1fcmVhZDsKKyAgICBjb25zdCBXcml0ZUZ1bmN0b3ImIG1f
d3JpdGU7CisgICAgY29uc3QgRGVmRnVuY3RvciYgbV9kZWY7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5j
dG9yPgordm9pZCBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAorICAgIEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwKKyAgICBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdW5jdG9y
JiB3cml0ZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQoreworICAgIFByZWNpc2VMb2NhbENsb2Ji
ZXJpemVBZGFwdG9yPFJlYWRGdW5jdG9yLCBXcml0ZUZ1bmN0b3IsIERlZkZ1bmN0b3I+CisgICAg
ICAgIGFkYXB0b3IoZ3JhcGgsIG5vZGUsIHJlYWQsIHdyaXRlLCBkZWYpOworICAgIGNsb2JiZXJp
emUoZ3JhcGgsIG5vZGUsIGFkYXB0b3IpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNh
bGN1bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNhbGN1bGF0b3IuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBA
QCBwdWJsaWM6CiAgICAgLy8gbm9uTG9jYWxSZWFjaGluZ0RlZigpIHdpbGwgZmluZCBpdCBsYXRl
ci4gTm90ZSB0aGF0IGl0IGlzIGdlbmVyYWxseSBhbHdheXMgc291bmQgdG8gbm90CiAgICAgLy8g
cHJ1bmUgYW55IFBoaXMgKHRoYXQgaXMsIHRvIGFsd2F5cyBoYXZlIHRoZSBmdW5jdG9yIGluc2Vy
dCBhIFBoaSBhbmQgbmV2ZXIgcmV0dXJuIG51bGxwdHIpLgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFBoaUluc2VydGlvbkZ1bmN0b3I+Ci0gICAgdm9pZCBjb21wdXRlUGhpcyhQaGlJbnNlcnRpb25G
dW5jdG9yIGZ1bmN0b3IpCisgICAgdm9pZCBjb21wdXRlUGhpcyhjb25zdCBQaGlJbnNlcnRpb25G
dW5jdG9yJiBmdW5jdG9yKQogICAgIHsKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxs
cHRyLCBtX2dyYXBoLm1fZG9taW5hdG9ycy5pc1ZhbGlkKCkpOwogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTZXRM
b2NhbFNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR1NldExvY2FsU2lua2luZ1BoYXNlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZH
UGhhc2UuaCIKKyNpbmNsdWRlICJERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgiCisjaW5jbHVk
ZSAiREZHU1NBQ2FsY3VsYXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9
IHRydWU7CisKK2NsYXNzIFZhcmlhYmxlRGVmZXJyYWwgeworcHVibGljOgorICAgIFZhcmlhYmxl
RGVmZXJyYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG51bGxwdHIpCisgICAgICAg
IDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YXJpYWJsZURlZmVycmFsIGNvbmZsaWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBWYXJpYWJs
ZURlZmVycmFsKGNvbmZsaWN0TWFya2VyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhYmxlOyB9CisgICAgCisgICAgYm9vbCBoYXNW
YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgIWlzQ29uZmxpY3QoKTsgfQorICAg
IAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc1ZhcmlhYmxlKCkpOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc0NvbmZsaWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZhcmlhYmxlID09IGNvbmZsaWN0TWFya2VyKCk7CisgICAgfQorICAgIAorICAgIFZh
cmlhYmxlRGVmZXJyYWwgbWVyZ2UoVmFyaWFibGVEZWZlcnJhbCBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICgqdGhpcyA9PSBvdGhlciB8fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7
CisgICAgICAgIHJldHVybiBjb25mbGljdCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPT0oVmFyaWFibGVEZWZlcnJhbCBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGU7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoISp0aGlzKQor
ICAgICAgICAgICAgb3V0LnByaW50KCItIik7CisgICAgICAgIGVsc2UgaWYgKGlzQ29uZmxpY3Qo
KSkKKyAgICAgICAgICAgIG91dC5wcmludCgiQ29uZmxpY3QiKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIobV92YXJpYWJsZSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoY29uc3QgUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqKSBjb25zdAorICAgIHsKKyAgICAgICAgZHVtcChvdXQpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIFZhcmlhYmxlQWNjZXNzRGF0YSogY29uZmxpY3RNYXJrZXIoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4oMSkpOworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIG1fdmFyaWFibGU7Cit9OworCitjbGFzcyBTZXRMb2NhbFNpbmtpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CitwdWJsaWM6CisgICAgU2V0TG9jYWxTaW5raW5nUGhhc2UoR3JhcGgmIGdyYXBo
KQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAiU2V0TG9jYWwgc2lua2luZyIpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICAvLyBGSVhNRTogT25lIG9m
IHRoZSBwcm9ibGVtcyBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgaXQgd2lsbCBjcmVhdGUgYSBk
dXBsaWNhdGUgUGhpIGdyYXBoCisgICAgICAgIC8vIGZvciBzdW5rZW4gU2V0TG9jYWxzIGluIHRo
ZSBwcmVzZW5jZSBvZiBpbnRlcmVzdGluZyBjb250cm9sIGZsb3cgbWVyZ2VzLCBhbmQgd2hlcmUg
dGhlCisgICAgICAgIC8vIHZhbHVlIGJlaW5nIFNldExvY2FsJ2QgaXMgYWxzbyBvdGhlcndpc2Ug
bGl2ZSBpbiB0aGUgREZHIGNvZGUuIFdlIGNvdWxkIHdvcmsgYXJvdW5kIHRoaXMKKyAgICAgICAg
Ly8gYnkgZG9pbmcgdGhlIHNpbmtpbmcgb3ZlciBDUFMsIG9yIG1heWJlIGp1c3QgYnkgZG9pbmcg
cmVhbGx5IHNtYXJ0IGhvaXN0aW5nLiBJdCdzIGFsc28KKyAgICAgICAgLy8gcG9zc2libGUgdGhh
dCB0aGUgZHVwbGljYXRlIFBoaSBncmFwaCBjYW4gYmUgZGVkdXBsaWNhdGVkIGJ5IExMVk0uIEl0
IHdvdWxkIGJlIGJlc3QgaWYgd2UKKyAgICAgICAgLy8gY291bGQgb2JzZXJ2ZSB0aGF0IHRoZXJl
IGlzIGFscmVhZHkgYSBQaGkgZ3JhcGggaW4gcGxhY2UgdGhhdCBkb2VzIHdoYXQgd2Ugd2FudC4g
SW4KKyAgICAgICAgLy8gcHJpbmNpcGxlIGlmIHdlIGhhdmUgYSByZXF1ZXN0IHRvIHBsYWNlIGEg
UGhpIGF0IGEgcGFydGljdWxhciBwbGFjZSwgd2UgY291bGQganVzdCBjaGVjaworICAgICAgICAv
LyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgUGhpIHRoYXQgZG9lcyB3aGF0IHdlIHdhbnQuIEJlY2F1
c2UgU2V0TG9jYWxTaW5raW5nUGhhc2UgcnVucyBqdXN0CisgICAgICAgIC8vIGFmdGVyIFNTQSBj
b252ZXJzaW9uLCB3ZSBoYXZlIGFsbW9zdCBhIGd1YXJhbnRlZSB0aGF0IHRoZSBQaGkgZ3JhcGgg
d2UgcHJvZHVjZSBoZXJlIHdvdWxkCisgICAgICAgIC8vIGJlIHRyaXZpYWxseSByZWR1bmRhbnQg
dG8gdGhlIG9uZSB3ZSBhbHJlYWR5IGhhdmUuCisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9z
ZSkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFNldExvY2FsIHNpbmtpbmc6
XG4iKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBTU0FDYWxjdWxhdG9yIHNzYUNhbGN1bGF0b3IobV9ncmFwaCk7CisgICAgICAgIElu
c2VydGlvblNldCBpbnNlcnRpb25TZXQobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICAvLyBO
ZXh0IGlkZW50aWZ5IHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gc2luayBTZXRMb2NhbHMgdG8uIFdl
IHNheSB0aGF0IHRoZXJlIGlzIGEgZGVmZXJyZWQKKyAgICAgICAgLy8gZmx1c2ggaWYgd2UgaGFk
IGEgU2V0TG9jYWwgd2l0aCBhIGdpdmVuIFZhcmlhYmxlQWNjZXNzRGF0YSogYnV0IGl0IGhhc24n
dCBiZWVuCisgICAgICAgIC8vIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIEJsb2NrTWFwPE9w
ZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+PiBkZWZlcnJlZEF0SGVhZChtX2dyYXBoKTsKKyAgICAg
ICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4+IGRlZmVycmVkQXRUYWlsKG1f
Z3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRb
YmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPihPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgZGVmZXJyZWRB
dFRhaWxbYmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVycmFs
PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURl
ZmVycmFsPiBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKKworICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIHdpbGwgbWF0ZXJpYWxpemUganVzdCBiZWZvcmUgYW55IHJlYWRzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVm
ZXJyYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBlc2NhcGVIYW5kbGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9k
ZSogc291cmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBu
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2Fk
LiBJZ25vcmUgaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9
IFZhcmlhYmxlRGVmZXJyYWwobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9IGRlZmVycmVkOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyByIiwgZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkp
LCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29y
KSwgIjogIik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nl
c3Nvcl1baV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1
Y2Nlc3Nvcl1baV0ubWVyZ2UoZGVmZXJyZWRbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7
CisgICAgICAgIAorICAgICAgICAvLyBXZSB3aXNoIHRvIGluc2VydCBTZXRMb2NhbHMgYXQgYWxs
IG9mIHRoZSBtYXRlcmlhbGl6YXRpb24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAorICAgICAg
ICAvLyBpbXBsaWNpdGx5IGFzIHRoZSBwbGFjZXMgd2hlcmUgd2Ugc2V0IGRlZmVycmVkIHRvIERl
YWQgd2hpbGUgaXQgd2FzIHByZXZpb3VzbHkgbm90IERlYWQuCisgICAgICAgIC8vIFRvIGRvIHRo
aXMsIHdlIG1heSBuZWVkIHRvIGJ1aWxkIHNvbWUgUGhpIGZ1bmN0aW9ucyB0byBoYW5kbGUgc3R1
ZmYgbGlrZSB0aGlzOgorICAgICAgICAvLworICAgICAgICAvLyBCZWZvcmU6CisgICAgICAgIC8v
CisgICAgICAgIC8vICAgICBpZiAocCkKKyAgICAgICAgLy8gICAgICAgICBTZXRMb2NhbChyNDIs
IEB4KQorICAgICAgICAvLyAgICAgZWxzZQorICAgICAgICAvLyAgICAgICAgIFNldExvY2FsKHI0
MiwgQHkpCisgICAgICAgIC8vCisgICAgICAgIC8vIEFmdGVyOgorICAgICAgICAvLworICAgICAg
ICAvLyAgICAgaWYgKHApCisgICAgICAgIC8vICAgICAgICAgVXBzaWxvbihAeCwgXnopCisgICAg
ICAgIC8vICAgICBlbHNlCisgICAgICAgIC8vICAgICAgICAgVXBzaWxvbihAeSwgXnopCisgICAg
ICAgIC8vICAgICB6OiBQaGkoKQorICAgICAgICAvLyAgICAgU2V0TG9jYWwocjQyLCBAeikKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgYW4gU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUgZm9yIGVhY2ggbG9jYWwsIGFuZCBhIERlZiBpcyBhbnkKKyAgICAgICAg
Ly8gU2V0TG9jYWwgaW4gdGhlIG9yaWdpbmFsIHByb2dyYW0uIFRoZSBvcmlnaW5hbCBTZXRMb2Nh
bHMgd2lsbCBzaW1wbHkgdmFuaXNoLgorICAgICAgICAKKyAgICAgICAgT3BlcmFuZHM8U1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKKyAgICAgICAgICAgIE9wZXJh
bmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgVmVj
dG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdW
YXJpYWJsZSgpOworICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5k
KSA9IHZhcmlhYmxlOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9
PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQo
b3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxOb2RlKj4gc2V0
TG9jYWxzVG9TaW5rOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZm9yIChOb2Rl
KiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gU2V0
TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIHNldExvY2Fsc1RvU2luay5hcHBlbmQobm9kZSk7CisgICAgICAgICAg
ICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRU
b1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSksIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzc2FD
YWxjdWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAg
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJs
ZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRG8gcHJ1
bmluZyBiYXNlZCBvbiBieXRlY29kZSBsaXZlbmVzcy4gVGhpcyBzdWJzdW1lcyB0aGUgdHdvIG5v
dGlvbnMgb2YgbGl2ZW5lc3MKKyAgICAgICAgICAgICAgICAvLyB0aGF0IGFyZSByZWxldmFudCBo
ZXJlOgorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gLSBXZSB3YW50IHRv
IGluc2VydCBhIFBoaSBpZiB0aGVyZSdzIGEgY2hhbmNlIHRoYXQgc29tZW9uZSB3b3VsZCBtYXRl
cmlhbGl6ZSB0aGUKKyAgICAgICAgICAgICAgICAvLyAgIFNldExvY2FsIGF0IHNvbWUgcG9pbnQg
aW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIC0g
V2Ugd2FudCB0byBpbnNlcnQgYSBQaGkgYW5kIGEgTW92SGludCBpZiB0aGUgdmFyaWFibGUgaXMg
bGl2ZSBmb3IgT1NSIGV4aXQuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv
LyBCYXNpY2FsbHksIHRoZSBsYXR0ZXIgZm9ybSBvZiBsaXZlbmVzcyAtICJsaXZlIGluIGJ5dGVj
b2RlIiAtIHN1YnN1bWVzIHRoZSBmb3JtZXIuCisgICAgICAgICAgICAgICAgaWYgKCFtX2dyYXBo
LmlzTGl2ZUluQnl0ZWNvZGUob3BlcmFuZCwgYmxvY2stPmZpcnN0T3JpZ2luKCkuZm9yRXhpdCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJBZGRpbmcgUGhpIGZvciByIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayks
ICJcbiIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUg
PSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgTm9kZU9yaWdpbigpKTsKKyAgICAg
ICAgICAgICAgICBWYXJpYWJsZURlZmVycmFsIHZhcmlhYmxlRGVmZXJyYWwgPSBkZWZlcnJlZEF0
SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAvLyBJZiBpdCdz
IGxpdmUgaW4gYnl0ZWNvZGUgdGhlbiB3ZSBtdXN0IGhhdmUgYSB2YWxpZCBkZWZlcnJhbC4KKyAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIHZhcmlhYmxlRGVmZXJy
YWwuaGFzVmFyaWFibGUoKSk7CisgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0g
dmFyaWFibGVEZWZlcnJhbC52YXJpYWJsZSgpLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAgICAg
ICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0Rm9yKGZvcm1hdCkpOworICAgICAgICAgICAg
ICAgIHJldHVybiBwaGlOb2RlOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBP
cGVyYW5kczxOb2RlKj4gbWFwcGluZyhPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZCk7CisgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+IGRlZmVy
cmVkOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBtYXBwaW5nLmZpbGwobnVsbHB0cik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXBwaW5nLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1hcHBpbmcub3Bl
cmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5k
KG9wZXJhbmQpOworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3Nh
Q2FsY3VsYXRvci5yZWFjaGluZ0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAgICAgICAg
ICAgICAgIGlmICghZGVmKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBkZWYt
PnZhbHVlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
U1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhi
bG9jaykpIHsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4
VG9PcGVyYW5kW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgwLCBwaGlEZWYtPnZhbHVlKCkp
OworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAwLCBTcGVjTm9uZSwgTW92SGludCwgTm9kZU9yaWdpbigpLCBPcEluZm8ob3BlcmFu
ZC5vZmZzZXQoKSksCisgICAgICAgICAgICAgICAgICAgIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVs
dEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVy
YW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJc
biIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09
IFNldExvY2FsKSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwodmFy
aWFibGUpOworICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIGVz
Y2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
IWRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNv
bWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBTZXRMb2NhbC4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KCJJbnNlcnRpbmcgYSBTZXRMb2NhbCBmb3IgciIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJh
bCA9IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbm9kZSwgdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFNldExvY2Fs
LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGVE
ZWZlcnJhbC52YXJpYWJsZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoaW5jb21p
bmcsIHVzZUtpbmRGb3IodmFyaWFibGVBY2Nlc3NEYXRhLT5mbHVzaEZvcm1hdCgpKSkpOworICAg
ICAgICAgICAgICAgICAgICAvLyBNYW4sIHRoaXMgaXMgYXdmdWwuIFdlIHNob3VsZG4ndCBoYXZl
IHRvIGRvIHRoaXMuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNDIKKyAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWwt
Pm1lcmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByZWNp
c2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVz
Y2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoVmly
dHVhbFJlZ2lzdGVyLCBOb2RlKikgeyB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2l6ZV90IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkg
LSAxOworICAgICAgICAgICAgTm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3Qo
KS0+b3JpZ2luOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6
IGJsb2NrLT5zdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0
b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxv
Y2spKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVl
KCk7CisgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJs
ZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJhbCA9CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10ub3BlcmFuZChv
cGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCB2YXJpYWJsZURlZmVycmFsLmhhc1ZhcmlhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBG
bHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZsdXNoRm9y
bWF0KCk7CisgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3Io
Zm9ybWF0KTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9w
ZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwc2ls
b25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCisgICAg
ICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoaW5jb21pbmcsIHVzZUtp
bmQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRmluYWxseSBlbGltaW5hdGUgdGhlIHN1bmtlbiBTZXRMb2NhbHMgYnkg
dHVybmluZyB0aGVtIGludG8gUGhhbnRvbXMuIFRoaXMga2VlcHMgd2hhdGV2ZXIKKyAgICAgICAg
Ly8gdHlwZSBjaGVjayB0aGV5IHdlcmUgZG9pbmcuCisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
IHNldExvY2Fsc1RvU2luaykKKyAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
KyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJH
cmFwaCBhZnRlciBTZXRMb2NhbCBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1
bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisgICAgCitib29sIHBlcmZvcm1TZXRMb2Nh
bFNpbmtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVn
aW9uKCJERkcgU2V0TG9jYWwgU2lua2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxT
ZXRMb2NhbFNpbmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2V0TG9jYWxTaW5raW5nUGhhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisgLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1NldExvY2FsU2lua2luZ1BoYXNl
X2gKKyNkZWZpbmUgREZHU2V0TG9jYWxTaW5raW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisK
Ky8vIFNpbmtzIFNldExvY2FscyB0byB0aGUgYWJzb2x1dGUgbGF0ZXN0IHBvaW50IHdoZXJlIHRo
ZXkgY2FuIHBvc3NpYmx5IGhhcHBlbiwgd2hpY2ggaXMgdXN1YWxseQorLy8gc2lkZS1lZmZlY3Rz
IHRoYXQgbWF5IG9ic2VydmUgdGhlbS4gVGhpcyBlbGltaW5hdGVzIFNldExvY2FscyBpZiBpdCBz
aW5rcyB0aGVtIHBhc3QgdGhlIHBvaW50IG9mCisvLyB0aGVpciBkZWF0aHMuCisKK2Jvb2wgcGVy
Zm9ybVNldExvY2FsU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1NldExvY2FsU2lu
a2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAg
ICB9IHdoaWxlICgwKQogCiAgICAgI2RlZmluZSBub3RTZXQgKHN0YXRpY19jYXN0PHNpemVfdD4o
LTEpKQotCisgICAgICAgIAogICAgIHZvaWQgdmFsaWRhdGUoKQogICAgIHsKICAgICAgICAgLy8g
TkIuIFRoaXMgY29kZSBpcyBub3Qgd3JpdHRlbiBmb3IgcGVyZm9ybWFuY2UsIHNpbmNlIGl0IGlz
IG5vdCBpbnRlbmRlZCB0byBydW4KQEAgLTIxMyw2ICsyMTMsOSBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgY2FzZSBJZGVudGl0eToKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGUpLCBjYW5vbmljYWxSZXN1bHRSZXByZXNlbnRhdGlvbihub2RlLT5yZXN1bHQoKSkgPT0gY2Fu
b25pY2FsUmVzdWx0UmVwcmVzZW50YXRpb24obm9kZS0+Y2hpbGQxKCktPnJlc3VsdCgpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISFub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTWFrZVJv
cGU6CiAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgICAgICAgICBjYXNl
IEFyaXRoQWRkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
cmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNiArMTc2LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFy
KiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBlbmFibGVDYWxsRWRnZVByb2ZpbGluZywgdHJ1
ZSkgXAogICAgIHYodW5zaWduZWQsIGZyZXF1ZW50Q2FsbFRocmVzaG9sZCwgMikgXAogICAgIHYo
Ym9vbCwgb3B0aW1pemVOYXRpdmVDYWxscywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGVuYWJsZU9i
amVjdEFsbG9jYXRpb25TaW5raW5nLCB0cnVlKSBcCiAgICAgXAogICAgIHYoYm9vbCwgZW5hYmxl
Q29uY3VycmVudEpJVCwgdHJ1ZSkgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mREZHQ29tcGls
ZXJUaHJlYWRzLCBjb21wdXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDIsIDIpIC0gMSkgXApJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE3NDA0NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMDktMjggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBGVEwgc2hvdWxkIHNpbmsgU2V0TG9jYWxzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1ha2UgdGhlIHNl
dCBiaXRzIG9mIGEgQml0VmVjdG9yIGl0ZXJhYmxlLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rv
ci5oOgorICAgICAgICAoV1RGOjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6U2V0Qml0c0l0
ZXJhYmxlKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJh
dG9yOjppdGVyYXRvcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxl
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRz
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAg
ICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKFdU
Rjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6OmVuZCk6CisgICAgICAgIChXVEY6OkJpdFZl
Y3Rvcjo6c2V0Qml0cyk6CisKIDIwMTQtMDktMjYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBSZXBsYWNlIE9TT2JqZWN0UHRyIHdpdGggUmV0YWluUHRyL2Fkb3B0T1MK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9C
aXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw1OCBAQCBwdWJsaWM6IAog
ICAgICAgICByZXR1cm4gSW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKHZhbHVlKTsKICAgICB9CiAg
ICAgCisgICAgY2xhc3MgU2V0Qml0c0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNl
dEJpdHNJdGVyYWJsZShjb25zdCBCaXRWZWN0b3ImIGJpdFZlY3RvcikKKyAgICAgICAgICAgIDog
bV9iaXRWZWN0b3IoYml0VmVjdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRl
cmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9iaXRWZWN0b3IobnVsbHB0cikKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3Is
IHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fYml0VmVjdG9yKCZiaXRWZWN0b3Ip
CisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplX3Qgb3BlcmF0b3IqKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9
IG1fYml0VmVjdG9yLT5maW5kQml0KG1faW5kZXggKyAxLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBjb25zdCBCaXRWZWN0b3IqIG1fYml0VmVjdG9yOworICAgICAgICAg
ICAgc2l6ZV90IG1faW5kZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fYml0VmVjdG9yLCBtX2JpdFZlY3Rv
ci5maW5kQml0KDAsIHRydWUpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcihtX2JpdFZlY3RvciwgbV9iaXRWZWN0b3Iuc2l6ZSgpKTsgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBCaXRWZWN0b3ImIG1fYml0VmVjdG9yOwor
ICAgIH07CisgICAgCisgICAgU2V0Qml0c0l0ZXJhYmxlIHNldEJpdHMoKSBjb25zdCB7IHJldHVy
biBTZXRCaXRzSXRlcmFibGUoKnRoaXMpOyB9CisgICAgCiBwcml2YXRlOgogICAgIHN0YXRpYyB1
bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxs
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxp
ZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbAor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9i
amVjdC10aGVuLWNhbGwuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlk
YWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRh
YmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgg
QEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQg
KiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGJh
cihwLCBvKSB7CisgICAgaWYgKHApCisgICAgICAgIHJldHVybiA1OworICAgIGVsc2UKKyAgICAg
ICAgcmV0dXJuIDY7Cit9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBp
fTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBiYXIoaSwgbyk7CisgICAg
ICAgIGJhcihpLCBwKTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBz
dW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238991</attachid>
            <date>2014-09-30 20:41:42 -0700</date>
            <delta_ts>2014-10-02 18:21:37 -0700</delta_ts>
            <desc>better</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76511</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MDQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE0LTA5LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIFNldExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICog
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0QWRkOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDbG9iYmVyU2V0T3ZlcmxhcHM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6
Y2xvYmJlcml6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9PcENsb2JiZXJpemU6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpERkc6OkNoZWNrQ2xvYmJlcml6ZTo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RIZWFwT3ZlcmxhcHM6Om9wZXJhdG9yKCkpOgorICAg
ICAgICAoSlNDOjpERkc6OlJlYWRNZXRob2RDbG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpXcml0ZU1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAg
ICAoSlNDOjpERkc6OkRlZk1ldGhvZENsb2JiZXJpemU6Om9wZXJhdG9yKCkpOgorICAgICAgICAq
IGRmZy9ERkdGbHVzaEZvcm1hdC5oOgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNh
cHR1cmVkVmFyc0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VM
b2NhbENsb2JiZXJpemVBZGFwdG9yOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWQpOgor
ICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3cml0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OmRlZik6
CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OnJlYWRU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjp3
cml0ZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NTQUNhbGN1bGF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FD
YWxjdWxhdG9yOjpjb21wdXRlUGhpcyk6CisgICAgICAgICogZGZnL0RGR1NldExvY2FsU2lua2lu
Z1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U2V0TG9jYWxTaW5raW5nUGhh
c2U6OlNldExvY2FsU2lua2luZ1BoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNp
bmtpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpTZXRMb2NhbFNpbmtpbmdQaGFz
ZTo6bWF0ZXJpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1TZXRMb2NhbFNpbmtp
bmcpOgorICAgICAgICAqIGRmZy9ERkdTZXRMb2NhbFNpbmtpbmdQaGFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNC0wOS0yNiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgZnVuY3Rpb24uYXJndW1lbnRzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzQwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIwNyw2ICsyMDcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uY3BwCiAgICAgZGZnL0RGR1B1cmVWYWx1ZS5jcHAKKyAgICBkZmcvREZHUHV0TG9jYWxT
aW5raW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5jcHAKICAgICBkZmcvREZHU1NBQ2FsY3VsYXRvci5jcHAKICAgICBkZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
CShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NTMs
NiArNDUzLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR1B1cmVWYWx1ZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+CkBAIC0xMTA0
LDExICsxMTA1LDEzIEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhpQ2hp
bGRyZW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlUG9zdE51bWJlcmluZy5oIiAv
PgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1Byb21vdGVIZWFwQWNjZXNzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmgiIC8+CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NjIsNiArMTU2Miw5IEBACiAJCUM0OUZFNEFBMTlBQUM4M0UwMEY0MENFOSAv
KiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBpbiBSZXNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ5RkU0QTgxOUFBQzgzRTAwRjQw
Q0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5ICovOyB9Owog
CQlDNDlGRTRBQjE5QUFDODYxMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaGVh
ZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ5
RkU0QTcxOUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDNDlG
RTRBQzE5QUFDODYxMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
NDlGRTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVt
ZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMDAw
MzkwMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREMwMDAzOTgxOURC
QTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMDAwMzk2MTlEQkE3MDYwMDAyM0VC
MCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAgKi87IH07CisJCURDMDAwMzk5MTlEQkE3
MDYwMDAyM0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMwMDAzOTcxOURCQTcwNjAwMDIzRUIwIC8q
IERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGODBFNTU1Nzc1MDAz
MDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmNwcCAqLzsgfTsKIAkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEUzQTU3MERGOTI3
OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi87IH07CkBAIC0zMjIyLDYgKzMyMjUsOSBAQAogCQlDNDlG
RTRBODE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJhdGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBnZW5lcmF0ZV9w
cm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDIxMjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBE
YXRlQ29udmVyc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNv
bnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREMwMDAzOTAxOUQ4QkU2
RjAwMDIzRUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOyBwYXRoID0gZGZn
L0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJREMwMDAzOTYxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1B1dExvY2FsU2lua2lu
Z1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDMDAwMzk3MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQ
dXRMb2NhbFNpbmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR1B1dExvY2FsU2lua2luZ1Bo
YXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPcGFxdWVKU1N0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0QThG
NjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMTc4NjMzRjBEOUJFQzAwMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVh
ZGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbml0aWFsaXplVGhyZWFk
aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NzU1LDYgKzQ3NjEsNyBAQAog
CQkJCTBGMkI5Q0RGMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5oICovLAogCQkJ
CUE3OEE5NzcyMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCAqLywKIAkJCQlBNzhBOTc3
MzE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5oICovLAorCQkJCURDMDAwMzkwMTlEOEJFNkYw
MDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8sCiAJCQkJMEZCRTBGNkQx
NkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgKi8sCiAJ
CQkJMEZCRTBGNkUxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5oICovLAogCQkJCTBGRkZDOTUxMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAgKi8sCkBAIC00NzY2LDYgKzQ3NzMsOCBAQAogCQkJCTBGQUEzRTA4
MTlEMEMyQ0IwMEZBQzlFMiAvKiBERkdQcm9tb3RlSGVhcEFjY2Vzcy5oICovLAogCQkJCTBGQjE3
NjVFMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovLAogCQkJCTBGQjE3NjVG
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLywKKwkJCQlEQzAwMDM5NjE5REJB
NzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovLAorCQkJCURDMDAw
Mzk3MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oICovLAogCQkJ
CTg2RUM5REMxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCAqLywKIAkJCQkw
RjY2NkVDQTE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBo
YXNlLmNwcCAqLywKIAkJCQkwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggKi8sCkBAIC01NTg2LDYgKzU1OTUsNyBAQAogCQkJCTBG
RUEwQTA4MTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFQTBBMUQxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVh
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJREMwMDAzOTMxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTFGMTcwOEIw
MDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmls
aXRpZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNTg0NCw2ICs1ODU0LDcgQEAKIAkJCQlCQzE4QzQy
ODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDI5MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxQTI4RDRBODE3N0I3MUM4MDAwN0ZBM0MgLyogSlNTdHJpbmdSZWZQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQlEQzAwMDM5OTE5REJBNzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxT
aW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3
RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyQTBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGQjE3
QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAq
LywKQEAgLTY3MTksNiArNjczMCw3IEBACiAJCQkJQTdEODlDRjUxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
RkM5NTkxNEVGOTBBNjAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMkZDNzcyMTZFMTJGNzEwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlEQzAwMDM5ODE5REJBNzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxTaW5raW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkMwRjdDRDE3
QkJGQzVCMDA0NjRGRTQgLyogREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4NCw3ICszODQsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIHN5bWJvbFRhYmxl
KCktPmNhcHR1cmVFbmQoKTsKICAgICB9Ci0KKyAgICAKICAgICBib29sIGlzQ2FwdHVyZWQoVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQsIElubGluZUNhbGxGcmFtZSogPSAwKSBjb25zdDsKICAgICAK
ICAgICBpbnQgZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKGludCBt
YWNoaW5lQ2FwdHVyZVN0YXJ0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGVyYW5kcy5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3BlcmFuZHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDExICsyNTIsNyBAQCBw
dWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwg
MCk7Ci0gICAgfQorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICAK
IHByaXZhdGU6CiAgICAgVmVjdG9yPFQsIDg+IG1fYXJndW1lbnRzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkocmV2aXNpb24g
MTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0NywyMiBAQCB2b2lkIE9wZXJhbmRzPFQsIFRy
YWl0cz46OmR1bXBJbkNvbnRleHQoCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBUcmFpdHM+Cit2b2lkIE9wZXJhbmRzPFQsIFRyYWl0cz46OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKKyAgICBmb3Ig
KHNpemVfdCBhcmd1bWVudEluZGV4ID0gbnVtYmVyT2ZBcmd1bWVudHMoKTsgYXJndW1lbnRJbmRl
eC0tOykgeworICAgICAgICBpZiAoVHJhaXRzOjppc0VtcHR5Rm9yRHVtcChhcmd1bWVudChhcmd1
bWVudEluZGV4KSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiYXJnIiwgYXJndW1lbnRJbmRleCwgIjoiLCBhcmd1bWVudChhcmd1bWVudEluZGV4KSk7
CisgICAgfQorICAgIGZvciAoc2l6ZV90IGxvY2FsSW5kZXggPSAwOyBsb2NhbEluZGV4IDwgbnVt
YmVyT2ZMb2NhbHMoKTsgKytsb2NhbEluZGV4KSB7CisgICAgICAgIGlmIChUcmFpdHM6OmlzRW1w
dHlGb3JEdW1wKGxvY2FsKGxvY2FsSW5kZXgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJsb2MiLCBsb2NhbEluZGV4LCAiOiIsIGxvY2FsKGxvY2Fs
SW5kZXgpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gT3Bl
cmFuZHNJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WaXJ0
dWFsUmVnaXN0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTks
NiArNTksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gKG1f
dmlydHVhbFJlZ2lzdGVyICE9IHNfaW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBib29s
IGlzTG9jYWwoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNMb2NhbChtX3ZpcnR1YWxSZWdpc3Rl
cik7IH0KICAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBvcGVyYW5kSXNBcmd1
bWVudChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KKyAgICBib29sIGlzSGVhZGVyKCkgY29uc3QgeyBy
ZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgPj0gMCAmJiBtX3ZpcnR1YWxSZWdpc3RlciA8IEpTU3Rh
Y2s6OlRoaXNBcmd1bWVudDsgfQogICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmlydHVhbFJlZ2lzdGVyID49IHNfZmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7IH0KICAg
ICBpbnQgdG9Mb2NhbCgpIGNvbnN0IHsgQVNTRVJUKGlzTG9jYWwoKSk7IHJldHVybiBvcGVyYW5k
VG9Mb2NhbChtX3ZpcnR1YWxSZWdpc3Rlcik7IH0KICAgICBpbnQgdG9Bcmd1bWVudCgpIGNvbnN0
IHsgQVNTRVJUKGlzQXJndW1lbnQoKSk7IHJldHVybiBvcGVyYW5kVG9Bcmd1bWVudChtX3ZpcnR1
YWxSZWdpc3Rlcik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3NDAzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDcgKzE4Myw4IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
LSAgICBjYXNlIFNldExvY2FsOiB7CisgICAgY2FzZSBTZXRMb2NhbDoKKyAgICBjYXNlIFB1dExv
Y2FsOiB7CiAgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2RlLT5sb2NhbCgp
Lm9mZnNldCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CkBAIC0xOTUsNiArMTk2LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEtpbGxM
b2NhbDogeworICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYSBoaW50IHRlbGxpbmcgdXMgdGhhdCB0
aGUgT1NSIHN0YXRlIG9mIHRoZSBsb2NhbCBpcyBubyBsb25nZXIgaW5zaWRlIHRoZQorICAgICAg
ICAvLyBmbHVzaGVkIGRhdGEuCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAg
Y2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFy
Z3VtZW50cyBoYXMgYmVlbiBzZXQuCiAgICAgICAgIEFTU0VSVCghbV9zdGF0ZS5ibG9jaygpLT52
YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLT5sb2NhbCgpKS5pc0NsZWFyKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdmFpbGFiaWxpdHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCShyZXZpc2lvbiAxNzQw
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F2YWlsYWJpbGl0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MSw2ICs4MSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB3aXRo
Tm9kZSh1bmF2YWlsYWJsZU1hcmtlcigpKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRGbHVz
aChGbHVzaGVkQXQgZmx1c2hlZEF0KQorICAgIHsKKyAgICAgICAgbV9mbHVzaGVkQXQgPSBmbHVz
aGVkQXQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZShOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgbV9ub2RlID0gbm9kZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXROb2RlVW5h
dmFpbGFibGUoKQorICAgIHsKKyAgICAgICAgbV9ub2RlID0gdW5hdmFpbGFibGVNYXJrZXIoKTsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBub2RlSXNVbmRlY2lkZWQoKSBjb25zdCB7IHJldHVybiAh
bV9ub2RlOyB9CiAgICAgYm9vbCBub2RlSXNVbmF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bm9kZSA9PSB1bmF2YWlsYWJsZU1hcmtlcigpOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDYgKzg5LDE2IEBAIGJvb2wgQmFzaWNCbG9jazo6aXNJbkJsb2NrKE5vZGUqIG15Tm9k
ZSkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK05vZGVPcmlnaW4gQmFzaWNCbG9jazo6Zmlyc3RP
cmlnaW4oKQoreworICAgIGZvciAoTm9kZSogbm9kZSA6ICp0aGlzKSB7CisgICAgICAgIGlmIChu
b2RlLT5vcmlnaW4uaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBub2RlLT5vcmlnaW47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5vZGVP
cmlnaW4oKTsKK30KKwogdm9pZCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Js
b2NrKiBibG9jaykKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3Jz
LnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNs
dWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRG
R1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTkwLDYgKzkxLDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgIEJsb2NrTm9kZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gbV9ub2Rlcy5iZWdpbigpOyB9CiAgICAgQmxvY2tOb2RlTGlzdDo6aXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gbV9ub2Rlcy5lbmQoKTsgfQogICAgIAorICAgIE5vZGVPcmlnaW4gZmly
c3RPcmlnaW4oKTsKKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgeyByZXR1cm4g
bGFzdCgpLT5udW1TdWNjZXNzb3JzKCk7IH0KICAgICAKICAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vz
c29yKHVuc2lnbmVkIGluZGV4KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjkzLDEyICszNjkzLDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZQogICAgICAgICAKICAgICAgICAgaWYgKG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycyA9
IG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IGJ5dGVDb2RlUGFyc2Vy
LT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ5
dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSkpCi0gICAgICAgICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJl
ZFZhcnMuc2V0KGkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnMgPSBieXRlQ29kZVBhcnNl
ci0+bV9ncmFwaC5tX291dGVybW9zdENhcHR1cmVkVmFyczsKIAogICAgICAgICBmb3IgKGludCBp
ID0gYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7IGktLTspIHsKICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHJldmlzaW9uIDE3
NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlclNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3NldC5hZGQoaGVh
cCk7CiAgICAgfQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAK
LSAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXApCisgICAgdm9pZCBvcGVyYXRv
cigpKEFic3RyYWN0SGVhcCBoZWFwKSBjb25zdAogICAgIHsKICAgICAgICAgbV9yZXN1bHQgfD0g
bV9zZXQub3ZlcmxhcHMoaGVhcCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIHB1YmxpYzoK
ICAgICAKIHByaXZhdGU6CiAgICAgY29uc3QgQ2xvYmJlclNldCYgbV9zZXQ7Ci0gICAgYm9vbCBt
X3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiB2b2lkIGFkZFJlYWRz
KEdyYXBoJiwgTm9kZSosIENsb2JiZXJTZXQmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQg
QEAKLSAvKgorLyoKICAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNyw3ICszNyw3IEBACiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5j
dG9yLCB0eXBlbmFtZSBXcml0ZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci12b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVuY3RvciYgcmVhZCwgV3Jp
dGVGdW5jdG9yJiB3cml0ZSwgRGVmRnVuY3RvciYgZGVmKQordm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRl
RnVuY3RvciYgd3JpdGUsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBTb21lIG5v
dGVzOgogICAgIC8vCkBAIC0yNTIsNiArMjUyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2Ug
Wm9tYmllSGludDoKKyAgICBjYXNlIEtpbGxMb2NhbDoKICAgICBjYXNlIFVwc2lsb246CiAgICAg
Y2FzZSBQaGk6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CkBAIC0zOTUsNiArMzk2LDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZXR1cm47CiAg
ICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6CisgICAgY2FzZSBQdXRMb2NhbDoKICAgICAgICAg
d3JpdGUoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgbm9kZS0+bG9jYWwoKSkpOwogICAgICAgICBk
ZWYoSGVhcExvY2F0aW9uKFZhcmlhYmxlTG9jLCBBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2Rl
LT5sb2NhbCgpKSksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIHJldHVybjsKQEAg
LTg5OSw3ICs5MDEsNyBAQCBjbGFzcyBOb09wQ2xvYmJlcml6ZSB7CiBwdWJsaWM6CiAgICAgTm9P
cENsb2JiZXJpemUoKSB7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPgotICAgIHZvaWQg
b3BlcmF0b3IoKShULi4uKSB7IH0KKyAgICB2b2lkIG9wZXJhdG9yKCkoVC4uLikgY29uc3QgeyB9
CiB9OwogCiBjbGFzcyBDaGVja0Nsb2JiZXJpemUgewpAQCAtOTEwLDEyICs5MTIsMTIgQEAgcHVi
bGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPgotICAgIHZvaWQg
b3BlcmF0b3IoKShULi4uKSB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQorICAgIHZvaWQgb3BlcmF0b3Io
KShULi4uKSBjb25zdCB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQogICAgIAogICAgIGJvb2wgcmVzdWx0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KICAgICAKIHByaXZhdGU6Ci0gICAgYm9vbCBt
X3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiBib29sIGRvZXNXcml0
ZXMoR3JhcGgmLCBOb2RlKik7CkBAIC05MjgsNyArOTMwLDcgQEAgcHVibGljOgogICAgIHsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBvdGhlckhlYXApCisg
ICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBvdGhlckhlYXApIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAobV9yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm47CkBAIC05MzksNyArOTQx
LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEFic3RyYWN0SGVhcCBtX2hlYXA7Ci0gICAg
Ym9vbCBtX3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9OwogCiBib29sIGFj
Y2Vzc2VzT3ZlcmxhcChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdEhlYXApOwpAQCAtOTU2LDcgKzk1
OCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShB
YnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFwIGhlYXAp
IGNvbnN0CiAgICAgewogICAgICAgICBtX3ZhbHVlLnJlYWQoaGVhcCk7CiAgICAgfQpAQCAtOTcy
LDcgKzk3NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZvaWQgb3BlcmF0
b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RIZWFw
IGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3ZhbHVlLndyaXRlKGhlYXApOwogICAgIH0K
QEAgLTk4OCwxMiArOTkwLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZv
aWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUpCisgICAgdm9pZCBvcGVyYXRvcigpKFB1cmVW
YWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUuZGVmKHZhbHVlKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9k
ZSogbm9kZSkKKyAgICB2b2lkIG9wZXJhdG9yKCkoSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2Rl
KiBub2RlKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5kZWYobG9jYXRpb24sIG5vZGUp
OwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ3JpdGljYWxFZGdl
QnJlYWtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTc0MDMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBk
b24ndCBrbm93IGl0cyBleGVjdXRpb24gZnJlcXVlbmN5LgogICAgICAgICBCYXNpY0Jsb2NrKiBw
YWQgPSBtX2luc2VydGlvblNldC5pbnNlcnRCZWZvcmUoKnN1Y2Nlc3NvciwgUE5hTik7CiAgICAg
ICAgIHBhZC0+YXBwZW5kTm9kZSgKLSAgICAgICAgICAgIG1fZ3JhcGgsIFNwZWNOb25lLCBKdW1w
LCAoKnN1Y2Nlc3NvciktPmF0KDApLT5vcmlnaW4sIE9wSW5mbygqc3VjY2Vzc29yKSk7CisgICAg
ICAgICAgICBtX2dyYXBoLCBTcGVjTm9uZSwgSnVtcCwgKCpzdWNjZXNzb3IpLT5maXJzdE9yaWdp
bigpLCBPcEluZm8oKnN1Y2Nlc3NvcikpOwogICAgICAgICBwYWQtPnByZWRlY2Vzc29ycy5hcHBl
bmQocHJlZGVjZXNzb3IpOwogICAgICAgICAoKnN1Y2Nlc3NvciktPnJlcGxhY2VQcmVkZWNlc3Nv
cihwcmVkZWNlc3NvciwgcGFkKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMyw2ICsyMDMsOCBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRCeU9m
ZnNldEhpbnQ6CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICBjYXNlIFB1
dFN0cnVjdHVyZUhpbnQ6CisgICAgY2FzZSBQdXRMb2NhbDoKKyAgICBjYXNlIEtpbGxMb2NhbDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDE4LDYgKzEwMTgsOCBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhp
bnQ6CiAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUHV0
TG9jYWw6CisgICAgICAgIGNhc2UgS2lsbExvY2FsOgogICAgICAgICAgICAgLy8gVGhlc2UgYXJl
IGp1c3Qgbm9kZXMgdGhhdCB3ZSBkb24ndCBjdXJyZW50bHkgZXhwZWN0IHRvIHNlZSBkdXJpbmcg
Zml4dXAuCiAgICAgICAgICAgICAvLyBJZiB3ZSBldmVyIHdhbnRlZCB0byBpbnNlcnQgdGhlbSBw
cmlvciB0byBmaXh1cCwgdGhlbiB3ZSBqdXN0IGhhdmUgdG8gY3JlYXRlCiAgICAgICAgICAgICAv
LyBmaXh1cCBydWxlcyBmb3IgdGhlbS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwx
NyBAQCBpbmxpbmUgRGF0YUZvcm1hdCBkYXRhRm9ybWF0Rm9yKEZsdXNoRm9yCiAgICAgcmV0dXJu
IERhdGFGb3JtYXREZWFkOwogfQogCitpbmxpbmUgRmx1c2hGb3JtYXQgbWVyZ2UoRmx1c2hGb3Jt
YXQgYSwgRmx1c2hGb3JtYXQgYikKK3sKKyAgICBpZiAoYSA9PSBEZWFkRmx1c2gpCisgICAgICAg
IHJldHVybiBiOworICAgIGlmIChiID09IERlYWRGbHVzaCkKKyAgICAgICAgcmV0dXJuIGE7Cisg
ICAgaWYgKGEgPT0gYikKKyAgICAgICAgcmV0dXJuIGE7CisgICAgcmV0dXJuIENvbmZsaWN0aW5n
Rmx1c2g7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTc0
MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDYgKzc1LDExIEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4s
IExvbmdMaXYKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX211c3RIYW5kbGVWYWx1ZXMu
c2l6ZSgpOyBpLS07KQogICAgICAgICBtX211c3RIYW5kbGVWYWx1ZXNbaV0gPSBmcmVlemVGcmFn
aWxlKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgaS0tOykgeworICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQorICAgICAgICAgICAg
bV9vdXRlcm1vc3RDYXB0dXJlZFZhcnMuc2V0KGkpOworICAgIH0KIH0KIAogR3JhcGg6On5HcmFw
aCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzQw
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw2ICszNjcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2Zp
bGVkQmxvY2spOwogICAgIH0KICAgICAKKyAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFy
c0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0ZXJtb3N0Q2FwdHVy
ZWRWYXJzOworICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaXNTdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdp
bikKICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCkBAIC04
ODgsNiArODk1LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiAg
ICAgaW50IG1fbWFjaGluZUNhcHR1cmVTdGFydDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0Fy
Z3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsKKyAgICBCaXRWZWN0b3IgbV9vdXRlcm1vc3RDYXB0
dXJlZFZhcnM7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxpbnQ2NF90LCBkb3VibGUqPiBtX2RvdWJsZUNvbnN0YW50c01hcDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBCYXNpY0Jsb2NrKiBjcmVhdGVQcmVIZWFkZXIoR3JhcGgmIGdyYXBoCiAg
ICAgLy8gRG9uJ3QgYm90aGVyIHRvIHByZXNlcnZlIGV4ZWN1dGlvbiBmcmVxdWVuY2llcyBmb3Ig
bm93LgogICAgIEJhc2ljQmxvY2sqIHByZUhlYWRlciA9IGluc2VydGlvblNldC5pbnNlcnRCZWZv
cmUoYmxvY2ssIFBOYU4pOwogICAgIHByZUhlYWRlci0+YXBwZW5kTm9kZSgKLSAgICAgICAgZ3Jh
cGgsIFNwZWNOb25lLCBKdW1wLCBibG9jay0+YXQoMCktPm9yaWdpbiwgT3BJbmZvKGJsb2NrKSk7
CisgICAgICAgIGdyYXBoLCBTcGVjTm9uZSwgSnVtcCwgYmxvY2stPmZpcnN0T3JpZ2luKCksIE9w
SW5mbyhibG9jaykpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgcHJlZGVjZXNzb3JJbmRleCA9
IDA7IHByZWRlY2Vzc29ySW5kZXggPCBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgcHJlZGVj
ZXNzb3JJbmRleCsrKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yID0gYmxvY2st
PnByZWRlY2Vzc29yc1twcmVkZWNlc3NvckluZGV4XTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmNwcAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksNyBAQCBib29s
IE5vZGU6Omhhc1ZhcmlhYmxlQWNjZXNzRGF0YShHcmFwaCYgCiAgICAgY2FzZSBTZXRBcmd1bWVu
dDoKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2FsOgorICAgIGNhc2UgUHV0
TG9jYWw6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAx
NzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjgzLDYgKzY4Myw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpv
bWJpZUhpbnQ6CisgICAgICAgIGNhc2UgS2lsbExvY2FsOgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzkw
LDYgKzEzOTEsOCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkp
IHsKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgY2FzZSBQdXRMb2NhbDoKKyAgICAg
ICAgY2FzZSBLaWxsTG9jYWw6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBa
b21iaWVIaW50OgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAkocmV2aXNpb24gMTc0MDMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdAogICAgIHsKKyAgICAgICAgQVNTRVJUKHNlbWFudGljLmlzU2V0KCkgPT0gZm9y
RXhpdC5pc1NldCgpKTsKICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlzU2V0KCk7CiAgICAgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTc0MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICAvKiBWYXJpYWJsZUFjY2Vzc0RhdGEsIGFuZCB0aHVzIHdpbGwgc2hhcmUgcHJl
ZGljdGlvbnMuICovXAogICAgIG1hY3JvKEdldExvY2FsLCBOb2RlUmVzdWx0SlMpIFwKICAgICBt
YWNybyhTZXRMb2NhbCwgMCkgXAorICAgIG1hY3JvKFB1dExvY2FsLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oS2lsbExvY2FsLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
TW92SGludCwgMCkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIDApIFwKICAgICBtYWNybyhHZXRB
cmd1bWVudCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjcsMTAgKzEyNywxNCBAQCB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZW5kCiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5v
ZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICBjYXNlIFNl
dExvY2FsOiB7CisgICAgY2FzZSBQdXRMb2NhbDogewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZh
aWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KLSAgICAgICAg
ICAgIEF2YWlsYWJpbGl0eShub2RlLT5jaGlsZDEoKS5ub2RlKCksIHZhcmlhYmxlLT5mbHVzaGVk
QXQoKSk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpLnNldEZsdXNoKHZhcmlhYmxlLT5mbHVzaGVkQXQoKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBLaWxsTG9jYWw6IHsKKyAgICAgICAgbV9hdmFp
bGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpLnNldEZsdXNo
KEZsdXNoZWRBdChDb25mbGljdGluZ0ZsdXNoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMTQyLDE0ICsxNDYsMTIgQEAgdm9pZCBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6
OmV4ZQogICAgIH0KIAogICAgIGNhc2UgTW92SGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0
eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPQotICAgICAgICAgICAg
QXZhaWxhYmlsaXR5KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIG1fYXZhaWxhYmls
aXR5Lm1fbG9jYWxzLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKS5zZXROb2RlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgWm9t
YmllSGludDogewotICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUt
PnVubGlua2VkTG9jYWwoKSkgPQotICAgICAgICAgICAgQXZhaWxhYmlsaXR5Ojp1bmF2YWlsYWJs
ZSgpOworICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlu
a2VkTG9jYWwoKSkuc2V0Tm9kZVVuYXZhaWxhYmxlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJERkdQaGFudG9tUmVtb3Zh
bFBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCiAjaW5j
bHVkZSAiREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQdXRM
b2NhbFNpbmtpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRp
b25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKQEAgLTMyMiw2ICszMjMsNyBAQCBQbGFuOjpDb21waWxh
dGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGlu
ZyhkZmcpOwogICAgICAgICBwZXJmb3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJm
b3JtU1NBTG93ZXJpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9ybVB1dExvY2FsU2lua2luZyhkZmcp
OwogICAgICAgICBwZXJmb3JtR2xvYmFsQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVz
c0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKQEAgLTMyOSw4ICszMzEs
MTAgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBw
ZXJmb3JtUGhhbnRvbUNhbm9uaWNhbGl6YXRpb24oZGZnKTsgLy8gUmVkdWNlIHRoZSBncmFwaCBz
aXplIGEgbG90LgogICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGNoYW5nZWQgfD0g
cGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9y
bUNyaXRpY2FsRWRnZUJyZWFraW5nKGRmZyk7Ci0gICAgICAgIGNoYW5nZWQgfD0gcGVyZm9ybU9i
amVjdEFsbG9jYXRpb25TaW5raW5nKGRmZyk7CisgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVP
YmplY3RBbGxvY2F0aW9uU2lua2luZygpKSB7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHBlcmZv
cm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBwZXJm
b3JtT2JqZWN0QWxsb2NhdGlvblNpbmtpbmcoZGZnKTsKKyAgICAgICAgfQogICAgICAgICBpZiAo
Y2hhbmdlZCkgewogICAgICAgICAgICAgLy8gU3RhdGUtYXQtdGFpbCBhbmQgc3RhdGUtYXQtaGVh
ZCB3aWxsIGJlIGludmFsaWQgaWYgd2UgZGlkIHN0cmVuZ3RoIHJlZHVjdGlvbiBzaW5jZQogICAg
ICAgICAgICAgLy8gaXQgbWlnaHQgaW5jcmVhc2UgbGl2ZSByYW5nZXMuCkBAIC0zNTMsNyArMzU3
LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICBw
ZXJmb3JtQ0ZBKGRmZyk7CiAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRM
aXZlbmVzcygpKQogICAgICAgICAgICAgcGVyZm9ybVJlc3VycmVjdGlvbkZvclZhbGlkYXRpb24o
ZGZnKTsKLSAgICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8gY29u
dmVydCBkZWFkIFNldExvY2FscyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBoaW50LCBhbmQgdG8ga2ls
bCBkZWFkIGNvZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4KKyAg
ICAgICAgcGVyZm9ybURDRShkZmcpOyAvLyBXZSByZWx5IG9uIHRoaXMgdG8ga2lsbCBkZWFkIGNv
ZGUgdGhhdCB3b24ndCBiZSByZWNvZ25pemVkIGFzIGRlYWQgYnkgTExWTS4KICAgICAgICAgcGVy
Zm9ybVN0YWNrTGF5b3V0KGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRm
Zyk7CiAgICAgICAgIHBlcmZvcm1PU1JBdmFpbGFiaWxpdHlBbmFseXNpcyhkZmcpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworIAorI2lmbmRlZiBE
RkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplX2gKKyNkZWZpbmUgREZHUHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5jdG9y
PgorY2xhc3MgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3IgeworcHVibGljOgorICAgIFBy
ZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yKAorICAgICAgICBHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsCisgICAgICAgIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1bmN0
b3ImIHdyaXRlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCisgICAgICAgIDogbV9ncmFwaChncmFw
aCkKKyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX3JlYWQocmVhZCkKKyAgICAg
ICAgLCBtX3dyaXRlKHdyaXRlKQorICAgICAgICAsIG1fZGVmKGRlZikKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZvaWQgcmVhZChBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIGlm
IChoZWFwLmtpbmQoKSA9PSBWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgIGlmIChoZWFwLnBheWxv
YWQoKS5pc1RvcCgpKSB7CisgICAgICAgICAgICAgICAgcmVhZFRvcCgpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9y
ZWFkKFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZSgpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoZWFwLm92ZXJsYXBz
KFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAgIHJlYWRUb3AoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHdyaXRlKEFic3RyYWN0SGVhcCBo
ZWFwKQorICAgIHsKKyAgICAgICAgaWYgKGhlYXAua2luZCgpID09IFZhcmlhYmxlcykgeworICAg
ICAgICAgICAgaWYgKGhlYXAucGF5bG9hZCgpLmlzVG9wKCkpIHsKKyAgICAgICAgICAgICAgICB3
cml0ZVRvcCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV93cml0ZShWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2Fk
KCkudmFsdWUoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaGVhcC5vdmVybGFwcyhWYXJpYWJsZXMpKSB7CisgICAgICAgICAgICB3cml0
ZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgZGVmKFB1cmVWYWx1ZSkKKyAgICB7CisgICAgICAgIC8vIFB1cmVWYWx1ZSBkZWZzIG5l
dmVyIGhhdmUgYW55dGhpbmcgdG8gZG8gd2l0aCBsb2NhbHMsIHNvIGlnbm9yZSB0aGlzLgorICAg
IH0KKyAgICAKKyAgICB2b2lkIGRlZihIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBpZiAobG9jYXRpb24ua2luZCgpICE9IFZhcmlhYmxlTG9jKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRp
b24uaGVhcCgpLmtpbmQoKSA9PSBWYXJpYWJsZXMpOworICAgICAgICAKKyAgICAgICAgbV9kZWYo
VmlydHVhbFJlZ2lzdGVyKGxvY2F0aW9uLmhlYXAoKS5wYXlsb2FkKCkudmFsdWUoKSksIG5vZGUp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCByZWFkVG9wKCkKKyAgICB7CisgICAg
ICAgIC8vIEFsbCBvZiB0aGUgb3V0ZXJtb3N0IGFyZ3VtZW50cywgZXhjZXB0IHRoaXMsIGFyZSBk
ZWZpbml0ZWx5IHJlYWQuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKTsgaS0tID4gMTspCisgICAgICAgICAgICBtX3JlYWQodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlIHN0
YWNrIGhlYWRlciBpcyByZWFkLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgSlNT
dGFjazo6VGhpc0FyZ3VtZW50OyArK2kpCisgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lz
dGVyKGkpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFJlYWQgYWxsIG9mIHRoZSBjYXB0dXJlZCB2
YXJpYWJsZXMuCisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgY2FwdHVyZWRWYXJzID0KKyAgICAg
ICAgICAgIG1fZ3JhcGguY2FwdHVyZWRWYXJzRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA6IGNhcHR1cmVkVmFycy5z
ZXRCaXRzKCkpCisgICAgICAgICAgICBtX3JlYWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkp
OworICAgICAgICAKKyAgICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGlubGluZSBhcmd1bWVudHMg
YW5kIGNhbGwgZnJhbWUgaGVhZGVycyB0aGF0IHdlIGRpZG4ndCBhbHJlYWR5IGNhcHR1cmUuCisg
ICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2Fs
bEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXpl
KCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5s
aW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
Lm9mZnNldCgpKSk7CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsKSB7CisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6U2NvcGVDaGFpbikpOworICAgICAgICAgICAg
ICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAr
IEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIHZvaWQgd3JpdGVUb3AoKQorICAgIHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9jb2Rl
QmxvY2stPnVzZXNBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOyBpLS0gPiAxOykKKyAgICAgICAg
ICAgICAgICBtX3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGNvbnN0IEJpdFZlY3RvciYgY2FwdHVyZWRWYXJzID0KKyAgICAgICAgICAg
IG1fZ3JhcGguY2FwdHVyZWRWYXJzRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA6IGNhcHR1cmVkVmFycy5zZXRCaXRz
KCkpCisgICAgICAgICAgICBtX3dyaXRlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpKTsKKyAg
ICB9CisgICAgCisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgTm9kZSogbV9ub2RlOworICAgIGNv
bnN0IFJlYWRGdW5jdG9yJiBtX3JlYWQ7CisgICAgY29uc3QgV3JpdGVGdW5jdG9yJiBtX3dyaXRl
OworICAgIGNvbnN0IERlZkZ1bmN0b3ImIG1fZGVmOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
UmVhZEZ1bmN0b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4K
K3ZvaWQgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsCisgICAgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnVuY3RvciYgd3Jp
dGUsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKK3sKKyAgICBQcmVjaXNlTG9jYWxDbG9iYmVyaXpl
QWRhcHRvcjxSZWFkRnVuY3RvciwgV3JpdGVGdW5jdG9yLCBEZWZGdW5jdG9yPgorICAgICAgICBh
ZGFwdG9yKGdyYXBoLCBub2RlLCByZWFkLCB3cml0ZSwgZGVmKTsKKyAgICBjbG9iYmVyaXplKGdy
YXBoLCBub2RlLCBhZGFwdG9yKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE3NDAzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjUsNyArNTY1LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKLSAgICAgICAgY2FzZSBNYXRl
cmlhbGl6ZU5ld09iamVjdDogeworICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0Ogor
ICAgICAgICBjYXNlIFB1dExvY2FsOgorICAgICAgICBjYXNlIEtpbGxMb2NhbDogewogICAgICAg
ICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ug
b2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgp
LCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRMb2Nh
bFNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHUHV0TG9jYWxTaW5r
aW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmxvY2tN
YXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1ByZWNpc2VMb2Nh
bENsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdTU0FDYWxjdWxhdG9yLmgiCisjaW5jbHVkZSAi
REZHVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmFu
ZHNJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworbmFtZXNw
YWNlIHsKKworYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2NsYXNzIFZhcmlhYmxlRGVmZXJyYWwg
eworcHVibGljOgorICAgIFZhcmlhYmxlRGVmZXJyYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG51bGxwdHIpCisgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZURlZmVycmFsIGNvbmZsaWN0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBWYXJpYWJsZURlZmVycmFsKGNvbmZsaWN0TWFya2VyKCkpOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhYmxl
OyB9CisgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMg
JiYgIWlzQ29uZmxpY3QoKTsgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxlKCkpOworICAgICAg
ICByZXR1cm4gbV92YXJpYWJsZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NvbmZsaWN0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IGNvbmZsaWN0TWFya2Vy
KCk7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlRGVmZXJyYWwgbWVyZ2UoVmFyaWFibGVEZWZl
cnJhbCBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgqdGhpcyA9PSBvdGhlciB8fCAh
b3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGlmICghKnRoaXMpCisg
ICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIHJldHVybiBjb25mbGljdCgpOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oVmFyaWFibGVEZWZlcnJhbCBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGU7
CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAgICAgICAgIG91dC5wcmludCgiLSIpOworICAg
ICAgICBlbHNlIGlmIChpc0NvbmZsaWN0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbmZs
aWN0Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKG1f
dmFyaWFibGUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXAob3V0KTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNv
bmZsaWN0TWFya2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmFyaWFi
bGVBY2Nlc3NEYXRhKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBtX3ZhcmlhYmxlOworfTsKKworY2xhc3MgUHV0TG9jYWxT
aW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFB1dExvY2FsU2lua2lu
Z1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIlB1dExvY2FsIHNp
bmtpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAg
ICAgLy8gRklYTUU6IE9uZSBvZiB0aGUgcHJvYmxlbXMgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0
IGl0IHdpbGwgY3JlYXRlIGEgZHVwbGljYXRlIFBoaSBncmFwaAorICAgICAgICAvLyBmb3Igc3Vu
a2VuIFB1dExvY2FscyBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJlc3RpbmcgY29udHJvbCBmbG93
IG1lcmdlcywgYW5kIHdoZXJlIHRoZQorICAgICAgICAvLyB2YWx1ZSBiZWluZyBQdXRMb2NhbCdk
IGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUgaW4gdGhlIERGRyBjb2RlLiBXZSBjb3VsZCB3b3JrIGFy
b3VuZCB0aGlzCisgICAgICAgIC8vIGJ5IGRvaW5nIHRoZSBzaW5raW5nIG92ZXIgQ1BTLCBvciBt
YXliZSBqdXN0IGJ5IGRvaW5nIHJlYWxseSBzbWFydCBob2lzdGluZy4gSXQncyBhbHNvCisgICAg
ICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1cGxpY2F0ZSBQaGkgZ3JhcGggY2FuIGJlIGRlZHVw
bGljYXRlZCBieSBMTFZNLiBJdCB3b3VsZCBiZSBiZXN0IGlmIHdlCisgICAgICAgIC8vIGNvdWxk
IG9ic2VydmUgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgUGhpIGdyYXBoIGluIHBsYWNlIHRoYXQg
ZG9lcyB3aGF0IHdlIHdhbnQuIEluCisgICAgICAgIC8vIHByaW5jaXBsZSBpZiB3ZSBoYXZlIGEg
cmVxdWVzdCB0byBwbGFjZSBhIFBoaSBhdCBhIHBhcnRpY3VsYXIgcGxhY2UsIHdlIGNvdWxkIGp1
c3QgY2hlY2sKKyAgICAgICAgLy8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIFBoaSB0aGF0IGRvZXMg
d2hhdCB3ZSB3YW50LiBCZWNhdXNlIFB1dExvY2FsU2lua2luZ1BoYXNlIHJ1bnMganVzdAorICAg
ICAgICAvLyBhZnRlciBTU0EgY29udmVyc2lvbiwgd2UgaGF2ZSBhbG1vc3QgYSBndWFyYW50ZWUg
dGhhdCB0aGUgUGhpIGdyYXBoIHdlIHByb2R1Y2UgaGVyZSB3b3VsZAorICAgICAgICAvLyBiZSB0
cml2aWFsbHkgcmVkdW5kYW50IHRvIHRoZSBvbmUgd2UgYWxyZWFkeSBoYXZlLgorICAgICAgICAK
KyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9y
ZSBQdXRMb2NhbCBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgU1NBQ2FsY3VsYXRvciBzc2FDYWxjdWxhdG9yKG1f
Z3JhcGgpOworICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAg
ICAgICAKKyAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGVyZSB2YXJpb3VzIGxvY2FscyBh
cmUgbGl2ZS4KKyAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Ym9vbD4+IGxpdmVBdEhlYWQobV9n
cmFwaCk7CisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3Jh
cGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10g
PSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwor
ICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xp
a2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBs
aXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxv
Y2tdLmZpbGwoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5n
ZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICgh
YmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIE9wZXJhbmRzPGJvb2w+IGxpdmUgPSBsaXZlQXRUYWlsW2Jsb2NrXTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7
IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAi
XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNj
YXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIHIiLCBvcGVyYW5kLCAiIGlz
IGxpdmUgYXQgIiwgbm9kZSAsIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9w
ZXJhbmQob3BlcmFuZCkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVz
Y2FwZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChub2RlLT5vcCgpID09IFB1dExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAobGl2ZSA9PSBsaXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10g
PSBsaXZlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+
cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZl
LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWxbcHJlZGVj
ZXNzb3JdW2ldIHw9IGxpdmVbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAgICAgICAKKyAgICAg
ICAgLy8gQWxsIG9mIHRoZSBsb2NhbHMgc2hvdWxkIGJlIGRlYWQgYXQgaGVhZCBvZiByb290LiBB
bGwgb2YgdGhlIGFyZ3VtZW50cyBzaG91bGQgYmUgbGl2ZSBhdAorICAgICAgICAvLyBoZWFkIG9m
IHJvb3QuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlQXRIZWFkLmF0SW5kZXgoMCkubnVt
YmVyT2ZMb2NhbHMoKTsgaS0tOykKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVs
bHB0ciwgIWxpdmVBdEhlYWQuYXRJbmRleCgwKS5sb2NhbChpKSk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBsaXZlQXRIZWFkLmF0SW5kZXgoMCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykK
KyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbGl2ZUF0SGVhZC5hdElu
ZGV4KDApLmFyZ3VtZW50KGkpKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5leHQgaWRlbnRpZnkg
d2hlcmUgd2Ugd291bGQgd2FudCB0byBzaW5rIFB1dExvY2FscyB0by4gV2Ugc2F5IHRoYXQgdGhl
cmUgaXMgYSBkZWZlcnJlZAorICAgICAgICAvLyBmbHVzaCBpZiB3ZSBoYWQgYSBQdXRMb2NhbCB3
aXRoIGEgZ2l2ZW4gVmFyaWFibGVBY2Nlc3NEYXRhKiBidXQgaXQgaGFzbid0IGJlZW4KKyAgICAg
ICAgLy8gbWF0ZXJpYWxpemVkIHlldC4KKyAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFyaWFi
bGVEZWZlcnJhbD4+IGRlZmVycmVkQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxP
cGVyYW5kczxWYXJpYWJsZURlZmVycmFsPj4gZGVmZXJyZWRBdFRhaWwobV9ncmFwaCk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9ja10gPQorICAg
ICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICBkZWZlcnJlZEF0VGFpbFtibG9ja10g
PQorICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRzTGlr
ZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+IGRlZmVy
cmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0
ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgIGF1
dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2ls
bCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCisgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbCgpOworICAg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZl
cnJhbChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmZXJy
ZWRBdFRhaWxbYmxvY2tdID0gZGVmZXJyZWQ7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkNvbnNpZGVyaW5nIHIiLCBkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9p
bnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXS5t
ZXJnZShkZWZlcnJlZFtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3aXNo
IHRvIGluc2VydCBQdXRMb2NhbHMgYXQgYWxsIG9mIHRoZSBtYXRlcmlhbGl6YXRpb24gcG9pbnRz
LCB3aGljaCBhcmUgZGVmaW5lZAorICAgICAgICAvLyBpbXBsaWNpdGx5IGFzIHRoZSBwbGFjZXMg
d2hlcmUgd2Ugc2V0IGRlZmVycmVkIHRvIERlYWQgd2hpbGUgaXQgd2FzIHByZXZpb3VzbHkgbm90
IERlYWQuCisgICAgICAgIC8vIFRvIGRvIHRoaXMsIHdlIG1heSBuZWVkIHRvIGJ1aWxkIHNvbWUg
UGhpIGZ1bmN0aW9ucyB0byBoYW5kbGUgc3R1ZmYgbGlrZSB0aGlzOgorICAgICAgICAvLworICAg
ICAgICAvLyBCZWZvcmU6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBpZiAocCkKKyAgICAg
ICAgLy8gICAgICAgICBQdXRMb2NhbChyNDIsIEB4KQorICAgICAgICAvLyAgICAgZWxzZQorICAg
ICAgICAvLyAgICAgICAgIFB1dExvY2FsKHI0MiwgQHkpCisgICAgICAgIC8vCisgICAgICAgIC8v
IEFmdGVyOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgaWYgKHApCisgICAgICAgIC8vICAg
ICAgICAgVXBzaWxvbihAeCwgXnopCisgICAgICAgIC8vICAgICBlbHNlCisgICAgICAgIC8vICAg
ICAgICAgVXBzaWxvbihAeSwgXnopCisgICAgICAgIC8vICAgICB6OiBQaGkoKQorICAgICAgICAv
LyAgICAgUHV0TG9jYWwocjQyLCBAeikKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBtZWFu
cyB0aGF0IHdlIGhhdmUgYW4gU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGVhY2ggbG9jYWws
IGFuZCBhIERlZiBpcyBhbnkKKyAgICAgICAgLy8gUHV0TG9jYWwgaW4gdGhlIG9yaWdpbmFsIHBy
b2dyYW0uIFRoZSBvcmlnaW5hbCBQdXRMb2NhbHMgd2lsbCBzaW1wbHkgdmFuaXNoLgorICAgICAg
ICAKKyAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9W
YXJpYWJsZSgKKyAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkKTsKKyAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09w
ZXJhbmQ7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3Bl
cmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOworICAgICAgICAgICAgb3BlcmFu
ZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOworICAgICAgICAgICAgQVNT
RVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAg
ICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQob3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHB1dExvY2Fsc1RvU2luazsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVy
KCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpICE9IFB1dExvY2FsKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwdXRMb2NhbHNUb1Np
bmsuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAorICAg
ICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkp
LCBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAg
ICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBi
bG9jaykgLT4gTm9kZSogeworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
ID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5kKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkFkZGluZyBQaGkgZm9yIHIiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwg
IlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9
IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2luKCkpOworICAgICAg
ICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJhbCA9IGRlZmVycmVkQXRI
ZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIC8vIElmIGl0J3Mg
bGl2ZSBpbiBieXRlY29kZSB0aGVuIHdlIG11c3QgaGF2ZSBhIHZhbGlkIGRlZmVycmFsLgorICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgdmFyaWFibGVEZWZlcnJh
bC5oYXNWYXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2
YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAgICAg
ICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhyZXN1bHRGb3IoZm9ybWF0KSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIE9w
ZXJhbmRzPE5vZGUqPiBtYXBwaW5nKE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFy
aWFibGVzQXRIZWFkKTsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4gZGVmZXJy
ZWQ7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGluZy5vcGVy
YW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFNTQUNh
bGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBzc2FD
YWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+
dmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChT
U0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJs
b2NrKSkgeworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhU
b09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJh
bmQpID0gcGhpRGVmLT52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dExvY2Fs
KSB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwodmFyaWFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRs
ZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWRlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1h
cHBpbmcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBub2RlLCBpbmNvbWluZyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRMb2NhbC4KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRp
bmcgYSBQdXRMb2NhbCBmb3IgciIsIG9wZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJhbCA9IGRlZmVy
cmVkLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRMb2NhbCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKSksCisgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlKGluY29taW5nLCB1c2VLaW5kRm9yKHZhcmlhYmxlRGVm
ZXJyYWwudmFyaWFibGUoKS0+Zmx1c2hGb3JtYXQoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRy
OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
cHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIsIE5vZGUqKSB7IH0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNp
emUoKSAtIDE7CisgICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+
bGFzdCgpLT5vcmlnaW47CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJs
b2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2Fs
Y3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNz
b3JCbG9jaykpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+
dmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVEZWZlcnJhbCB2YXJpYWJsZURlZmVycmFsID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51
bGxwdHIsIHZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKS0+Zmx1
c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2lu
ZEZvcihmb3JtYXQpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBp
bmcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAg
dXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZShpbmNvbWluZywg
dXNlS2luZCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGaW5hbGx5IGVsaW1pbmF0ZSB0aGUgc3Vua2VuIFB1dExvY2Fs
cyBieSB0dXJuaW5nIHRoZW0gaW50byBQaGFudG9tcy4gVGhpcyBrZWVwcyB3aGF0ZXZlcgorICAg
ICAgICAvLyB0eXBlIGNoZWNrIHRoZXkgd2VyZSBkb2luZy4gQWxzbyBwcmVwZW5kIEtpbGxMb2Nh
bHMgdG8gdGhlbSB0byBlbnN1cmUgdGhhdCB3ZSBrbm93IHRoYXQKKyAgICAgICAgLy8gdGhlIHJl
bGV2YW50IHZhbHVlIHdhcyAqbm90KiBzdG9yZWQgdG8gdGhlIHN0YWNrLgorICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlm
ICghcHV0TG9jYWxzVG9TaW5rLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2ls
bExvY2FsLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhub2RlLT5sb2NhbCgpLm9mZnNldCgpKSk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBk
YXRhTG9nKCJHcmFwaCBhZnRlciBQdXRMb2NhbCBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBt
X2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisgICAgCitib29sIHBlcmZv
cm1QdXRMb2NhbFNpbmtpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgUHV0TG9jYWwgU2lua2luZyBQaGFzZSIpOworICAgIHJldHVybiBy
dW5QaGFzZTxQdXRMb2NhbFNpbmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5r
aW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisgLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1B1dExvY2FsU2lu
a2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3Mg
R3JhcGg7CisKKy8vIFNpbmtzIFB1dExvY2FscyB0byB0aGUgYWJzb2x1dGUgbGF0ZXN0IHBvaW50
IHdoZXJlIHRoZXkgY2FuIHBvc3NpYmx5IGhhcHBlbiwgd2hpY2ggaXMgdXN1YWxseQorLy8gc2lk
ZS1lZmZlY3RzIHRoYXQgbWF5IG9ic2VydmUgdGhlbS4gVGhpcyBlbGltaW5hdGVzIFB1dExvY2Fs
cyBpZiBpdCBzaW5rcyB0aGVtIHBhc3QgdGhlIHBvaW50IG9mCisvLyB0aGVpciBkZWF0aHMuCisK
K2Jvb2wgcGVyZm9ybVB1dExvY2FsU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1B1
dExvY2FsU2lua2luZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FDYWxjdWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDYWxjdWxhdG9yLmgJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU1NBQ2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyAr
MTc0LDcgQEAgcHVibGljOgogICAgIC8vIG5vbkxvY2FsUmVhY2hpbmdEZWYoKSB3aWxsIGZpbmQg
aXQgbGF0ZXIuIE5vdGUgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYWx3YXlzIHNvdW5kIHRvIG5vdAog
ICAgIC8vIHBydW5lIGFueSBQaGlzICh0aGF0IGlzLCB0byBhbHdheXMgaGF2ZSB0aGUgZnVuY3Rv
ciBpbnNlcnQgYSBQaGkgYW5kIG5ldmVyIHJldHVybiBudWxscHRyKS4KICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQaGlJbnNlcnRpb25GdW5jdG9yPgotICAgIHZvaWQgY29tcHV0ZVBoaXMoUGhpSW5z
ZXJ0aW9uRnVuY3RvciBmdW5jdG9yKQorICAgIHZvaWQgY29tcHV0ZVBoaXMoY29uc3QgUGhpSW5z
ZXJ0aW9uRnVuY3RvciYgZnVuY3RvcikKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbnVsbHB0ciwgbV9ncmFwaC5tX2RvbWluYXRvcnMuaXNWYWxpZCgpKTsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCwxMiArMTg0
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLy8gLSBDb252ZXJ0IGFsbCBvZiB0aGUgcHJlZXhpc3Rp
bmcgU1NBIG5vZGVzIChvdGhlciB0aGFuIHRoZSBvbGQgQ1BTIFBoaSBub2RlcykgaW50byBTU0EK
ICAgICAgICAgLy8gICBmb3JtIGJ5IHJlcGxhY2luZyBhcyBmb2xsb3dzOgogICAgICAgICAvLwor
ICAgICAgICAvLyAgIC0gTW92SGludCBoYXMgS2lsbExvY2FsIHByZXBlbmRlZCB0byBpdC4KKyAg
ICAgICAgLy8KICAgICAgICAgLy8gICAtIEdldExvY2FsIG92ZXIgY2FwdHVyZWQgdmFyaWFibGVz
IGxvc2UgdGhlaXIgcGhpcy4KICAgICAgICAgLy8KICAgICAgICAgLy8gICAtIEdldExvY2FsIG92
ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBnZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVu
Y2VzIHRvIHRoZSBub2RlCiAgICAgICAgIC8vICAgICBzcGVjaWZpZWQgYnkgdmFsdWVGb3JPcGVy
YW5kLgogICAgICAgICAvLwotICAgICAgICAvLyAgIC0gU2V0TG9jYWwgZ2V0cyBOb2RlTXVzdEdl
bmVyYXRlIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhIENoZWNrIG90aGVyd2lzZS4K
KyAgICAgICAgLy8gICAtIFNldExvY2FsIHR1cm5zIGludG8gUHV0TG9jYWwgaWYgaXQncyBmbHVz
aGVkLCBvciB0dXJucyBpbnRvIGEgQ2hlY2sgb3RoZXJ3aXNlLgogICAgICAgICAvLwogICAgICAg
ICAvLyAgIC0gRmx1c2ggbG9zZXMgaXRzIGNoaWxkcmVuIGFuZCB0dXJucyBpbnRvIGEgUGhhbnRv
bS4KICAgICAgICAgLy8KQEAgLTI0OSw0MSArMjUxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBtX2NhbGN1bGF0b3IucGhpc0ZvckJs
b2NrKGJsb2NrKSkgewogICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBGaWd1cmUgb3V0IGlmIHRoZSBs
b2NhbCBpcyBtZWFudCB0byBiZSBmbHVzaGVkIGhlcmUuCi0gICAgICAgICAgICAgICAgYm9vbCBp
c0ZsdXNoZWQgPSAhISgKLSAgICAgICAgICAgICAgICAgICAgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKS0+ZmxhZ3MoKSAmIE5vZGVJc0ZsdXNoZWQpOwot
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChw
aGlJbnNlcnRpb25Qb2ludCwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICB2YWx1
ZUZvck9wZXJhbmQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBwaGlEZWYtPnZhbHVlKCk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzRmx1c2hlZCkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLiBGb3IgbXVsdGlwbGUgcmVhc29ucy4KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFJlYXNvbiAjMTogSWYg
dGhlIGxvY2FsIGlzIGZsdXNoZWQgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGJvdGhlciB3aXRoIGEK
LSAgICAgICAgICAgICAgICAgICAgLy8gTW92SGludCBzaW5jZSBldmVyeSBwYXRoIHRvIHRoaXMg
cG9pbnQgaW4gdGhlIGNvZGUgd2lsbCBoYXZlIGZsdXNoZWQgdGhlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGJ5dGVjb2RlIHZhcmlhYmxlIHVzaW5nIGEgU2V0TG9jYWwgYW5kIGhlbmNlIHRoZSBB
dmFpbGFiaWxpdHk6OmZsdXNoZWRBdCgpCi0gICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgYWdy
ZWUsIGFuZCB0aGF0IHdpbGwgYmUgc3VmZmljaWVudCBmb3IgZmlndXJpbmcgb3V0IGhvdyB0byBy
ZWNvdmVyIHRoZQotICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSdzIHZhbHVlLgotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgLy8gUmVhc29uICMyOiBJZiB3
ZSBoYWQgaW5zZXJ0ZWQgYSBNb3ZIaW50IGFuZCB0aGUgUGhpIGZ1bmN0aW9uIGhhZCBkaWVkCi0g
ICAgICAgICAgICAgICAgICAgIC8vIChiZWNhdXNlIHRoZSBvbmx5IHVzZXIgb2YgdGhlIHZhbHVl
IHdhcyB0aGUgImZsdXNoIiAtIGkuZS4gc29tZQotICAgICAgICAgICAgICAgICAgICAvLyBhc3lu
Y2hyb25vdXMgcnVudGltZSB0aGluZ3kpIHRoZW4gdGhlIE1vdkhpbnQgd291bGQgdHVybiBpbnRv
IGEgWm9tYmllSGludCwKLSAgICAgICAgICAgICAgICAgICAgLy8gd2hpY2ggd291bGQgZm9vbCB1
cyBpbnRvIHRoaW5raW5nIHRoYXQgdGhlIHZhcmlhYmxlIGlzIGRlYWQuIE5vdGUgdGhhdCB0aGlz
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHJlYXNvbiBoYXMgYSBsb3QgdG8gZG8gd2l0aCB0aGUg
ZmFjdCB0aGF0IEZsdXNoZXMgZG8gbm90IHR1cm4gaW50bwotICAgICAgICAgICAgICAgICAgICAv
LyBQaGFudG9tcywgYmVjYXVzZSBvdXIgaGFuZGxpbmcgb2YgRmx1c2hlcyBhc3N1bWUgdGhhdCB3
ZSAoMSkgYWx3YXlzIGxlYXZlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBmbHVzaGVkIFNl
dExvY2FscyBhbG9uZSBhbmQgKDIpIE9TUiBhdmFpbGFiaWxpdHkgYW5hbHlzaXMgYWx3YXlzIHNl
ZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGF2YWlsYWJsZSBmbHVzaC4gVGhlIHByZXNl
bmNlIG9mIGEgTW92SGludCBvciBab21iaWVIaW50IHdvdWxkIG1ha2UgdGhlCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGZsdXNoIHNlZW0gdW5hdmFpbGFibGUuCi0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAvLyBSZWFzb24gIzM6IElmIHdlIGhhZCBpbnNlcnRlZCBh
IE1vdkhpbnQgdGhlbiBldmVuIGlmIHRoZSBQaGkgc3RheWVkIGFsaXZlLAotICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSB3b3VsZCBzdGlsbCBlbmQgdXAgZ2VuZXJhdGluZyBpbmVmZmljaWVudCBj
b2RlIHNpbmNlIHdlIHdvdWxkIGJlIHRlbGxpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IE9TUiBleGl0IGNvbXBpbGVyIHRvIHVzZSBzb21lIFNTQSB2YWx1ZSBmb3IgdGhlIGJ5dGVjb2Rl
IHZhcmlhYmxlCi0gICAgICAgICAgICAgICAgICAgIC8vIHJhdGhlciB0aGFuIGp1c3QgdGVsbGlu
ZyBpdCB0aGF0IHRoZSB2YWx1ZSB3YXMgYWxyZWFkeSBvbiB0aGUgc3RhY2suCi0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHBoaUluc2VydGlvblBvaW50LCBTcGVjTm9u
ZSwgTW92SGludCwgTm9kZU9yaWdpbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KHZhcmlhYmxlLT5sb2NhbCgpLm9mZnNldCgpKSwgcGhpRGVmLT52YWx1ZSgpLT5kZWZhdWx0RWRn
ZSgpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgcGhpSW5zZXJ0aW9uUG9pbnQsIFNwZWNO
b25lLCBNb3ZIaW50LCBOb2RlT3JpZ2luKCksCisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2
YXJpYWJsZS0+bG9jYWwoKS5vZmZzZXQoKSksIHBoaURlZi0+dmFsdWUoKS0+ZGVmYXVsdEVkZ2Uo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKQEAgLTI5NywxMSArMjcwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBtX2dyYXBo
LnBlcmZvcm1TdWJzdGl0dXRpb24obm9kZSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50
OiB7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAg
ICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsTG9jYWwsIG5vZGUt
Pm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExv
Y2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8ICEhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm1l
cmdlRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhQdXRMb2NhbCk7CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENo
ZWNrKTsKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OCw2ICsxMTgsOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAg
ICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBjYXNlIFNldExvY2Fs
OgorICAgIGNhc2UgUHV0TG9jYWw6CisgICAgY2FzZSBLaWxsTG9jYWw6CiAgICAgY2FzZSBNb3ZI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIEdldEFyZ3VtZW50OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTg3LDYgKzQ5ODcsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZUltbWVkaWF0ZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgY2FzZSBNYXRl
cmlhbGl6ZU5ld09iamVjdDoKKyAgICBjYXNlIFB1dExvY2FsOgorICAgIGNhc2UgS2lsbExvY2Fs
OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9k
ZSIpOwogICAgICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAg
ICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFB1dExvY2FsOgog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9t
TG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3
NCw3IEBAIHB1YmxpYzoKICAgICB9IHdoaWxlICgwKQogCiAgICAgI2RlZmluZSBub3RTZXQgKHN0
YXRpY19jYXN0PHNpemVfdD4oLTEpKQotCisgICAgICAgIAogICAgIHZvaWQgdmFsaWRhdGUoKQog
ICAgIHsKICAgICAgICAgLy8gTkIuIFRoaXMgY29kZSBpcyBub3Qgd3JpdHRlbiBmb3IgcGVyZm9y
bWFuY2UsIHNpbmNlIGl0IGlzIG5vdCBpbnRlbmRlZCB0byBydW4KQEAgLTIxMyw2ICsyMTMsOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBJZGVudGl0eToKICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUpLCBjYW5vbmljYWxSZXN1bHRSZXByZXNlbnRhdGlvbihub2Rl
LT5yZXN1bHQoKSkgPT0gY2Fub25pY2FsUmVzdWx0UmVwcmVzZW50YXRpb24obm9kZS0+Y2hpbGQx
KCktPnJlc3VsdCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
ISFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGNhc2UgTWFrZVJvcGU6CiAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAg
ICAgICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTc0MDMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw2ICs0Nyw4IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAK
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAg
Y2FzZSBTZXRMb2NhbDoKKyAgICBjYXNlIFB1dExvY2FsOgorICAgIGNhc2UgS2lsbExvY2FsOgog
ICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgY2FzZSBQaGFudG9t
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE3NDAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsOCArMzg2LDggQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgIGNvbXBpbGVHZXRMb2Nh
bCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAg
ICAgICBjb21waWxlU2V0TG9jYWwoKTsKKyAgICAgICAgY2FzZSBQdXRMb2NhbDoKKyAgICAgICAg
ICAgIGNvbXBpbGVQdXRMb2NhbCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
R2V0TXlBcmd1bWVudHNMZW5ndGg6CiAgICAgICAgICAgICBjb21waWxlR2V0TXlBcmd1bWVudHNM
ZW5ndGgoKTsKQEAgLTc0Niw2ICs3NDYsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5
T2Zmc2V0SGludDoKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICBjYXNl
IEJvdHRvbVZhbHVlOgorICAgICAgICBjYXNlIEtpbGxMb2NhbDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7CkBAIC0xMDI0LDcgKzEwMjUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVz
c0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
Y29tcGlsZVNldExvY2FsKCkKKyAgICB2b2lkIGNvbXBpbGVQdXRMb2NhbCgpCiAgICAgewogICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKICAgICAgICAgc3dpdGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTc0MDMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzYsNiArMTc2LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdihib29sLCBlbmFibGVDYWxsRWRnZVByb2ZpbGluZywgdHJ1ZSkgXAogICAgIHYodW5z
aWduZWQsIGZyZXF1ZW50Q2FsbFRocmVzaG9sZCwgMikgXAogICAgIHYoYm9vbCwgb3B0aW1pemVO
YXRpdmVDYWxscywgZmFsc2UpIFwKKyAgICB2KGJvb2wsIGVuYWJsZU9iamVjdEFsbG9jYXRpb25T
aW5raW5nLCB0cnVlKSBcCiAgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlQ29uY3VycmVudEpJVCwg
dHJ1ZSkgXAogICAgIHYodW5zaWduZWQsIG51bWJlck9mREZHQ29tcGlsZXJUaHJlYWRzLCBjb21w
dXRlTnVtYmVyT2ZXb3JrZXJUaHJlYWRzKDIsIDIpIC0gMSkgXApJbmRleDogU291cmNlL1dURi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3
NDA0NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTQtMDktMjggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBGVEwgc2hvdWxkIHNpbmsgU2V0TG9jYWxzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1ha2UgdGhlIHNldCBiaXRzIG9mIGEgQml0
VmVjdG9yIGl0ZXJhYmxlLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAo
V1RGOjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6U2V0Qml0c0l0ZXJhYmxlKToKKyAgICAg
ICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvcjo6b3Bl
cmF0b3IqKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFi
bGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRC
aXRzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6Qml0VmVj
dG9yOjpTZXRCaXRzSXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpT
ZXRCaXRzSXRlcmFibGU6OmVuZCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0Qml0cyk6
CisKIDIwMTQtMDktMjYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXBsYWNlIE9TT2JqZWN0UHRyIHdpdGggUmV0YWluUHRyL2Fkb3B0T1MKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCShyZXZpc2lvbiAxNzQwMzEpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw1OCBAQCBwdWJsaWM6IAogICAgICAgICByZXR1cm4g
SW50SGFzaDx1aW50cHRyX3Q+OjpoYXNoKHZhbHVlKTsKICAgICB9CiAgICAgCisgICAgY2xhc3Mg
U2V0Qml0c0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNldEJpdHNJdGVyYWJsZShj
b25zdCBCaXRWZWN0b3ImIGJpdFZlY3RvcikKKyAgICAgICAgICAgIDogbV9iaXRWZWN0b3IoYml0
VmVjdG9yKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgICAgIDogbV9iaXRWZWN0b3IobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaXRlcmF0b3IoY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0b3IsIHNpemVfdCBpbmRleCkK
KyAgICAgICAgICAgICAgICA6IG1fYml0VmVjdG9yKCZiaXRWZWN0b3IpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBzaXplX3Qgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IG1fYml0VmVjdG9yLT5m
aW5kQml0KG1faW5kZXggKyAxLCB0cnVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBjb25zdCBCaXRWZWN0b3IqIG1fYml0VmVjdG9yOworICAgICAgICAgICAgc2l6ZV90IG1faW5k
ZXg7CisgICAgICAgIH07CisgICAgICAgIAorICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKG1fYml0VmVjdG9yLCBtX2JpdFZlY3Rvci5maW5kQml0KDAsIHRy
dWUpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvciht
X2JpdFZlY3RvciwgbV9iaXRWZWN0b3Iuc2l6ZSgpKTsgfQorICAgICAgICAKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBCaXRWZWN0b3ImIG1fYml0VmVjdG9yOworICAgIH07CisgICAgCisg
ICAgU2V0Qml0c0l0ZXJhYmxlIHNldEJpdHMoKSBjb25zdCB7IHJldHVybiBTZXRCaXRzSXRlcmFi
bGUoKnRoaXMpOyB9CisgICAgCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Q
b2ludGVyKCkKICAgICB7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5l
dy1vYmplY3QtdGhlbi1jYWxsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVj
dC10aGVuLWNhbGwtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbAorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3
LW9iamVjdC10aGVuLWNhbGwuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9lbGlkYWJsZS1u
ZXctb2JqZWN0LXRoZW4tY2FsbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0
LXRoZW4tY2FsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3Qt
dGhlbi1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIHN1
bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICByZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAv
IDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisKK2Z1bmN0aW9uIGJhcihwLCBvKSB7CisgICAg
aWYgKHApCisgICAgICAgIHJldHVybiA1OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDY7Cit9
CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFy
IHAgPSB7ZjogaSArIDF9OworICAgICAgICBiYXIoaSwgbyk7CisgICAgICAgIGJhcihpLCBwKTsK
KyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYgKHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVz
KG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239169</attachid>
            <date>2014-10-02 18:21:37 -0700</date>
            <delta_ts>2014-10-03 09:23:24 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>68159</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc0MjMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBA
CisyMDE0LTEwLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBzaW5rIFB1dExvY2FscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MTY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXZSd2ZSBrbm93biBmb3IgYSB3aGlsZSB0aGF0IG91
ciBQdXRMb2NhbCBzaXR1YXRpb24gd2FzIHN1Yi1vcHRpbWFsLiBXZSBlbWl0IHRoZW0gYW55dGlt
ZSB3ZQorICAgICAgICAicGFzcyIgYXJndW1lbnRzIHRvIGFuIGlubGluZWQgZnVuY3Rpb24gY2Fs
bCwgYmVjYXVzZSB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgcnVudGltZSB0byBncmFiCisgICAgICAg
IHRob3NlIGFyZ3VtZW50cyB3aGVuIGRvaW5nIGZvby5hcmd1bWVudHMgd2hlcmUgZm9vIGlzIGlu
bGluZWQ6IG91ciBlbmdpbmUgZG9lc24ndCBkZW9wdGltaXplCisgICAgICAgIGluIHRoYXQgY2Fz
ZSBidXQgcmF0aGVyIGp1c3QgcmVsaWVzIG9uIHRoZSBhcmd1bWVudHMgYmVpbmcgZmx1c2hlZCAo
aS5lLiBhIGNvcHkgb2YgdGhlaXIKKyAgICAgICAgdmFsdWVzIGlzIHNwaWxsZWQpIGF0IGEgd2Vs
bC1rbm93biBwbGFjZSBpbiBhIHdlbGwta25vd24gZm9ybWF0LgorICAgICAgICAKKyAgICAgICAg
VGhlIFB1dExvY2FscyBpbmN1ciB0d28gY29zdHM6ICgxKSB0aGV5IGFyZSBzdG9yZSBpbnN0cnVj
dGlvbnMgYW5kIHN0b3JlcyBhaW4ndCBmcmVlLCBhbmQgKDIpCisgICAgICAgIHRoZXkgbG9vayBs
aWtlIGVzY2FwaW5nIHNpdGVzIGFuZCBzbyB0aGV5IGluaGliaXQgb2JqZWN0IGFsbG9jYXRpb24g
c2lua2luZy4KKyAgICAgICAgCisgICAgICAgIEJ1dCBpbiBtb3N0IGNhc2VzLCB0aGUgUHV0TG9j
YWxzIGFyZSB1bm5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBpbmxpbmVkIGNvZGUgbmV2ZXIgcGVyZm9y
bXMgYW55CisgICAgICAgIHNpZGUgZWZmZWN0IHRoYXQgY291bGQgdHJhbnNpdGl2ZWx5IGxlYWQg
dG8gZnVuY3Rpb24uYXJndW1lbnRzLiBFdmVuIGlmIHRoZSBpbmxpbmVkIGNvZGUKKyAgICAgICAg
Y291bGQgZG8gc3VjaCBhIHNpZGUgZWZmZWN0LCBpdCBtYXkgYmUgb24gYSByYXJlIHBhdGggc28g
dGhlcmUgaXMgbm8gbmVlZCB0byBwZW5hbGl6ZSB0aGUKKyAgICAgICAgZW50aXJlIGZ1bmN0aW9u
LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBsZW1lbnRzIG9uZSBzb2x1dGlvbiB0
byB0aGUgUHV0TG9jYWwgcHJvYmxlbTogaXQgYWdncmVzc2l2ZWx5IHNpbmtzIFB1dExvY2Fscwor
ICAgICAgICB0byB0aGUgbGF0ZXN0IHBvc3NpYmxlIHBvaW50LiBUaGlzIGlzIGV2ZW4gbW9yZSBh
Z2dyZXNzaXZlIHRoYW4gdGhlIG9iamVjdCBhbGxvY2F0aW9uCisgICAgICAgIHNpbmtpbmcuIFRo
YXQgc2lua2luZyBhbGdvcml0aG0gYXZvaWRzIGNyZWF0aW5nIHNpdHVhdGlvbnMgd2hlcmUgYW4g
b2JqZWN0IGNvdWxkIGJlCisgICAgICAgIG1hdGVyaWFsaXplZCBtb3JlIHRoYW4gb25lIGFsb25n
IGFueSBwYXRoLiBQdXRMb2NhbCBzaW5raW5nLCBvbiB0aGUgb3RoZXIgaGFuZCwgZG9lc24ndCBh
dm9pZAorICAgICAgICB0aGlzIGF0IGFsbCAtIGJvdGggdG8gbWFrZSB0aGUgcGhhc2UgY2hlYXBl
ciBhbmQgc2ltcGxlciBhbmQgdG8gbWFrZSBpdCBtb3JlIGFnZ3Jlc3NpdmUuCisgICAgICAgIEV2
ZXJ5IFB1dExvY2FsIGlzIHN1bmsgbm8gbWF0dGVyIHdoYXQuCisgICAgICAgIAorICAgICAgICBU
aGUgdXBzaWRlIG9mIHRoaXMgcGF0Y2ggaXMgdGhhdCBpdCBlbGltaW5hdGVzIG1hbnkgUHV0TG9j
YWxzOiBtYW55IG9mIHRoZW0gYXJlIHN1bmsgInBhc3QKKyAgICAgICAgdGhlaXIgZGVhdGgiLCB0
aHVzIGVsaW1pbmF0aW5nIHRoZW0gY29tcGxldGVseS4gT3RoZXJzIGFyZSBzdW5rIHRvIHJhcmUg
cGF0aHMuIFRoaXMgZW5hYmxlcyBhCisgICAgICAgIGxvdCBvZiBvYmplY3QgYWxsb2NhdGlvbiBz
aW5raW5nIGFuZCBpdCByZW1vdmVzIGEgbG90IG9mIHBvaW50bGVzcyBzdG9yZSBpbnN0cnVjdGlv
bnMuCisgICAgICAgIAorICAgICAgICBJdCBhbHNvIGhhcyBkb3duc2l0ZXMuIFNpbmtpbmcgUHV0
TG9jYWxzIGluY3JlYXNlcyByZWdpc3RlciBwcmVzc3VyZSBiZWNhdXNlIGl0IGluY3JlYXNlcyB0
aGUKKyAgICAgICAgbGl2ZSByYW5nZXMgb2YgdGhpbmdzIGxpa2UgaW5saW5lZCBhcmd1bWVudHMu
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGlzIGEgbmV0IHBlcmZvcm1hbmNlIHdpbiBp
biBpdHMgY3VycmVudCBmb3JtOiAxJSBTdW5TcGlkZXIgcmVncmVzc2lvbiwgMiUgT2N0YW5lVjIK
KyAgICAgICAgcHJvZ3Jlc3Npb24sIDAuNiUgS3Jha2VuIHJlZ3Jlc3Npb24sIDElIEFzbUJlbmNo
IHByb2dyZXNzaW9uLCBhbmQgMC41JSBDb21wcmVzc2lvbkJlbmNoCisgICAgICAgIHJlZ3Jlc3Np
b24uIFRoZSBiaWdnZXN0IHdpbiBpcyBvbiBPY3RhbmUvcmF5dHJhY2UsIHdoaWNoIGltcHJvdmVz
IGJ5IDI3JS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVjb2RlL09wZXJhbmRzLmg6CisgICAgICAgIChKU0M6
Ok9wZXJhbmRzOjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kc0lu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6VHJhaXRzPjo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNv
ZGUvVmlydHVhbFJlZ2lzdGVyLmg6CisgICAgICAgIChKU0M6OlZpcnR1YWxSZWdpc3Rlcjo6aXNI
ZWFkZXIpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50
cnkpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyU2V0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6
Q2xvYmJlclNldEFkZDo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6Q2xvYmJlclNl
dE92ZXJsYXBzOjpvcGVyYXRvcigpKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vT3BD
bG9iYmVyaXplOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpDaGVja0Nsb2JiZXJp
emU6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SGVhcE92ZXJsYXBz
OjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpSZWFkTWV0aG9kQ2xvYmJlcml6ZTo6
b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6V3JpdGVNZXRob2RDbG9iYmVyaXplOjpv
cGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6REZHOjpEZWZNZXRob2RDbG9iYmVyaXplOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKiBkZmcvREZHRmx1c2hGb3JtYXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjptZXJnZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6R3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjpjYXB0dXJlZFZhcnNGb3IpOgorICAgICAgICAqIGRmZy9ERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlOjpkZXRlcm1pbmVNYXRlcmlhbGl6YXRpb25Qb2ludHMpOgor
ICAgICAgICAoSlNDOjpERkc6Ok9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6OnBsYWNlTWF0
ZXJpYWxpemF0aW9uUG9pbnRzKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZnL0RG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6UHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6cmVh
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I6Ondy
aXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6
ZGVmKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxDbG9iYmVyaXplQWRhcHRvcjo6
Y2FsbElmQXBwcm9wcmlhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWNpc2VMb2NhbENsb2Ji
ZXJpemVBZGFwdG9yOjpyZWFkVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpQcmVjaXNlTG9jYWxD
bG9iYmVyaXplQWRhcHRvcjo6d3JpdGVUb3ApOgorICAgICAgICAoSlNDOjpERkc6OmZvckVhY2hM
b2NhbFJlYWRCeVVud2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6cHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZSk6CisgICAgICAgICogZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVB1dExvY2FsU2lua2luZyk6CisgICAgICAgICog
ZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdT
U0FDYWxjdWxhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ2FsY3VsYXRvcjo6Y29tcHV0
ZVBoaXMpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisKIDIwMTQtMTAtMDEgIE9s
aXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBEbyBhbGwgY2xvc2VkIHZh
cmlhYmxlIGFjY2VzcyB0aHJvdWdoIHRoZSBsb2NhbCBsZXhpY2FsIG9iamVjdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTc0MjI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMDcsNiAr
MjA3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNw
cAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3BwCisgICAgZGZnL0RGR1B1dExvY2FsU2lua2luZ1Bo
YXNlLmNwcAogICAgIGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1NTQUNhbGN1bGF0b3IuY3BwCiAgICAgZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFz
ZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNp
b24gMTc0MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDUzLDYgKzQ1Myw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQdXJlVmFsdWUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1
dExvY2FsU2lua2luZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3BwIiAvPgpAQCAtMTEwNCwxMSArMTEw
NSwxMyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoaUNoaWxkcmVuLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGxhbi5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZVBvc3ROdW1iZXJpbmcuaCIgLz4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
cm9tb3RlSGVhcEFjY2Vzcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1Byb21vdGVkSGVhcExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUHVyZVZhbHVlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHV0TG9jYWxTaW5raW5nUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdSZWdpc3RlckJhbmsuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdSZWdpc3RlclNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jl
c3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE3NDIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTYyLDYgKzE1NjIsOSBAQAogCQlDNDlGRTRBQTE5QUFDODNFMDBGNDBDRTkgLyogZ2VuZXJh
dGVfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE4MTlBQUM4M0UwMEY0MENFOSAvKiBn
ZW5lcmF0ZV9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSAqLzsgfTsKIAkJQzQ5RkU0
QUIxOUFBQzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0OUZFNEE3MTlB
QUM4M0UwMEY0MENFOSAvKiBnZW5lcmF0ZV9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzQ5RkU0QUMxOUFB
Qzg2MTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ5RkU0QTgx
OUFBQzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9u
LnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCURD
MDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzAwMDM5MDE5RDhC
RTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCURDMDAwMzk4MTlEQkE3MDYwMDAy
M0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQzAwMDM5NjE5REJBNzA2MDAwMjNFQjAgLyogREZH
UHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwICovOyB9OworCQlEQzAwMDM5OTE5REJBNzA2MDAwMjNF
QjAgLyogREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMDAwMzk3MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRM
b2NhbFNpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUw
RTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAg
Ki87IH07CiAJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThFM0E1NzBERjkyNzhDMDBEOTBC
MzQgLyogVk0uY3BwICovOyB9OwpAQCAtMzIyMiw2ICszMjI1LDkgQEAKIAkJQzQ5RkU0QTgxOUFB
QzgzRTAwRjQwQ0U5IC8qIGdlbmVyYXRlX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gZ2VuZXJhdGVfcHJvdG9jb2xf
dHlwZXNfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQy
MTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZl
cnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDMDAwMzkwMTlEOEJFNkYwMDAyM0VC
MCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDsgcGF0aCA9IGRmZy9ERkdQcmVj
aXNlTG9jYWxDbG9iYmVyaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDMDAw
Mzk2MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlEQzAwMDM5NzE5REJBNzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxT
aW5raW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHV0TG9j
YWxTaW5raW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyog
T3BhcXVlSlNTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVl
SlNTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjYwRTU1NTc3
NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5pdGlhbGl6ZVRocmVhZGluZy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDc1NSw2ICs0NzYxLDcgQEAKIAkJCQkwRjJC
OUNERjE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uaCAqLywKIAkJCQlBNzhBOTc3
MjE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgKi8sCiAJCQkJQTc4QTk3NzMxNzk3MzhC
ODAwOURGNzQ0IC8qIERGR1BsYW4uaCAqLywKKwkJCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNFQjAg
LyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovLAogCQkJCTBGQkUwRjZEMTZDMURCMDEw
MDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQkUw
RjZFMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCAqLywK
IAkJCQkwRkZGQzk1MTE0RUY5MDk1MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwICovLApAQCAtNDc2Niw2ICs0NzczLDggQEAKIAkJCQkwRkFBM0UwODE5RDBDMkNC
MDBGQUM5RTIgLyogREZHUHJvbW90ZUhlYXBBY2Nlc3MuaCAqLywKIAkJCQkwRkIxNzY1RTE5NkI4
RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCAqLywKIAkJCQkwRkIxNzY1RjE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggKi8sCisJCQkJREMwMDAzOTYxOURCQTcwNjAwMDIz
RUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQlEQzAwMDM5NzE5REJB
NzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaCAqLywKIAkJCQk4NkVDOURD
MTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCiAJCQkJMEY2NjZFQ0Ex
ODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAg
Ki8sCiAJCQkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oICovLApAQCAtNTU4Niw2ICs1NTk1LDcgQEAKIAkJCQkwRkVBMEEwODE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTUzQ0UwOEExOEJDMjFDMzAwQkVERjc2IC8qIENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUEwQTFEMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCURDMDAwMzkzMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExRjE3MDhCMDA3MDBCQjcy
MkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0
ODUzMjgxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVBMEEwQTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTU4NDQsNiArNTg1NCw3IEBACiAJCQkJQkMxOEM0MjgwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyOTBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWZDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEy
OEQ0QTgxNzdCNzFDODAwMDdGQTNDIC8qIEpTU3RyaW5nUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJREMwMDAzOTkxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkEwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RkIxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NzE5LDYgKzY3MzAsNyBAQAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0
aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRF
RjkwQTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJG
Qzc3MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJREMwMDAzOTgxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcyRjA0RkYwMDdEQkRBNSAvKiBERkdEZXNp
cmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJDMEY3Q0QxN0JCRkM1QjAw
NDY0RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBT
b3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkocmV2aXNpb24gMTc0MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODQsNyArMzg0LDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBzeW1ib2xUYWJsZSgpLT5jYXB0
dXJlRW5kKCk7CiAgICAgfQotCisgICAgCiAgICAgYm9vbCBpc0NhcHR1cmVkKFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kLCBJbmxpbmVDYWxsRnJhbWUqID0gMCkgY29uc3Q7CiAgICAgCiAgICAgaW50
IGZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVycyhpbnQgbWFjaGluZUNh
cHR1cmVTdGFydCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFu
ZHMuaAkocmV2aXNpb24gMTc0MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wZXJhbmRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1MiwxMSArMjUyLDcgQEAgcHVibGljOgog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cENvbnRleHQqIGNvbnRleHQpIGNvbnN0OwotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwotICAg
IH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgCiBwcml2YXRl
OgogICAgIFZlY3RvcjxULCA4PiBtX2FyZ3VtZW50czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHNJbmxpbmVzLmgJKHJldmlzaW9uIDE3NDIyNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kc0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMjIgQEAgdm9pZCBPcGVyYW5kczxULCBUcmFpdHM+Ojpk
dW1wSW5Db250ZXh0KAogICAgIH0KIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VHJhaXRzPgordm9pZCBPcGVyYW5kczxULCBUcmFpdHM+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CisgICAgZm9yIChzaXplX3Qg
YXJndW1lbnRJbmRleCA9IG51bWJlck9mQXJndW1lbnRzKCk7IGFyZ3VtZW50SW5kZXgtLTspIHsK
KyAgICAgICAgaWYgKFRyYWl0czo6aXNFbXB0eUZvckR1bXAoYXJndW1lbnQoYXJndW1lbnRJbmRl
eCkpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG91dC5wcmludChjb21tYSwgImFy
ZyIsIGFyZ3VtZW50SW5kZXgsICI6IiwgYXJndW1lbnQoYXJndW1lbnRJbmRleCkpOworICAgIH0K
KyAgICBmb3IgKHNpemVfdCBsb2NhbEluZGV4ID0gMDsgbG9jYWxJbmRleCA8IG51bWJlck9mTG9j
YWxzKCk7ICsrbG9jYWxJbmRleCkgeworICAgICAgICBpZiAoVHJhaXRzOjppc0VtcHR5Rm9yRHVt
cChsb2NhbChsb2NhbEluZGV4KSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAibG9jIiwgbG9jYWxJbmRleCwgIjoiLCBsb2NhbChsb2NhbEluZGV4KSk7
CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9wZXJhbmRzSW5s
aW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmlydHVhbFJlZ2lz
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZpcnR1
YWxSZWdpc3Rlci5oCShyZXZpc2lvbiAxNzQyMjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmlydHVhbFJlZ2lzdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIChtX3ZpcnR1YWxS
ZWdpc3RlciAhPSBzX2ludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgYm9vbCBpc0xvY2Fs
KCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElzTG9jYWwobV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAg
ICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gb3BlcmFuZElzQXJndW1lbnQobV92
aXJ0dWFsUmVnaXN0ZXIpOyB9CisgICAgYm9vbCBpc0hlYWRlcigpIGNvbnN0IHsgcmV0dXJuIG1f
dmlydHVhbFJlZ2lzdGVyID49IDAgJiYgbV92aXJ0dWFsUmVnaXN0ZXIgPCBKU1N0YWNrOjpUaGlz
QXJndW1lbnQ7IH0KICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3ZpcnR1
YWxSZWdpc3RlciA+PSBzX2ZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OyB9CiAgICAgaW50IHRv
TG9jYWwoKSBjb25zdCB7IEFTU0VSVChpc0xvY2FsKCkpOyByZXR1cm4gb3BlcmFuZFRvTG9jYWwo
bV92aXJ0dWFsUmVnaXN0ZXIpOyB9CiAgICAgaW50IHRvQXJndW1lbnQoKSBjb25zdCB7IEFTU0VS
VChpc0FyZ3VtZW50KCkpOyByZXR1cm4gb3BlcmFuZFRvQXJndW1lbnQobV92aXJ0dWFsUmVnaXN0
ZXIpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzQyMjUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgaWYgKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZUZp
bHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG5vZGUsIHRvQ1N0cmluZygiRWRnZSB2ZXJpZmljYXRpb24gZXJyb3I6
ICIsIG5vZGUsICItPiIsIGVkZ2UsICIgd2FzIGV4cGVjdGVkIHRvIGhhdmUgdHlwZSAiLCBTcGVj
dWxhdGlvbkR1bXAodHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpLCAiIGJ1dCBoYXMgdHlw
ZSAiLCBTcGVjdWxhdGlvbkR1bXAoZm9yTm9kZShlZGdlKS5tX3R5cGUpKS5kYXRhKCkpOworICAg
IERGR19DUkFTSChtX2dyYXBoLCBub2RlLCB0b0NTdHJpbmcoIkVkZ2UgdmVyaWZpY2F0aW9uIGVy
cm9yOiAiLCBub2RlLCAiLT4iLCBlZGdlLCAiIHdhcyBleHBlY3RlZCB0byBoYXZlIHR5cGUgIiwg
U3BlY3VsYXRpb25EdW1wKHR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSwgIiBidXQgaGFz
IHR5cGUgIiwgU3BlY3VsYXRpb25EdW1wKGZvck5vZGUoZWRnZSkubV90eXBlKSwgIiAoIiwgZm9y
Tm9kZShlZGdlKS5tX3R5cGUsICIpIikuZGF0YSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
QWJzdHJhY3RTdGF0ZVR5cGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTc0MjI1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
OTksMTIgKzM2OTksOCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5l
CiAgICAgICAgIAogICAgICAgICBpZiAobV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVD
YWxsRnJhbWUpCiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FwdHVyZWRWYXJzID0g
bV9pbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gYnl0ZUNvZGVQYXJzZXIt
Pm1fY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspIHsKLSAgICAgICAgICAgICAgICBpZiAoYnl0
ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpKSkKLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVk
VmFycy5zZXQoaSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFycyA9IGJ5dGVDb2RlUGFyc2Vy
LT5tX2dyYXBoLm1fb3V0ZXJtb3N0Q2FwdHVyZWRWYXJzOwogCiAgICAgICAgIGZvciAoaW50IGkg
PSBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgaS0tOykgewogICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGFyZ3VtZW50ID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJTZXQuaAkocmV2aXNpb24gMTc0
MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBoZWFwKQorICAgIHZvaWQgb3BlcmF0b3Io
KShBYnN0cmFjdEhlYXAgaGVhcCkgY29uc3QKICAgICB7CiAgICAgICAgIG1fc2V0LmFkZChoZWFw
KTsKICAgICB9CkBAIC05Niw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3Jlc3VsdCB8PSBt
X3NldC5vdmVybGFwcyhoZWFwKTsKICAgICB9CkBAIC0xMDUsNyArMTA1LDcgQEAgcHVibGljOgog
ICAgIAogcHJpdmF0ZToKICAgICBjb25zdCBDbG9iYmVyU2V0JiBtX3NldDsKLSAgICBib29sIG1f
cmVzdWx0OworICAgIG11dGFibGUgYm9vbCBtX3Jlc3VsdDsKIH07CiAKIHZvaWQgYWRkUmVhZHMo
R3JhcGgmLCBOb2RlKiwgQ2xvYmJlclNldCYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE3NDIyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBA
QAotIC8qCisvKgogICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM3LDcgKzM3LDcgQEAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1bmN0
b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3RvciwgdHlwZW5hbWUgRGVmRnVuY3Rvcj4KLXZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFJlYWRGdW5jdG9yJiByZWFkLCBXcml0
ZUZ1bmN0b3ImIHdyaXRlLCBEZWZGdW5jdG9yJiBkZWYpCit2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVG
dW5jdG9yJiB3cml0ZSwgY29uc3QgRGVmRnVuY3RvciYgZGVmKQogewogICAgIC8vIFNvbWUgbm90
ZXM6CiAgICAgLy8KQEAgLTkwMiw3ICs5MDIsNyBAQCBjbGFzcyBOb09wQ2xvYmJlcml6ZSB7CiBw
dWJsaWM6CiAgICAgTm9PcENsb2JiZXJpemUoKSB7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBUPgotICAgIHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IH0KKyAgICB2b2lkIG9wZXJhdG9yKCko
VC4uLikgY29uc3QgeyB9CiB9OwogCiBjbGFzcyBDaGVja0Nsb2JiZXJpemUgewpAQCAtOTEzLDEy
ICs5MTMsMTIgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBUPgotICAgIHZvaWQgb3BlcmF0b3IoKShULi4uKSB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQorICAg
IHZvaWQgb3BlcmF0b3IoKShULi4uKSBjb25zdCB7IG1fcmVzdWx0ID0gdHJ1ZTsgfQogICAgIAog
ICAgIGJvb2wgcmVzdWx0KCkgY29uc3QgeyByZXR1cm4gbV9yZXN1bHQ7IH0KICAgICAKIHByaXZh
dGU6Ci0gICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7CiB9Owog
CiBib29sIGRvZXNXcml0ZXMoR3JhcGgmLCBOb2RlKik7CkBAIC05MzEsNyArOTMxLDcgQEAgcHVi
bGljOgogICAgIHsKICAgICB9CiAgICAgCi0gICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVh
cCBvdGhlckhlYXApCisgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0SGVhcCBvdGhlckhlYXAp
IGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC05NDIsNyArOTQyLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEFic3RyYWN0SGVh
cCBtX2hlYXA7Ci0gICAgYm9vbCBtX3Jlc3VsdDsKKyAgICBtdXRhYmxlIGJvb2wgbV9yZXN1bHQ7
CiB9OwogCiBib29sIGFjY2Vzc2VzT3ZlcmxhcChHcmFwaCYsIE5vZGUqLCBBYnN0cmFjdEhlYXAp
OwpAQCAtOTU5LDcgKzk1OSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIHZv
aWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9yKCkoQWJz
dHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3ZhbHVlLnJlYWQoaGVhcCk7
CiAgICAgfQpAQCAtOTc1LDcgKzk3NSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB2b2lkIG9wZXJhdG9y
KCkoQWJzdHJhY3RIZWFwIGhlYXApIGNvbnN0CiAgICAgewogICAgICAgICBtX3ZhbHVlLndyaXRl
KGhlYXApOwogICAgIH0KQEAgLTk5MSwxMiArOTkxLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIHZvaWQgb3BlcmF0b3IoKShQdXJlVmFsdWUgdmFsdWUpCisgICAgdm9pZCBv
cGVyYXRvcigpKFB1cmVWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIG1fdmFsdWUu
ZGVmKHZhbHVlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBvcGVyYXRvcigpKEhlYXBMb2NhdGlv
biBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB2b2lkIG9wZXJhdG9yKCkoSGVhcExvY2F0aW9u
IGxvY2F0aW9uLCBOb2RlKiBub2RlKSBjb25zdAogICAgIHsKICAgICAgICAgbV92YWx1ZS5kZWYo
bG9jYXRpb24sIG5vZGUpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE3NDIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwx
NyBAQCBpbmxpbmUgRGF0YUZvcm1hdCBkYXRhRm9ybWF0Rm9yKEZsdXNoRm9yCiAgICAgcmV0dXJu
IERhdGFGb3JtYXREZWFkOwogfQogCitpbmxpbmUgRmx1c2hGb3JtYXQgbWVyZ2UoRmx1c2hGb3Jt
YXQgYSwgRmx1c2hGb3JtYXQgYikKK3sKKyAgICBpZiAoYSA9PSBEZWFkRmx1c2gpCisgICAgICAg
IHJldHVybiBiOworICAgIGlmIChiID09IERlYWRGbHVzaCkKKyAgICAgICAgcmV0dXJuIGE7Cisg
ICAgaWYgKGEgPT0gYikKKyAgICAgICAgcmV0dXJuIGE7CisgICAgcmV0dXJuIENvbmZsaWN0aW5n
Rmx1c2g7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTc0
MjI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1LDYgKzc1LDExIEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4s
IExvbmdMaXYKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX211c3RIYW5kbGVWYWx1ZXMu
c2l6ZSgpOyBpLS07KQogICAgICAgICBtX211c3RIYW5kbGVWYWx1ZXNbaV0gPSBmcmVlemVGcmFn
aWxlKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgaS0tOykgeworICAgICAgICBpZiAobV9jb2RlQmxv
Y2stPmlzQ2FwdHVyZWQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpKQorICAgICAgICAgICAg
bV9vdXRlcm1vc3RDYXB0dXJlZFZhcnMuc2V0KGkpOworICAgIH0KIH0KIAogR3JhcGg6On5HcmFw
aCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzQy
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM2Nyw2ICszNjcsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2Zp
bGVkQmxvY2spOwogICAgIH0KICAgICAKKyAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFy
c0ZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIGlm
ICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0ZXJtb3N0Q2FwdHVy
ZWRWYXJzOworICAgICAgICByZXR1cm4gaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7Cisg
ICAgfQorICAgIAogICAgIGJvb2wgaXNTdHJpY3RNb2RlRm9yKENvZGVPcmlnaW4gY29kZU9yaWdp
bikKICAgICB7CiAgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCkBAIC04
OTQsNiArOTAxLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CiAg
ICAgaW50IG1fbWFjaGluZUNhcHR1cmVTdGFydDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd0Fy
Z3VtZW50W10+IG1fc2xvd0FyZ3VtZW50czsKKyAgICBCaXRWZWN0b3IgbV9vdXRlcm1vc3RDYXB0
dXJlZFZhcnM7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxpbnQ2NF90LCBkb3VibGUqPiBtX2RvdWJsZUNvbnN0YW50c01hcDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMTc0MjI1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzksNiArNzksOCBAQCBib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAg
IGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgY2FzZSBQdXRMb2NhbDoKKyAgICBjYXNlIEtpbGxM
b2NhbDoKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3NDIyNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OCw2ICsxNTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2hhbmdlZCA9
IGZhbHNlOwogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIGJv
b2w+IG1hdGVyaWFsaXplZCA9IG1hdGVyaWFsaXplZEF0SGVhZFtibG9ja107CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBMb29r
aW5nIGF0IGJsb2NrICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZU5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLApAQCAtMTY2LDggKzE2OCwxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoTm9kZSogZXNjYXBlZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gaXRlciA9IG1hdGVyaWFsaXplZC5maW5kKGVzY2FwZWUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVyICE9IG1hdGVyaWFsaXplZC5lbmQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlciAhPSBtYXRlcmlhbGl6ZWQuZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgZXNjYXBlZSwgIiBlc2NhcGVzIGF0
ICIsIG5vZGUsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyLT52
YWx1ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAt
MjcxLDYgKzI3Niw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXpl
ZC5hZGQocGFpci5rZXkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJQbGFjaW5nIG1hdGVyaWFs
aXphdGlvbiBwb2ludHMgaW4gIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiIHdpdGggbWF0ZXJpYWxp
emF0aW9uIHNldCAiLCBsaXN0RHVtcChtYXRlcmlhbGl6ZWQpLCAiXG4iKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgICAgICAKQEAgLTI3OCwxMSArMjg2
LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAg
ICAgICAgIFsmXSAoKSB7IH0sCiAgICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBl
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3NpbmtDYW5kaWRhdGVzLmNvbnRh
aW5zKGVzY2FwZWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiU2VlaW5nICIsIGVzY2FwZWUsICIgZXNj
YXBlIGF0ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMoZXNjYXBlZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEl0J3Mgbm90IGEgc2luayBjYW5kaWRh
dGUuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbWF0ZXJpYWxpemVkLmFkZChlc2NhcGVlKS5pc05ld0VudHJ5KQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRlcmlhbGl6ZWQuYWRkKGVzY2FwZWUpLmlzTmV3
RW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgSXQncyBhbHJlYWR5IG1hdGVy
aWFsaXplZC5cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlTWF0ZXJpYWxpemUoZXNjYXBlZSwgbm9kZSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0pOwpAQCAtNDMyLDYgKzQ0OSwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKE5vZGUqIG1hdGVyaWFsaXplID0gbWFwcGluZy5nZXQoZWRnZS5u
b2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShtYXRlcmlh
bGl6ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIElmIHlvdSBjYXVzZSBhbiBlc2NhcGUsIHlvdSBzaG91bGRuJ3Qgc2VlIHRo
ZSBvcmlnaW5hbCBlc2NhcGVlLgorICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxl
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCisgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsmXSAoTm9kZSogZXNjYXBlZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIW1fc2lua0NhbmRpZGF0ZXMu
Y29udGFpbnMoZXNjYXBlZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXpl
X3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE3NDIyNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYg
KzU0LDcgQEAKICNpbmNsdWRlICJERkdQaGFudG9tUmVtb3ZhbFBoYXNlLmgiCiAjaW5jbHVkZSAi
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oIgog
I2luY2x1ZGUgIkRGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1NTQUNvbnZlcnNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2Uu
aCIKQEAgLTMyMiw2ICszMjMsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGls
ZUluVGhyCiAgICAgICAgIHBlcmZvcm1DUFNSZXRocmVhZGluZyhkZmcpOwogICAgICAgICBwZXJm
b3JtU1NBQ29udmVyc2lvbihkZmcpOwogICAgICAgICBwZXJmb3JtU1NBTG93ZXJpbmcoZGZnKTsK
KyAgICAgICAgcGVyZm9ybVB1dExvY2FsU2lua2luZyhkZmcpOwogICAgICAgICBwZXJmb3JtR2xv
YmFsQ1NFKGRmZyk7CiAgICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAg
ICAgIHBlcmZvcm1DRkEoZGZnKTsKQEAgLTM1NSw3ICszNTcsNyBAQCBQbGFuOjpDb21waWxhdGlv
blBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgIHBlcmZvcm1DRkEoZGZnKTsKICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCiAgICAgICAgICAg
ICBwZXJmb3JtUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvbihkZmcpOwotICAgICAgICBwZXJmb3Jt
RENFKGRmZyk7IC8vIFdlIHJlbHkgb24gdGhpcyB0byBjb252ZXJ0IGRlYWQgU2V0TG9jYWxzIGlu
dG8gdGhlIGFwcHJvcHJpYXRlIGhpbnQsIGFuZCB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0
IGJlIHJlY29nbml6ZWQgYXMgZGVhZCBieSBMTFZNLgorICAgICAgICBwZXJmb3JtRENFKGRmZyk7
IC8vIFdlIHJlbHkgb24gdGhpcyB0byBraWxsIGRlYWQgY29kZSB0aGF0IHdvbid0IGJlIHJlY29n
bml6ZWQgYXMgZGVhZCBieSBMTFZNLgogICAgICAgICBwZXJmb3JtU3RhY2tMYXlvdXQoZGZnKTsK
ICAgICAgICAgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMoZGZnKTsKICAgICAgICAgcGVyZm9ybU9T
UkF2YWlsYWJpbGl0eUFuYWx5c2lzKGRmZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisgCisjaWZuZGVmIERGR1ByZWNpc2VMb2NhbENsb2JiZXJp
emVfaAorI2RlZmluZSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR01heUV4
aXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yLCB0eXBlbmFtZSBEZWZGdW5j
dG9yPgorY2xhc3MgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3IgeworcHVibGljOgorICAg
IFByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yKAorICAgICAgICBHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsCisgICAgICAgIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
bmN0b3ImIHdyaXRlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCisgICAgICAgIDogbV9ncmFwaChn
cmFwaCkKKyAgICAgICAgLCBtX25vZGUobm9kZSkKKyAgICAgICAgLCBtX3JlYWQocmVhZCkKKyAg
ICAgICAgLCBtX3dyaXRlKHdyaXRlKQorICAgICAgICAsIG1fZGVmKGRlZikKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgcmVhZChBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAg
IGlmIChoZWFwLmtpbmQoKSA9PSBWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgIGlmIChoZWFwLnBh
eWxvYWQoKS5pc1RvcCgpKSB7CisgICAgICAgICAgICAgICAgcmVhZFRvcCgpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FsbElmQXBwcm9wcmlhdGUobV9yZWFkLCBWaXJ0dWFsUmVnaXN0ZXIoaGVhcC5wYXlsb2FkKCku
dmFsdWUoKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoaGVhcC5vdmVybGFwcyhWYXJpYWJsZXMpKSB7CisgICAgICAgICAgICByZWFkVG9w
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCB3cml0ZShBYnN0cmFjdEhlYXAgaGVhcCkKKyAgICB7CisgICAgICAgIGlmIChoZWFwLmtpbmQo
KSA9PSBWYXJpYWJsZXMpIHsKKyAgICAgICAgICAgIGlmIChoZWFwLnBheWxvYWQoKS5pc1RvcCgp
KSB7CisgICAgICAgICAgICAgICAgd3JpdGVUb3AoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhbGxJZkFwcHJvcHJp
YXRlKG1fd3JpdGUsIFZpcnR1YWxSZWdpc3RlcihoZWFwLnBheWxvYWQoKS52YWx1ZSgpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChoZWFw
Lm92ZXJsYXBzKFZhcmlhYmxlcykpIHsKKyAgICAgICAgICAgIHdyaXRlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBkZWYoUHVyZVZh
bHVlKQorICAgIHsKKyAgICAgICAgLy8gUHVyZVZhbHVlIGRlZnMgbmV2ZXIgaGF2ZSBhbnl0aGlu
ZyB0byBkbyB3aXRoIGxvY2Fscywgc28gaWdub3JlIHRoaXMuCisgICAgfQorICAgIAorICAgIHZv
aWQgZGVmKEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGlmIChsb2NhdGlvbi5raW5kKCkgIT0gVmFyaWFibGVMb2MpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5oZWFwKCkua2luZCgp
ID09IFZhcmlhYmxlcyk7CisgICAgICAgIAorICAgICAgICBtX2RlZihWaXJ0dWFsUmVnaXN0ZXIo
bG9jYXRpb24uaGVhcCgpLnBheWxvYWQoKS52YWx1ZSgpKSwgbm9kZSk7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgY2FsbElm
QXBwcm9wcmlhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkgJiYgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG9wZXJhbmQudG9Mb2NhbCgpKSA+PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSAmJiAhb3BlcmFuZC5pc0hlYWRlcigp
ICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihvcGVyYW5kLnRvQXJndW1lbnQoKSkgPj0gbV9ncmFw
aC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBmdW5jdG9yKG9wZXJhbmQpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHJlYWRUb3AoKQorICAgIHsKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBv
dXRlcm1vc3QgYXJndW1lbnRzLCBleGNlcHQgdGhpcywgYXJlIGRlZmluaXRlbHkgcmVhZC4KKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOyBpLS0gPiAxOykKKyAgICAgICAgICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpKSk7CisgICAgICAgIAorICAgICAgICAvLyBUaGUgc3RhY2sgaGVhZGVyIGlzIHJlYWQu
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBKU1N0YWNrOjpUaGlzQXJndW1lbnQ7
ICsraSkKKyAgICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaSkpOworICAgICAgICAK
KyAgICAgICAgLy8gUmVhZCBhbGwgb2YgdGhlIGNhcHR1cmVkIHZhcmlhYmxlcy4KKyAgICAgICAg
Y29uc3QgQml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0
dXJlZFZhcnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAg
ICAgIG1fcmVhZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFk
ZXJzIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KKyAgICAgICAgZm9yIChJbmxpbmVD
YWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCisgICAg
ICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkub2Zmc2V0KCkpKTsKKyAgICAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpIHsKKyAgICAgICAgICAg
ICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBKU1N0YWNrOjpTY29wZUNoYWluKSk7CisgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1YWxS
ZWdpc3RlcihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB3cml0ZVRv
cCgpCisgICAgeworICAgICAgICBpZiAobV9ncmFwaC5tX2NvZGVCbG9jay0+dXNlc0FyZ3VtZW50
cygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCk7IGktLSA+IDE7KQorICAgICAgICAgICAgICAgIG1fd3JpdGUodmly
dHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpOworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
Qml0VmVjdG9yJiBjYXB0dXJlZFZhcnMgPQorICAgICAgICAgICAgbV9ncmFwaC5jYXB0dXJlZFZh
cnNGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpIDogY2FwdHVyZWRWYXJzLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG1f
d3JpdGUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkpOworICAgIH0KKyAgICAKKyAgICBHcmFw
aCYgbV9ncmFwaDsKKyAgICBOb2RlKiBtX25vZGU7CisgICAgY29uc3QgUmVhZEZ1bmN0b3ImIG1f
cmVhZDsKKyAgICBjb25zdCBXcml0ZUZ1bmN0b3ImIG1fd3JpdGU7CisgICAgY29uc3QgRGVmRnVu
Y3RvciYgbV9kZWY7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWFkRnVuY3Rvcj4KK3ZvaWQg
Zm9yRWFjaExvY2FsUmVhZEJ5VW53aW5kKEdyYXBoJiBncmFwaCwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCkKK3sKKyAgICBpZiAoZ3JhcGgudW5jaGVja2Vk
QWN0aXZhdGlvblJlZ2lzdGVyKCkuaXNWYWxpZCgpKQorICAgICAgICByZWFkKGdyYXBoLmFjdGl2
YXRpb25SZWdpc3RlcigpKTsKKyAgICBpZiAoZ3JhcGgubV9jb2RlQmxvY2stPnVzZXNBcmd1bWVu
dHMoKSkKKyAgICAgICAgcmVhZCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoZ3JhcGguYXJn
dW1lbnRzUmVnaXN0ZXJGb3IobnVsbHB0cikpKTsKKyAgICAKKyAgICBmb3IgKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlubGlu
ZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5s
aW5lQ2FsbEZyYW1lKSB7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUt
PnVzZXNBcmd1bWVudHMoKSkKKyAgICAgICAgICAgIHJlYWQodW5tb2RpZmllZEFyZ3VtZW50c1Jl
Z2lzdGVyKGdyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSkpKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1
bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Cit2b2lkIHByZWNpc2VMb2NhbENsb2JiZXJpemUo
CisgICAgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLAorICAgIGNvbnN0IFJlYWRGdW5jdG9yJiBy
ZWFkLCBjb25zdCBXcml0ZUZ1bmN0b3ImIHdyaXRlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCit7
CisgICAgUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZUFkYXB0b3I8UmVhZEZ1bmN0b3IsIFdyaXRlRnVu
Y3RvciwgRGVmRnVuY3Rvcj4KKyAgICAgICAgYWRhcHRvcihncmFwaCwgbm9kZSwgcmVhZCwgd3Jp
dGUsIGRlZik7CisgICAgY2xvYmJlcml6ZShncmFwaCwgbm9kZSwgYWRhcHRvcik7CisgICAgaWYg
KG1heUV4aXQoZ3JhcGgsIG5vZGUpKQorICAgICAgICBmb3JFYWNoTG9jYWxSZWFkQnlVbndpbmQo
Z3JhcGgsIG5vZGUtPm9yaWdpbi5mb3JFeGl0LCByZWFkKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
UHV0TG9jYWxTaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdTU0FDYWxjdWxhdG9yLmgi
CisjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5j
bHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworbmFtZXNwYWNlIHsKKworYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2NsYXNzIFZhcmlh
YmxlRGVmZXJyYWwgeworcHVibGljOgorICAgIFZhcmlhYmxlRGVmZXJyYWwoVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG51bGxwdHIpCisgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJs
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJpYWJsZURlZmVycmFsIGNvbmZs
aWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBWYXJpYWJsZURlZmVycmFsKGNvbmZsaWN0TWFy
a2VyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX3ZhcmlhYmxlOyB9CisgICAgCisgICAgYm9vbCBoYXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0
dXJuICEhKnRoaXMgJiYgIWlzQ29uZmxpY3QoKTsgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNz
RGF0YSogdmFyaWFibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxl
KCkpOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0NvbmZsaWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IGNv
bmZsaWN0TWFya2VyKCk7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlRGVmZXJyYWwgbWVyZ2Uo
VmFyaWFibGVEZWZlcnJhbCBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgqdGhpcyA9
PSBvdGhlciB8fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGlm
ICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7CisgICAgICAgIHJldHVybiBjb25m
bGljdCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oVmFyaWFibGVEZWZlcnJh
bCBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVy
Lm1fdmFyaWFibGU7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiLSIpOworICAgICAgICBlbHNlIGlmIChpc0NvbmZsaWN0KCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoIkNvbmZsaWN0Iik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChS
YXdQb2ludGVyKG1fdmFyaWFibGUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKKyAgICB7CisgICAgICAg
IGR1bXAob3V0KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIGNvbmZsaWN0TWFya2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKKyAg
ICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBtX3ZhcmlhYmxlOworfTsKKworY2xh
c3MgUHV0TG9jYWxTaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFB1
dExvY2FsU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwg
IlB1dExvY2FsIHNpbmtpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGUgcHJvYmxlbXMgb2YgdGhpcyBhcHBy
b2FjaCBpcyB0aGF0IGl0IHdpbGwgY3JlYXRlIGEgZHVwbGljYXRlIFBoaSBncmFwaAorICAgICAg
ICAvLyBmb3Igc3Vua2VuIFB1dExvY2FscyBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJlc3Rpbmcg
Y29udHJvbCBmbG93IG1lcmdlcywgYW5kIHdoZXJlIHRoZQorICAgICAgICAvLyB2YWx1ZSBiZWlu
ZyBQdXRMb2NhbCdkIGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUgaW4gdGhlIERGRyBjb2RlLiBXZSBj
b3VsZCB3b3JrIGFyb3VuZCB0aGlzCisgICAgICAgIC8vIGJ5IGRvaW5nIHRoZSBzaW5raW5nIG92
ZXIgQ1BTLCBvciBtYXliZSBqdXN0IGJ5IGRvaW5nIHJlYWxseSBzbWFydCBob2lzdGluZy4gSXQn
cyBhbHNvCisgICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1cGxpY2F0ZSBQaGkgZ3JhcGgg
Y2FuIGJlIGRlZHVwbGljYXRlZCBieSBMTFZNLiBJdCB3b3VsZCBiZSBiZXN0IGlmIHdlCisgICAg
ICAgIC8vIGNvdWxkIG9ic2VydmUgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgUGhpIGdyYXBoIGlu
IHBsYWNlIHRoYXQgZG9lcyB3aGF0IHdlIHdhbnQuIEluCisgICAgICAgIC8vIHByaW5jaXBsZSBp
ZiB3ZSBoYXZlIGEgcmVxdWVzdCB0byBwbGFjZSBhIFBoaSBhdCBhIHBhcnRpY3VsYXIgcGxhY2Us
IHdlIGNvdWxkIGp1c3QgY2hlY2sKKyAgICAgICAgLy8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIFBo
aSB0aGF0IGRvZXMgd2hhdCB3ZSB3YW50LiBCZWNhdXNlIFB1dExvY2FsU2lua2luZ1BoYXNlIHJ1
bnMganVzdAorICAgICAgICAvLyBhZnRlciBTU0EgY29udmVyc2lvbiwgd2UgaGF2ZSBhbG1vc3Qg
YSBndWFyYW50ZWUgdGhhdCB0aGUgUGhpIGdyYXBoIHdlIHByb2R1Y2UgaGVyZSB3b3VsZAorICAg
ICAgICAvLyBiZSB0cml2aWFsbHkgcmVkdW5kYW50IHRvIHRoZSBvbmUgd2UgYWxyZWFkeSBoYXZl
LgorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGRhdGFMb2co
IkdyYXBoIGJlZm9yZSBQdXRMb2NhbCBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBo
LmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU1NBQ2FsY3VsYXRvciBzc2FD
YWxjdWxhdG9yKG1fZ3JhcGgpOworICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1f
Z3JhcGgpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGVyZSB2YXJp
b3VzIGxvY2FscyBhcmUgbGl2ZS4KKyAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Ym9vbD4+IGxp
dmVBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZl
QXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQpOworICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29s
PihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgICAgIGxp
dmVBdFRhaWxbYmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIE9wZXJhbmRzPGJvb2w+IGxpdmUgPSBsaXZlQXRU
YWlsW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJs
b2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAi
OiAiLCBsaXZlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIHIiLCBv
cGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9kZSAsIlxuIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2Fs
Q2xvYmJlcml6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2Fw
ZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dExvY2FsKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAobGl2ZSA9PSBsaXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10gPSBsaXZlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBsaXZlLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVB
dFRhaWxbcHJlZGVjZXNzb3JdW2ldIHw9IGxpdmVbaV07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworICAg
ICAgICAKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBhcmd1bWVudHMgc2hvdWxkIGJlIGxpdmUgYXQg
aGVhZCBvZiByb290LiBOb3RlIHRoYXQgd2UgbWF5IGZpbmQgdGhhdCBzb21lCisgICAgICAgIC8v
IGxvY2FscyBhcmUgbGl2ZSBhdCBoZWFkIG9mIHJvb3QuIFRoaXMgc2VlbXMgd3JvbmcgYnV0IGlz
bid0LiBUaGlzIHdpbGwgaGFwcGVuIGZvciBleGFtcGxlCisgICAgICAgIC8vIGlmIHRoZSBmdW5j
dGlvbiBhY2Nlc3NlcyBjbG9zdXJlIHZhcmlhYmxlICM0MiBmb3Igc29tZSBvdGhlciBmdW5jdGlv
biBhbmQgd2UgZWl0aGVyIGRvbid0CisgICAgICAgIC8vIGhhdmUgdmFyaWFibGUgIzQyIGF0IGFs
bCBvciB3ZSBoYXZlbid0IHNldCBpdCBhdCByb290LCBmb3Igd2hhdGV2ZXIgcmVhc29uLiBCYXNp
Y2FsbHkgdGhpcworICAgICAgICAvLyBhcmlzZXMgc2luY2Ugb3VyIGFsaWFzaW5nIGZvciBjbG9z
dXJlIHZhcmlhYmxlcyBpcyBjb25zZXJ2YXRpdmVseSBiYXNlZCBvbiB2YXJpYWJsZSBudW1iZXIK
KyAgICAgICAgLy8gYW5kIGlnbm9yZXMgdGhlIG93bmluZyBzeW1ib2wgdGFibGUuIFdlIHNob3Vs
ZCBwcm9iYWJseSBmaXggdGhpcyBldmVudHVhbGx5IGFuZCBtYWtlIG91cgorICAgICAgICAvLyBh
bGlhc2luZyBtb3JlIHByZWNpc2UuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBvdXIgcHVy
cG9zZXMgaGVyZSwgdGhlIGltcHJlY2lzaW9uIGluIHRoZSBhbGlhc2luZyBpcyBoYXJtbGVzcy4g
SXQganVzdCBtZWFucyB0aGF0IHdlCisgICAgICAgIC8vIG1heSBub3QgZG8gYXMgbXVjaCBQaGkg
cHJ1bmluZyBhcyB3ZSB3YW50ZWQuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlQXRIZWFk
LmF0SW5kZXgoMCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbGl2ZUF0SGVhZC5hdEluZGV4KDApLmFyZ3VtZW50KGkp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIE5leHQgaWRlbnRpZnkgd2hlcmUgd2Ugd291bGQgd2Fu
dCB0byBzaW5rIFB1dExvY2FscyB0by4gV2Ugc2F5IHRoYXQgdGhlcmUgaXMgYSBkZWZlcnJlZAor
ICAgICAgICAvLyBmbHVzaCBpZiB3ZSBoYWQgYSBQdXRMb2NhbCB3aXRoIGEgZ2l2ZW4gVmFyaWFi
bGVBY2Nlc3NEYXRhKiBidXQgaXQgaGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJpYWxpemVk
IHlldC4KKyAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4+IGRlZmVy
cmVkQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxWYXJpYWJsZURl
ZmVycmFsPj4gZGVmZXJyZWRBdFRhaWwobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Cisg
ICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9ja10gPQorICAgICAgICAgICAgICAgIE9wZXJh
bmRzPFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZCk7CisgICAgICAgICAgICBkZWZlcnJlZEF0VGFpbFtibG9ja10gPQorICAgICAgICAgICAgICAg
IE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxl
c0F0SGVhZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRlZmVycmVkQXRIZWFkLmF0
SW5kZXgoMCkuZmlsbChWYXJpYWJsZURlZmVycmFsOjpjb25mbGljdCgpKTsKKyAgICAgICAgCisg
ICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1
cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+
IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVy
cmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gS2lsbExvY2FsKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9j
YWwoKSkgPSBWYXJpYWJsZURlZmVycmFsOjpjb25mbGljdCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkg
cmVhZHMuCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQp
ID0gVmFyaWFibGVEZWZlcnJhbCgpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVz
Y2FwZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVy
YW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRU
YWlsW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZGVmZXJyZWRBdFRhaWxbYmxvY2tdID0gZGVmZXJyZWQ7Cisg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIHIiLCBkZWZlcnJlZC5vcGVy
YW5kRm9ySW5kZXgoaSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVy
RHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwgZGVmZXJyZWRBdEhl
YWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0ubWVyZ2UoZGVmZXJyZWRbaV0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKGRlZmVycmVkQXRIZWFk
W3N1Y2Nlc3Nvcl1baV0sICJcbiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0gd2hpbGUgKGNo
YW5nZWQpOworICAgICAgICAKKyAgICAgICAgLy8gV2Ugd2lzaCB0byBpbnNlcnQgUHV0TG9jYWxz
IGF0IGFsbCBvZiB0aGUgbWF0ZXJpYWxpemF0aW9uIHBvaW50cywgd2hpY2ggYXJlIGRlZmluZWQK
KyAgICAgICAgLy8gaW1wbGljaXRseSBhcyB0aGUgcGxhY2VzIHdoZXJlIHdlIHNldCBkZWZlcnJl
ZCB0byBEZWFkIHdoaWxlIGl0IHdhcyBwcmV2aW91c2x5IG5vdCBEZWFkLgorICAgICAgICAvLyBU
byBkbyB0aGlzLCB3ZSBtYXkgbmVlZCB0byBidWlsZCBzb21lIFBoaSBmdW5jdGlvbnMgdG8gaGFu
ZGxlIHN0dWZmIGxpa2UgdGhpczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQmVmb3JlOgorICAg
ICAgICAvLworICAgICAgICAvLyAgICAgaWYgKHApCisgICAgICAgIC8vICAgICAgICAgUHV0TG9j
YWwocjQyLCBAeCkKKyAgICAgICAgLy8gICAgIGVsc2UKKyAgICAgICAgLy8gICAgICAgICBQdXRM
b2NhbChyNDIsIEB5KQorICAgICAgICAvLworICAgICAgICAvLyBBZnRlcjoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gICAgIGlmIChwKQorICAgICAgICAvLyAgICAgICAgIFVwc2lsb24oQHgsIF56
KQorICAgICAgICAvLyAgICAgZWxzZQorICAgICAgICAvLyAgICAgICAgIFVwc2lsb24oQHksIF56
KQorICAgICAgICAvLyAgICAgejogUGhpKCkKKyAgICAgICAgLy8gICAgIFB1dExvY2FsKHI0Miwg
QHopCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIGFuIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlIGZvciBlYWNoIGxvY2FsLCBhbmQgYSBEZWYgaXMgYW55Cisg
ICAgICAgIC8vIFB1dExvY2FsIGluIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBUaGUgb3JpZ2luYWwg
UHV0TG9jYWxzIHdpbGwgc2ltcGx5IHZhbmlzaC4KKyAgICAgICAgCisgICAgICAgIE9wZXJhbmRz
PFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFibGUoCisgICAgICAgICAg
ICBPcGVyYW5kc0xpa2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7CisgICAg
ICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+IGluZGV4VG9PcGVyYW5kOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHNzYUNhbGN1bGF0
b3IubmV3VmFyaWFibGUoKTsKKyAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQo
b3BlcmFuZCkgPSB2YXJpYWJsZTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleFRvT3BlcmFuZC5z
aXplKCkgPT0gdmFyaWFibGUtPmluZGV4KCkpOworICAgICAgICAgICAgaW5kZXhUb09wZXJhbmQu
YXBwZW5kKG9wZXJhbmQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBIYXNoU2V0PE5v
ZGUqPiBwdXRMb2NhbHNUb1Npbms7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBm
b3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dExvY2FsOgorICAgICAgICAgICAgICAg
ICAgICBwdXRMb2NhbHNUb1NpbmsuYWRkKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBzc2FD
YWxjdWxhdG9yLm5ld0RlZigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1Zhcmlh
YmxlLm9wZXJhbmQobm9kZS0+bG9jYWwoKSksIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFy
Z3VtZW50OgorICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSksIGJsb2NrLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzc2FDYWxj
dWxhdG9yLmNvbXB1dGVQaGlzKAorICAgICAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBOb2RlKiB7CisgICAgICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+
aW5kZXgoKV07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFsaXZlQXRI
ZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWYXJpYWJsZURlZmVy
cmFsIHZhcmlhYmxlRGVmZXJyYWwgPSBkZWZlcnJlZEF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVy
YW5kKTsKKworICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhhdmUgYW4gaW52YWxpZCBkZWZl
cnJhbCBiZWNhdXNlIGxpdmVuZXNzIGlzIGltcHJlY2lzZS4KKyAgICAgICAgICAgICAgICBpZiAo
IXZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgciIsIG9wZXJhbmQsICIgYXQgIiwgcG9p
bnRlckR1bXAoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVP
cmlnaW4oKSk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCB2
YXJpYWJsZURlZmVycmFsLmhhc1ZhcmlhYmxlKCkpOworICAgICAgICAgICAgICAgIEZsdXNoRm9y
bWF0IGZvcm1hdCA9IHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKS0+Zmx1c2hGb3JtYXQoKTsK
KyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKHJlc3VsdEZvcihmb3JtYXQpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IG1hcHBpbmcoT3BlcmFuZHNMaWtlLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURl
ZmVycmFsPiBkZWZlcnJlZDsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgbWFwcGluZy5maWxsKG51
bGxwdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWFwcGlu
Zy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpE
ZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxl
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlZikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9w
ZXJhbmQpID0gZGVmLT52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0
IHRvcCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcHBpbmcsICJcbiIpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDog
c3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCkt
PmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFw
cGluZyByIiwgb3BlcmFuZCwgIiB0byAiLCBwaGlEZWYtPnZhbHVlKCksICJcbiIpOworICAgICAg
ICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURlZi0+dmFsdWUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJl
ZEF0SGVhZFtibG9ja107CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBu
b2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dExvY2Fs
OiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwodmFyaWFibGUpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgIE1hcHBpbmcgciIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCAiIGF0ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICBtYXBwaW5n
Lm9wZXJhbmQob3BlcmFuZCkgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudDogeworICAgICAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUt
PmxvY2FsKCk7CisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9
IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBLaWxsTG9jYWw6IHsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkp
ID0gVmFyaWFibGVEZWZlcnJhbCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDog
eworICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxS
ZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5p
c0hlYWRlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZURlZmVycmFsIHZh
cmlhYmxlRGVmZXJyYWwgPSBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCF2YXJpYWJsZURlZmVycmFsLmhhc1ZhcmlhYmxlKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2VydCBhIFB1dExvY2FsLgorICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0TG9jYWwgZm9yIHIiLCBvcGVyYW5kLCAiIGF0ICIsIG5v
ZGUsICJcbiIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1h
cHBpbmcub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgaW5jb21pbmcpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dExvY2FsLCBub2RlLT5vcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlRGVmZXJyYWwu
dmFyaWFibGUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShpbmNvbWluZywg
dXNlS2luZEZvcih2YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZsdXNoRm9ybWF0KCkpKSk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUo
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBl
c2NhcGVIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0
ZXIsIE5vZGUqKSB7IH0pOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90
IHVwc2lsb25JbnNlcnRpb25Qb2ludCA9IGJsb2NrLT5zaXplKCkgLSAxOworICAgICAgICAgICAg
Tm9kZU9yaWdpbiB1cHNpbG9uT3JpZ2luID0gYmxvY2stPmxhc3QoKS0+b3JpZ2luOworICAgICAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDog
c3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soc3VjY2Vzc29yQmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIHBoaU5vZGUgPSBwaGlEZWYtPnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFi
bGUoKTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRl
eFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQ3JlYXRpbmcgVXBzaWxv
biBmb3IgciIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2lu
dGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBWYXJp
YWJsZURlZmVycmFsIHZhcmlhYmxlRGVmZXJyYWwgPQorICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgdmFyaWFibGVEZWZlcnJh
bC5oYXNWYXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0
ID0gdmFyaWFibGVEZWZlcnJhbC52YXJpYWJsZSgpLT5mbHVzaEZvcm1hdCgpOworICAgICAgICAg
ICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1c2VLaW5kRm9yKGZvcm1hdCk7CisgICAgICAg
ICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwor
ICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGluY29taW5n
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBv
aW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZShpbmNvbWluZywgdXNlS2luZCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGaW5hbGx5IGVsaW1pbmF0ZSB0aGUgc3Vua2VuIFB1dExvY2FscyBieSB0dXJuaW5nIHRoZW0g
aW50byBQaGFudG9tcy4gVGhpcyBrZWVwcyB3aGF0ZXZlcgorICAgICAgICAvLyB0eXBlIGNoZWNr
IHRoZXkgd2VyZSBkb2luZy4gQWxzbyBwcmVwZW5kIEtpbGxMb2NhbHMgdG8gdGhlbSB0byBlbnN1
cmUgdGhhdCB3ZSBrbm93IHRoYXQKKyAgICAgICAgLy8gdGhlIHJlbGV2YW50IHZhbHVlIHdhcyAq
bm90KiBzdG9yZWQgdG8gdGhlIHN0YWNrLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghcHV0TG9jYWxzVG9TaW5r
LmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbExvY2FsLCBub2RlLT5vcmln
aW4sIE9wSW5mbyhub2RlLT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRl
ciBQdXRMb2NhbCBzaW5raW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisgICAgCitib29sIHBlcmZvcm1QdXRMb2NhbFNpbmtpbmco
R3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcg
UHV0TG9jYWwgU2lua2luZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxQdXRMb2NhbFNp
bmtpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1B1dExvY2FsU2lua2luZ1BoYXNlX2gKKyNkZWZp
bmUgREZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNpbmtz
IFB1dExvY2FscyB0byB0aGUgYWJzb2x1dGUgbGF0ZXN0IHBvaW50IHdoZXJlIHRoZXkgY2FuIHBv
c3NpYmx5IGhhcHBlbiwgd2hpY2ggaXMgdXN1YWxseQorLy8gc2lkZS1lZmZlY3RzIHRoYXQgbWF5
IG9ic2VydmUgdGhlbS4gVGhpcyBlbGltaW5hdGVzIFB1dExvY2FscyBpZiBpdCBzaW5rcyB0aGVt
IHBhc3QgdGhlIHBvaW50IG9mCisvLyB0aGVpciBkZWF0aHMuCisKK2Jvb2wgcGVyZm9ybVB1dExv
Y2FsU2lua2luZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1B1dExvY2FsU2lua2luZ1BoYXNl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDYWxjdWxhdG9y
LmgJKHJldmlzaW9uIDE3NDIyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NB
Q2FsY3VsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgcHVibGljOgog
ICAgIC8vIG5vbkxvY2FsUmVhY2hpbmdEZWYoKSB3aWxsIGZpbmQgaXQgbGF0ZXIuIE5vdGUgdGhh
dCBpdCBpcyBnZW5lcmFsbHkgYWx3YXlzIHNvdW5kIHRvIG5vdAogICAgIC8vIHBydW5lIGFueSBQ
aGlzICh0aGF0IGlzLCB0byBhbHdheXMgaGF2ZSB0aGUgZnVuY3RvciBpbnNlcnQgYSBQaGkgYW5k
IG5ldmVyIHJldHVybiBudWxscHRyKS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQaGlJbnNlcnRp
b25GdW5jdG9yPgotICAgIHZvaWQgY29tcHV0ZVBoaXMoUGhpSW5zZXJ0aW9uRnVuY3RvciBmdW5j
dG9yKQorICAgIHZvaWQgY29tcHV0ZVBoaXMoY29uc3QgUGhpSW5zZXJ0aW9uRnVuY3RvciYgZnVu
Y3RvcikKICAgICB7CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9ncmFw
aC5tX2RvbWluYXRvcnMuaXNWYWxpZCgpKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTc0MjI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDcgKzc0LDcgQEAgcHVibGljOgogICAgIH0gd2hpbGUgKDApCiAKICAgICAjZGVmaW5lIG5vdFNl
dCAoc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpCi0KKyAgICAgICAgCiAgICAgdm9pZCB2YWxpZGF0
ZSgpCiAgICAgewogICAgICAgICAvLyBOQi4gVGhpcyBjb2RlIGlzIG5vdCB3cml0dGVuIGZvciBw
ZXJmb3JtYW5jZSwgc2luY2UgaXQgaXMgbm90IGludGVuZGVkIHRvIHJ1bgpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE3NDIyNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTQtMDktMjggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBGVEwgc2hvdWxkIHNpbmsgUHV0TG9jYWxzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1ha2UgdGhlIHNldCBiaXRzIG9m
IGEgQml0VmVjdG9yIGl0ZXJhYmxlLgorCisgICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAg
ICAgICAoV1RGOjpCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6U2V0Qml0c0l0ZXJhYmxlKToK
KyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVy
YXRvcik6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6
Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9yOjpTZXRCaXRz
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdURjo6Qml0VmVjdG9y
OjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdURjo6
Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6Qml0VmVj
dG9yOjpTZXRCaXRzSXRlcmFibGU6OmVuZCk6CisgICAgICAgIChXVEY6OkJpdFZlY3Rvcjo6c2V0
Qml0cyk6CisKIDIwMTQtMTAtMDEgIENocmlzdG9waGUgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIEhhdmUgaXM8PihUKikgZnVuY3Rpb24gZG8gYSBudWxsIGNoZWNrIG9uIHRo
ZSBwb2ludGVyIGFyZ3VtZW50CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTc0MjI1KQor
KysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2OSw2ICsy
NjksNTggQEAgcHVibGljOiAKICAgICAgICAgcmV0dXJuIEludEhhc2g8dWludHB0cl90Pjo6aGFz
aCh2YWx1ZSk7CiAgICAgfQogICAgIAorICAgIGNsYXNzIFNldEJpdHNJdGVyYWJsZSB7CisgICAg
cHVibGljOgorICAgICAgICBTZXRCaXRzSXRlcmFibGUoY29uc3QgQml0VmVjdG9yJiBiaXRWZWN0
b3IpCisgICAgICAgICAgICA6IG1fYml0VmVjdG9yKGJpdFZlY3RvcikKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fYml0VmVjdG9y
KG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IEJp
dFZlY3RvciYgYml0VmVjdG9yLCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Jp
dFZlY3RvcigmYml0VmVjdG9yKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6
ZV90IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1faW5kZXggPSBtX2JpdFZlY3Rvci0+ZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQml0VmVjdG9yKiBtX2Jp
dFZlY3RvcjsKKyAgICAgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgICAgICB9OworICAgICAg
ICAKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2Jp
dFZlY3RvciwgbV9iaXRWZWN0b3IuZmluZEJpdCgwLCB0cnVlKSk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9iaXRWZWN0b3IsIG1fYml0VmVjdG9y
LnNpemUoKSk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQml0VmVj
dG9yJiBtX2JpdFZlY3RvcjsKKyAgICB9OworICAgIAorICAgIFNldEJpdHNJdGVyYWJsZSBzZXRC
aXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0aGlzKTsgfQorICAgIAogcHJp
dmF0ZToKICAgICBzdGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigpCiAgICAgewpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTc0MjUyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMTAtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBGVEwgc2hvdWxkIHNpbmsgUHV0TG9jYWxzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcxNjgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvZWxpZGFi
bGUtbmV3LW9iamVjdC10aGVuLWNhbGwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1j
YWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bU9mQXJpdGhTZXJpZXMpOgorICAgICAgICAoYmFy
KToKKyAgICAgICAgKGZvbyk6CisKIDIwMTQtMTAtMDIgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5q
YW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIENTUyBKSVQ6IGFkZCB0aGUgaW5pdGlhbCBpbXBs
ZW1lbnRhdGlvbiBvZiA6bnRoLWNoaWxkKEFuK0Igb2Ygc2VsZWN0b3IpCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2VsaWRhYmxlLW5ldy1vYmpl
Y3QtdGhlbi1jYWxsLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0
LXRoZW4tY2FsbAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9lbGlkYWJsZS1uZXctb2JqZWN0
LXRoZW4tY2FsbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZWxp
ZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZWxpZGFibGUtbmV3LW9iamVjdC10aGVuLWNhbGwuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRoZW4tY2FsbC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9lbGlkYWJsZS1uZXctb2JqZWN0LXRo
ZW4tY2FsbC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2VsaWRhYmxlLW5ldy1vYmplY3QtdGhlbi1jYWxsLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjggQEAKK2Z1bmN0aW9uIHN1bU9mQXJpdGhTZXJpZXMobGltaXQpIHsKKyAgICBy
ZXR1cm4gbGltaXQgKiAobGltaXQgKyAxKSAvIDI7Cit9CisKK3ZhciBuID0gMTAwMDAwMDA7CisK
K2Z1bmN0aW9uIGJhcihwLCBvKSB7CisgICAgaWYgKHApCisgICAgICAgIHJldHVybiA1OworICAg
IGVsc2UKKyAgICAgICAgcmV0dXJuIDY7Cit9CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICB2
YXIgbyA9IHtmOiBpfTsKKyAgICAgICAgdmFyIHAgPSB7ZjogaSArIDF9OworICAgICAgICBiYXIo
aSwgbyk7CisgICAgICAgIGJhcihpLCBwKTsKKyAgICAgICAgcmVzdWx0ICs9IG8uZiArIHAuZjsK
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygpOworaWYg
KHJlc3VsdCAhPSBzdW1PZkFyaXRoU2VyaWVzKG4gLSAxKSArIHN1bU9mQXJpdGhTZXJpZXMobikp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>
<flag name="review"
          id="263880"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>