<?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>69114</bug_id>
          
          <creation_ts>2011-09-29 17:28:29 -0700</creation_ts>
          <short_desc>DFG does not speculate aggressively enough on put_by_id</short_desc>
          <delta_ts>2011-09-30 17:57:53 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475770</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-29 17:28:29 -0700</bug_when>
    <thetext>The DFG should implement the same by-offset optimizations for put_by_id as it already performs for get_by_id.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475813</commentid>
    <comment_count>1</comment_count>
      <attachid>109236</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-29 18:58:45 -0700</bug_when>
    <thetext>Created attachment 109236
work in progress

This seems to sort of work.  Still doing more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475823</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-29 19:15:11 -0700</bug_when>
    <thetext>Nice speed-up on V8.


Benchmark report for V8.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PutByOffset&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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              PutByOffset                                   

crypto            70.8626+-0.3336    !    72.0406+-0.3267       ! definitely 1.0166x slower
deltablue        227.4823+-1.2145        225.5072+-2.2500       
earley-boyer      90.0359+-0.8468    ^    87.4768+-0.3990       ^ definitely 1.0293x faster
raytrace          62.8978+-0.2882    ^    60.9215+-0.5096       ^ definitely 1.0324x faster
regexp           103.5795+-0.4278        102.7796+-0.4376       
richards         198.4522+-0.8880    ^   186.9556+-0.6424       ^ definitely 1.0615x faster
splay             90.2233+-0.3854    ?    91.0759+-0.7460       ?

&lt;arithmetic&gt;     120.5048+-0.2634    ^   118.1082+-0.3645       ^ definitely 1.0203x faster
&lt;geometric&gt;      107.8085+-0.1881    ^   106.1108+-0.2448       ^ definitely 1.0160x faster
&lt;harmonic&gt;        98.1841+-0.1934    ^    96.9183+-0.2551       ^ definitely 1.0131x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475828</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-29 19:20:57 -0700</bug_when>
    <thetext>Looks like it&apos;s only a win on V8.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PutByOffset&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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              PutByOffset                                   
SunSpider:
   3d-cube                                7.4733+-0.2370    ?     7.4909+-0.2434       ?
   3d-morph                               7.3221+-0.1314    ?     7.4902+-0.1818       ? might be 1.0230x slower
   3d-raytrace                            8.2079+-0.2675    ?     8.2614+-0.2639       ?
   access-binary-trees                    2.0855+-0.0733    ^     1.7651+-0.0578       ^ definitely 1.1816x faster
   access-fannkuch                        6.5079+-0.1798          6.3323+-0.0819         might be 1.0277x faster
   access-nbody                           3.6268+-0.0917          3.4877+-0.0829         might be 1.0399x faster
   access-nsieve                          2.6092+-0.0605    ?     2.6369+-0.0700       ? might be 1.0106x slower
   bitops-3bit-bits-in-byte               1.7039+-0.0381    ?     1.7147+-0.0353       ?
   bitops-bits-in-byte                    2.7511+-0.0767    ?     2.7978+-0.0933       ? might be 1.0170x slower
   bitops-bitwise-and                     3.4511+-0.0848    ^     3.2750+-0.0814       ^ definitely 1.0538x faster
   bitops-nsieve-bits                     5.5331+-0.1009          5.4708+-0.0805         might be 1.0114x faster
   controlflow-recursive                  2.0846+-0.0539          2.0461+-0.0608         might be 1.0188x faster
   crypto-aes                             6.6652+-0.2079    ?     6.7579+-0.1919       ? might be 1.0139x slower
   crypto-md5                             2.8164+-0.0746    ?     2.8615+-0.0950       ? might be 1.0160x slower
   crypto-sha1                            2.5247+-0.0600          2.4973+-0.0644         might be 1.0110x faster
   date-format-tofte                     10.0118+-0.2674    ?    10.1345+-0.2735       ? might be 1.0123x slower
   date-format-xparb                      9.2736+-0.3044    ?     9.5957+-0.3815       ? might be 1.0347x slower
   math-cordic                            6.5799+-0.2671          6.4915+-0.1929         might be 1.0136x faster
   math-partial-sums                      7.5752+-0.1633    ?     7.6859+-0.1510       ? might be 1.0146x slower
   math-spectral-norm                     2.8814+-0.0999          2.8715+-0.0738       
   regexp-dna                            10.8292+-0.1427    ?    10.8850+-0.1618       ?
   string-base64                          6.0760+-0.2190    ?     6.1591+-0.2329       ? might be 1.0137x slower
   string-fasta                           7.0525+-0.2171    ?     7.1913+-0.3145       ? might be 1.0197x slower
   string-tagcloud                       11.8762+-0.3947    ?    11.9610+-0.3092       ?
   string-unpack-code                    21.3559+-0.4601         21.2620+-0.4328       
   string-validate-input                  6.2368+-0.1467    ?     6.3990+-0.2173       ? might be 1.0260x slower

   &lt;arithmetic&gt;                           6.3504+-0.0324    ?     6.3662+-0.0315       ?
   &lt;geometric&gt;                            5.2336+-0.0294          5.2091+-0.0221       
   &lt;harmonic&gt;                             4.3158+-0.0355    ^     4.2486+-0.0303       ^ definitely 1.0158x faster

                                            TipOfTree              PutByOffset                                   
V8:
   crypto                                71.1752+-0.4499    !    72.1471+-0.3928       ! definitely 1.0137x slower
   deltablue                            228.0470+-1.1437    ?   228.2657+-2.3416       ?
   earley-boyer                          89.8495+-0.6176    ^    88.1906+-0.5496       ^ definitely 1.0188x faster
   raytrace                              62.3209+-0.3664    ^    61.1129+-0.4345       ^ definitely 1.0198x faster
   regexp                               104.0114+-0.7839        103.5840+-0.6265       
   richards                             199.0179+-1.0726    ^   187.5831+-1.0648       ^ definitely 1.0610x faster
   splay                                 91.0199+-0.7136    ?    91.4576+-0.6711       ?

   &lt;arithmetic&gt;                         120.7774+-0.3729    ^   118.9059+-0.3800       ^ definitely 1.0157x faster
   &lt;geometric&gt;                          107.9834+-0.3348    ^   106.7217+-0.2557       ^ definitely 1.0118x faster
   &lt;harmonic&gt;                            98.2570+-0.3084    ^    97.3992+-0.2199       ^ definitely 1.0088x faster

                                            TipOfTree              PutByOffset                                   
Kraken:
   ai-astar                             493.2977+-4.6697        491.8601+-3.7826       
   audio-beat-detection                 190.4707+-1.7293    ?   190.7607+-1.5873       ?
   audio-dft                            280.9297+-2.4491        279.2958+-2.6566       
   audio-fft                            128.3063+-1.0409    ?   129.6684+-1.1003       ? might be 1.0106x slower
   audio-oscillator                     256.1838+-1.9104        255.2704+-2.2988       
   imaging-darkroom                     422.3094+-1.3344    ^   418.5479+-1.3490       ^ definitely 1.0090x faster
   imaging-desaturate                   223.5703+-0.8074    ?   224.3784+-1.7922       ?
   imaging-gaussian-blur                582.5605+-2.3726    ?   583.2726+-2.1460       ?
   json-parse-financial                  48.5278+-0.8188         47.7118+-0.3265         might be 1.0171x faster
   json-stringify-tinderbox              68.5631+-0.5214         68.4865+-0.3847       
   stanford-crypto-aes                  130.9508+-1.2565        130.0566+-1.3290       
   stanford-crypto-ccm                  101.1984+-0.9027    ?   102.0392+-0.9587       ?
   stanford-crypto-pbkdf2               193.0240+-1.6461    !   196.9612+-1.7595       ! definitely 1.0204x slower
   stanford-crypto-sha256-iterative      83.5403+-0.4886    !    85.1920+-0.5650       ! definitely 1.0198x slower

   &lt;arithmetic&gt;                         228.8166+-0.5134    ?   228.8215+-0.4248       ?
   &lt;geometric&gt;                          178.7126+-0.6271    ?   178.9531+-0.3788       ?
   &lt;harmonic&gt;                           138.6559+-0.7664    ?   138.7200+-0.3518       ?

                                            TipOfTree              PutByOffset                                   
All benchmarks:
   &lt;arithmetic&gt;                          89.6593+-0.1651         89.3907+-0.1544       
   &lt;geometric&gt;                           23.5139+-0.0709         23.4213+-0.0565       
   &lt;harmonic&gt;                             7.5847+-0.0606    ^     7.4693+-0.0520       ^ definitely 1.0155x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475841</commentid>
    <comment_count>4</comment_count>
      <attachid>109243</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-29 19:41:09 -0700</bug_when>
    <thetext>Created attachment 109243
the patch - works on 64-bit

Still need to do the 32_64 work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476312</commentid>
    <comment_count>5</comment_count>
      <attachid>109347</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 14:19:15 -0700</bug_when>
    <thetext>Created attachment 109347
the patch - 32_64 and 64 work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476313</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 14:21:08 -0700</bug_when>
    <thetext>Attachment 109347 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGPropagator.cpp:1034:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 1 in 9 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>476339</commentid>
    <comment_count>7</comment_count>
      <attachid>109353</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 15:08:44 -0700</bug_when>
    <thetext>Created attachment 109353
the patch - fix style and merge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476341</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 15:14:01 -0700</bug_when>
    <thetext>Latest numbers, after merging and such.  It appears that there are slow-downs in some benchmarks, though the slow-downs are smaller than the speed-ups.  The slow-downs are all because PutById has no polymorphic case, and in some (rare!) cases the structure that it&apos;s patched on is no longer live.  We should fix that by blowing away all property access patches (and maybe all patches, period) whenever we trigger recompilation.  For now, I recommend landing this, because it&apos;s a bigger win (1.6% on V8) than it is a loss (0.6% on Kraken).



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PutByOffset&quot; at /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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              PutByOffset                                   
SunSpider:
   3d-cube                                7.6548+-0.3226          7.3917+-0.1907         might be 1.0356x faster
   3d-morph                               7.4151+-0.1395    ?     7.4507+-0.1249       ?
   3d-raytrace                            8.4812+-0.2948          8.3150+-0.2184         might be 1.0200x faster
   access-binary-trees                    2.1094+-0.0995    ^     1.8069+-0.0613       ^ definitely 1.1674x faster
   access-fannkuch                        6.5808+-0.1922    ?     6.7499+-0.3102       ? might be 1.0257x slower
   access-nbody                           3.6466+-0.0806          3.5337+-0.0536         might be 1.0320x faster
   access-nsieve                          2.6069+-0.0616    ?     2.6798+-0.0636       ? might be 1.0280x slower
   bitops-3bit-bits-in-byte               1.7354+-0.0394          1.7119+-0.0337         might be 1.0137x faster
   bitops-bits-in-byte                    2.7756+-0.0751          2.7511+-0.0885       
   bitops-bitwise-and                     3.4489+-0.0767    ^     3.2602+-0.0614       ^ definitely 1.0579x faster
   bitops-nsieve-bits                     5.5177+-0.1257    ?     5.5852+-0.2135       ? might be 1.0122x slower
   controlflow-recursive                  2.1451+-0.0706          2.1262+-0.1009       
   crypto-aes                             6.8211+-0.1833          6.7461+-0.2125         might be 1.0111x faster
   crypto-md5                             2.8203+-0.0738          2.7874+-0.0739         might be 1.0118x faster
   crypto-sha1                            2.5016+-0.0660    ?     2.5311+-0.0773       ? might be 1.0118x slower
   date-format-tofte                     10.0443+-0.2708    ?    10.2338+-0.2693       ? might be 1.0189x slower
   date-format-xparb                     10.0244+-0.4041          9.7601+-0.2739         might be 1.0271x faster
   math-cordic                            6.3638+-0.2144          6.3315+-0.0620       
   math-partial-sums                      7.7000+-0.0621    ?     7.7615+-0.1886       ?
   math-spectral-norm                     3.0138+-0.3396          2.8333+-0.0575         might be 1.0637x faster
   regexp-dna                            10.8769+-0.1672    ?    10.9393+-0.2064       ?
   string-base64                          6.2164+-0.1799          6.0559+-0.2046         might be 1.0265x faster
   string-fasta                           7.0881+-0.1568          6.8526+-0.1197         might be 1.0344x faster
   string-tagcloud                       12.1531+-0.2665         11.9861+-0.3321         might be 1.0139x faster
   string-unpack-code                    21.3522+-0.4916    ?    21.4023+-0.4834       ?
   string-validate-input                  6.3879+-0.2148    ?     6.4203+-0.2185       ?

   &lt;arithmetic&gt;                           6.4416+-0.0494          6.3848+-0.0395       
   &lt;geometric&gt;                            5.3031+-0.0494          5.2245+-0.0305         might be 1.0150x faster
   &lt;harmonic&gt;                             4.3660+-0.0548    ^     4.2681+-0.0382       ^ definitely 1.0229x faster

                                            TipOfTree              PutByOffset                                   
V8:
   crypto                                72.1369+-0.7540    ?    73.1136+-0.4965       ? might be 1.0135x slower
   deltablue                            230.9621+-0.8870    ^   226.2957+-1.9236       ^ definitely 1.0206x faster
   earley-boyer                          91.2661+-0.8792    ^    87.8639+-0.2933       ^ definitely 1.0387x faster
   raytrace                              63.6002+-0.4248    ^    62.0997+-1.0089       ^ definitely 1.0242x faster
   regexp                               104.6459+-0.6469    ?   106.7863+-1.6047       ? might be 1.0205x slower
   richards                             203.1269+-2.4756    ^   188.0540+-1.1212       ^ definitely 1.0802x faster
   splay                                 91.4723+-0.7206    ?    92.3211+-0.9555       ?

   &lt;arithmetic&gt;                         122.4586+-0.3488    ^   119.5049+-0.5252       ^ definitely 1.0247x faster
   &lt;geometric&gt;                          109.4324+-0.3007    ^   107.6235+-0.4169       ^ definitely 1.0168x faster
   &lt;harmonic&gt;                            99.5829+-0.3574    ^    98.4368+-0.4103       ^ definitely 1.0116x faster

                                            TipOfTree              PutByOffset                                   
Kraken:
   ai-astar                             492.2343+-4.4177    ?   500.2010+-5.8382       ? might be 1.0162x slower
   audio-beat-detection                 190.9514+-0.5210    ?   193.0569+-1.7599       ? might be 1.0110x slower
   audio-dft                            287.1908+-2.8916        284.1722+-4.7994         might be 1.0106x faster
   audio-fft                            128.8452+-1.2426    ?   128.9132+-1.2200       ?
   audio-oscillator                     260.5544+-1.9829        259.4385+-2.5186       
   imaging-darkroom                     420.9855+-1.0263    ?   421.8993+-1.7584       ?
   imaging-desaturate                   225.8952+-2.0593    ?   228.8723+-2.6980       ? might be 1.0132x slower
   imaging-gaussian-blur                586.2501+-4.6554    ?   589.6864+-4.7268       ?
   json-parse-financial                  48.4939+-0.2546    ?    48.7435+-1.2599       ?
   json-stringify-tinderbox              68.6375+-0.3577    !    70.0573+-0.9318       ! definitely 1.0207x slower
   stanford-crypto-aes                  133.3343+-1.9512        132.8290+-2.0660       
   stanford-crypto-ccm                  102.4281+-0.6916        102.1125+-1.6788       
   stanford-crypto-pbkdf2               196.7817+-1.7446    ?   201.3275+-4.3554       ? might be 1.0231x slower
   stanford-crypto-sha256-iterative      85.1036+-0.6282    ?    85.6230+-0.8534       ?

   &lt;arithmetic&gt;                         230.5490+-0.5868    !   231.9238+-0.7332       ! definitely 1.0060x slower
   &lt;geometric&gt;                          180.3196+-0.3844    !   181.3460+-0.6401       ! definitely 1.0057x slower
   &lt;harmonic&gt;                           139.7823+-0.3152    ?   140.6246+-0.7808       ?

                                            TipOfTree              PutByOffset                                   
All benchmarks:
   &lt;arithmetic&gt;                          90.4761+-0.2161         90.4143+-0.2503       
   &lt;geometric&gt;                           23.7963+-0.1389         23.5822+-0.0897       
   &lt;harmonic&gt;                             7.6727+-0.0940    ^     7.5051+-0.0658       ^ definitely 1.0223x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476410</commentid>
    <comment_count>9</comment_count>
      <attachid>109353</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-30 16:41:51 -0700</bug_when>
    <thetext>Comment on attachment 109353
the patch - fix style and merge

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

r=me, but you should probably drop the write barrier if the cell is already in the old generation

&gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:270
&gt; +void JITCodeGenerator::writeBarrier(GPRReg ownerGPR, JSCell* value, WriteBarrierUseKind useKind, GPRReg scratch1, GPRReg scratch2)

if value is a cell you can do a generation check (Heap::isMarked()) you can avoid planting this write barrier entirely</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476467</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 17:52:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 109353 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109353&amp;action=review
&gt; 
&gt; r=me, but you should probably drop the write barrier if the cell is already in the old generation
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp:270
&gt; &gt; +void JITCodeGenerator::writeBarrier(GPRReg ownerGPR, JSCell* value, WriteBarrierUseKind useKind, GPRReg scratch1, GPRReg scratch2)
&gt; 
&gt; if value is a cell you can do a generation check (Heap::isMarked()) you can avoid planting this write barrier entirely

Right, good point!  I made that change, will land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476468</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 17:57:53 -0700</bug_when>
    <thetext>Landed in r96443.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109236</attachid>
            <date>2011-09-29 18:58:45 -0700</date>
            <delta_ts>2011-09-29 19:41:09 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>putbyoffset_patch_1.diff</filename>
            <type>text/plain</type>
            <size>25246</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYzODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAK
KzIwMTEtMDktMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgZG9lcyBub3Qgc3BlY3VsYXRlIGFnZ3Jlc3NpdmVseSBlbm91Z2ggb24gcHV0X2J5X2lkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV09S
SyBJTiBQUk9HUkVTUy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBuZXcgbm9kZXMgYWxv
bmcgd2l0aCBvcHRpbWl6YXRpb25zIGZvciB0aG9zZSBub2RlczoKKyAgICAgICAgCisgICAgICAg
IEdldFByb3BlcnR5U3RvcmFnZTogQ2hlY2tTdHJ1Y3R1cmUgdXNlZCB0byBkbyBib3RoIHRoZSBz
dHJ1Y3R1cmUKKyAgICAgICAgY2hlY2sgYW5kIHJldHJpZXZlIHRoZSBzdG9yYWdlIHBvaW50ZXIu
IE5vdyBDaGVja1N0cnVjdHVyZSBqdXN0CisgICAgICAgIGNoZWNrcyB0aGUgc3RydWN0dXJlLCBh
bmQgR2V0UHJvcGVydHlTdG9yYWdlIHJldHJpZXZlcyB0aGUKKyAgICAgICAgc3RvcmFnZSBwb2lu
dGVyLgorICAgICAgICAKKyAgICAgICAgUHV0U3RydWN0dXJlOiBDaGFuZ2VzIHRoZSBzdHJ1Y3R1
cmUsIGFuZCBoYXMgdGhlIGV4cGVjdGVkIHN0b3JlCisgICAgICAgIHRvIGxvYWQgb3B0aW1pemF0
aW9uIHdpdGggQ2hlY2tTdHJ1Y3R1cmUuCisgICAgICAgIAorICAgICAgICBQdXRCeU9mZnNldDog
RGlyZWN0bHkgc2V0cyB0aGUgdmFsdWUuIEhhcyBzdG9yZSB0byBsb2FkCisgICAgICAgIG9wdGlt
aXphdGlvbiB3aXRoIEdldEJ5T2Zmc2V0LgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2VsbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFz
U3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmltcHVyZUNTRSk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmVsaW1pbmF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMDkt
MjkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAg
IFN0YXJ0IHJlZmFjdG9yaW5nIERGR1NwZWN1bGF0aXZlSklUCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTYzNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC00MDQsNiArNDA1LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBnZXRKU0Nv
bnN0YW50KG1fY29uc3RhbnROYU4pOwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggY2VsbENv
bnN0YW50KEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5z
aWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV9jZWxsQ29uc3RhbnRzLmZpbmQoY2VsbCk7CisgICAg
ICAgIGlmIChpdGVyICE9IG1fY2VsbENvbnN0YW50cy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KGl0ZXItPnNlY29uZCk7CisgICAgICAgIAorICAgICAgICBtX2NvZGVC
bG9jay0+YWRkQ29uc3RhbnQoY2VsbCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChDb25z
dGFudFJlY29yZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0
ZXJzKCkgLSAxKTsKKyAgICB9CisgICAgCiAgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdp
bigpCiAgICAgewogICAgICAgICByZXR1cm4gQ29kZU9yaWdpbihtX2N1cnJlbnRJbmRleCk7CkBA
IC01NzYsNiArNTkwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TnVsbDsK
ICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TmFOOwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnQxOwor
ICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5zaWduZWQ+IG1fY2VsbENvbnN0YW50czsKIAogICAgIC8v
IEEgY29uc3RhbnQgaW4gdGhlIGNvbnN0YW50IHBvb2wgbWF5IGJlIHJlcHJlc2VudGVkIGJ5IG1v
cmUgdGhhbiBvbmUKICAgICAvLyBub2RlIGluIHRoZSBncmFwaCwgZGVwZW5kaW5nIG9uIHRoZSBj
b250ZXh0IGluIHdoaWNoIGl0IGlzIGJlaW5nIHVzZWQuCkBAIC0xMTU0LDcgKzExNjksOCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
c2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91
bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZz
ZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8oc3RydWN0dXJlKSwg
YmFzZSkpOworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBP
cEluZm8oc3RydWN0dXJlKSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBh
ZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3Jh
Z2UsIGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZzZXQ7CkBAIC0xMTc0LDEzICsxMTkwLDg0IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhd
LnUub3BlcmFuZDsKIAotICAgICAgICAgICAgaWYgKGRpcmVjdCkKLSAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFsdWUp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwg
T3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8gPSBtX3Byb2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvKG1fY3VycmVu
dEluZGV4KTsKKyAgICAgICAgICAgIGlmICghc3R1YkluZm8uc2VlbiB8fCBzdHViSW5mby5hY2Nl
c3NUeXBlID09IGFjY2Vzc191bnNldCkKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNl
T1NSRXhpdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgYWxyZWFkeUdlbmVyYXRl
ZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3R1YkluZm8uc2Vlbikg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7CisgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVy
IGlkZW50aWZpZXIgPSBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsK
KyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2ds
b2JhbERhdGEsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKHN0cnVjdHVyZSksIGJhc2UpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJbmZvKG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBiYXNlLCBhZGRUb0dyYXBoKEdldFBy
b3BlcnR5U3RvcmFnZSwgYmFzZSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0Rh
dGE7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlm
aWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5R2Vu
ZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uOiB7CisgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUgPSBzdHViSW5mby51LnB1dEJ5
SWRUcmFuc2l0aW9uLnByZXZpb3VzU3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24u
c3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpICE9IG5l
d1N0cnVjdHVyZS0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNp
dGlvbi5jaGFpbi5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50
aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbmV3U3Ry
dWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5kKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8ocHJl
dmlvdXNTdHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGly
ZWN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBzdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3Rv
cmVkUHJvdG90eXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90
b3R5cGUuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5p
c0NlbGwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKSwgY2Vs
bENvbnN0YW50KHByb3RvdHlwZS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8obmV3U3RydWN0dXJlKSwgYmFzZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgp
KSwgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VB
Y2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgc3Rv
cmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5k
KHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgYWxyZWFkeUdlbmVyYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghYWxyZWFkeUdlbmVyYXRlZCkgeworICAgICAgICAgICAg
ICAgIGlmIChkaXJlY3QpCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERp
cmVjdCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwgdmFsdWUpOworICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTYzNzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5
LDYgKzE0OSwyMCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAg
ICAgICAgICAgICBwcmludGYoIiVzaWQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUu
aWRlbnRpZmllck51bWJlcigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQor
ICAgIGlmIChub2RlLmhhc1N0cnVjdHVyZSgpKSB7CisgICAgICAgIHByaW50ZigiJXNzdHJ1Y3Qo
JXApIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAg
IGhhc1ByaW50ZWQgPSB0cnVlOworICAgIH0KKyAgICBpZiAobm9kZS5oYXNTdG9yYWdlQWNjZXNz
RGF0YSgpKSB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9
IG1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAg
ICAgICBpZiAoY29kZUJsb2NrKQorICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXV7JXN9IiwgaGFz
UHJpbnRlZCA/ICIsICIgOiAiIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwg
Y29kZUJsb2NrLT5pZGVudGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIp
LnVzdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJp
bnRmKCIlc2lkJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBzdG9yYWdlQWNjZXNzRGF0YS5p
ZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgCisgICAgICAgIHByaW50ZigiLCAlbHUiLCBzdG9y
YWdlQWNjZXNzRGF0YS5vZmZzZXQpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICB9
CiAgICAgQVNTRVJUKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS5oYXNMb2Nh
bCgpKTsKICAgICBpZiAobm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkgewogICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk2Mzc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYg
KzI2NywzNiBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihHUFJSCiAjZW5k
aWYKIH0KIAordm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVy
R1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBz
Y3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7
CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwor
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwor
CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVyOjpl
bWl0Q291bnQoaml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5k
KSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShHR0MpCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAxOwor
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wMjsKKyAgICBpZiAoc2NyYXRjaDEgPT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaEdQUih0aGlzKTsKKyAgICAgICAgdGVt
cDEuYWRvcHQoc2NyYXRjaEdQUik7CisgICAgICAgIHNjcmF0Y2gxID0gdGVtcDEuZ3ByKCk7Cisg
ICAgfQorICAgIGlmIChzY3JhdGNoMiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMpOworICAgICAgICB0ZW1wMi5hZG9wdChzY3JhdGNoR1BS
KTsKKyAgICAgICAgc2NyYXRjaDIgPSB0ZW1wMi5ncHIoKTsKKyAgICB9CisKKyAgICBtYXJrQ2Vs
bENhcmQobV9qaXQsIG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworI2VuZGlmCit9CisK
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJl
ZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQgdXNl
S2luZCwgR1BSUmVnIHNjcmF0Y2gpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShy
ZXZpc2lvbiA5NjM3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdl
bmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQ
UiwgR1BSUmVnIHNjcmF0Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllclVz
ZUtpbmQpOwogCiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcg
dmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJS
ZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZh
bGlkR1BSUmVnKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEpTQ2Vs
bCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFs
aWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwogICAgIHZvaWQg
d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZh
bHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFs
aWRHUFJSZWcpOwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBw
cmVzZXJ2ZTEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJl
ZywgR1BSUmVnIHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTYzNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDggKzMxMywxMSBAQCBzdGF0
aWMgaW5saW5lIGNvbnN0IGNoYXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oR2V0QnlJZCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAg
ICAgbWFjcm8oUHV0QnlJZCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBc
CiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCi0gICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmUsIE5vZGVSZXN1bHRTdG9yYWdlIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgbWFjcm8oUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9k
ZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhHZXRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1
bHRTdG9yYWdlKSBcCiAgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKFB1dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQp
IFwKICAgICBtYWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFj
cm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKQEAgLTc4
Miw3ICs3ODUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmUo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09IENoZWNrU3RydWN0dXJlOworICAgICAgICBy
ZXR1cm4gb3AgPT0gQ2hlY2tTdHJ1Y3R1cmUgfHwgb3AgPT0gUHV0U3RydWN0dXJlOwogICAgIH0K
ICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpCkBAIC03OTIsNyArNzk1LDcgQEAgc3Ry
dWN0IE5vZGUgewogICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIG9wID09IEdldEJ5T2Zmc2V0OworICAgICAgICByZXR1cm4gb3AgPT0g
R2V0QnlPZmZzZXQgfHwgb3AgPT0gUHV0QnlPZmZzZXQ7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIHN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NjM3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3
ICs0NDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgIGNhc2UgR2V0
UHJvcGVydHlTdG9yYWdlOiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
UHJlZGljdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01ODMsNiAr
NTgzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgogICAgICAgICBj
YXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAv
LyBUaGlzIGdldHMgaWdub3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCkBAIC04
ODgsNiArODkxLDM5IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgTm9k
ZUluZGV4IGltcHVyZUNTRShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IGNo
aWxkMSA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZUluZGV4IGNo
aWxkMiA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZUluZGV4IGNo
aWxkMyA9IGNhbm9uaWNhbGl6ZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIE5v
ZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5k
ZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9k
ZSYgb3RoZXJOb2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9
PSBvdGhlck5vZGUub3AKKyAgICAgICAgICAgICAgICAmJiBub2RlLmFyaXRoTm9kZUZsYWdzRm9y
Q29tcGFyZSgpID09IG90aGVyTm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBhcmUoKSkgeworICAg
ICAgICAgICAgICAgIE5vZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9k
ZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG90
aGVyQ2hpbGQgPT0gY2hpbGQxKSB7CisgICAgICAgICAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBj
YW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
ZGV4OworICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBjaGlsZDIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2Rl
LmNoaWxkMygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBjaGlsZDMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29y
bGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxp
bWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHN0
YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKCk7CkBAIC05NTAsMTkgKzk4NiwzNSBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXgg
Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGVJ
bmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKICAgICB7CiAgICAgICAgIE5vZGVJ
bmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOwogICAgICAgICBmb3Ig
KE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CiAg
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAo
bm9kZS5vcCA9PSBDaGVja1N0cnVjdHVyZQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2hpbGQx
KCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKGNs
b2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAg
ICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNo
aWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlLnN0cnVjdHVyZSgp
ID09IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAg
ICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIE5vZGVJbmRleCBnZXRCeU9mZnNldExvYWRFbGlt
aW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQpAQCAt
OTcwLDEyICsxMDIyLDU3IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0
YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOwogICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRl
eCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CiAgICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRC
eU9mZnNldAotICAgICAgICAgICAgICAgICYmIG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAg
ICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29y
bGQoaW5kZXgpKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMQorICAgICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRp
Zmllck51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZp
ZXJOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0gY2hp
bGQxKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCk7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAg
Ly8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBjYW5ub3QgY2hhbmdlIHRoZSBvdXRjb21lIG9mIGEg
cHJvcGVydHkgZ2V0LgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChp
bmRleCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbihOb2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0
ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4
IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAgICAg
IE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5v
cCkgeworICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBvciBwdXR0aW5nIHRv
IHRoZSBzdG9yYWdlIGNhbm5vdAorICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcHJvcGVy
dHkgc3RvcmFnZSBwb2ludGVyLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNX
b3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKICAgICB9CkBAIC0xMDM0LDYgKzExMzEsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9yZXBsYWNlbWVudHNbbV9jb21waWxlSW5kZXhdID0gcmVwbGFjZW1lbnQ7CiAgICAgfQogICAg
IAorICAgIHZvaWQgZWxpbWluYXRlKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgIEVsaW1pbmF0aW5nIEAldSIsIG1f
Y29tcGlsZUluZGV4KTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICBub2RlLm9wID0gUGhhbnRvbTsKKyAgICAg
ICAgbm9kZS5zZXRSZWZDb3VudCgxKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBwZXJmb3JtTm9k
ZUNTRShOb2RlJiBub2RlKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFy
QXJncykgewpAQCAtMTEzMyw3ICsxMjQxLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1
Y3R1cmUoKSwgbm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJl
TG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlKCksIG5vZGUuY2hpbGQxKCkpKQorICAgICAg
ICAgICAgICAgIGVsaW1pbmF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRCeU9mZnNl
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gOTYzNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMz
LDEzICsxODMzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAg
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpKSk7
CiAgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAg
IEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkp
LCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NjM3OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIy
LDEzICsxOTIyLDM3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKLSAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAg
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpKSk7
CiAgICAgICAgIAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAKKyNpZiBFTkFCTEUoR0dDKSB8
fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIC8vIE11c3QgYWx3YXlz
IGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNl
bGYgcmVxdWlyZXMgaXQKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIG5vZGUuc3RydWN0
dXJlKCksIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOworI2VuZGlmCisgICAgICAgIAor
ICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihub2Rl
LnN0cnVjdHVyZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgR2V0UHJv
cGVydHlTdG9yYWdlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7
CisgICAgICAgIAorICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAgIHN0b3Jh
Z2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CkBAIC0xOTUwLDYgKzE5NzQsMjgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyNpZiBFTkFCTEUo
R0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisjZW5kaWYKKyAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDMoKSk7CisKKyAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKEdHQykgfHwgRU5BQkxFKFdSSVRFX0JB
UlJJRVJfUFJPRklMSU5HKQorICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUu
Z3ByKCksIG5vZGUuY2hpbGQzKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKKyNl
bmRpZgorCisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1f
aml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV07CisgICAgICAgIAorICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZUdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgR2V0
TWV0aG9kOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109243</attachid>
            <date>2011-09-29 19:41:09 -0700</date>
            <delta_ts>2011-09-30 14:19:15 -0700</delta_ts>
            <desc>the patch - works on 64-bit</desc>
            <filename>putbyoffset_patch_2.diff</filename>
            <type>text/plain</type>
            <size>25272</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTYzODApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAK
KzIwMTEtMDktMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgZG9lcyBub3Qgc3BlY3VsYXRlIGFnZ3Jlc3NpdmVseSBlbm91Z2ggb24gcHV0X2J5X2lkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV09S
SyBJTiBQUk9HUkVTUy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBuZXcgbm9kZXMgYWxv
bmcgd2l0aCBvcHRpbWl6YXRpb25zIGZvciB0aG9zZSBub2RlczoKKyAgICAgICAgCisgICAgICAg
IEdldFByb3BlcnR5U3RvcmFnZTogQ2hlY2tTdHJ1Y3R1cmUgdXNlZCB0byBkbyBib3RoIHRoZSBz
dHJ1Y3R1cmUKKyAgICAgICAgY2hlY2sgYW5kIHJldHJpZXZlIHRoZSBzdG9yYWdlIHBvaW50ZXIu
IE5vdyBDaGVja1N0cnVjdHVyZSBqdXN0CisgICAgICAgIGNoZWNrcyB0aGUgc3RydWN0dXJlLCBh
bmQgR2V0UHJvcGVydHlTdG9yYWdlIHJldHJpZXZlcyB0aGUKKyAgICAgICAgc3RvcmFnZSBwb2lu
dGVyLgorICAgICAgICAKKyAgICAgICAgUHV0U3RydWN0dXJlOiBDaGFuZ2VzIHRoZSBzdHJ1Y3R1
cmUsIGFuZCBoYXMgdGhlIGV4cGVjdGVkIHN0b3JlCisgICAgICAgIHRvIGxvYWQgb3B0aW1pemF0
aW9uIHdpdGggQ2hlY2tTdHJ1Y3R1cmUuCisgICAgICAgIAorICAgICAgICBQdXRCeU9mZnNldDog
RGlyZWN0bHkgc2V0cyB0aGUgdmFsdWUuIEhhcyBzdG9yZSB0byBsb2FkCisgICAgICAgIG9wdGlt
aXphdGlvbiB3aXRoIEdldEJ5T2Zmc2V0LgorCisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2VsbENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFz
U3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMpOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmltcHVyZUNTRSk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmVsaW1pbmF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTEtMDkt
MjkgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAg
IFN0YXJ0IHJlZmFjdG9yaW5nIERGR1NwZWN1bGF0aXZlSklUCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTYzNzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC00MDQsNiArNDA1LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBnZXRKU0Nv
bnN0YW50KG1fY29uc3RhbnROYU4pOwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggY2VsbENv
bnN0YW50KEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5z
aWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV9jZWxsQ29uc3RhbnRzLmZpbmQoY2VsbCk7CisgICAg
ICAgIGlmIChpdGVyICE9IG1fY2VsbENvbnN0YW50cy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KGl0ZXItPnNlY29uZCk7CisgICAgICAgIAorICAgICAgICBtX2NvZGVC
bG9jay0+YWRkQ29uc3RhbnQoY2VsbCk7CisgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChDb25z
dGFudFJlY29yZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2Nv
ZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0
ZXJzKCkgLSAxKTsKKyAgICB9CisgICAgCiAgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdp
bigpCiAgICAgewogICAgICAgICByZXR1cm4gQ29kZU9yaWdpbihtX2N1cnJlbnRJbmRleCk7CkBA
IC01NzYsNiArNTkwLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TnVsbDsK
ICAgICB1bnNpZ25lZCBtX2NvbnN0YW50TmFOOwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnQxOwor
ICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5zaWduZWQ+IG1fY2VsbENvbnN0YW50czsKIAogICAgIC8v
IEEgY29uc3RhbnQgaW4gdGhlIGNvbnN0YW50IHBvb2wgbWF5IGJlIHJlcHJlc2VudGVkIGJ5IG1v
cmUgdGhhbiBvbmUKICAgICAvLyBub2RlIGluIHRoZSBncmFwaCwgZGVwZW5kaW5nIG9uIHRoZSBj
b250ZXh0IGluIHdoaWNoIGl0IGlzIGJlaW5nIHVzZWQuCkBAIC0xMTU0LDcgKzExNjksOCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
c2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIp
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91
bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZz
ZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8oc3RydWN0dXJlKSwg
YmFzZSkpOworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBP
cEluZm8oc3RydWN0dXJlKSwgYmFzZSk7CisgICAgICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBh
ZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3Jh
Z2UsIGJhc2UpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZzZXQ7CkBAIC0xMTc0LDEzICsxMTkwLDg0IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfaWQ6IHsKICAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZSA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKICAgICAgICAgICAgIGJvb2wgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhd
LnUub3BlcmFuZDsKIAotICAgICAgICAgICAgaWYgKGRpcmVjdCkKLSAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFsdWUp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwg
T3BJbmZvKGlkZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8gPSBtX3Byb2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvKG1fY3VycmVu
dEluZGV4KTsKKyAgICAgICAgICAgIGlmICghc3R1YkluZm8uc2VlbikKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJv
b2wgYWxyZWFkeUdlbmVyYXRlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoc3R1YkluZm8uc2VlbiAmJiAhbV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2Fz
ZShtX2N1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZTogeworICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZv
LnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
aWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0
QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgYmFz
ZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpLCB2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUFj
Y2Vzc0RhdGEub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3Jh
Z2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgYWxyZWFkeUdlbmVyYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfdHJhbnNp
dGlvbjogeworICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJl
ID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5wcmV2aW91c1N0cnVjdHVyZS5nZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBzdHViSW5mby51
LnB1dEJ5SWRUcmFuc2l0aW9uLnN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+cHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiA9IHN0dWJJ
bmZvLnUucHV0QnlJZFRyYW5zaXRpb24uY2hhaW4uZ2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IG9mZnNldCA9IG5ld1N0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAh
PSBub3RGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKHByZXZpb3VzU3RydWN0dXJlKSwgYmFzZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWRpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAoV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4qIGl0ID0gc3RydWN0dXJlQ2hhaW4tPmhlYWQoKTsg
Kml0OyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgcHJv
dG90eXBlID0gKCppdCktPnN0b3JlZFByb3RvdHlwZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChwcm90b3R5cGUuaXNDZWxsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8ocHJvdG90eXBlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKSksIGNlbGxDb25zdGFudChwcm90b3R5cGUuYXNDZWxsKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKG5ld1N0
cnVjdHVyZSksIGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdl
LCBiYXNlKSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IG9mZnNldDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBp
ZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlHZW5lcmF0ZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWFscmVhZHlHZW5lcmF0
ZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlyZWN0KQorICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dEJ5SWREaXJlY3QsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSwg
dmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKKyAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X2lkKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDk2Mzc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0OSw2ICsxNDksMjAgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5k
ZXggbm9kZUluZGV4LCBDbwogICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50
ZWQgPSB0cnVlOwogICAgIH0KKyAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmUoKSkgeworICAgICAg
ICBwcmludGYoIiVzc3RydWN0KCVwKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuc3Ry
dWN0dXJlKCkpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKG5v
ZGUuaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKSkgeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYg
c3RvcmFnZUFjY2Vzc0RhdGEgPSBtX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXTsKKyAgICAgICAgaWYgKGNvZGVCbG9jaykKKyAgICAgICAgICAgIHByaW50
ZigiJXNpZCV1eyVzfSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIHN0b3JhZ2VBY2Nlc3NEYXRh
LmlkZW50aWZpZXJOdW1iZXIsIGNvZGVCbG9jay0+aWRlbnRpZmllcihzdG9yYWdlQWNjZXNzRGF0
YS5pZGVudGlmaWVyTnVtYmVyKS51c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHByaW50ZigiJXNpZCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
c3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcik7CisgICAgICAgIAorICAgICAgICBw
cmludGYoIiwgJWx1Iiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0KTsKKyAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CisgICAgfQogICAgIEFTU0VSVChub2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSgpID09IG5vZGUuaGFzTG9jYWwoKSk7CiAgICAgaWYgKG5vZGUuaGFzVmFyaWFibGVBY2Nlc3NE
YXRhKCkpIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NjM3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2Nyw2ICsyNjcsMzYgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp3cml0
ZUJhcnJpZXIoR1BSUgogI2VuZGlmCiB9CiAKK3ZvaWQgSklUQ29kZUdlbmVyYXRvcjo6d3JpdGVC
YXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2lu
ZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBVTlVT
RURfUEFSQU0ob3duZXJHUFIpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgVU5VU0VE
X1BBUkFNKHNjcmF0Y2gxKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgIFVOVVNF
RF9QQVJBTSh1c2VLaW5kKTsKKworI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
KyAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KGppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6Ompp
dENvdW50ZXJGb3IodXNlS2luZCkpOworI2VuZGlmCisKKyNpZiBFTkFCTEUoR0dDKQorICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wMTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDI7CisgICAgaWYgKHNjcmF0
Y2gxID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hHUFIo
dGhpcyk7CisgICAgICAgIHRlbXAxLmFkb3B0KHNjcmF0Y2hHUFIpOworICAgICAgICBzY3JhdGNo
MSA9IHRlbXAxLmdwcigpOworICAgIH0KKyAgICBpZiAoc2NyYXRjaDIgPT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaEdQUih0aGlzKTsKKyAgICAgICAgdGVt
cDIuYWRvcHQoc2NyYXRjaEdQUik7CisgICAgICAgIHNjcmF0Y2gyID0gdGVtcDIuZ3ByKCk7Cisg
ICAgfQorCisgICAgbWFya0NlbGxDYXJkKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0
Y2gyKTsKKyNlbmRpZgorfQorCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0
ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoKQogewogICAgIFVOVVNFRF9Q
QVJBTShvd25lcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTYzNzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDYgKzIx
NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoTWFjcm9Bc3NlbWJs
ZXImLCBHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoR1BSMSwgR1BSUmVnIHNjcmF0Y2hH
UFIyLCBXcml0ZUJhcnJpZXJVc2VLaW5kKTsKIAogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVC
YXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BS
UmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcg
c2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlk
R1BSUmVnKTsKICAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFs
dWVHUFIsIE5vZGVJbmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcg
c2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0
U2NyYXRjaEdQUihHUFJSZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNl
cnZlMiA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk2Mzc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
Myw4ICszMTMsMTEgQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBhcml0aE5vZGVGbGFncwog
ICAgIG1hY3JvKEdldEJ5SWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFB1dEJ5SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAotICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBO
b2RlUmVzdWx0U3RvcmFnZSB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhDaGVja1N0
cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFB1dFN0cnVjdHVyZSwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oR2V0UHJvcGVy
dHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBO
b2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oR2V0QXJyYXlMZW5ndGgsIE5vZGVSZXN1
bHRJbnQzMikgXAogICAgIG1hY3JvKEdldE1ldGhvZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKENoZWNrTWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlKSBcCkBAIC03ODIsNyArNzg1LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAg
IGJvb2wgaGFzU3RydWN0dXJlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCA9PSBDaGVja1N0
cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG9wID09IENoZWNrU3RydWN0dXJlIHx8IG9wID09IFB1
dFN0cnVjdHVyZTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKQpAQCAt
NzkyLDcgKzc5NSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1N0b3JhZ2VB
Y2Nlc3NEYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCA9PSBHZXRCeU9mZnNldDsKKyAg
ICAgICAgcmV0dXJuIG9wID09IEdldEJ5T2Zmc2V0IHx8IG9wID09IFB1dEJ5T2Zmc2V0OwogICAg
IH0KICAgICAKICAgICB1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4KCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTYz
NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NDgsNyArNDQ4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTog
eworICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZTogewogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtNTgzLDYgKzU4Myw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKICAgICAgICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1dEJ5SWREaXJl
Y3Q6CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlOgorICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgLy8gVGhpcyBnZXRzIGlnbm9yZWQgYmVjYXVzZSBpdCBkb2Vzbid0
IGRvIGFueXRoaW5nLgpAQCAtODg4LDYgKzg5MSwzOSBAQCBwcml2YXRlOgogICAgICAgICB9CiAg
ICAgfQogICAgIAorICAgIE5vZGVJbmRleCBpbXB1cmVDU0UoTm9kZSYgbm9kZSkKKyAgICB7Cisg
ICAgICAgIE5vZGVJbmRleCBjaGlsZDEgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIE5vZGVJbmRleCBjaGlsZDIgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDIoKSk7Cisg
ICAgICAgIE5vZGVJbmRleCBjaGlsZDMgPSBjYW5vbmljYWxpemUobm9kZS5jaGlsZDMoKSk7Cisg
ICAgICAgIAorICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4KCk7CisgICAgICAg
IGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDsp
IHsKKyAgICAgICAgICAgIE5vZGUmIG90aGVyTm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAg
ICAgICAgaWYgKG5vZGUub3AgPT0gb3RoZXJOb2RlLm9wCisgICAgICAgICAgICAgICAgJiYgbm9k
ZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBhcmUoKSA9PSBvdGhlck5vZGUuYXJpdGhOb2RlRmxhZ3NG
b3JDb21wYXJlKCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggb3RoZXJDaGlsZCA9IGNh
bm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGlmIChvdGhl
ckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAg
ICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IGNoaWxkMSkgeworICAgICAgICAgICAgICAg
ICAgICBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hp
bGQgPT0gY2hpbGQyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlckNoaWxkID0gY2Fu
b25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hp
bGQzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKICAgICBOb2RlSW5k
ZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlcikKICAgICB7CiAg
ICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigpOwpAQCAtOTUw
LDE5ICs5ODYsMzUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CiAg
ICAgCi0gICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVM
b2FkRWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGVJbmRleCBjaGlsZDEpCiAg
ICAgewogICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hp
bGQxKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5k
ZXgtLSA+IHN0YXJ0OykgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhd
OwotICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gQ2hlY2tTdHJ1Y3R1cmUKLSAgICAgICAgICAg
ICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICYmIG5vZGUu
c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsK
LSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCkgeworICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAgICAg
JiYgbm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hp
bGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuc3RydWN0dXJlKCkg
PT0gc3RydWN0dXJlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5u
b3QgY2hhbmdlIHRoZSBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChjbG9i
YmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgTm9k
ZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGVJbmRleCBjaGlsZDEpCkBAIC05NzAsMTIgKzEwMjIsNTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CiAg
ICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBz
dGFydDspIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAg
ICAgICAgIGlmIChub2RlLm9wID09IEdldEJ5T2Zmc2V0Ci0gICAgICAgICAgICAgICAgJiYgbm9k
ZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1i
ZXIgPT0gaWRlbnRpZmllck51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0g
ICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgICAgICYmIG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0u
aWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlk
ZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS5jaGlsZDIoKSA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZS5jaGlsZDMoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKKyAgICAgICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGUgc3RydWN0dXJlIGNhbm5v
dCBjaGFuZ2UgdGhlIG91dGNvbWUgb2YgYSBwcm9wZXJ0eSBnZXQuCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXgg
Z2V0UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEpCisgICAg
eworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQx
KTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgt
LSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIEdldFByb3Bl
cnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAg
ICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICAvLyBDaGFuZ2luZyB0
aGUgc3RydWN0dXJlIG9yIHB1dHRpbmcgdG8gdGhlIHN0b3JhZ2UgY2Fubm90CisgICAgICAgICAg
ICAgICAgLy8gY2hhbmdlIHRoZSBwcm9wZXJ0eSBzdG9yYWdlIHBvaW50ZXIuCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KQEAgLTEwMzQsNiArMTEz
MSwxNyBAQCBwcml2YXRlOgogICAgICAgICBtX3JlcGxhY2VtZW50c1ttX2NvbXBpbGVJbmRleF0g
PSByZXBsYWNlbWVudDsKICAgICB9CiAgICAgCisgICAgdm9pZCBlbGltaW5hdGUoKQorICAgIHsK
KyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50
ZigiICAgRWxpbWluYXRpbmcgQCV1IiwgbV9jb21waWxlSW5kZXgpOworI2VuZGlmCisgICAgICAg
IAorICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFttX2NvbXBpbGVJbmRleF07CisgICAgICAg
IG5vZGUub3AgPSBQaGFudG9tOworICAgICAgICBub2RlLnNldFJlZkNvdW50KDEpOworICAgIH0K
KyAgICAKICAgICB2b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAg
ICBpZiAobm9kZS5vcCAmIE5vZGVIYXNWYXJBcmdzKSB7CkBAIC0xMTMzLDcgKzEyNDEsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjaGVja1N0cnVjdHVy
ZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZSgpLCBub2RlLmNoaWxkMSgpKSk7CisgICAg
ICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmUo
KSwgbm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFn
ZToKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGlt
aW5hdGlvbihub2RlLmNoaWxkMSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5NjM3
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MzMsMTMgKzE4MzMsMjIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewog
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIobm9kZS5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IEdldFByb3BlcnR5U3RvcmFnZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IGJhc2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
b2Zmc2V0T2ZQcm9wZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAg
ICBzdG9yYWdlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDk2Mzc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjIsMTMgKzE5MjIsMzcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewog
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIobm9kZS5zdHJ1Y3R1cmUoKSkpKTsKICAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFB1dFN0cnVjdHVyZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIAorI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKKyAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhl
IHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAorICAgICAgICB3cml0ZUJh
cnJpZXIoYmFzZUdQUiwgbm9kZS5zdHJ1Y3R1cmUoKSwgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0Fj
Y2Vzcyk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisgICAgICAgIAor
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgCisgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIp
OwogICAgICAgICAKICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKQEAgLTE5NTAsNiArMTk3NCwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBQ
dXRCeU9mZnNldDogeworI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BS
T0ZJTElORykKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKKyNlbmRpZgorICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNo
aWxkMygpKTsKKworICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAKKyNpZiBFTkFC
TEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIHdyaXRl
QmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MpOworI2VuZGlmCisKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRh
W25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1faml0
LnN0b3JlUHRyKHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9y
YWdlQWNjZXNzRGF0YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAg
IAorICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCiAgICAgY2FzZSBHZXRNZXRob2Q6IHsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBiYXNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109347</attachid>
            <date>2011-09-30 14:19:15 -0700</date>
            <delta_ts>2011-09-30 15:08:44 -0700</delta_ts>
            <desc>the patch - 32_64 and 64 work</desc>
            <filename>putbyoffset_patch_1.diff</filename>
            <type>text/plain</type>
            <size>27179</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTEtMDktMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgZG9lcyBub3Qgc3BlY3VsYXRlIGFnZ3Jlc3NpdmVseSBlbm91Z2ggb24gcHV0X2J5X2lkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBu
ZXcgbm9kZXMgYWxvbmcgd2l0aCBvcHRpbWl6YXRpb25zIGZvciB0aG9zZSBub2RlczoKKyAgICAg
ICAgCisgICAgICAgIEdldFByb3BlcnR5U3RvcmFnZTogQ2hlY2tTdHJ1Y3R1cmUgdXNlZCB0byBk
byBib3RoIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgY2hlY2sgYW5kIHJldHJpZXZlIHRoZSBzdG9y
YWdlIHBvaW50ZXIuIE5vdyBDaGVja1N0cnVjdHVyZSBqdXN0CisgICAgICAgIGNoZWNrcyB0aGUg
c3RydWN0dXJlLCBhbmQgR2V0UHJvcGVydHlTdG9yYWdlIHJldHJpZXZlcyB0aGUKKyAgICAgICAg
c3RvcmFnZSBwb2ludGVyLgorICAgICAgICAKKyAgICAgICAgUHV0U3RydWN0dXJlOiBDaGFuZ2Vz
IHRoZSBzdHJ1Y3R1cmUsIGFuZCBoYXMgdGhlIGV4cGVjdGVkIHN0b3JlCisgICAgICAgIHRvIGxv
YWQgb3B0aW1pemF0aW9uIHdpdGggQ2hlY2tTdHJ1Y3R1cmUuCisgICAgICAgIAorICAgICAgICBQ
dXRCeU9mZnNldDogRGlyZWN0bHkgc2V0cyB0aGUgdmFsdWUuIEhhcyBzdG9yZSB0byBsb2FkCisg
ICAgICAgIG9wdGltaXphdGlvbiB3aXRoIEdldEJ5T2Zmc2V0LgorCisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Y2VsbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlUHJl
ZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmltcHVyZUNTRSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5T2Zmc2V0TG9hZEVsaW1p
bmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRQcm9wZXJ0eVN0b3Jh
Z2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmVsaW1p
bmF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKwogMjAxMS0wOS0zMCAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIENyYXNoIGR1ZSB0byBvdXQgb2YgYm91bmRzIHJlYWQvd3JpdGUgaW4gTWFya2VkU3Bh
Y2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCShyZXZpc2lvbiA5NjQxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQwNCw2ICs0MDUsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE5hTik7CiAgICAgfQogICAg
IAorICAgIE5vZGVJbmRleCBjZWxsQ29uc3RhbnQoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAg
ICAgSGFzaE1hcDxKU0NlbGwqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NlbGxDb25z
dGFudHMuZmluZChjZWxsKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbV9jZWxsQ29uc3RhbnRzLmVu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoaXRlci0+c2Vjb25kKTsKKyAg
ICAgICAgCisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRDb25zdGFudChjZWxsKTsKKyAgICAgICAg
bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOworICAgICAgICBBU1NFUlQobV9j
b25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJz
KCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb2RlQmxvY2st
Pm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSAtIDEpOworICAgIH0KKyAgICAKICAgICBDb2Rl
T3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkKICAgICB7CiAgICAgICAgIHJldHVybiBDb2RlT3Jp
Z2luKG1fY3VycmVudEluZGV4KTsKQEAgLTU3Niw2ICs1OTAsNyBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fY29uc3RhbnROdWxsOwogICAgIHVuc2lnbmVkIG1fY29uc3RhbnROYU47CiAgICAg
dW5zaWduZWQgbV9jb25zdGFudDE7CisgICAgSGFzaE1hcDxKU0NlbGwqLCB1bnNpZ25lZD4gbV9j
ZWxsQ29uc3RhbnRzOwogCiAgICAgLy8gQSBjb25zdGFudCBpbiB0aGUgY29uc3RhbnQgcG9vbCBt
YXkgYmUgcmVwcmVzZW50ZWQgYnkgbW9yZSB0aGFuIG9uZQogICAgIC8vIG5vZGUgaW4gdGhlIGdy
YXBoLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgYmVpbmcgdXNlZC4K
QEAgLTExNTQsNyArMTE2OSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoKm1f
Z2xvYmFsRGF0YSwgaWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAgICAgICBnZXRCeUlk
ID0gYWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1
cmUsIE9wSW5mbyhzdHJ1Y3R1cmUpLCBiYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhzdHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlPZmZzZXQsIE9wSW5mbyhtX2dy
YXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBhZGRU
b0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSkpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7
CiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IG9mZnNldDsK
QEAgLTExNzQsMTMgKzExOTAsODQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3B1dF9ieV9pZDogewogICAgICAgICAgICAgTm9kZUlu
ZGV4IHZhbHVlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwogICAgICAg
ICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgYm9vbCBkaXJlY3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5vcGVyYW5kOwogCi0gICAgICAgICAgICBpZiAoZGly
ZWN0KQotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlk
ZW50aWZpZXIpLCBiYXNlLCB2YWx1ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQdXRCeUlkLCBPcEluZm8oaWRlbnRpZmllciksIGJhc2UsIHZhbHVlKTsK
KyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IG1fcHJvZmlsZWRCbG9j
ay0+Z2V0U3R1YkluZm8obV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgaWYgKCFzdHViSW5m
by5zZWVuKQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYm9vbCBhbHJlYWR5R2VuZXJhdGVkID0gZmFsc2U7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuICYmICFtX3Byb2ZpbGVkQmxv
Y2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF9yZXBsYWNlOiB7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50
aWZpZXIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9m
ZnNldCAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChD
aGVja1N0cnVjdHVyZSwgT3BJbmZvKHN0cnVjdHVyZSksIGJhc2UpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5zaXplKCkpLCBiYXNlLCBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwg
YmFzZSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRl
bnRpZmllck51bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5R2VuZXJhdGVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
YWNjZXNzX3B1dF9ieV9pZF90cmFuc2l0aW9uOiB7CisgICAgICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUgPSBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLnBy
ZXZpb3VzU3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIG5l
d1N0cnVjdHVyZSA9IHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24uc3RydWN0dXJlLmdldCgp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3Vz
U3RydWN0dXJlLT5wcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpICE9IG5ld1N0cnVjdHVyZS0+cHJv
cGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlQ2hhaW4q
IHN0cnVjdHVyZUNoYWluID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5jaGFpbi5nZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIg
aWRlbnRpZmllciA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwor
ICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbmV3U3RydWN0dXJlLT5nZXQoKm1f
Z2xvYmFsRGF0YSwgaWRlbnRpZmllcik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8ocHJldmlvdXNTdHJ1Y3R1cmUp
LCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGlyZWN0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBz
dHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3RvcmVkUHJvdG90eXBlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5pc0NlbGwoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9w
SW5mbyhwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKSwgY2VsbENvbnN0YW50KHByb3Rv
dHlwZS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0
U3RydWN0dXJlLCBPcEluZm8obmV3U3RydWN0dXJlKSwgYmFzZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQs
IE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgYmFzZSwgYWRkVG9H
cmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3Jh
Z2VBY2Nlc3NEYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEu
b2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0Rh
dGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NE
YXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
YWxyZWFkeUdlbmVyYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghYWxyZWFkeUdlbmVyYXRlZCkgeworICAgICAgICAgICAgICAgIGlmIChkaXJlY3Qp
CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZERpcmVjdCwgT3BJbmZvKGlk
ZW50aWZpZXJOdW1iZXIpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSwgYmFzZSwgdmFsdWUpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9wdXRfYnlfaWQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTY0MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDYgKzE0OSwyMCBAQCB2
b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgICAgICBwcmlu
dGYoIiVzaWQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuaWRlbnRpZmllck51bWJl
cigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQorICAgIGlmIChub2RlLmhh
c1N0cnVjdHVyZSgpKSB7CisgICAgICAgIHByaW50ZigiJXNzdHJ1Y3QoJXApIiwgaGFzUHJpbnRl
ZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOworICAgIH0KKyAgICBpZiAobm9kZS5oYXNTdG9yYWdlQWNjZXNzRGF0YSgpKSB7CisgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBpZiAoY29kZUJs
b2NrKQorICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXV7JXN9IiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlciwgY29kZUJsb2NrLT5pZGVu
dGlmaWVyKHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIpLnVzdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBo
YXNQcmludGVkID8gIiwgIiA6ICIiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
KTsKKyAgICAgICAgCisgICAgICAgIHByaW50ZigiLCAlbHUiLCBzdG9yYWdlQWNjZXNzRGF0YS5v
ZmZzZXQpOworICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKKyAgICB9CiAgICAgQVNTRVJUKG5v
ZGUuaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS5oYXNMb2NhbCgpKTsKICAgICBpZiAo
bm9kZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSkgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDk2NDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2NywzNiBAQCB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihHUFJSCiAjZW5kaWYKIH0KIAordm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZh
bHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKQoreworICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7CisgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgIFVOVVNFRF9QQVJB
TShzY3JhdGNoMik7CisgICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOworCisjaWYgRU5BQkxFKFdS
SVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQoaml0LCBX
cml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7CisjZW5kaWYKKwor
I2lmIEVOQUJMRShHR0MpCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAxOworICAgIEdQUlRlbXBvcmFy
eSB0ZW1wMjsKKyAgICBpZiAoc2NyYXRjaDEgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaEdQUih0aGlzKTsKKyAgICAgICAgdGVtcDEuYWRvcHQoc2NyYXRj
aEdQUik7CisgICAgICAgIHNjcmF0Y2gxID0gdGVtcDEuZ3ByKCk7CisgICAgfQorICAgIGlmIChz
Y3JhdGNoMiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
R1BSKHRoaXMpOworICAgICAgICB0ZW1wMi5hZG9wdChzY3JhdGNoR1BSKTsKKyAgICAgICAgc2Ny
YXRjaDIgPSB0ZW1wMi5ncHIoKTsKKyAgICB9CisKKyAgICBtYXJrQ2VsbENhcmQobV9qaXQsIG93
bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworI2VuZGlmCit9CisKIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9k
ZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNj
cmF0Y2gpCiB7CiAgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NjQxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHdy
aXRlQmFycmllcihNYWNyb0Fzc2VtYmxlciYsIEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHNjcmF0
Y2hHUFIxLCBHUFJSZWcgc2NyYXRjaEdQUjIsIFdyaXRlQmFycmllclVzZUtpbmQpOwogCiAgICAg
dm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIE5vZGVJ
bmRleCB2YWx1ZUluZGV4LCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEg
PSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRl
QmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJl
ZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyKEpT
Q2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUluZGV4IHZhbHVlSW5kZXgsIFdyaXRl
QmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOwogCiAg
ICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJbnZh
bGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNl
cnZlMyA9IEludmFsaWRHUFJSZWcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gOTY0MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzEzLDggKzMxMywxMSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0
IGNoYXIqIGFyaXRoTm9kZUZsYWdzCiAgICAgbWFjcm8oR2V0QnlJZCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oUHV0QnlJ
ZCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oUHV0
QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAg
bWFjcm8oQ2hlY2tTdHJ1Y3R1cmUsIE5vZGVSZXN1bHRTdG9yYWdlIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQp
IFwKKyAgICBtYWNybyhHZXRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVSZXN1bHRTdG9yYWdlKSBcCiAg
ICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKFB1dEJ5T2Zm
c2V0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhH
ZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0TWV0aG9kLCBO
b2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tNZXRob2Qs
IE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKQEAgLTc4Miw3ICs3ODUsNyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmUoKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG9wID09IENoZWNrU3RydWN0dXJlOworICAgICAgICByZXR1cm4gb3AgPT0gQ2hl
Y2tTdHJ1Y3R1cmUgfHwgb3AgPT0gUHV0U3RydWN0dXJlOwogICAgIH0KICAgICAKICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSgpCkBAIC03OTIsNyArNzk1LDcgQEAgc3RydWN0IE5vZGUgewogICAg
IAogICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG9wID09IEdldEJ5T2Zmc2V0OworICAgICAgICByZXR1cm4gb3AgPT0gR2V0QnlPZmZzZXQgfHwg
b3AgPT0gUHV0QnlPZmZzZXQ7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIHN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwCShyZXZpc2lvbiA5NjQxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw3ICs0NDgsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdl
OiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdE90aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01ODMsNiArNTgzLDkgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAg
ICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToK
KyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGdldHMgaWdu
b3JlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcuCkBAIC04ODgsNiArODkxLDM5IEBA
IHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgTm9kZUluZGV4IGltcHVyZUNT
RShOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMSA9IGNhbm9uaWNh
bGl6ZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMiA9IGNhbm9uaWNh
bGl6ZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgTm9kZUluZGV4IGNoaWxkMyA9IGNhbm9uaWNh
bGl6ZShub2RlLmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9
IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJ
bmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgb3RoZXJOb2RlID0g
bV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBvdGhlck5vZGUub3AK
KyAgICAgICAgICAgICAgICAmJiBub2RlLmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpID09IG90
aGVyTm9kZS5hcml0aE5vZGVGbGFnc0ZvckNvbXBhcmUoKSkgeworICAgICAgICAgICAgICAgIE5v
ZGVJbmRleCBvdGhlckNoaWxkID0gY2Fub25pY2FsaXplKG90aGVyTm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gY2hp
bGQxKSB7CisgICAgICAgICAgICAgICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3Ro
ZXJOb2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0g
Tm9Ob2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAg
ICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBjaGlsZDIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IE5vTm9kZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAob3RoZXJDaGlsZCA9PSBjaGlsZDMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgfQorICAgIAogICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24odW5zaWdu
ZWQgdmFyTnVtYmVyKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRl
eEZvckNoaWxkcmVuKCk7CkBAIC05NTAsMTkgKzk4NiwzNSBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKLSAgICBOb2RlSW5kZXggY2hlY2tTdHJ1Y3R1cmVM
b2FkRWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGVJbmRleCBjaGlsZDEpCisg
ICAgYm9vbCBjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgTm9kZUluZGV4IGNoaWxkMSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0
YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOwogICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRl
eCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CiAgICAgICAgICAgICBOb2Rl
JiBub2RlID0gbV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBDaGVj
a1N0cnVjdHVyZQotICAgICAgICAgICAgICAgICYmIG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0g
ICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5k
ZXgpKQorICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxk
MQorICAgICAgICAgICAgICAgICAgICAmJiBub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgLy8g
U2V0dGluZyBhIHByb3BlcnR5IGNhbm5vdCBjaGFuZ2UgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICAKICAgICBOb2RlSW5kZXggZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24o
dW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZUluZGV4IGNoaWxkMSkKQEAgLTk3MCwxMiAr
MTAyMiw1NyBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4
Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2Nv
bXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwotICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0QnlPZmZzZXQK
LSAgICAgICAgICAgICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAg
ICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQotICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4
KSkKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1i
ZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6Cisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMigpID09IGNoaWxkMSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkMygpOworICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIC8vIENoYW5n
aW5nIHRoZSBzdHJ1Y3R1cmUgY2Fubm90IGNoYW5nZSB0aGUgb3V0Y29tZSBvZiBhIHByb3BlcnR5
IGdldC4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBnZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24o
Tm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0
SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9
IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAg
ICAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAg
ICAgICAgICAgIC8vIENoYW5naW5nIHRoZSBzdHJ1Y3R1cmUgb3IgcHV0dGluZyB0byB0aGUgc3Rv
cmFnZSBjYW5ub3QKKyAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHByb3BlcnR5IHN0b3Jh
Z2UgcG9pbnRlci4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5k
ZXgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb05vZGU7
CiAgICAgfQpAQCAtMTAzNCw2ICsxMTMxLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fcmVwbGFj
ZW1lbnRzW21fY29tcGlsZUluZGV4XSA9IHJlcGxhY2VtZW50OwogICAgIH0KICAgICAKKyAgICB2
b2lkIGVsaW1pbmF0ZSgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICBFbGltaW5hdGluZyBAJXUiLCBtX2NvbXBpbGVJ
bmRleCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW21f
Y29tcGlsZUluZGV4XTsKKyAgICAgICAgbm9kZS5vcCA9IFBoYW50b207CisgICAgICAgIG5vZGUu
c2V0UmVmQ291bnQoMSk7CisgICAgfQorICAgIAogICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9k
ZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFyZ3MpIHsK
QEAgLTExMzMsNyArMTI0MSwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlKCks
IG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGlt
aW5hdGlvbihub2RlLnN0cnVjdHVyZSgpLCBub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAgICAg
ICBlbGltaW5hdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0
UHJvcGVydHlTdG9yYWdlTG9hZEVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHJldmlzaW9uIDk2NDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1NywxMyArMTY1
NywzNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBj
YXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
YmFzZSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0g
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZSgpKSkpOwogICAgICAg
ICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKEdHQykgfHwgRU5BQkxF
KFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRo
aXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVp
cmVzIGl0CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBub2RlLnN0cnVjdHVyZSgpLCBX
cml0ZUJhcnJpZXJGb3JHZW5lcmljQWNjZXNzKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAg
bV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1
cmUoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldFByb3BlcnR5U3Rv
cmFnZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOworICAgICAg
ICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0
eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzdG9yYWdlUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwpAQCAtMTY4OCw2ICsxNzEyLDMwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisjaWYgRU5BQkxFKEdHQykgfHwg
RU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworI2VuZGlmCisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworCisgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUu
dGFnR1BSKCk7CisgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2Fk
R1BSKCk7CisgICAgICAgIAorI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlVGFnR1BS
LCBub2RlLmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisjZW5kaWYK
KworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5n
cmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
OworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVUYWdHUFIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAqIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRv
ciwgYXNCaXRzLnRhZykpKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVQYXlsb2FkR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1
ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOworICAgICAgICAKKyAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAg
IGNhc2UgR2V0TWV0aG9kOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywg
YmFzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDk2NDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0MCwxMyAr
MTc0MCwzNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgYmFzZSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
Ci0gICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZSgpKSkpOwogICAg
ICAgICAKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKEdHQykgfHwgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0
IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJl
cXVpcmVzIGl0CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBub2RlLnN0cnVjdHVyZSgp
LCBXcml0ZUJhcnJpZXJGb3JHZW5lcmljQWNjZXNzKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1
Y3R1cmUoKSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0
dXJlT2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldFByb3BlcnR5
U3RvcmFnZTogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOworICAg
ICAgICAKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9w
ZXJ0eVN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAogICAgICAgICBzdG9yYWdlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwpAQCAtMTc2OCw2ICsxNzkyLDI4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisjaWYgRU5BQkxFKEdHQykg
fHwgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQorICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworI2VuZGlmCisgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQzKCkpOworCisgICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUu
Z3ByKCk7CisgICAgICAgIAorI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigp
LCBub2RlLmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7CisjZW5kaWYK
KworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEgPSBtX2ppdC5n
cmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
OworICAgICAgICAKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWVHUFIsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKTsKKyAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEdldE1ldGhv
ZDogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109353</attachid>
            <date>2011-09-30 15:08:44 -0700</date>
            <delta_ts>2011-09-30 16:41:51 -0700</delta_ts>
            <desc>the patch - fix style and merge</desc>
            <filename>putbyoffset_patch_3.diff</filename>
            <type>text/plain</type>
            <size>27195</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0MzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDcgQEAK
KzIwMTEtMDktMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgZG9lcyBub3Qgc3BlY3VsYXRlIGFnZ3Jlc3NpdmVseSBlbm91Z2ggb24gcHV0X2J5X2lkCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTExNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBu
ZXcgbm9kZXMgYWxvbmcgd2l0aCBvcHRpbWl6YXRpb25zIGZvciB0aG9zZSBub2RlczoKKyAgICAg
ICAgCisgICAgICAgIEdldFByb3BlcnR5U3RvcmFnZTogQ2hlY2tTdHJ1Y3R1cmUgdXNlZCB0byBk
byBib3RoIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgY2hlY2sgYW5kIHJldHJpZXZlIHRoZSBzdG9y
YWdlIHBvaW50ZXIuIE5vdyBDaGVja1N0cnVjdHVyZSBqdXN0CisgICAgICAgIGNoZWNrcyB0aGUg
c3RydWN0dXJlLCBhbmQgR2V0UHJvcGVydHlTdG9yYWdlIHJldHJpZXZlcyB0aGUKKyAgICAgICAg
c3RvcmFnZSBwb2ludGVyLgorICAgICAgICAKKyAgICAgICAgUHV0U3RydWN0dXJlOiBDaGFuZ2Vz
IHRoZSBzdHJ1Y3R1cmUsIGFuZCBoYXMgdGhlIGV4cGVjdGVkIHN0b3JlCisgICAgICAgIHRvIGxv
YWQgb3B0aW1pemF0aW9uIHdpdGggQ2hlY2tTdHJ1Y3R1cmUuCisgICAgICAgIAorICAgICAgICBQ
dXRCeU9mZnNldDogRGlyZWN0bHkgc2V0cyB0aGUgdmFsdWUuIEhhcyBzdG9yZSB0byBsb2FkCisg
ICAgICAgIG9wdGltaXphdGlvbiB3aXRoIEdldEJ5T2Zmc2V0LgorCisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Y2VsbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcik6CisgICAgICAg
ICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlUHJl
ZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmltcHVyZUNTRSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5T2Zmc2V0TG9hZEVsaW1p
bmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpnZXRQcm9wZXJ0eVN0b3Jh
Z2VMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmVsaW1p
bmF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybU5vZGVDU0UpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKwogMjAxMS0wOS0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAg
ICAgIERGRyAzMi1iaXQgc3VwcG9ydCBmb3Igb3BfY2FsbCBhbmQgb3BfY29uc3RydWN0IGNhdXNl
cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDk2NDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lu
Y2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDA0LDYgKzQwNSwxOSBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TmFOKTsKICAgICB9CiAgICAg
CisgICAgTm9kZUluZGV4IGNlbGxDb25zdGFudChKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAg
ICBIYXNoTWFwPEpTQ2VsbCosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2VsbENvbnN0
YW50cy5maW5kKGNlbGwpOworICAgICAgICBpZiAoaXRlciAhPSBtX2NlbGxDb25zdGFudHMuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChpdGVyLT5zZWNvbmQpOworICAg
ICAgICAKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KGNlbGwpOworICAgICAgICBt
X2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CisgICAgICAgIEFTU0VSVChtX2Nv
bnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMo
KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvZGVCbG9jay0+
bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpIC0gMSk7CisgICAgfQorICAgIAogICAgIENvZGVP
cmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQogICAgIHsKICAgICAgICAgcmV0dXJuIENvZGVPcmln
aW4obV9jdXJyZW50SW5kZXgpOwpAQCAtNTc2LDYgKzU5MCw3IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV9jb25zdGFudE51bGw7CiAgICAgdW5zaWduZWQgbV9jb25zdGFudE5hTjsKICAgICB1
bnNpZ25lZCBtX2NvbnN0YW50MTsKKyAgICBIYXNoTWFwPEpTQ2VsbCosIHVuc2lnbmVkPiBtX2Nl
bGxDb25zdGFudHM7CiAKICAgICAvLyBBIGNvbnN0YW50IGluIHRoZSBjb25zdGFudCBwb29sIG1h
eSBiZSByZXByZXNlbnRlZCBieSBtb3JlIHRoYW4gb25lCiAgICAgLy8gbm9kZSBpbiB0aGUgZ3Jh
cGgsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyBiZWluZyB1c2VkLgpA
QCAtMTE1NCw3ICsxMTY5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqbV9n
bG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldEJ5SWQg
PSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVy
ZSwgT3BJbmZvKHN0cnVjdHVyZSksIGJhc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKHN0cnVjdHVyZSksIGJhc2UpOworICAgICAgICAg
ICAgICAgICAgICBnZXRCeUlkID0gYWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3Jh
cGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGFkZFRv
R3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsK
ICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0gb2Zmc2V0OwpA
QCAtMTE3NCwxMyArMTE5MCw4NCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X2lkOiB7CiAgICAgICAgICAgICBOb2RlSW5k
ZXggdmFsdWUgPSBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBib29sIGRpcmVjdCA9
IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51Lm9wZXJhbmQ7CiAKLSAgICAgICAgICAgIGlmIChkaXJl
Y3QpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0LCBPcEluZm8oaWRl
bnRpZmllciksIGJhc2UsIHZhbHVlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgYmFzZSwgdmFsdWUpOwor
ICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gbV9wcm9maWxlZEJsb2Nr
LT5nZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRleCk7CisgICAgICAgICAgICBpZiAoIXN0dWJJbmZv
LnNlZW4pCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBib29sIGFscmVhZHlHZW5lcmF0ZWQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4gJiYgIW1fcHJvZmlsZWRCbG9j
ay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3JlcGxhY2U6IHsKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOworICAgICAgICAgICAgICAg
ICAgICBzaXplX3Qgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRp
Zmllcik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAob2Zm
c2V0ICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrU3RydWN0dXJlLCBPcEluZm8oc3RydWN0dXJlKSwgYmFzZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBi
YXNlKSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVu
dGlmaWVyTnVtYmVyOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlHZW5lcmF0ZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBh
Y2Nlc3NfcHV0X2J5X2lkX3RyYW5zaXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBwcmV2aW91c1N0cnVjdHVyZSA9IHN0dWJJbmZvLnUucHV0QnlJZFRyYW5zaXRpb24ucHJl
dmlvdXNTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gc3R1YkluZm8udS5wdXRCeUlkVHJhbnNpdGlvbi5zdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNT
dHJ1Y3R1cmUtPnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkgIT0gbmV3U3RydWN0dXJlLT5wcm9w
ZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiog
c3RydWN0dXJlQ2hhaW4gPSBzdHViSW5mby51LnB1dEJ5SWRUcmFuc2l0aW9uLmNoYWluLmdldCgp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgSWRlbnRpZmllciBp
ZGVudGlmaWVyID0gbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7Cisg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldCgqbV9n
bG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhwcmV2aW91c1N0cnVjdHVyZSks
IGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHN0
cnVjdHVyZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9ICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJ
bmZvKHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpLCBjZWxsQ29uc3RhbnQocHJvdG90
eXBlLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRT
dHJ1Y3R1cmUsIE9wSW5mbyhuZXdTdHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeU9mZnNldCwg
T3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBiYXNlLCBhZGRUb0dy
YXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFn
ZUFjY2Vzc0RhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0
YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0Rh
dGEpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBh
bHJlYWR5R2VuZXJhdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFhbHJlYWR5R2VuZXJhdGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKGRpcmVjdCkK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeUlkRGlyZWN0LCBPcEluZm8oaWRl
bnRpZmllck51bWJlciksIGJhc2UsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1i
ZXIpLCBiYXNlLCB2YWx1ZSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX3B1dF9ieV9pZCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NjQzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNiArMTQ5LDIwIEBAIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgICAgIHByaW50
ZigiJXNpZCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5pZGVudGlmaWVyTnVtYmVy
KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKG5vZGUuaGFz
U3RydWN0dXJlKCkpIHsKKyAgICAgICAgcHJpbnRmKCIlc3N0cnVjdCglcCkiLCBoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCBub2RlLnN0cnVjdHVyZSgpKTsKKyAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7CisgICAgfQorICAgIGlmIChub2RlLmhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkpIHsKKyAgICAg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIGlmIChjb2RlQmxv
Y2spCisgICAgICAgICAgICBwcmludGYoIiVzaWQldXslc30iLCBoYXNQcmludGVkID8gIiwgIiA6
ICIiLCBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyLCBjb2RlQmxvY2stPmlkZW50
aWZpZXIoc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJlcikudXN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoIiVzaWQldSIsIGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIp
OworICAgICAgICAKKyAgICAgICAgcHJpbnRmKCIsICVsdSIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9m
ZnNldCk7CisgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOworICAgIH0KICAgICBBU1NFUlQobm9k
ZS5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSBub2RlLmhhc0xvY2FsKCkpOwogICAgIGlmIChu
b2RlLmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKSB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNw
cAkocmV2aXNpb24gOTY0MzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDM2IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6d3JpdGVCYXJyaWVyKEdQUlIKICNlbmRpZgogfQogCit2b2lkIEpJ
VENvZGVHZW5lcmF0b3I6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFs
dWUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcg
c2NyYXRjaDIpCit7CisgICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOworICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7CisgICAgVU5VU0VEX1BBUkFN
KHNjcmF0Y2gyKTsKKyAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7CisKKyNpZiBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChqaXQsIFdy
aXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKKyNlbmRpZgorCisj
aWYgRU5BQkxFKEdHQykKKyAgICBHUFJUZW1wb3JhcnkgdGVtcDE7CisgICAgR1BSVGVtcG9yYXJ5
IHRlbXAyOworICAgIGlmIChzY3JhdGNoMSA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoR1BSKHRoaXMpOworICAgICAgICB0ZW1wMS5hZG9wdChzY3JhdGNo
R1BSKTsKKyAgICAgICAgc2NyYXRjaDEgPSB0ZW1wMS5ncHIoKTsKKyAgICB9CisgICAgaWYgKHNj
cmF0Y2gyID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hH
UFIodGhpcyk7CisgICAgICAgIHRlbXAyLmFkb3B0KHNjcmF0Y2hHUFIpOworICAgICAgICBzY3Jh
dGNoMiA9IHRlbXAyLmdwcigpOworICAgIH0KKworICAgIG1hcmtDZWxsQ2FyZChtX2ppdCwgb3du
ZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisjZW5kaWYKK30KKwogdm9pZCBKSVRDb2RlR2Vu
ZXJhdG9yOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBOb2Rl
SW5kZXggdmFsdWVJbmRleCwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2Ny
YXRjaCkKIHsKICAgICBVTlVTRURfUEFSQU0ob3duZXIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk2NDMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxNCw2ICsyMTQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgd3Jp
dGVCYXJyaWVyKE1hY3JvQXNzZW1ibGVyJiwgR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRj
aEdQUjEsIEdQUlJlZyBzY3JhdGNoR1BSMiwgV3JpdGVCYXJyaWVyVXNlS2luZCk7CiAKICAgICB2
b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgTm9kZUlu
ZGV4IHZhbHVlSW5kZXgsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9
IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOworICAg
IHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVC
YXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBOb2RlSW5kZXggdmFsdWVJbmRleCwgV3JpdGVC
YXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZyk7CiAKICAg
ICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFs
aWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2Vy
dmUzID0gSW52YWxpZEdQUlJlZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiA5NjQzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTMsOCArMzEzLDExIEBAIHN0YXRpYyBpbmxpbmUgY29uc3Qg
Y2hhciogYXJpdGhOb2RlRmxhZ3MKICAgICBtYWNybyhHZXRCeUlkLCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQdXRCeUlk
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQdXRC
eUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKLSAgICBt
YWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZVJlc3VsdFN0b3JhZ2UgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhQdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAorICAgIG1hY3JvKEdldFByb3BlcnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAg
ICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oUHV0QnlPZmZz
ZXQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKEdl
dEFycmF5TGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhHZXRNZXRob2QsIE5v
ZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVja01ldGhvZCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXApAQCAtNzgyLDcgKzc4NSw3IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAKICAgICBib29sIGhhc1N0cnVjdHVyZSgpCiAgICAgewotICAgICAg
ICByZXR1cm4gb3AgPT0gQ2hlY2tTdHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBvcCA9PSBDaGVj
a1N0cnVjdHVyZSB8fCBvcCA9PSBQdXRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlKCkKQEAgLTc5Miw3ICs3OTUsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
CiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4g
b3AgPT0gR2V0QnlPZmZzZXQ7CisgICAgICAgIHJldHVybiBvcCA9PSBHZXRCeU9mZnNldCB8fCBv
cCA9PSBQdXRCeU9mZnNldDsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAJKHJldmlzaW9uIDk2NDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDcgKzQ0OCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6
IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0T3RoZXIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU4Myw2ICs1ODMsOSBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgor
ICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgZ2V0cyBpZ25v
cmVkIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnl0aGluZy4KQEAgLTg4OCw2ICs4OTEsMzkgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggaW1wdXJlQ1NF
KE5vZGUmIG5vZGUpCisgICAgeworICAgICAgICBOb2RlSW5kZXggY2hpbGQxID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBOb2RlSW5kZXggY2hpbGQyID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQyKCkpOworICAgICAgICBOb2RlSW5kZXggY2hpbGQzID0gY2Fub25pY2Fs
aXplKG5vZGUuY2hpbGQzKCkpOworICAgICAgICAKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0g
c3RhcnRJbmRleCgpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUlu
ZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBvdGhlck5vZGUgPSBt
X2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IG90aGVyTm9kZS5vcAor
ICAgICAgICAgICAgICAgICYmIG5vZGUuYXJpdGhOb2RlRmxhZ3NGb3JDb21wYXJlKCkgPT0gb3Ro
ZXJOb2RlLmFyaXRoTm9kZUZsYWdzRm9yQ29tcGFyZSgpKSB7CisgICAgICAgICAgICAgICAgTm9k
ZUluZGV4IG90aGVyQ2hpbGQgPSBjYW5vbmljYWxpemUob3RoZXJOb2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBjaGls
ZDEpIHsKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhl
ck5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJDaGlsZCA9PSBO
b05vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChvdGhlckNoaWxkID09IGNoaWxkMikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgb3RoZXJDaGlsZCA9IGNhbm9uaWNhbGl6ZShvdGhlck5vZGUuY2hpbGQzKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVyQ2hpbGQgPT0gTm9Ob2RlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvdGhlckNoaWxkID09IGNoaWxkMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICB9CisgICAgCiAgICAgTm9kZUluZGV4IGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbih1bnNpZ25l
ZCB2YXJOdW1iZXIpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4
Rm9yQ2hpbGRyZW4oKTsKQEAgLTk1MCwxOSArOTg2LDM1IEBAIHByaXZhdGU6CiAgICAgICAgIHJl
dHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVyZUxv
YWRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAg
ICBib29sIGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJl
LCBOb2RlSW5kZXggY2hpbGQxKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3Rh
cnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CiAgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4
ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKICAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKLSAgICAgICAgICAgIGlmIChub2RlLm9wID09IENoZWNr
U3RydWN0dXJlCi0gICAgICAgICAgICAgICAgJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAg
ICAgICAgICAgICAgICAmJiBub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRl
eCkpCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQx
CisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUuc3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICAvLyBT
ZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAogICAgIE5vZGVJbmRleCBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQpAQCAtOTcwLDEyICsx
MDIyLDU2IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhG
b3JDaGlsZHJlbihjaGlsZDEpOwogICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29t
cGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtpbmRleF07Ci0gICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBHZXRCeU9mZnNldAot
ICAgICAgICAgICAgICAgICYmIG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAgICAg
ICAgJiYgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGluZGV4OwotICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgp
KQorICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAg
ICAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJl
cikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkgPT0gY2hpbGQxKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGQzKCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVjdHVyZSBjYW5ub3QgY2hhbmdl
IHRoZSBvdXRjb21lIG9mIGEgcHJvcGVydHkgZ2V0LgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBp
ZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldFByb3Bl
cnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihOb2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAg
ICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CisgICAg
ICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFy
dDspIHsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3Jh
Z2U6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlIHN0cnVj
dHVyZSBvciBwdXR0aW5nIHRvIHRoZSBzdG9yYWdlIGNhbm5vdAorICAgICAgICAgICAgICAgIC8v
IGNoYW5nZSB0aGUgcHJvcGVydHkgc3RvcmFnZSBwb2ludGVyLgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAgICB9CkBAIC0xMDM0LDYgKzExMzAsMTggQEAg
cHJpdmF0ZToKICAgICAgICAgbV9yZXBsYWNlbWVudHNbbV9jb21waWxlSW5kZXhdID0gcmVwbGFj
ZW1lbnQ7CiAgICAgfQogICAgIAorICAgIHZvaWQgZWxpbWluYXRlKCkKKyAgICB7CisjaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgIEVs
aW1pbmF0aW5nIEAldSIsIG1fY29tcGlsZUluZGV4KTsKKyNlbmRpZgorICAgICAgICAKKyAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdOworICAgICAgICBBU1NFUlQo
bm9kZS5yZWZDb3VudCgpID09IDEpOworICAgICAgICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUo
KSk7CisgICAgICAgIG5vZGUub3AgPSBQaGFudG9tOworICAgIH0KKyAgICAKICAgICB2b2lkIHBl
cmZvcm1Ob2RlQ1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBpZiAobm9kZS5vcCAmIE5v
ZGVIYXNWYXJBcmdzKSB7CkBAIC0xMTMzLDcgKzEyNDEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0g
ICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihu
b2RlLnN0cnVjdHVyZSgpLCBub2RlLmNoaWxkMSgpKSk7CisgICAgICAgICAgICBpZiAoY2hlY2tT
dHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmUoKSwgbm9kZS5jaGlsZDEoKSkp
CisgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIHNl
dFJlcGxhY2VtZW50KGdldFByb3BlcnR5U3RvcmFnZUxvYWRFbGltaW5hdGlvbihub2RlLmNoaWxk
MSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5NjQzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2NTcsMTMgKzE2NTcsMzcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
ICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1
cmUoKSkpKTsKICAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZTogewor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIAorI2lmIEVOQUJM
RShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAgICAgLy8gTXVz
dCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0
aW9uIGl0c2VsZiByZXF1aXJlcyBpdAorICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9k
ZS5zdHJ1Y3R1cmUoKSwgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7CisjZW5kaWYKKyAg
ICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG5vZGUuc3RydWN0dXJlKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6
Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAgICAg
ICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKQEAgLTE2ODgsNiAr
MTcxMiwzMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldDogeworI2lm
IEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyNlbmRpZgor
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKworICAgICAg
ICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2YWx1
ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BS
ID0gdmFsdWUucGF5bG9hZEdQUigpOworICAgICAgICAKKyNpZiBFTkFCTEUoR0dDKSB8fCBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdw
cigpLCB2YWx1ZVRhZ0dQUiwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MpOworI2VuZGlmCisKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nl
c3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
VGFnR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNzRGF0
YS5vZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29k
ZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlUGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFn
ZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAg
CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKICAgICBjYXNlIEdldE1ldGhvZDogewogICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0VGFnKHRoaXMsIGJhc2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NjQzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3NDAsMTMgKzE3NDAsMzcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1
Y3R1cmUoKSkpKTsKICAgICAgICAgCisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZTog
eworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIAorI2lmIEVO
QUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAgICAgLy8g
TXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFu
c2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAorICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwg
bm9kZS5zdHJ1Y3R1cmUoKSwgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7CisjZW5kaWYK
KyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisgICAgICAgIAorICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmpl
Y3Q6Om9mZnNldE9mUHJvcGVydHlTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgICAgICAKICAg
ICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKQEAgLTE3Njgs
NiArMTc5MiwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldDogewor
I2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyNlbmRp
ZgorICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNoaWxkMygpKTsKKworICAg
ICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB2
YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAgICAgICAKKyNpZiBFTkFCTEUoR0dDKSB8fCBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdw
cigpLCB2YWx1ZS5ncHIoKSwgbm9kZS5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MpOworI2VuZGlmCisKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nl
c3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
R1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBzdG9yYWdlQWNjZXNzRGF0YS5v
ZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgIAorICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAg
ICAgY2FzZSBHZXRNZXRob2Q6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBi
YXNlKTsK
</data>
<flag name="review"
          id="106591"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>