<?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>69235</bug_id>
          
          <creation_ts>2011-10-02 21:27:07 -0700</creation_ts>
          <short_desc>DFG should speculate more aggressively on obvious cases on polymorphic get_by_id</short_desc>
          <delta_ts>2011-10-03 14:52:44 -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>joepeck</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>476756</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-02 21:27:07 -0700</bug_when>
    <thetext>Many get_by_id&apos;s that go polymorphic in V8 end up performing accesses at one offset regardless of the structure.  In those cases, we can still use GetByOffset and CheckStructure, so long as CheckStructure is extended to be able to check multiple structures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476758</commentid>
    <comment_count>1</comment_count>
      <attachid>109435</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-02 21:30:01 -0700</bug_when>
    <thetext>Created attachment 109435
work in progress

Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;PolyGetById&quot; at /Volumes/Data/pizlo/senary/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              PolyGetById                                   
SunSpider:
   3d-cube                                7.4802+-0.2051    ?     7.5662+-0.2457       ? might be 1.0115x slower
   3d-morph                               7.4047+-0.1666          7.4019+-0.1256       
   3d-raytrace                            8.2055+-0.2450    ^     7.6090+-0.2031       ^ definitely 1.0784x faster
   access-binary-trees                    1.9520+-0.1161    ^     1.7650+-0.0517       ^ definitely 1.1060x faster
   access-fannkuch                        6.3952+-0.1257          6.3839+-0.1022       
   access-nbody                           3.6135+-0.1259          3.5215+-0.0844         might be 1.0261x faster
   access-nsieve                          2.6273+-0.0694    ?     2.6825+-0.0772       ? might be 1.0210x slower
   bitops-3bit-bits-in-byte               1.7307+-0.0258    ?     1.7378+-0.0204       ?
   bitops-bits-in-byte                    2.7378+-0.0734          2.7376+-0.0666       
   bitops-bitwise-and                     3.1737+-0.0341    ?     3.2256+-0.0921       ? might be 1.0163x slower
   bitops-nsieve-bits                     5.5207+-0.1615          5.5002+-0.1703       
   controlflow-recursive                  2.0332+-0.0440          2.0238+-0.0508       
   crypto-aes                             6.8061+-0.2144          6.7950+-0.2456       
   crypto-md5                             2.8211+-0.0715          2.7946+-0.1060       
   crypto-sha1                            2.5510+-0.0921          2.5062+-0.0428         might be 1.0179x faster
   date-format-tofte                     10.0702+-0.2434          9.9412+-0.3018         might be 1.0130x faster
   date-format-xparb                      9.3993+-0.3214          9.3923+-0.3008       
   math-cordic                            6.3349+-0.1338    ?     6.4220+-0.2151       ? might be 1.0138x slower
   math-partial-sums                      7.6382+-0.1566    ?     7.7272+-0.1600       ? might be 1.0117x slower
   math-spectral-norm                     2.8143+-0.0813    ?     2.8189+-0.0596       ?
   regexp-dna                            10.7468+-0.0974    ?    10.7851+-0.1443       ?
   string-base64                          5.6549+-0.1856    ?     5.7496+-0.2816       ? might be 1.0168x slower
   string-fasta                           6.6589+-0.1586    ?     6.8564+-0.1918       ? might be 1.0297x slower
   string-tagcloud                       11.8219+-0.2949         11.6058+-0.2792         might be 1.0186x faster
   string-unpack-code                    21.5388+-0.5473    ?    21.7617+-0.7630       ? might be 1.0103x slower
   string-validate-input                  6.2991+-0.1684    ?     6.4473+-0.2245       ? might be 1.0235x slower

   &lt;arithmetic&gt; *                         6.3088+-0.0321          6.2984+-0.0335       
   &lt;geometric&gt;                            5.1750+-0.0327          5.1528+-0.0279       
   &lt;harmonic&gt;                             4.2541+-0.0454          4.2174+-0.0399       

                                            TipOfTree              PolyGetById                                   
V8:
   crypto                                72.0420+-0.2361    !    72.6393+-0.2663       ! definitely 1.0083x slower
   deltablue                            226.0377+-2.2138    ^   222.4414+-1.3674       ^ definitely 1.0162x faster
   earley-boyer                          87.5112+-0.3216    ?    88.2521+-0.6321       ?
   raytrace                              61.6821+-0.5257    ?    62.4898+-0.4579       ? might be 1.0131x slower
   regexp                               103.2826+-0.5215        103.0298+-0.6185       
   richards                             185.8201+-0.7279    ?   187.5975+-1.3956       ?
   splay                                 90.7084+-0.3449         90.4355+-0.5553       

   &lt;arithmetic&gt;                         118.1549+-0.4235        118.1265+-0.3624       
   &lt;geometric&gt; *                        106.2625+-0.2895    ?   106.5311+-0.2887       ?
   &lt;harmonic&gt;                            97.1732+-0.2613    ?    97.6353+-0.2647       ?

                                            TipOfTree              PolyGetById                                   
Kraken:
   ai-astar                             487.9140+-1.2525        486.3753+-1.1255       
   audio-beat-detection                 194.2983+-2.8350        191.1177+-1.6340         might be 1.0166x faster
   audio-dft                            279.9974+-3.1451    ^   270.8231+-1.9973       ^ definitely 1.0339x faster
   audio-fft                            128.0543+-0.8223    ?   128.5125+-1.0330       ?
   audio-oscillator                     257.3560+-1.9724    ^   246.3795+-2.0638       ^ definitely 1.0446x faster
   imaging-darkroom                     419.3905+-0.9765    ?   420.3736+-1.5820       ?
   imaging-desaturate                   223.6224+-0.9294    ?   224.8275+-0.5870       ?
   imaging-gaussian-blur                579.8734+-1.3646    ?   580.5274+-1.4157       ?
   json-parse-financial                  49.2241+-0.2084    !    50.7065+-0.8707       ! definitely 1.0301x slower
   json-stringify-tinderbox              67.5603+-0.4213    !    68.4149+-0.4177       ! definitely 1.0126x slower
   stanford-crypto-aes                  129.8032+-1.5508    ?   131.3744+-1.3683       ? might be 1.0121x slower
   stanford-crypto-ccm                  100.6605+-0.3288    ?   101.6856+-0.7074       ? might be 1.0102x slower
   stanford-crypto-pbkdf2               194.6971+-1.2720        194.3023+-0.5494       
   stanford-crypto-sha256-iterative      76.9877+-0.3741         76.6157+-0.2952       

   &lt;arithmetic&gt; *                       227.8171+-0.6186    ^   226.5740+-0.4488       ^ definitely 1.0055x faster
   &lt;geometric&gt;                          177.5602+-0.4815        177.2219+-0.4616       
   &lt;harmonic&gt;                           137.3444+-0.3335    ?   138.1071+-0.5591       ?

                                            TipOfTree              PolyGetById                                   
All benchmarks:
   &lt;arithmetic&gt;                          88.9479+-0.2062         88.5677+-0.1772       
   &lt;geometric&gt;                           23.2671+-0.0911         23.2075+-0.0818       
   &lt;harmonic&gt;                             7.4772+-0.0778          7.4155+-0.0686       

                                            TipOfTree              PolyGetById                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.4525+-0.1159         53.3705+-0.1081</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476799</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-02 23:08:51 -0700</bug_when>
    <thetext>Updated numbers.


Benchmark report for SunSpider, V8, and Kraken.

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

Collected 30 samples per benchmark/VM, with 10 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              PolyGetById                                   
SunSpider:
   3d-cube                                7.4617+-0.1034          7.4526+-0.1151       
   3d-morph                               7.4606+-0.0887          7.4365+-0.0834       
   3d-raytrace                            8.2420+-0.1147    ^     7.7820+-0.1234       ^ definitely 1.0591x faster
   access-binary-trees                    1.7895+-0.0448    ?     1.7961+-0.0455       ?
   access-fannkuch                        6.3124+-0.0547    ?     6.3763+-0.0769       ? might be 1.0101x slower
   access-nbody                           3.5895+-0.0703          3.5023+-0.0547         might be 1.0249x faster
   access-nsieve                          2.6121+-0.0409    ?     2.6302+-0.0403       ?
   bitops-3bit-bits-in-byte               1.7307+-0.0198    ?     1.7413+-0.0154       ?
   bitops-bits-in-byte                    2.7374+-0.0427    ?     2.7884+-0.0551       ? might be 1.0187x slower
   bitops-bitwise-and                     3.2574+-0.0601          3.2269+-0.0450       
   bitops-nsieve-bits                     5.4171+-0.0626    ?     5.4872+-0.0837       ? might be 1.0129x slower
   controlflow-recursive                  2.0842+-0.0298    ?     2.0907+-0.0324       ?
   crypto-aes                             6.8417+-0.1346          6.7743+-0.1371       
   crypto-md5                             2.8669+-0.0543          2.8525+-0.0602       
   crypto-sha1                            2.5060+-0.0458          2.5034+-0.0418       
   date-format-tofte                     10.1911+-0.1981          9.9102+-0.1504         might be 1.0284x faster
   date-format-xparb                      9.4119+-0.1436          9.3752+-0.1469       
   math-cordic                            6.2322+-0.0542    ?     6.2370+-0.0557       ?
   math-partial-sums                      7.5658+-0.0878          7.5025+-0.0732       
   math-spectral-norm                     2.8764+-0.0392          2.8682+-0.0580       
   regexp-dna                            10.9170+-0.0949    ?    10.9202+-0.1689       ?
   string-base64                          5.6590+-0.0913          5.6038+-0.1394       
   string-fasta                           6.6458+-0.0872    ?     6.6492+-0.1068       ?
   string-tagcloud                       11.8912+-0.1948    ?    12.0330+-0.2048       ? might be 1.0119x slower
   string-unpack-code                    21.3281+-0.2824         21.1507+-0.2839       
   string-validate-input                  6.3290+-0.1368          6.3204+-0.0888       

   &lt;arithmetic&gt; *                         6.3060+-0.0137          6.2697+-0.0253       
   &lt;geometric&gt;                            5.1665+-0.0136          5.1465+-0.0210       
   &lt;harmonic&gt;                             4.2350+-0.0197          4.2296+-0.0251       

                                            TipOfTree              PolyGetById                                   
V8:
   crypto                                72.1259+-0.2271    ?    72.2060+-0.3149       ?
   deltablue                            225.0479+-1.0014    ?   226.4046+-1.0914       ?
   earley-boyer                          87.5991+-0.1713    ?    87.6375+-0.2942       ?
   raytrace                              61.4064+-0.2985         61.3754+-0.3465       
   regexp                               104.0808+-0.4639        103.7140+-0.3796       
   richards                             186.9374+-0.5667        186.4882+-0.5270       
   splay                                 91.2943+-0.3209         91.2434+-0.3609       

   &lt;arithmetic&gt;                         118.3560+-0.1797    ?   118.4385+-0.2442       ?
   &lt;geometric&gt; *                        106.4654+-0.1328    ?   106.4734+-0.2054       ?
   &lt;harmonic&gt;                            97.3225+-0.1318         97.3019+-0.2024       

                                            TipOfTree              PolyGetById                                   
Kraken:
   ai-astar                             492.7137+-2.1612    ^   488.8511+-1.3972       ^ definitely 1.0079x faster
   audio-beat-detection                 192.8215+-1.4299    ^   190.6301+-0.5796       ^ definitely 1.0115x faster
   audio-dft                            278.8327+-1.5564    ^   271.9584+-1.7589       ^ definitely 1.0253x faster
   audio-fft                            128.4893+-0.7137    ?   128.5923+-0.6978       ?
   audio-oscillator                     257.6952+-1.4953    ^   246.6424+-0.9898       ^ definitely 1.0448x faster
   imaging-darkroom                     420.0356+-1.3004        419.9649+-1.3683       
   imaging-desaturate                   225.0034+-0.9091        223.9795+-0.4624       
   imaging-gaussian-blur                582.8256+-1.7895        581.5096+-1.4356       
   json-parse-financial                  49.2039+-0.2322         48.9254+-0.2208       
   json-stringify-tinderbox              68.1326+-0.2636    !    68.9949+-0.2137       ! definitely 1.0127x slower
   stanford-crypto-aes                  130.5265+-1.0122        130.4759+-1.3555       
   stanford-crypto-ccm                  102.2631+-0.5399    ^   100.8593+-0.3557       ^ definitely 1.0139x faster
   stanford-crypto-pbkdf2               195.9558+-1.1230        193.9616+-1.0843         might be 1.0103x faster
   stanford-crypto-sha256-iterative      77.5329+-0.3205         77.4402+-0.5185       

   &lt;arithmetic&gt; *                       228.7166+-0.3183    ^   226.6275+-0.3175       ^ definitely 1.0092x faster
   &lt;geometric&gt;                          178.2956+-0.2542    ^   176.8639+-0.3042       ^ definitely 1.0081x faster
   &lt;harmonic&gt;                           137.9784+-0.2156    ^   137.3059+-0.2782       ^ definitely 1.0049x faster

                                            TipOfTree              PolyGetById                                   
All benchmarks:
   &lt;arithmetic&gt;                          89.2443+-0.0906    ^    88.6142+-0.1108       ^ definitely 1.0071x faster
   &lt;geometric&gt;                           23.2815+-0.0377    ^    23.1759+-0.0602       ^ definitely 1.0046x faster
   &lt;harmonic&gt;                             7.4452+-0.0338          7.4355+-0.0430       

                                            TipOfTree              PolyGetById                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.5489+-0.0465    ^    53.2835+-0.0919       ^ definitely 1.0050x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476802</commentid>
    <comment_count>3</comment_count>
      <attachid>109441</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-02 23:13:10 -0700</bug_when>
    <thetext>Created attachment 109441
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476803</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-02 23:15:17 -0700</bug_when>
    <thetext>Attachment 109441 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/DFGStructureSet.h:67:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/bytecode/Instruction.h:74:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:74:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGGraph.h:333:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1202:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 11 in 15 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>476806</commentid>
    <comment_count>5</comment_count>
      <attachid>109442</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-02 23:18:11 -0700</bug_when>
    <thetext>Created attachment 109442
the patch - fix style, mostly

I didn&apos;t fix all of the style errors in Instruction.h, but I &quot;avoided&quot; the preexisting problem by using &quot;this-&gt;x = x&quot; instead of &quot;x = _x&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476808</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-02 23:20:45 -0700</bug_when>
    <thetext>Attachment 109442 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/bytecode/Instruction.h:74:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:74:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 15 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>476811</commentid>
    <comment_count>7</comment_count>
      <attachid>109442</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-02 23:26:44 -0700</bug_when>
    <thetext>Comment on attachment 109442
the patch - fix style, mostly

Attachment 109442 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9900974</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476816</commentid>
    <comment_count>8</comment_count>
      <attachid>109443</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-02 23:46:03 -0700</bug_when>
    <thetext>Created attachment 109443
the patch - added some forgotten 32-bit stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476817</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-02 23:48:17 -0700</bug_when>
    <thetext>Attachment 109443 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/bytecode/Instruction.h:74:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:74:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:83:  _proto is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _stubRoutine is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _base is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/bytecode/Instruction.h:92:  _chain is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 8 in 16 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>477142</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-03 12:24:47 -0700</bug_when>
    <thetext>Landed in r96527.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477253</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-10-03 14:45:59 -0700</bug_when>
    <thetext>On ToT r96537 I&apos;m seeing an ASSERT when opening the web inspector:

    ASSERTION FAILED: !contains(structure)
    /Volumes/Data/Code/webkit-open-source/Source/JavaScriptCore/dfg/DFGStructureSet.h(48) : void JSC::DFG::StructureSet::add(JSC::Structure *)
    1   JSC::DFG::StructureSet::add(JSC::Structure*)
    2   JSC::DFG::ByteCodeParser::parseBlock(unsigned int)
    3   JSC::DFG::ByteCodeParser::parse()
    4   JSC::DFG::parse(JSC::DFG::Graph&amp;, JSC::JSGlobalData*, JSC::CodeBlock*)
    5   JSC::DFG::compile(JSC::DFG::CompileMode, JSC::ExecState*, JSC::ExecState*, JSC::CodeBlock*, JSC::JITCode&amp;, JSC::MacroAssemblerCodePtr*)
    6   JSC::DFG::tryCompileFunction(JSC::ExecState*, JSC::ExecState*, JSC::CodeBlock*, JSC::JITCode&amp;, JSC::MacroAssemblerCodePtr&amp;)
    7   JSC::FunctionExecutable::compileForCallInternal(JSC::ExecState*, JSC::ScopeChainNode*, JSC::ExecState*, JSC::JITCode::JITType)
    8   JSC::FunctionExecutable::compileOptimizedForCall(JSC::ExecState*, JSC::ScopeChainNode*, JSC::ExecState*)
    9   JSC::FunctionExecutable::compileOptimizedFor(JSC::ExecState*, JSC::ScopeChainNode*, JSC::CodeSpecializationKind)
    10  JSC::FunctionCodeBlock::compileOptimized(JSC::ExecState*, JSC::ScopeChainNode*)
    11  cti_optimize_from_ret
    12  jscGeneratedNativeCode
    13  JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*)
    14  JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
    15  JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
    16  JSC::JSObject::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;)
    17  JSC::JSValue::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;)
    18  cti_op_put_by_id_generic
    19  jscGeneratedNativeCode
    20  JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*)
    21  JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
    22  JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
    23  JSC::JSObject::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;)
    24  JSC::JSValue::put(JSC::ExecState*, JSC::Identifier const&amp;, JSC::JSValue, JSC::PutPropertySlot&amp;)
    25  cti_op_put_by_id
    26  jscGeneratedNativeCode
    27  JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*)
    28  JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
    29  JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
    30  WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
    31  WebCore::ScheduledAction::executeFunctionInContext(JSC::JSGlobalObject*, JSC::JSValue, WebCore::ScriptExecutionContext*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477258</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-10-03 14:52:44 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; On ToT r96537 I&apos;m seeing an ASSERT when opening the web inspector:

I opened bug 69293 and CC&apos;d a number of JSC folks.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109435</attachid>
            <date>2011-10-02 21:30:01 -0700</date>
            <delta_ts>2011-10-02 23:13:10 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>polygetbyid_patch_1.diff</filename>
            <type>text/plain</type>
            <size>21680</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAK
KzIwMTEtMTAtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHNwZWN1bGF0ZSBtb3JlIGFnZ3Jlc3NpdmVseSBvbiBvYnZpb3VzIGNhc2VzIG9u
CisgICAgICAgIHBvbHltb3JwaGljIGdldF9ieV9pZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdPUksgSU4gUFJPR1JFU1MuIFN0aWxsIHdv
cmtpbmcgb24gMzItYml0LgorICAgICAgICAKKyAgICAgICAgU2xpZ2h0IHNwZWVkLXVwIG9uIEty
YWtlbiBhbmQgU3VuU3BpZGVyLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkU3Ry
dWN0dXJlU2V0KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVTZXQpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnN0cnVjdHVyZVNldCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmNoZWNrU3RydWN0dXJlTG9h
ZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9k
ZUNTRSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Ry
dWN0dXJlU2V0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6U3Ry
dWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmFkZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0OjphZGRBbGwpOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZVNldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6
OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmlzU3Vic2V0T2Yp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6aXNTdXBlcnNldE9mKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZVNldDo6YXQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6b3BlcmF0
b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0OjpsYXN0KToKKwogMjAxMS0x
MC0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBtaXNz
ZXMgc29tZSBvYnZpb3VzIG9wcG9ydHVuaXRpZXMgZm9yIGNvbW1vbiBzdWJleHByZXNzaW9uIGVs
aW1pbmF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTY0
ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQAogCQkwRkQ4MkY0
QjE0MjgwNkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAv
KiBIZXVyaXN0aWNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIy
MzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwICovOyB9OworCQkwRkZGNEJCNDE0Mzk1NUU5MDA2
NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkZGNEJCMjE0Mzk1NUU2MDA2NTVCQzAgLyogREZHU3RydWN0dXJl
U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5
MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2
NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4
NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODQxLDYgKzg0Miw3IEBACiAJ
CTBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhldXJpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZXVyaXN0aWNzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkY0QkIyMTQzOTU1RTYwMDY1NUJDMCAvKiBERkdTdHJ1
Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJl
U2V0Lmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQ
b3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0FsbG9jYXRv
clBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRB
OTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3
Niw2ICsyMjc4LDcgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZGRjRCQjIxNDM5NTVF
NjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIw
MDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4
MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yODY3LDYgKzI4NzAsNyBA
QAogCQkJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGlu
ZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAv
KiBIZXVyaXN0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVC
QzAgLyogREZHU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NjQ4
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTYwLDI5ICsxMTYwLDY5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgU3RydWN0dXJlU3R1Yklu
Zm8mIHN0dWJJbmZvID0gbV9wcm9maWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRl
eCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeUlkID0gTm9Ob2Rl
OwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4gJiYgc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KTsKLSAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBzaXplX3Qgb2Zm
c2V0ID0gc3RydWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkgewotICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8oc3RydWN0
dXJlKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNz
RGF0YS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NE
YXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRh
KTsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgIFN0
cnVjdHVyZVNldCBzdHJ1Y3R1cmVTZXQ7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uc2Vlbikg
eworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOiB7CisgICAgICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2Jq
ZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmVTZXQuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZl9saXN0OiB7CisgICAgICAgICAgICAgICAgICAg
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogbGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJ
ZFByb3RvTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBz
aXplID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmxpc3RbaV0uYmFzZS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBteU9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteU9mZnNldCA9PSBub3RGb3VuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG5vdEZvdW5kOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbXlPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgIT0gbXlPZmZzZXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBub3RGb3Vu
ZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGdldEJ5SWQgPT0gTm9Ob2Rl
KQotICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldEJ5
SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAob2Zmc2V0ICE9
IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZVNldC5zaXplKCkp
OworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpKSwgYmFzZSk7CisgICAgICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0QnlP
ZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSkpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdl
QWNjZXNzRGF0YTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51bWJl
ciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRk
VG9HcmFwaChHZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVkaWN0
aW9uKSwgYmFzZSkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfaWQpOwog
ICAgICAgICB9CkBAIC0xMjA3LDcgKzEyNDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tT
dHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwgYmFz
ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcElu
Zm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3JhcGgo
R2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNj
ZXNzRGF0YTsKQEAgLTEyMzMsMTQgKzEyNzMsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbmV3
U3RydWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
cHJldmlvdXNTdHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcmV2
aW91c1N0cnVjdHVyZSkpLCBiYXNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGly
ZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8U3Ry
dWN0dXJlPiogaXQgPSBzdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+c3Rv
cmVkUHJvdG90eXBlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90
b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlwZS5p
c0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKSwgY2Vs
bENvbnN0YW50KHByb3RvdHlwZS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1
Y3R1cmVTZXQocHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSkpLCBjZWxsQ29uc3RhbnQo
cHJvdG90eXBlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyhuZXdTdHJ1Y3R1cmUpLCBiYXNlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDks
NiArMTQ5LDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAg
ICAgICAgICAgIHByaW50ZigiJXNpZCV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5p
ZGVudGlmaWVyTnVtYmVyKCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9Cisg
ICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBw
cmludGYoIiVzc3RydWN0KCVwKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuc3RydWN0
dXJlU2V0KClbaV0pOworICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CiAgICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlKCkpIHsKICAgICAgICAgcHJpbnRmKCIl
c3N0cnVjdCglcCkiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnN0cnVjdHVyZSgpKTsK
ICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYgKzMyOSwxMiBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKiwgQ29kZUJs
b2NrKik7CisgICAgCisgICAgU3RydWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVTZXQoY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpIHsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZVNldC5z
aXplKCkpOworICAgICAgICBtX3N0cnVjdHVyZVNldC5hcHBlbmQoc3RydWN0dXJlU2V0KTsKKyAg
ICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZVNldC5sYXN0KCk7CisgICAgfQogCiAgICAgVmVjdG9y
PCBPd25QdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8Tm9kZUluZGV4
LCAxNj4gbV92YXJBcmdDaGlsZHJlbjsKQEAgLTMzNyw2ICszNDMsNyBAQCBwdWJsaWM6CiAgICAg
VmVjdG9yPFJlc29sdmVHbG9iYWxEYXRhPiBtX3Jlc29sdmVHbG9iYWxEYXRhOwogICAgIFZlY3Rv
cjxOb2RlSW5kZXgsIDg+IG1fYXJndW1lbnRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJs
ZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKKyAgICBTZWdtZW50ZWRWZWN0
b3I8U3RydWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7CiAgICAgdW5zaWduZWQgbV9wcmVz
ZXJ2ZWRWYXJzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFy
YW1ldGVyU2xvdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZH
Tm9kZV9oCiAKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlIDx3dGYvQm91
bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRl
IDx3dGYvVW5pb25GaW5kLmg+CkBAIC03ODYsMTQgKzc4NywyNiBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09
IENoZWNrU3RydWN0dXJlIHx8IG9wID09IFB1dFN0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG9w
ID09IFB1dFN0cnVjdHVyZTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUo
KQogICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1N0cnVjdHVyZSgpKTsKICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKKyAg
ICBib29sIGhhc1N0cnVjdHVyZVNldCgpCisgICAgeworICAgICAgICByZXR1cm4gb3AgPT0gQ2hl
Y2tTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmVTZXQqPihtX29wSW5mbyk7CisgICAgfQor
ICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG9wID09IEdldEJ5T2Zmc2V0IHx8IG9wID09IFB1dEJ5T2Zmc2V0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NjQ4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4OSw3ICs5ODksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2Rl
OwogICAgIH0KICAgICAKLSAgICBib29sIGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIGJvb2wgY2hlY2tTdHJ1
Y3R1cmVMb2FkRWxpbWluYXRpb24oY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIE5v
ZGVJbmRleCBjaGlsZDEpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydElu
ZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBt
X2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewpAQCAtOTk3LDEzICs5OTcsMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewogICAgICAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBj
aGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1
cmUpCisgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5pc1N1cGVyc2V0T2Yobm9k
ZS5zdHJ1Y3R1cmVTZXQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQx
Ci0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuc3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKQor
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1
cmUoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAKQEAgLTEyNDUsNyArMTI0NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0
aW9uKG5vZGUuc3RydWN0dXJlKCksIG5vZGUuY2hpbGQxKCkpKQorICAgICAgICAgICAgaWYgKGNo
ZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlU2V0KCksIG5vZGUuY2hp
bGQxKCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzM0LDkgKzE3MzQsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCku
c2l6ZSgpKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
UHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5v
ZGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUo
KSA9PSAxKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5z
dHJ1Y3R1cmVTZXQoKVswXSkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJUZW1w
b3Jhcnkgc3RydWN0dXJlKHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1
YWwsIHN0cnVjdHVyZS5ncHIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1
Y3R1cmVTZXQoKVtpXSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3By
KCksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgp
KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVT
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0
dXJlU2V0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHU3RydWN0dXJlU2V0X2gK
KyNkZWZpbmUgREZHU3RydWN0dXJlU2V0X2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFN0cnVjdHVyZTsKKworbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIFN0cnVjdHVyZVNldCB7CitwdWJsaWM6CisgICAgU3RydWN0dXJlU2V0KCkgeyB9Cisg
ICAgCisgICAgU3RydWN0dXJlU2V0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgbV9zdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghY29udGFp
bnMoc3RydWN0dXJlKSk7CisgICAgICAgIG1fc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
KyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG90aGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoY29udGFp
bnMob3RoZXJbaV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYWRk
KG90aGVyW2ldKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9z
dHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmVzW2ld
ICE9IHN0cnVjdHVyZSkgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlc1tpXSA9IG1fc3RydWN0dXJlcy5sYXN0KCk7CisgICAgICAgICAgICBtX3N0cnVjdHVy
ZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0CisgICAg
eworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlc1tpXSA9PSBzdHJ1Y3R1cmUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1
Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKG1f
c3RydWN0dXJlc1tpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3VwZXJzZXRP
Zihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG90aGVyLmlzU3Vic2V0T2YoKnRoaXMpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlcy5zaXplKCk7IH0KKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZXMuYXQoaSk7IH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0
KGkpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1
Y3R1cmVzLmxhc3QoKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCAyPiBt
X3N0cnVjdHVyZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBERkdTdHJ1Y3R1cmVTZXRfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109441</attachid>
            <date>2011-10-02 23:13:10 -0700</date>
            <delta_ts>2011-10-02 23:18:11 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>polygetbyid_patch_2.diff</filename>
            <type>text/plain</type>
            <size>42700</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMTEtMTAtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHNwZWN1bGF0ZSBtb3JlIGFnZ3Jlc3NpdmVseSBvbiBvYnZpb3VzIGNhc2VzIG9u
CisgICAgICAgIHBvbHltb3JwaGljIGdldF9ieV9pZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0cml2aWFsIHBv
bHltb3JwaGljIGdldF9ieV9pZC4gSXQgYWxzbyBmaXhlcworICAgICAgICBwcm9ibGVtcyBpbiB0
aGUgQ1NFIGZvciBDaGVja1N0cnVjdHVyZSBpbiB0aGUgcHV0X2J5X2lkCisgICAgICAgIHRyYW5z
aXRpb24gY2FzZS4KKyAgICAgICAgCisgICAgICAgIERvaW5nIHRoaXMgcmVxdWlyZWQga25vd2lu
ZyB3aGV0aGVyIGEgcG9seW1vcnBoaWMgZ2V0X2J5X2lkIHN0dWIKKyAgICAgICAgd2FzIGRvaW5n
IGEgZGlyZWN0IGFjY2VzcyByYXRoZXIgdGhhbiBhIGNhbGwgb2Ygc29tZSBraW5kLgorICAgICAg
ICAKKyAgICAgICAgU2xpZ2h0IHNwZWVkLXVwIG9uIEtyYWtlbiBhbmQgU3VuU3BpZGVyLiAwLjUl
IHNwZWVkLXVwIGluIHRoZQorICAgICAgICBzY2FsZWQgbWVhbiBvZiBhbGwgYmVuY2htYXJrcy4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvbi5oOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBv
bHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6YWRkU3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlVHJhbnNpdGlvbkRhdGE6OlN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZVNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1
Y3R1cmVMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBl
cmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OlN0cnVjdHVyZVNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZVNldDo6YWRkQWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0Ojpjb250YWlucyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0Ojppc1N1YnNldE9mKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlU2V0OjpzaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6
OmF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6bGFzdCk6CisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJv
dG9MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxp
c3QpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9T
VFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0U2xvdCk6CisKIDIwMTEtMTAtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBERkcgbWlzc2VzIHNvbWUgb2J2aW91cyBvcHBvcnR1bml0aWVzIGZvciBj
b21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsx
MzMsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Njb3JlQm9hcmQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsNyBAQAogCQkwRkQ4MkY0QjE0MjgwNkExMDAxNzlDOTQgLyogQml0
VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIEhldXJpc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIy
QzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3Mu
Y3BwICovOyB9OworCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGNEJC
MjE0Mzk1NUU2MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBK
U0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIu
Y3BwICovOyB9OwpAQCAtODQxLDYgKzg0Miw3IEBACiAJCTBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5
NCAvKiBCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0VmVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5
NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhldXJpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIZXVyaXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RkY0QkIyMTQzOTU1RTYwMDY1NUJDMCAvKiBERkdTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlU2V0Lmg7IHBhdGggPSBkZmcvREZHU3Ry
dWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3
ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5
MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3Niw2ICsyMjc4LDcgQEAKIAkJODZFQzlE
QjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMEZGRjRCQjIxNDM5NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVy
ZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBh
cnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxp
dGllcy5jcHAgKi8sCkBAIC0yODY3LDYgKzI4NzAsNyBAQAogCQkJCTBGRDUyQUFFMTQzMDM1QTAw
MDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODgwRjFFMTQzMjhC
QjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0cnVjdGlvbi5oCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RydWN0IFBvbHltb3JwaGljU3R1
YkluZm8gewogICAgICAgICAgICAgYm9vbCBpc0NoYWluOworICAgICAgICAgICAgYm9vbCBpc0Rp
cmVjdDsKICAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0
aW5lVHlwZSBzdHViUm91dGluZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IGJhc2U7CiAgICAgICAgICAgICB1bmlvbiB7CkBAIC03MCw0NCArNzEsNDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UpCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJv
b2wgaXNEaXJlY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUg
PSBfc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICAgICAgYmFzZS5zZXQoZ2xvYmFsRGF0YSwgb3du
ZXIsIF9iYXNlKTsKICAgICAgICAgICAgICAgICB1LnByb3RvLmNsZWFyKCk7CiAgICAgICAgICAg
ICAgICAgaXNDaGFpbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0g
aXNEaXJlY3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQg
c2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJl
KiBfYmFzZSwgU3RydWN0dXJlKiBfcHJvdG8pCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0
cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uu
c2V0KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CiAgICAgICAgICAgICAgICAgdS5wcm90by5z
ZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9wcm90byk7CiAgICAgICAgICAgICAgICAgaXNDaGFpbiA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0
dXJlQ2hhaW4qIF9jaGFpbikKKyAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1
YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hh
aW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChn
bG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwogICAgICAgICAgICAgICAgIHUuY2hhaW4uc2V0KGds
b2JhbERhdGEsIG93bmVyLCBfY2hhaW4pOwogICAgICAgICAgICAgICAgIGlzQ2hhaW4gPSB0cnVl
OworICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gbGlzdFtQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkVdOwogICAgICAg
ICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSkKKyAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRp
bmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgYm9vbCBpc0RpcmVjdCkK
ICAgICAgICAgewotICAgICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0
dWJSb3V0aW5lLCBmaXJzdEJhc2UpOworICAgICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0
YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0
dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVy
ZSogZmlyc3RQcm90bykKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0
QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZp
cnN0QmFzZSwgZmlyc3RQcm90byk7CisgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRh
LCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3QpOwog
ICAgICAgICB9CiAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFz
ZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4pCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwg
U3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlz
RGlyZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBv
d25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbik7CisgICAgICAgICAgICBs
aXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmly
c3RDaGFpbiwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgaW50IGNvdW50KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk2NDgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxNSw2ICs0MTUsOCBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0
YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CiAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50
cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CiAg
ICAgICAgIAorICAgICAgICBtX2NlbGxDb25zdGFudHMuYWRkKGNlbGwsIG1fY29kZUJsb2NrLT5u
dW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgLSAxKTsKKyAgICAgICAgCiAgICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkg
LSAxKTsKICAgICB9CiAgICAgCkBAIC0xMTYwLDI5ICsxMTYyLDc1IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gbV9wcm9maWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1cnJl
bnRJbmRleCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeUlkID0g
Tm9Ob2RlOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4gJiYgc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkg
ewotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
c3RydWN0dXJlKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dy
YXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUo
KSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJh
c2UpKTsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAg
IFN0cnVjdHVyZVNldCBzdHJ1Y3R1cmVTZXQ7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uc2Vl
bikgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOiB7CisgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NE
YXRhOwotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAob2Zm
c2V0ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZVNldC5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmX2xpc3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVj
dHVyZUxpc3Q7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBzdHViSW5mby51
LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemU7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbGlzdC0+bGlzdFtpXS5pc0RpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByaW50ZigiTm90IGRpcmVjdCFcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCA9IG5vdEZvdW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmxpc3RbaV0uYmFz
ZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBteU9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteU9mZnNldCA9PSBub3RGb3VuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG5vdEZvdW5kOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09IDApCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbXlPZmZzZXQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChvZmZzZXQgIT0gbXlPZmZzZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBub3RG
b3VuZCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGdldEJ5SWQgPT0gTm9O
b2RlKQotICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5m
byhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdl
dEJ5SWQpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAob2Zmc2V0
ICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZVNldC5zaXpl
KCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyht
X2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpKSwgYmFzZSk7CisgICAgICAgICAg
ICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0
QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgT3BJ
bmZvKHByZWRpY3Rpb24pLCBhZGRUb0dyYXBoKEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSkpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9y
YWdlQWNjZXNzRGF0YTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQg
PSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllck51
bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChHZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgYmFzZSkpOwogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYnlfaWQp
OwogICAgICAgICB9CkBAIC0xMjA3LDcgKzEyNTUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpKSwg
YmFzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBP
cEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3Jh
cGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdl
QWNjZXNzRGF0YTsKQEAgLTEyMzMsMTcgKzEyODEsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0g
bmV3U3RydWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5kKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcElu
Zm8ocHJldmlvdXNTdHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChw
cmV2aW91c1N0cnVjdHVyZSkpLCBiYXNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
ZGlyZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChXcml0ZUJhcnJpZXI8
U3RydWN0dXJlPiogaXQgPSBzdHJ1Y3R1cmVDaGFpbi0+aGVhZCgpOyAqaXQ7ICsraXQpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSBwcm90b3R5cGUgPSAoKml0KS0+
c3RvcmVkUHJvdG90eXBlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cm90b3R5cGUuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHByb3RvdHlw
ZS5pc0NlbGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKSwg
Y2VsbENvbnN0YW50KHByb3RvdHlwZS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRT
dHJ1Y3R1cmVTZXQocHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSkpLCBjZWxsQ29uc3Rh
bnQocHJvdG90eXBlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyhuZXdTdHJ1Y3R1cmUpLCBiYXNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5h
ZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShwcmV2aW91
c1N0cnVjdHVyZSwgbmV3U3RydWN0dXJlKSkpLCBiYXNlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRCeU9mZnNldCwgT3BJ
bmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBiYXNlLCBhZGRUb0dyYXBo
KEdldFByb3BlcnR5U3RvcmFnZSwgYmFzZSksIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9u
IDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSw4ICsxNDksMTQgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXgg
bm9kZUluZGV4LCBDbwogICAgICAgICAgICAgcHJpbnRmKCIlc2lkJXUiLCBoYXNQcmludGVkID8g
IiwgIiA6ICIiLCBub2RlLmlkZW50aWZpZXJOdW1iZXIoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQg
PSB0cnVlOwogICAgIH0KLSAgICBpZiAobm9kZS5oYXNTdHJ1Y3R1cmUoKSkgewotICAgICAgICBw
cmludGYoIiVzc3RydWN0KCVwKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuc3RydWN0
dXJlKCkpOworICAgIGlmIChub2RlLmhhc1N0cnVjdHVyZVNldCgpKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgcHJpbnRmKCIlc3N0cnVjdCglcCkiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBu
b2RlLnN0cnVjdHVyZVNldCgpW2ldKTsKKyAgICAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChub2RlLmhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkpIHsKKyAgICAgICAgcHJpbnRmKCIlc3N0cnVjdCglcCAtPiAlcCkiLCBoYXNQcmludGVkID8g
IiwgIiA6ICIiLCBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmUsIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgKG5vZGUuaGFzU3RvcmFnZUFjY2Vz
c0RhdGEoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyOSw2ICszMjksMTggQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lk
IHByZWRpY3RBcmd1bWVudFR5cGVzKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOworICAgIAorICAg
IFN0cnVjdHVyZVNldCogYWRkU3RydWN0dXJlU2V0KGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlU2V0KSB7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVTZXQuc2l6ZSgpKTsKKyAgICAgICAg
bV9zdHJ1Y3R1cmVTZXQuYXBwZW5kKHN0cnVjdHVyZVNldCk7CisgICAgICAgIHJldHVybiAmbV9z
dHJ1Y3R1cmVTZXQubGFzdCgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSogYWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoY29uc3QgU3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEmIHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YS5hcHBlbmQoc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOworICAgICAg
ICByZXR1cm4gJm1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEubGFzdCgpOworICAgIH0KIAogICAg
IFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5v
ZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CkBAIC0zMzcsNiArMzQ5LDggQEAgcHVibGlj
OgogICAgIFZlY3RvcjxSZXNvbHZlR2xvYmFsRGF0YT4gbV9yZXNvbHZlR2xvYmFsRGF0YTsKICAg
ICBWZWN0b3I8Tm9kZUluZGV4LCA4PiBtX2FyZ3VtZW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8
VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CisgICAgU2VnbWVu
dGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJlU2V0OworICAgIFNlZ21lbnRl
ZFZlY3RvcjxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSwgOD4gbV9zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YTsKICAgICB1bnNpZ25lZCBtX3ByZXNlcnZlZFZhcnM7CiAgICAgdW5zaWduZWQgbV9sb2Nh
bFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZu
ZGVmIERGR05vZGVfaAogI2RlZmluZSBERkdOb2RlX2gKIAorI2luY2x1ZGUgIkRGR1N0cnVjdHVy
ZVNldC5oIgogI2luY2x1ZGUgPHd0Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgogI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KQEAgLTE1NCw2ICsx
NTUsMTkgQEAgcHJpdmF0ZToKICAgICBQcmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKIH07CiAK
K3N0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSB7CisgICAgU3RydWN0dXJlKiBwcmV2aW91
c1N0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZTsKKyAgICAKKyAgICBTdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpIHsgfQorICAgIAorICAgIFN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJl
KQorICAgICAgICA6IHByZXZpb3VzU3RydWN0dXJlKHByZXZpb3VzU3RydWN0dXJlKQorICAgICAg
ICAsIG5ld1N0cnVjdHVyZShuZXdTdHJ1Y3R1cmUpCisgICAgeworICAgIH0KK307CisKIHR5cGVk
ZWYgdW5zaWduZWQgQXJpdGhOb2RlRmxhZ3M7CiAjZGVmaW5lIE5vZGVVc2VCb3R0b20gICAgICAw
eDAwCiAjZGVmaW5lIE5vZGVVc2VkQXNOdW1iZXIgICAweDAxCkBAIC03ODQsMTQgKzc5OCwyNiBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaGFzU3RydWN0dXJlKCkKKyAgICBib29sIGhhc1N0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCA9PSBQdXRTdHJ1Y3R1cmU7CisgICAgfQor
ICAgIAorICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSk7
CisgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNTdHJ1Y3R1cmVTZXQoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9wID09IENoZWNrU3RydWN0dXJlIHx8IG9wID09IFB1dFN0
cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG9wID09IENoZWNrU3RydWN0dXJlOwogICAgIH0KICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpCisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmVTZXQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJl
Kj4obV9vcEluZm8pOworICAgICAgICBBU1NFUlQoaGFzU3RydWN0dXJlU2V0KCkpOworICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlU2V0Kj4obV9vcEluZm8pOwogICAg
IH0KICAgICAKICAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNpb24gOTY0ODEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05ODksNyArOTg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
ICAgICB9CiAgICAgCi0gICAgYm9vbCBjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICBib29sIGNoZWNrU3RydWN0
dXJlTG9hZEVsaW1pbmF0aW9uKGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBOb2Rl
SW5kZXggY2hpbGQxKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRl
eEZvckNoaWxkcmVuKGNoaWxkMSk7CiAgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9j
b21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKQEAgLTk5NywxNSArOTk3LDE3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hp
bGQxCi0gICAgICAgICAgICAgICAgICAgICYmIG5vZGUuc3RydWN0dXJlKCkgPT0gc3RydWN0dXJl
KQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuaXNTdXBlcnNldE9mKG5vZGUu
c3RydWN0dXJlU2V0KCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQot
ICAgICAgICAgICAgICAgICAgICAmJiBub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkKKyAg
ICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUuc3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCku
cHJldmlvdXNTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgIC8vIFNldHRpbmcgYSBwcm9wZXJ0eSBjYW5u
b3QgY2hhbmdlIHRoZSBzdHJ1Y3R1cmUuCkBAIC0xMjQ1LDcgKzEyNDcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKLSAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2Rl
LnN0cnVjdHVyZSgpLCBub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgICAgIGlmIChjaGVja1N0cnVj
dHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpKSkK
ICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJl
dmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxk
R2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHVi
Um91dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0
dXJlTGlzdDsKQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURM
aXN0KEV4ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1
YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCi0gICAgICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0
YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSk7
CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgq
Z2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0
cnVjdHVyZSwgdHJ1ZSk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBM
b2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwpAQCAtNDM0LDcgKzQzNCw3IEBAIHN0YXRpYyBib29sIHRyeUJ1
aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICAKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJbmZv
LnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNo
YWluLmdldCgpKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWlu
LmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWlu
LmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewpAQCAtNDUzLDcgKzQ1Myw3
IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICAgICAgCiAg
ICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3Rv
dHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90
b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOworICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwog
ICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spOwogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjc0
LDkgKzE2NzQsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6
ZSgpKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUu
c3RydWN0dXJlKCkpKSk7CisgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9
PSAxKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1
Y3R1cmVTZXQoKVswXSkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgc3RydWN0dXJlKHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKKyAg
ICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVx
dWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3Ry
dWN0dXJlU2V0KClbaV0pKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdw
cigpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZVNldCgpLmxhc3Qo
KSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczNCw5
ICsxNzM0LDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUo
KSk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0
cnVjdHVyZSgpKSkpOworICAgICAgICBpZiAobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0g
MSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpz
dHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0
dXJlU2V0KClbMF0pKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0cnVjdHVyZSh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc3RydWN0dXJlLmdwcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCisgICAg
ICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVh
bCwgc3RydWN0dXJlLmdwcigpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVj
dHVyZVNldCgpW2ldKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIo
KSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkp
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMTc0OCwxMCArMTc2MywxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogI2lmIEVOQUJMRShHR0MpIHx8IEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKICAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdy
aXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBp
dAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS5zdHJ1Y3R1cmUoKSwgV3JpdGVC
YXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLCBXcml0ZUJhcnJpZXJG
b3JHZW5lcmljQWNjZXNzKTsKICNlbmRpZgogICAgICAgICAKLSAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmUoKSksIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsK
KyAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobm9k
ZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAgICAg
CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1N0cnVjdHVyZVNldF9oCisjZGVmaW5lIERGR1N0
cnVjdHVyZVNldF9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBTdHJ1Y3R1cmU7CisKK25hbWVzcGFjZSBERkcgeworCitjbGFzcyBTdHJ1Y3R1
cmVTZXQgeworcHVibGljOgorICAgIFN0cnVjdHVyZVNldCgpIHsgfQorICAgIAorICAgIFN0cnVj
dHVyZVNldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJl
cy5hcHBlbmQoc3RydWN0dXJlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkp
OworICAgICAgICBtX3N0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBv
dGhlci5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGNvbnRhaW5zKG90aGVyW2ldKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGFkZChvdGhlcltpXSk7Cisg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2hh
bmdlZDsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlc1tpXSAhPSBzdHJ1Y3R1cmUp
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N0cnVjdHVyZXNbaV0gPSBt
X3N0cnVjdHVyZXMubGFzdCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29s
IGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChtX3N0cnVjdHVyZXNbaV0gPT0gc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZXNbaV0p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNl
dE9mKCp0aGlzKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX3N0cnVjdHVyZXMuc2l6ZSgpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBhdChzaXplX3Qg
aSkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmF0KGkpOyB9CisgICAgCisgICAgU3RydWN0
dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIAor
ICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlcy5sYXN0KCk7
IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8U3RydWN0dXJlKiwgMj4gbV9zdHJ1Y3R1cmVzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHU3RydWN0dXJl
U2V0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDIsNiArNzAyLDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogewogICAgIEp1bXAgZmFp
bHVyZUNhc2UgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwgc3RydWN0dXJlKTsKICAgICBib29sIG5l
ZWRzU3R1YkxpbmsgPSBmYWxzZTsKKyAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7CiAgICAgaWYg
KHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpHZXR0ZXIpIHsKICAg
ICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQocmVnVDAsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwpAQCAtNzE4LDggKzcxOSwxMCBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkp
OwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBzdHViQ2Fs
bC5jYWxsKCk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgaXNEaXJlY3QgPSB0
cnVlOwogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgY2FjaGVk
T2Zmc2V0KTsKKyAgICB9CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCiAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKQEAgLTc0Myw3ICs3NDYsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAot
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9i
YWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1
cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgq
bV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBz
dHJ1Y3R1cmUsIGlzRGlyZWN0KTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8g
c2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAg
IENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5q
dW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CkBAIC03NjYs
NiArNzY5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogCiAg
ICAgLy8gQ2hlY2tzIG91dCBva2F5IQogICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOwor
ICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKICAgICBpZiAoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5
cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcikgewogICAgICAgICBuZWVkc1N0dWJMaW5rID0g
dHJ1ZTsKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEs
IGNhY2hlZE9mZnNldCk7CkBAIC03ODIsOCArNzg2LDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3Rl
ZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZpZXIqPigmaWRlbnQpKSk7CiAgICAgICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9
IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBpc0RpcmVjdCA9IHRydWU7CiAgICAgICAgIGNv
bXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwor
ICAgIH0KIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIApAQCAtODA1LDcgKzgxMSw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotICAgIHByb3RvdHlwZVN0cnVj
dHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1
cmUpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1f
Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3Ry
dWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSk7CkBAIC04MzMsNiArODM5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluTGlzdAogICAgIEFTU0VSVChwcm90b09iamVjdCk7CiAgICAgCiAgICAgYm9vbCBu
ZWVkc1N0dWJMaW5rID0gZmFsc2U7CisgICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOwogICAgIGlm
IChzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xvdDo6R2V0dGVyKSB7CiAg
ICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zm
c2V0KHByb3RvT2JqZWN0LCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKQEAgLTg0OSw4ICs4NTYsMTAg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+KCZp
ZGVudCkpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHVi
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAg
c3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGlzRGly
ZWN0ID0gdHJ1ZTsKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwg
cmVnVDAsIGNhY2hlZE9mZnNldCk7CisgICAgfQogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsK
IAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CkBAIC04
NzMsNyArODgyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAog
ICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAog
ICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUg
ZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAgICBwcm90b3R5cGVTdHJ1
Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNo
YWluLCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cg
Y2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2Rl
TG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0
T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk2NDgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgs
NyArMTY5OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAog
ICAgICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxm
KSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAg
ICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYu
YmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5n
ZXQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmTGlzdChw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0
LnN0cnVjdHVyZUxpc3Q7CkBAIC0xNzIzLDEyICsxNzIzLDEyIEBAIHN0YXRpYyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGcKIAogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5
cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86Ci0gICAgICAgIHByb3RvdHlw
ZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2Jh
bERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQ
cm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8u
cHJvdG90eXBlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlz
dCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIs
IHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1
Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9M
aXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3Qg
PSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBz
dHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCkpOwor
ICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHVi
SW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8t
PnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAg
YnJlYWs7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109442</attachid>
            <date>2011-10-02 23:18:11 -0700</date>
            <delta_ts>2011-10-02 23:46:03 -0700</delta_ts>
            <desc>the patch - fix style, mostly</desc>
            <filename>polygetbyid_patch_3.diff</filename>
            <type>text/plain</type>
            <size>42718</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAK
KzIwMTEtMTAtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHNwZWN1bGF0ZSBtb3JlIGFnZ3Jlc3NpdmVseSBvbiBvYnZpb3VzIGNhc2VzIG9u
CisgICAgICAgIHBvbHltb3JwaGljIGdldF9ieV9pZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0cml2aWFsIHBv
bHltb3JwaGljIGdldF9ieV9pZC4gSXQgYWxzbyBmaXhlcworICAgICAgICBwcm9ibGVtcyBpbiB0
aGUgQ1NFIGZvciBDaGVja1N0cnVjdHVyZSBpbiB0aGUgcHV0X2J5X2lkCisgICAgICAgIHRyYW5z
aXRpb24gY2FzZS4KKyAgICAgICAgCisgICAgICAgIERvaW5nIHRoaXMgcmVxdWlyZWQga25vd2lu
ZyB3aGV0aGVyIGEgcG9seW1vcnBoaWMgZ2V0X2J5X2lkIHN0dWIKKyAgICAgICAgd2FzIGRvaW5n
IGEgZGlyZWN0IGFjY2VzcyByYXRoZXIgdGhhbiBhIGNhbGwgb2Ygc29tZSBraW5kLgorICAgICAg
ICAKKyAgICAgICAgU2xpZ2h0IHNwZWVkLXVwIG9uIEtyYWtlbiBhbmQgU3VuU3BpZGVyLiAwLjUl
IHNwZWVkLXVwIGluIHRoZQorICAgICAgICBzY2FsZWQgbWVhbiBvZiBhbGwgYmVuY2htYXJrcy4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvbi5oOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBv
bHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6YWRkU3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlVHJhbnNpdGlvbkRhdGE6OlN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZVNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1
Y3R1cmVMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBl
cmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OlN0cnVjdHVyZVNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZVNldDo6YWRkQWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0Ojpjb250YWlucyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0Ojppc1N1YnNldE9mKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlU2V0OjpzaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6
OmF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6bGFzdCk6CisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJv
dG9MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxp
c3QpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9T
VFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0U2xvdCk6CisKIDIwMTEtMTAtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNv
bT4KIAogICAgICAgICBERkcgbWlzc2VzIHNvbWUgb2J2aW91cyBvcHBvcnR1bml0aWVzIGZvciBj
b21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5hdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsx
MzMsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1Njb3JlQm9hcmQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZhdGl2ZVJvb3RzLmNwcCBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsNyBAQAogCQkwRkQ4MkY0QjE0MjgwNkExMDAxNzlDOTQgLyogQml0
VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4
IC8qIEhldXJpc3RpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIy
QzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3Mu
Y3BwICovOyB9OworCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGNEJC
MjE0Mzk1NUU2MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZG
OUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBK
U0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIu
Y3BwICovOyB9OwpAQCAtODQxLDYgKzg0Miw3IEBACiAJCTBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5
NCAvKiBCaXRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0VmVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5
NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhldXJpc3RpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhF
QjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIZXVyaXN0aWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RkY0QkIyMTQzOTU1RTYwMDY1NUJDMCAvKiBERkdTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlU2V0Lmg7IHBhdGggPSBkZmcvREZHU3Ry
dWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3
ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5
MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3Niw2ICsyMjc4LDcgQEAKIAkJODZFQzlE
QjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMEZGRjRCQjIxNDM5NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVy
ZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBh
cnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmggKi8sCiAJCQkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxp
dGllcy5jcHAgKi8sCkBAIC0yODY3LDYgKzI4NzAsNyBAQAogCQkJCTBGRDUyQUFFMTQzMDM1QTAw
MDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODgwRjFFMTQzMjhC
QjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bnN0cnVjdGlvbi5oCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RydWN0IFBvbHltb3JwaGljU3R1
YkluZm8gewogICAgICAgICAgICAgYm9vbCBpc0NoYWluOworICAgICAgICAgICAgYm9vbCBpc0Rp
cmVjdDsKICAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0
aW5lVHlwZSBzdHViUm91dGluZTsKICAgICAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+
IGJhc2U7CiAgICAgICAgICAgICB1bmlvbiB7CkBAIC03MCw0NCArNzEsNDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICAgICAgdS5wcm90by5jbGVhcigpOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UpCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJv
b2wgaXNEaXJlY3QpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUg
PSBfc3R1YlJvdXRpbmU7CiAgICAgICAgICAgICAgICAgYmFzZS5zZXQoZ2xvYmFsRGF0YSwgb3du
ZXIsIF9iYXNlKTsKICAgICAgICAgICAgICAgICB1LnByb3RvLmNsZWFyKCk7CiAgICAgICAgICAg
ICAgICAgaXNDaGFpbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0g
aXNEaXJlY3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQg
c2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJl
KiBfYmFzZSwgU3RydWN0dXJlKiBfcHJvdG8pCisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0
cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJSb3V0aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uu
c2V0KGdsb2JhbERhdGEsIG93bmVyLCBfYmFzZSk7CiAgICAgICAgICAgICAgICAgdS5wcm90by5z
ZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9wcm90byk7CiAgICAgICAgICAgICAgICAgaXNDaGFpbiA9
IGZhbHNlOworICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0
dXJlQ2hhaW4qIF9jaGFpbikKKyAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1
YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hh
aW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBzdHViUm91dGluZSA9IF9zdHViUm91dGluZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChn
bG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwogICAgICAgICAgICAgICAgIHUuY2hhaW4uc2V0KGds
b2JhbERhdGEsIG93bmVyLCBfY2hhaW4pOwogICAgICAgICAgICAgICAgIGlzQ2hhaW4gPSB0cnVl
OworICAgICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gbGlzdFtQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkVdOwogICAgICAg
ICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSkKKyAgICAg
ICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRp
bmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgYm9vbCBpc0RpcmVjdCkK
ICAgICAgICAgewotICAgICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0
dWJSb3V0aW5lLCBmaXJzdEJhc2UpOworICAgICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0
YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UsIGlzRGlyZWN0KTsKICAgICAgICAgfQog
Ci0gICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0
dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVy
ZSogZmlyc3RQcm90bykKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0
QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3RvLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7Ci0g
ICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZp
cnN0QmFzZSwgZmlyc3RQcm90byk7CisgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRh
LCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3QpOwog
ICAgICAgICB9CiAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFz
ZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hhaW4pCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwg
U3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlz
RGlyZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBv
d25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbik7CisgICAgICAgICAgICBs
aXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmly
c3RDaGFpbiwgaXNEaXJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXRvciYgdmlzaXRvciwgaW50IGNvdW50KQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk2NDgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxNSw2ICs0MTUsOCBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0
YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7CiAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50
cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CiAg
ICAgICAgIAorICAgICAgICBtX2NlbGxDb25zdGFudHMuYWRkKGNlbGwsIG1fY29kZUJsb2NrLT5u
dW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgLSAxKTsKKyAgICAgICAgCiAgICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkg
LSAxKTsKICAgICB9CiAgICAgCkBAIC0xMTYwLDI5ICsxMTYyLDc1IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0g
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOwogICAgICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gbV9wcm9maWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1cnJl
bnRJbmRleCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGVJbmRleCBnZXRCeUlkID0g
Tm9Ob2RlOwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4gJiYgc3R1YkluZm8uYWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVyTnVtYmVyKTsKLSAgICAgICAgICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQoKm1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkg
ewotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
c3RydWN0dXJlKSwgYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dy
YXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUo
KSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJh
c2UpKTsKKyAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAg
IFN0cnVjdHVyZVNldCBzdHJ1Y3R1cmVTZXQ7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uc2Vl
bikgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOiB7CisgICAgICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NE
YXRhOwotICAgICAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1i
ZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3Rv
cmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAob2Zm
c2V0ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZVNldC5zaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmX2xpc3Q6IHsKKyAgICAgICAgICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KiBsaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVj
dHVyZUxpc3Q7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBzdHViSW5mby51
LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemU7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghbGlzdC0+bGlzdFtpXS5pc0RpcmVjdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByaW50ZigiTm90IGRpcmVjdCFcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCA9IG5vdEZvdW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmxpc3RbaV0uYmFz
ZS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBteU9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChteU9mZnNldCA9PSBub3RGb3VuZCkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG5vdEZvdW5kOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBteU9mZnNldDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKG9mZnNldCAhPSBteU9mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldCA9IG5vdEZvdW5kOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmVTZXQuc2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBBU1NFUlQob2Zmc2V0ID09IG5vdEZvdW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZ2V0QnlJZCA9PSBOb05vZGUp
Ci0gICAgICAgICAgICAgICAgZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlk
ZW50aWZpZXJOdW1iZXIpLCBPcEluZm8ocHJlZGljdGlvbiksIGJhc2UpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJ
ZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChvZmZzZXQgIT0g
bm90Rm91bmQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7
CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkpLCBiYXNlKTsKKyAgICAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChHZXRCeU9m
ZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8o
cHJlZGljdGlvbiksIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VB
Y2Nlc3NEYXRhOworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IG9m
ZnNldDsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVy
ID0gaWRlbnRpZmllck51bWJlcjsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRU
b0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBiYXNlKSk7CiAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV9pZCk7CiAg
ICAgICAgIH0KQEAgLTEyMDcsNyArMTI1NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKHN0cnVj
dHVyZSksIGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0
cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBiYXNl
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5m
byhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuc2l6ZSgpKSwgYmFzZSwgYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nl
c3NEYXRhOwpAQCAtMTIzMywxNyArMTI4MSwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBuZXdT
dHJ1Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhw
cmV2aW91c1N0cnVjdHVyZSksIGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByZXZp
b3VzU3RydWN0dXJlKSksIGJhc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXJl
Y3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmU+KiBpdCA9IHN0cnVjdHVyZUNoYWluLT5oZWFkKCk7ICppdDsgKytpdCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHByb3RvdHlwZSA9ICgqaXQpLT5zdG9y
ZWRQcm90b3R5cGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3Rv
dHlwZS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlz
Q2VsbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpLCBjZWxs
Q29uc3RhbnQocHJvdG90eXBlLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVj
dHVyZVNldChwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKSksIGNlbGxDb25zdGFudChw
cm90b3R5cGUuYXNDZWxsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFB1dFN0cnVjdHVyZSwgT3BJbmZvKG5ld1N0cnVjdHVyZSksIGJhc2UpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHByZXZpb3VzU3Ry
dWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKSksIGJhc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8o
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3JhcGgoR2V0
UHJvcGVydHlTdG9yYWdlLCBiYXNlKSwgdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTY0
ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ5LDggKzE0OSwxNCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgsIENvCiAgICAgICAgICAgICBwcmludGYoIiVzaWQldSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIG5vZGUuaWRlbnRpZmllck51bWJlcigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRy
dWU7CiAgICAgfQotICAgIGlmIChub2RlLmhhc1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgIHByaW50
ZigiJXNzdHJ1Y3QoJXApIiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmUo
KSk7CisgICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlU2V0KCkpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBwcmludGYoIiVzc3RydWN0KCVwKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUu
c3RydWN0dXJlU2V0KClbaV0pOworICAgICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaWYgKG5vZGUuaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSkg
eworICAgICAgICBwcmludGYoIiVzc3RydWN0KCVwIC0+ICVwKSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwg
bm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgIGhh
c1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAobm9kZS5oYXNTdG9yYWdlQWNjZXNzRGF0
YSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5
NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBj
b3B5KQpAQCAtMzI5LDYgKzMyOSwxOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgcHJl
ZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7CisgICAgCisgICAgU3Ry
dWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQpCisgICAgeworICAgICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CisgICAgICAg
IG1fc3RydWN0dXJlU2V0LmFwcGVuZChzdHJ1Y3R1cmVTZXQpOworICAgICAgICByZXR1cm4gJm1f
c3RydWN0dXJlU2V0Lmxhc3QoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEqIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhJiBzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSkKKyAgICB7CisgICAgICAgIG1fc3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEuYXBwZW5kKHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKTsKKyAgICAg
ICAgcmV0dXJuICZtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKKyAgICB9CiAKICAg
ICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxO
b2RlSW5kZXgsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwpAQCAtMzM3LDYgKzM1MCw4IEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8UmVzb2x2ZUdsb2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAg
ICAgVmVjdG9yPE5vZGVJbmRleCwgOD4gbV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVjdG9y
PFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOworICAgIFNlZ21l
bnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKKyAgICBTZWdtZW50
ZWRWZWN0b3I8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlv
bkRhdGE7CiAgICAgdW5zaWduZWQgbV9wcmVzZXJ2ZWRWYXJzOwogICAgIHVuc2lnbmVkIG1fbG9j
YWxWYXJzOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lm
bmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKKyNpbmNsdWRlICJERkdTdHJ1Y3R1
cmVTZXQuaCIKICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CkBAIC0xNTQsNiAr
MTU1LDE5IEBAIHByaXZhdGU6CiAgICAgUHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247CiB9Owog
CitzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgeworICAgIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CisgICAgCisgICAgU3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKSB7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YShTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSkKKyAgICAgICAgOiBwcmV2aW91c1N0cnVjdHVyZShwcmV2aW91c1N0cnVjdHVyZSkKKyAgICAg
ICAgLCBuZXdTdHJ1Y3R1cmUobmV3U3RydWN0dXJlKQorICAgIHsKKyAgICB9Cit9OworCiB0eXBl
ZGVmIHVuc2lnbmVkIEFyaXRoTm9kZUZsYWdzOwogI2RlZmluZSBOb2RlVXNlQm90dG9tICAgICAg
MHgwMAogI2RlZmluZSBOb2RlVXNlZEFzTnVtYmVyICAgMHgwMQpAQCAtNzg0LDE0ICs3OTgsMjYg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAK
LSAgICBib29sIGhhc1N0cnVjdHVyZSgpCisgICAgYm9vbCBoYXNTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AgPT0gUHV0U3RydWN0dXJlOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYgc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkp
OworICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEqPihtX29wSW5mbyk7CisgICAgfQorICAgIAorICAgIGJvb2wgaGFzU3RydWN0dXJlU2V0KCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBvcCA9PSBDaGVja1N0cnVjdHVyZSB8fCBvcCA9PSBQdXRT
dHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBvcCA9PSBDaGVja1N0cnVjdHVyZTsKICAgICB9CiAg
ICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKQorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0
dXJlU2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVy
ZSo+KG1fb3BJbmZvKTsKKyAgICAgICAgQVNTRVJUKGhhc1N0cnVjdHVyZVNldCgpKTsKKyAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFN0cnVjdHVyZVNldCo+KG1fb3BJbmZvKTsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0YSgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk2NDgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTg5LDcgKzk4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7
CiAgICAgfQogICAgIAotICAgIGJvb2wgY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24oU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja1N0cnVj
dHVyZUxvYWRFbGltaW5hdGlvbihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9k
ZUluZGV4IGNoaWxkMSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5k
ZXhGb3JDaGlsZHJlbihjaGlsZDEpOwogICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1f
Y29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CkBAIC05OTcsMTUgKzk5NywxNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNo
aWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVy
ZSkKKyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2Rl
LnN0cnVjdHVyZVNldCgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEK
LSAgICAgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpCisg
ICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
LnByZXZpb3VzU3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fu
bm90IGNoYW5nZSB0aGUgc3RydWN0dXJlLgpAQCAtMTI0NSw3ICsxMjQ3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6Ci0gICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9k
ZS5zdHJ1Y3R1cmUoKSwgbm9kZS5jaGlsZDEoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1
Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKSkp
CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWls
ZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgIEFTU0VSVCghc3R1YkluZm8uc3R1
YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlz
dChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVj
dHVyZUxpc3Q7CkBAIC0zODcsNyArMzg3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdAogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0
dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIAotICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERh
dGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUp
OworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQo
Kmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBz
dHJ1Y3R1cmUsIHRydWUpOwogICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1w
TG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAgLTQzNCw3ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewogICAgICAgICBBU1NFUlQoISFzdHViSW5m
by5zdHViUm91dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRD
aGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5j
aGFpbi5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFp
bi5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0KHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKQEAgLTQ1Myw3ICs0NTMs
NyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAgICAgIAog
ICAgICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90
b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJv
dG9CZWdpbiwgc3R1YlJvdXRpbmUpOwogICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsK
ICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0
cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3
NCw5ICsxNjc0LDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIAotICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNp
emUoKSk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2Rl
LnN0cnVjdHVyZSgpKSkpOworICAgICAgICBpZiAobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkg
PT0gMSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3Ry
dWN0dXJlU2V0KClbMF0pKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHN0cnVjdHVyZSh0aGlzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgc3RydWN0dXJlLmdwcigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCisg
ICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpF
cXVhbCwgc3RydWN0dXJlLmdwcigpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0
cnVjdHVyZVNldCgpW2ldKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5n
cHIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0
KCkpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzQs
OSArMTczNCwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXpl
KCkpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5z
dHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgaWYgKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09
IDEpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6
c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVj
dHVyZVNldCgpWzBdKSkpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzdHJ1Y3R1cmUodGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHN0cnVjdHVyZS5ncHIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKQorICAg
ICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1
YWwsIHN0cnVjdHVyZS5ncHIoKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1
Y3R1cmVTZXQoKVtpXSkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3By
KCksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgp
KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICBicmVhazsKQEAgLTE3NDgsMTAgKzE3NjMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCiAgICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3
cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMg
aXQKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIG5vZGUuc3RydWN0dXJlKCksIFdyaXRl
QmFycmllckZvckdlbmVyaWNBY2Nlc3MpOworICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwg
bm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgV3JpdGVCYXJyaWVy
Rm9yR2VuZXJpY0FjY2Vzcyk7CiAjZW5kaWYKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3Jl
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7
CisgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5v
ZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAgICAgICAg
IAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTdHJ1Y3R1cmVTZXRfaAorI2RlZmluZSBERkdT
dHJ1Y3R1cmVTZXRfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgU3RydWN0dXJlOworCituYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU3RydWN0
dXJlU2V0IHsKK3B1YmxpYzoKKyAgICBTdHJ1Y3R1cmVTZXQoKSB7IH0KKyAgICAKKyAgICBTdHJ1
Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVy
ZXMuYXBwZW5kKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUp
KTsKKyAgICAgICAgbV9zdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAK
KyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
b3RoZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChjb250YWlucyhvdGhlcltpXSkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBhZGQob3RoZXJbaV0pOwor
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNo
YW5nZWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVtb3ZlKFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZXNbaV0gIT0gc3RydWN0dXJl
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X3N0cnVjdHVyZXNbaV0gPSBtX3N0cnVjdHVyZXMubGFzdCgpOworICAgICAgICAgICAgbV9zdHJ1
Y3R1cmVzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZXNbaV0gPT0gc3RydWN0dXJlKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
c3RydWN0dXJlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlu
cyhtX3N0cnVjdHVyZXNbaV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVy
c2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlzKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZXMuc2l6ZSgpOyB9CisgICAgCisgICAgU3Ry
dWN0dXJlKiBhdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmF0KGkpOyB9
CisgICAgCisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQorICAgIAorICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RydWN0dXJlcy5sYXN0KCk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8U3RydWN0dXJlKiwg
Mj4gbV9zdHJ1Y3R1cmVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gREZHU3RydWN0dXJlU2V0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03MDIsNiArNzAyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0
KAogewogICAgIEp1bXAgZmFpbHVyZUNhc2UgPSBjaGVja1N0cnVjdHVyZShyZWdUMCwgc3RydWN0
dXJlKTsKICAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxzZTsKKyAgICBib29sIGlzRGlyZWN0
ID0gZmFsc2U7CiAgICAgaWYgKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlT
bG90OjpHZXR0ZXIpIHsKICAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7CiAgICAgICAgIGNv
bXBpbGVHZXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwpAQCAtNzE4
LDggKzcxOSwxMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAg
ICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVu
dGlmaWVyKj4oJmlkZW50KSkpOwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVk
SW1tUHRyKHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkp
OwogICAgICAgICBzdHViQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaXNEaXJlY3QgPSB0cnVlOwogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJl
Z1QwLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKKyAgICB9CiAgICAgSnVtcCBzdWNjZXNzID0ganVt
cCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsK
QEAgLTc0Myw3ICs3NDYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxp
c3QoCiAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IHN0dWJDb2RlLCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIGlzRGlyZWN0KTsKIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSk7CkBAIC03NjYsNiArNzY5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFByb3RvTGlzdAogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5IQogICAgIGJvb2wgbmVlZHNT
dHViTGluayA9IGZhbHNlOworICAgIGJvb2wgaXNEaXJlY3QgPSBmYWxzZTsKICAgICBpZiAoc2xv
dC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNsb3Q6OkdldHRlcikgewogICAgICAg
ICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChw
cm90b09iamVjdCwgcmVnVDEsIGNhY2hlZE9mZnNldCk7CkBAIC03ODIsOCArNzg2LDEwIEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZpZXIqPigmaWRlbnQp
KSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIHN0dWJD
YWxsLmNhbGwoKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAgICBpc0RpcmVjdCA9
IHRydWU7CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1Qw
LCBjYWNoZWRPZmZzZXQpOworICAgIH0KIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIApA
QCAtODA1LDcgKzgxMSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xp
c3QKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
bGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwot
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFs
RGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJl
LCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUsIGlzRGlyZWN0KTsK
IAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CkBAIC04MzMsNiArODM5LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIEFTU0VSVChwcm90b09iamVjdCk7
CiAgICAgCiAgICAgYm9vbCBuZWVkc1N0dWJMaW5rID0gZmFsc2U7CisgICAgYm9vbCBpc0RpcmVj
dCA9IGZhbHNlOwogICAgIGlmIChzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5
U2xvdDo6R2V0dGVyKSB7CiAgICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwogICAgICAgICBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsK
QEAgLTg0OSw4ICs4NTYsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
TGlzdAogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nh
c3Q8SWRlbnRpZmllcio+KCZpZGVudCkpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
VHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpKTsKICAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9m
ZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CisgICAgfQogICAgIEp1bXAg
c3VjY2VzcyA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcyk7CkBAIC04NzMsNyArODgyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluTGlzdAogICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluKTsK
KyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0
aW5lLCBzdHJ1Y3R1cmUsIGNoYWluLCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNo
IHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUg
aW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nh
c2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9u
IDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OTgsNyArMTY5OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHVi
Um91dGluZSk7Ci0gICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1Yklu
Zm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgdHJ1ZSk7CiAgICAgICAgICAgICBzdHViSW5mby0+aW5p
dEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8t
PnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0xNzIzLDEyICsxNzIzLDEyIEBA
IHN0YXRpYyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGcKIAogICAgIHN3aXRjaCAo
c3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86
Ci0gICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0
dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5m
by0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcHJv
dG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Z2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0
QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRQ
cm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICBzdHViSW5mby0+
c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8t
PmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46Ci0gICAgICAgIHByb3Rv
dHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGds
b2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5
SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hh
aW4uY2hhaW4uZ2V0KCkpOworICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8t
PnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpLCB0cnVlKTsKICAg
ICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAg
ICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVM
aXN0LCAyKTsKICAgICAgICAgYnJlYWs7Cg==
</data>
<flag name="commit-queue"
          id="106681"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109443</attachid>
            <date>2011-10-02 23:46:03 -0700</date>
            <delta_ts>2011-10-03 08:46:51 -0700</delta_ts>
            <desc>the patch - added some forgotten 32-bit stuff</desc>
            <filename>polygetbyid_patch_4.diff</filename>
            <type>text/plain</type>
            <size>47447</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzQgQEAK
KzIwMTEtMTAtMDIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIHNwZWN1bGF0ZSBtb3JlIGFnZ3Jlc3NpdmVseSBvbiBvYnZpb3VzIGNhc2VzIG9u
CisgICAgICAgIHBvbHltb3JwaGljIGdldF9ieV9pZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyB0cml2aWFsIHBv
bHltb3JwaGljIGdldF9ieV9pZC4gSXQgYWxzbyBmaXhlcworICAgICAgICBwcm9ibGVtcyBpbiB0
aGUgQ1NFIGZvciBDaGVja1N0cnVjdHVyZSBpbiB0aGUgcHV0X2J5X2lkCisgICAgICAgIHRyYW5z
aXRpb24gY2FzZS4KKyAgICAgICAgCisgICAgICAgIERvaW5nIHRoaXMgcmVxdWlyZWQga25vd2lu
ZyB3aGV0aGVyIGEgcG9seW1vcnBoaWMgZ2V0X2J5X2lkIHN0dWIKKyAgICAgICAgd2FzIGRvaW5n
IGEgZGlyZWN0IGFjY2VzcyByYXRoZXIgdGhhbiBhIGNhbGwgb2Ygc29tZSBraW5kLgorICAgICAg
ICAKKyAgICAgICAgU2xpZ2h0IHNwZWVkLXVwIG9uIEtyYWtlbiBhbmQgU3VuU3BpZGVyLiAwLjUl
IHNwZWVkLXVwIGluIHRoZQorICAgICAgICBzY2FsZWQgbWVhbiBvZiBhbGwgYmVuY2htYXJrcy4K
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVj
dGlvbi5oOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Q6OlBv
bHltb3JwaGljU3R1YkluZm86OnNldCk6CisgICAgICAgIChKU0M6OlBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdDo6UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpjZWxsQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAg
KEpTQzo6REZHOjpHcmFwaDo6YWRkU3RydWN0dXJlU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpH
cmFwaDo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlVHJhbnNpdGlvbkRhdGE6OlN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZVNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlU2V0KToKKyAgICAgICAgKiBkZmcvREZH
UHJvcGFnYXRvci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1
Y3R1cmVMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBl
cmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OlN0cnVjdHVyZVNldCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0OjphZGQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZVNldDo6YWRkQWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0Ojpjb250YWlucyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlU2V0Ojppc1N1YnNldE9mKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlU2V0OjpzaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6
OmF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yW10pOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6bGFzdCk6CisgICAgICAgICogaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJv
dG9MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxp
c3QpOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QpOgorICAgICAgICAqIGppdC9KSVRTdHVi
cy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKEpT
Qzo6Z2V0UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U2xvdCk6CisKIDIwMTEtMTAtMDIg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgbWlzc2VzIHNv
bWUgb2J2aW91cyBvcHBvcnR1bml0aWVzIGZvciBjb21tb24gc3ViZXhwcmVzc2lvbiBlbGltaW5h
dGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJl
dmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Njb3JlQm9hcmQuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
QWxsb2NhdGlvblNwYWNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvbnNlcnZh
dGl2ZVJvb3RzLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsNyBAQAogCQkw
RkQ4MkY0QjE0MjgwNkExMDAxNzlDOTQgLyogQml0VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyog
Qml0VmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMwMDE5
NkM0OCAvKiBIZXVyaXN0aWNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUEx
NDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuY3BwICovOyB9OworCQkwRkZGNEJCNDE0Mzk1
NUU5MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGNEJCMjE0Mzk1NUU2MDA2NTVCQzAgLyogREZHU3Ry
dWN0dXJlU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2
NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQ
b3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJ
CTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJE
MDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODQxLDYgKzg0Miw3
IEBACiAJCTBGRDgyRjQ5MTQyODA2OTIwMDE3OUM5NCAvKiBCaXRWZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhldXJpc3RpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlz
dGljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZXVyaXN0aWNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRkY0QkIyMTQzOTU1RTYwMDY1NUJDMCAvKiBE
RkdTdHJ1Y3R1cmVTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU3Ry
dWN0dXJlU2V0Lmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxv
Y2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0Fs
bG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYw
RThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjI3Niw2ICsyMjc4LDcgQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZGRjRCQjIx
NDM5NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMy
OERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCiAJCQkJMEZEODJFMUUx
NDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8sCkBAIC0yODY3LDYgKzI4
NzAsNyBAQAogCQkJCTBGRDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxl
cklubGluZU1ldGhvZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTIyOEVEMTQzNkFCMjcwMDE5
NkM0OCAvKiBIZXVyaXN0aWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkZGNEJCNDE0Mzk1NUU5
MDA2NTVCQzAgLyogREZHU3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiA5NjQ4
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoK
ICAgICAgICAgc3RydWN0IFBvbHltb3JwaGljU3R1YkluZm8gewogICAgICAgICAgICAgYm9vbCBp
c0NoYWluOworICAgICAgICAgICAgYm9vbCBpc0RpcmVjdDsKICAgICAgICAgICAgIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZTsKICAgICAg
ICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IGJhc2U7CiAgICAgICAgICAgICB1bmlvbiB7
CkBAIC03MCw0NCArNzEsNDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgdS5w
cm90by5jbGVhcigpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB2b2lkIHNldChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2Up
CisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIGJvb2wgaXNEaXJlY3QpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgc3R1YlJvdXRpbmUgPSBfc3R1YlJvdXRpbmU7CiAgICAgICAgICAg
ICAgICAgYmFzZS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9iYXNlKTsKICAgICAgICAgICAgICAg
ICB1LnByb3RvLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgaXNDaGFpbiA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIHRoaXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRp
bmVUeXBlIF9zdHViUm91dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlKiBfcHJvdG8p
CisgICAgICAgICAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCog
b3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBfc3R1
YlJvdXRpbmUsIFN0cnVjdHVyZSogX2Jhc2UsIFN0cnVjdHVyZSogX3Byb3RvLCBib29sIGlzRGly
ZWN0KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHN0dWJSb3V0aW5lID0gX3N0dWJS
b3V0aW5lOwogICAgICAgICAgICAgICAgIGJhc2Uuc2V0KGdsb2JhbERhdGEsIG93bmVyLCBfYmFz
ZSk7CiAgICAgICAgICAgICAgICAgdS5wcm90by5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIF9wcm90
byk7CiAgICAgICAgICAgICAgICAgaXNDaGFpbiA9IGZhbHNlOworICAgICAgICAgICAgICAgIHRo
aXMtPmlzRGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25l
ciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91
dGluZSwgU3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbikKKyAgICAgICAg
ICAgIHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIF9zdHViUm91dGluZSwg
U3RydWN0dXJlKiBfYmFzZSwgU3RydWN0dXJlQ2hhaW4qIF9jaGFpbiwgYm9vbCBpc0RpcmVjdCkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzdHViUm91dGluZSA9IF9zdHViUm91dGlu
ZTsKICAgICAgICAgICAgICAgICBiYXNlLnNldChnbG9iYWxEYXRhLCBvd25lciwgX2Jhc2UpOwog
ICAgICAgICAgICAgICAgIHUuY2hhaW4uc2V0KGdsb2JhbERhdGEsIG93bmVyLCBfY2hhaW4pOwog
ICAgICAgICAgICAgICAgIGlzQ2hhaW4gPSB0cnVlOworICAgICAgICAgICAgICAgIHRoaXMtPmlz
RGlyZWN0ID0gaXNEaXJlY3Q7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gbGlzdFtQT0xZTU9S
UEhJQ19MSVNUX0NBQ0hFX1NJWkVdOwogICAgICAgICAKLSAgICAgICAgUG9seW1vcnBoaWNBY2Nl
c3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5l
LCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSkKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0dWJSb3V0aW5lLCBTdHJ1Y3R1
cmUqIGZpcnN0QmFzZSwgYm9vbCBpc0RpcmVjdCkKICAgICAgICAgewotICAgICAgICAgICAgbGlz
dFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJzdEJhc2UpOworICAg
ICAgICAgICAgbGlzdFswXS5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJSb3V0aW5lLCBmaXJz
dEJhc2UsIGlzRGlyZWN0KTsKICAgICAgICAgfQogCi0gICAgICAgIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwg
U3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVjdHVyZSogZmlyc3RQcm90bykKKyAgICAgICAgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlND
ZWxsKiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBl
IHN0dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlKiBmaXJzdFByb3Rv
LCBib29sIGlzRGlyZWN0KQogICAgICAgICB7Ci0gICAgICAgICAgICBsaXN0WzBdLnNldChnbG9i
YWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RQcm90byk7CisgICAg
ICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0
QmFzZSwgZmlyc3RQcm90bywgaXNEaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAgICAgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxs
KiBvd25lciwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlIHN0
dWJSb3V0aW5lLCBTdHJ1Y3R1cmUqIGZpcnN0QmFzZSwgU3RydWN0dXJlQ2hhaW4qIGZpcnN0Q2hh
aW4pCisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dFN0dWJSb3V0aW5lVHlwZSBzdHViUm91dGluZSwgU3RydWN0dXJlKiBmaXJzdEJhc2UsIFN0cnVj
dHVyZUNoYWluKiBmaXJzdENoYWluLCBib29sIGlzRGlyZWN0KQogICAgICAgICB7Ci0gICAgICAg
ICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25lciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFz
ZSwgZmlyc3RDaGFpbik7CisgICAgICAgICAgICBsaXN0WzBdLnNldChnbG9iYWxEYXRhLCBvd25l
ciwgc3R1YlJvdXRpbmUsIGZpcnN0QmFzZSwgZmlyc3RDaGFpbiwgaXNEaXJlY3QpOwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvciwg
aW50IGNvdW50KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNSw2ICs0MTUs
OCBAQCBwcml2YXRlOgogICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQo
KSk7CiAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51
bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgICAgIAorICAgICAgICBtX2NlbGxDb25z
dGFudHMuYWRkKGNlbGwsIG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkg
LSAxKTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29kZUJsb2Nr
LT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgLSAxKTsKICAgICB9CiAgICAgCkBAIC0xMTYw
LDI5ICsxMTYyLDc0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIE5vZGVJbmRleCBiYXNlID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIElk
ZW50aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJO
dW1iZXIpOwogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gbV9wcm9m
aWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIE5vZGVJbmRleCBnZXRCeUlkID0gTm9Ob2RlOwotICAgICAgICAgICAgaWYgKHN0
dWJJbmZvLnNlZW4gJiYgc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGYpIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLnUu
Z2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKLSAgICAgICAgICAgICAgICBJ
ZGVudGlmaWVyIGlkZW50aWZpZXIgPSBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpZGVudGlmaWVy
TnVtYmVyKTsKLSAgICAgICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
Km1fZ2xvYmFsRGF0YSwgaWRlbnRpZmllcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8oc3RydWN0dXJlKSwgYmFzZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9n
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYWRk
VG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2UpKTsKKyAgICAgICAgICAgIHNpemVfdCBv
ZmZzZXQgPSBub3RGb3VuZDsKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzdHJ1Y3R1cmVTZXQ7
CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uc2VlbikgeworICAgICAgICAgICAgICAgIHN3aXRj
aCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dl
dF9ieV9pZF9zZWxmOiB7CisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBp
ZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFN0
b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwotICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3Jh
Z2VBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBub3RGb3Vu
ZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ICE9IG5vdEZvdW5kKQorICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZVNldC5zaXplKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmX2xpc3Q6IHsKKyAgICAg
ICAgICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0ID0gc3R1
YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNpemUgPSBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemU7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbGlzdC0+bGlzdFtpXS5pc0RpcmVjdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG5vdEZvdW5kOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGxpc3QtPmxpc3RbaV0uYmFzZS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBteU9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEs
IGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChteU9mZnNldCA9PSBub3RGb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IG5vdEZvdW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSBteU9mZnNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9mZnNl
dCAhPSBteU9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG5v
dEZvdW5kOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCAhPSBu
b3RGb3VuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmVTZXQuc2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQob2Zmc2V0ID09IG5vdEZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZ2V0QnlJZCA9PSBOb05vZGUpCi0gICAgICAgICAgICAgICAgZ2V0QnlJ
ZCA9IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8o
cHJlZGljdGlvbiksIGJhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVj
dHVyZVNldCkpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9z
dG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGFkZFRvR3JhcGgo
R2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOworICAgICAgICAgICAg
ICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IG9mZnNldDsKKyAgICAgICAgICAgICAgICBz
dG9yYWdlQWNjZXNzRGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VB
Y2Nlc3NEYXRhKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEdldEJ5SWQsIE9wSW5mbyhp
ZGVudGlmaWVyTnVtYmVyKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlKSk7CiAKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9ieV9pZCk7CiAgICAgICAgIH0KQEAgLTEyMDcsNyArMTI1
NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEs
IGlkZW50aWZpZXIpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
aWYgKG9mZnNldCAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKHN0cnVjdHVyZSksIGJhc2UpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBiYXNlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUHV0QnlPZmZzZXQsIE9wSW5mbyhtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGEuc2l6ZSgpKSwgYmFzZSwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eVN0b3JhZ2UsIGJhc2Up
LCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwpAQCAtMTIzMywxNyArMTI4
MCwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBuZXdTdHJ1Y3R1cmUtPmdldCgqbV9nbG9iYWxE
YXRhLCBpZGVudGlmaWVyKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChvZmZzZXQgIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhwcmV2aW91c1N0cnVjdHVyZSksIGJhc2Up
OworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByZXZpb3VzU3RydWN0dXJlKSksIGJhc2UpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaXJlY3QpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IHN0cnVjdHVyZUNo
YWluLT5oZWFkKCk7ICppdDsgKytpdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHByb3RvdHlwZSA9ICgqaXQpLT5zdG9yZWRQcm90b3R5cGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQocHJvdG90eXBlLmlzQ2VsbCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKHByb3Rv
dHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpLCBjZWxsQ29uc3RhbnQocHJvdG90eXBlLmFzQ2Vs
bCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tT
dHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm90b3R5cGUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpKSksIGNlbGxDb25zdGFudChwcm90b3R5cGUuYXNDZWxsKCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKG5l
d1N0cnVjdHVyZSksIGJhc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKFN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKHByZXZpb3VzU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUpKSks
IGJhc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFB1dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NE
YXRhLnNpemUoKSksIGJhc2UsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlTdG9yYWdlLCBiYXNlKSwg
dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDggKzE0OSwxNCBA
QCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgICAgICBw
cmludGYoIiVzaWQldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuaWRlbnRpZmllck51
bWJlcigpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQotICAgIGlmIChub2Rl
Lmhhc1N0cnVjdHVyZSgpKSB7Ci0gICAgICAgIHByaW50ZigiJXNzdHJ1Y3QoJXApIiwgaGFzUHJp
bnRlZCA/ICIsICIgOiAiIiwgbm9kZS5zdHJ1Y3R1cmUoKSk7CisgICAgaWYgKG5vZGUuaGFzU3Ry
dWN0dXJlU2V0KCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVj
dHVyZVNldCgpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBwcmludGYoIiVzc3RydWN0KCVw
KSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuc3RydWN0dXJlU2V0KClbaV0pOworICAg
ICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG5v
ZGUuaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSkgeworICAgICAgICBwcmludGYoIiVzc3Ry
dWN0KCVwIC0+ICVwKSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUuc3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0K
ICAgICBpZiAobm9kZS5oYXNTdG9yYWdlQWNjZXNzRGF0YSgpKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYgKzMyOSwxOSBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIHZvaWQgcHJlZGljdEFyZ3VtZW50VHlwZXMoRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKik7CisgICAgCisgICAgU3RydWN0dXJlU2V0KiBhZGRTdHJ1Y3R1cmVT
ZXQoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCisgICAgeworICAgICAgICBBU1NF
UlQoc3RydWN0dXJlU2V0LnNpemUoKSk7CisgICAgICAgIG1fc3RydWN0dXJlU2V0LmFwcGVuZChz
dHJ1Y3R1cmVTZXQpOworICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlU2V0Lmxhc3QoKTsKKyAg
ICB9CisgICAgCisgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIGFkZFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBzdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEuYXBwZW5k
KHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKTsKKyAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZVRy
YW5zaXRpb25EYXRhLmxhc3QoKTsKKyAgICB9CiAKICAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Js
b2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3ZhckFyZ0No
aWxkcmVuOwpAQCAtMzM3LDYgKzM1MCw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVzb2x2ZUds
b2JhbERhdGE+IG1fcmVzb2x2ZUdsb2JhbERhdGE7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwgOD4g
bV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+
IG1fdmFyaWFibGVBY2Nlc3NEYXRhOworICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQs
IDE2PiBtX3N0cnVjdHVyZVNldDsKKyAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7CiAgICAgdW5zaWduZWQgbV9w
cmVzZXJ2ZWRWYXJzOwogICAgIHVuc2lnbmVkIG1fbG9jYWxWYXJzOwogICAgIHVuc2lnbmVkIG1f
cGFyYW1ldGVyU2xvdHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUg
REZHTm9kZV9oCiAKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlIDx3dGYv
Qm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNpbmNs
dWRlIDx3dGYvVW5pb25GaW5kLmg+CkBAIC0xNTQsNiArMTU1LDE5IEBAIHByaXZhdGU6CiAgICAg
UHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247CiB9OwogCitzdHJ1Y3QgU3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEgeworICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CisgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmU7CisgICAgCisgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSB7
IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShTdHJ1Y3R1cmUqIHByZXZpb3Vz
U3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKKyAgICAgICAgOiBwcmV2aW91c1N0
cnVjdHVyZShwcmV2aW91c1N0cnVjdHVyZSkKKyAgICAgICAgLCBuZXdTdHJ1Y3R1cmUobmV3U3Ry
dWN0dXJlKQorICAgIHsKKyAgICB9Cit9OworCiB0eXBlZGVmIHVuc2lnbmVkIEFyaXRoTm9kZUZs
YWdzOwogI2RlZmluZSBOb2RlVXNlQm90dG9tICAgICAgMHgwMAogI2RlZmluZSBOb2RlVXNlZEFz
TnVtYmVyICAgMHgwMQpAQCAtNzg0LDE0ICs3OTgsMjYgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gbV9vcEluZm8yOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1N0cnVjdHVyZSgp
CisgICAgYm9vbCBoYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gb3AgPT0gUHV0U3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSYgc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkpOworICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqPihtX29wSW5mbyk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaGFzU3RydWN0dXJlU2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBv
cCA9PSBDaGVja1N0cnVjdHVyZSB8fCBvcCA9PSBQdXRTdHJ1Y3R1cmU7CisgICAgICAgIHJldHVy
biBvcCA9PSBDaGVja1N0cnVjdHVyZTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoKQorICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkKICAgICB7Ci0gICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KG1fb3BJbmZvKTsKKyAgICAgICAg
QVNTRVJUKGhhc1N0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFN0cnVjdHVyZVNldCo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNT
dG9yYWdlQWNjZXNzRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg5LDcgKzk4OSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAotICAgIGJvb2wg
Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24oU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vZGVJ
bmRleCBjaGlsZDEpCisgICAgYm9vbCBjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgTm9kZUluZGV4IGNoaWxkMSkKICAgICB7CiAg
ICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOwog
ICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4g
c3RhcnQ7KSB7CkBAIC05OTcsMTUgKzk5NywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKSB7CiAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAg
ICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAg
ICAmJiBub2RlLnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICAgICAg
JiYgc3RydWN0dXJlU2V0LmlzU3VwZXJzZXRPZihub2RlLnN0cnVjdHVyZVNldCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAg
ICAgICBpZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYg
bm9kZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgICAgICYmIHN0
cnVjdHVyZVNldC5jb250YWlucyhub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3Ry
dWN0dXJlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuY29udGFp
bnMobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAg
ICAgICAgICAvLyBTZXR0aW5nIGEgcHJvcGVydHkgY2Fubm90IGNoYW5nZSB0aGUgc3RydWN0dXJl
LgpAQCAtMTI0NSw3ICsxMjQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICBpZiAo
Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9kZS5zdHJ1Y3R1cmUoKSwgbm9kZS5jaGls
ZDEoKSkpCisgICAgICAgICAgICBpZiAoY2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24obm9k
ZS5zdHJ1Y3R1cmVTZXQoKSwgbm9kZS5jaGlsZDEoKSkpCiAgICAgICAgICAgICAgICAgZWxpbWlu
YXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5NjQ4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
Nyw3ICszNDcsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAg
ICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxm
KSB7CiAgICAgICAgIEFTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJ
bmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1
YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAg
ICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9
IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0zODcsNyArMzg3
LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAgICAK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CiAgICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOwogICAgICAg
ICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hl
Y2spOwogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKQEAg
LTQzNCw3ICs0MzQsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhl
CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9j
aGFpbikgewogICAgICAgICBBU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZv
LnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSk7CisgICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0
dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CiAgICAgICAg
IHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAg
IHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwg
MSk7CiAgICAgfSBlbHNlIHsKQEAgLTQ1Myw3ICs0NTMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWls
ZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAgICAgIAogICAgICAgICBnZW5lcmF0ZVByb3RvQ2hh
aW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNl
dCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwgc3R1YlJvdXRpbmUpOwog
ICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0
W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlz
aW9uIDk2NDgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY3NCw5ICsxNjc0LDI0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIAotICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAgIAotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZSgpKSkpOworICAgICAg
ICBpZiAobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKSk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlLmdwcigp
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5z
dHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCisgICAgICAgICAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBK
SVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZVNldCgpW2ldKSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiA5NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzQsOSArMTczNCwyNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTog
ewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAKLSAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAg
ICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwogICAgICAgICAKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAg
aWYgKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihub2RlLnN0cnVjdHVyZVNldCgpWzBdKSkpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZS5ncHIoKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3Ry
dWN0dXJlU2V0KCkuc2l6ZSgpIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSkpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tUHRyKG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgpKSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTE3NDgsMTAgKzE3
NjMsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAKICNpZiBFTkFCTEUoR0dDKSB8fCBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCiAg
ICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2VHUFIsIG5vZGUuc3RydWN0dXJlKCksIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3Mp
OworICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLm5ld1N0cnVjdHVyZSwgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7CiAjZW5k
aWYKICAgICAgICAgCi0gICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CisgICAgICAgIG1faml0LnN0b3JlUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdTdHJ1Y3R1cmVTZXRfaAorI2RlZmluZSBERkdTdHJ1Y3R1cmVTZXRfaAorCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU3RydWN0dXJlOwor
CituYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU3RydWN0dXJlU2V0IHsKK3B1YmxpYzoKKyAgICBT
dHJ1Y3R1cmVTZXQoKSB7IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmVz
LmFwcGVuZChzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIGFkZEFsbChjb25zdCBT
dHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChjb250YWlucyhvdGhlcltpXSkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBhZGQob3RoZXJbaV0pOworICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgcmVtb3ZlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChtX3N0cnVjdHVyZXNbaV0gIT0gc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3N0cnVjdHVyZXNbaV0gPSBtX3N0cnVj
dHVyZXMubGFzdCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmVzLnJlbW92ZUxhc3QoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRh
aW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlm
IChtX3N0cnVjdHVyZXNbaV0gPT0gc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZXNbaV0pKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0
aGlzKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZXMuc2l6ZSgpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBhdChzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmF0KGkpOyB9CisgICAgCisgICAgU3RydWN0dXJlKiBv
cGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQorICAgIAorICAgIFN0
cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlcy5sYXN0KCk7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8U3RydWN0dXJlKiwgMj4gbV9zdHJ1Y3R1cmVzOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHU3RydWN0dXJlU2V0X2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDAsNiAr
NzAwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIC8v
IHJlZ1QwIGhvbGRzIGEgSlNDZWxsKgogICAgIEp1bXAgZmFpbHVyZUNhc2UgPSBjaGVja1N0cnVj
dHVyZShyZWdUMCwgc3RydWN0dXJlKTsKICAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxzZTsK
KyAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7CiAgICAgaWYgKHNsb3QuY2FjaGVkUHJvcGVydHlU
eXBlKCkgPT0gUHJvcGVydHlTbG90OjpHZXR0ZXIpIHsKICAgICAgICAgbmVlZHNTdHViTGluayA9
IHRydWU7CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QyLCByZWdU
MSwgY2FjaGVkT2Zmc2V0KTsKQEAgLTcxNiw4ICs3MTcsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+KCZpZGVudCkpKTsKICAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAg
IH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKICAgICAgICAg
Y29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQp
OworICAgIH0KIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKQEAgLTc0MCw3ICs3
NDMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAKICAgICBD
b2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJl
KTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1f
Z2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwg
c3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVt
cCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQu
CiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKQEAg
LTc2NCw2ICs3NjcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0
CiAgICAgSnVtcCBmYWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QzLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihwcm90b3R5cGVT
dHJ1Y3R1cmUpKTsKICAgICAKICAgICBib29sIG5lZWRzU3R1YkxpbmsgPSBmYWxzZTsKKyAgICBi
b29sIGlzRGlyZWN0ID0gZmFsc2U7CiAgICAgaWYgKHNsb3QuY2FjaGVkUHJvcGVydHlUeXBlKCkg
PT0gUHJvcGVydHlTbG90OjpHZXR0ZXIpIHsKICAgICAgICAgbmVlZHNTdHViTGluayA9IHRydWU7
CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QyLCByZWdU
MSwgY2FjaGVkT2Zmc2V0KTsKQEAgLTc4MCw4ICs3ODQsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVz
dGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRpZmllcio+KCZpZGVudCkpKTsKICAgICAgICAgc3R1
YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAg
IH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAgICAgIGlzRGlyZWN0ID0gdHJ1ZTsKICAgICAgICAg
Y29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRP
ZmZzZXQpOworICAgIH0KICAgICAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCkBA
IC04MDIsNyArODA4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlz
dAogICAgIAogICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKIAotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBwcm90b3R5
cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZVN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSk7CkBAIC04MzEsNiArODM3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluTGlzdAogICAgIEFTU0VSVChwcm90b09iamVjdCk7CiAgICAgCiAgICAgYm9vbCBu
ZWVkc1N0dWJMaW5rID0gZmFsc2U7CisgICAgYm9vbCBpc0RpcmVjdCA9IGZhbHNlOwogICAgIGlm
IChzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xvdDo6R2V0dGVyKSB7CiAg
ICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zm
c2V0KHByb3RvT2JqZWN0LCByZWdUMiwgcmVnVDEsIGNhY2hlZE9mZnNldCk7CkBAIC04NDcsOCAr
ODU0LDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAg
ICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0PElkZW50aWZp
ZXIqPigmaWRlbnQpKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRydXN0ZWRJbW1Q
dHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAg
ICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2UgeworICAgICAg
ICBpc0RpcmVjdCA9IHRydWU7CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9P
YmplY3QsIHJlZ1QxLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKKyAgICB9CiAKICAgICBKdW1wIHN1
Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCkBAIC04NzAsNyArODc5LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBo
YXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlLCBjaGFpbik7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhd
LnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwogICAgIAogICAg
IC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBw
YXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRC
eUlkQnJhbmNoVG9TbG93Q2FzZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gOTY0ODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAyLDYgKzcwMiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgK
IHsKICAgICBKdW1wIGZhaWx1cmVDYXNlID0gY2hlY2tTdHJ1Y3R1cmUocmVnVDAsIHN0cnVjdHVy
ZSk7CiAgICAgYm9vbCBuZWVkc1N0dWJMaW5rID0gZmFsc2U7CisgICAgYm9vbCBpc0RpcmVjdCA9
IGZhbHNlOwogICAgIGlmIChzbG90LmNhY2hlZFByb3BlcnR5VHlwZSgpID09IFByb3BlcnR5U2xv
dDo6R2V0dGVyKSB7CiAgICAgICAgIG5lZWRzU3R1YkxpbmsgPSB0cnVlOwogICAgICAgICBjb21w
aWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMSwgY2FjaGVkT2Zmc2V0KTsKQEAgLTcxOCw4
ICs3MTksMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAg
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKGNvbnN0X2Nhc3Q8SWRlbnRp
Zmllcio+KCZpZGVudCkpKTsKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZElt
bVB0cihzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsK
ICAgICAgICAgc3R1YkNhbGwuY2FsbCgpOwotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGlzRGlyZWN0ID0gdHJ1ZTsKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdU
MCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CisgICAgfQogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAo
KTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CkBA
IC03NDMsNyArNzQ2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0
KAogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViQ29kZSwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAKICAgICAvLyBGaW5hbGx5IHBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UpOwpAQCAtNzY2LDYgKzc2OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRQcm90b0xpc3QKIAogICAgIC8vIENoZWNrcyBvdXQgb2theSEKICAgICBib29sIG5lZWRzU3R1
YkxpbmsgPSBmYWxzZTsKKyAgICBib29sIGlzRGlyZWN0ID0gZmFsc2U7CiAgICAgaWYgKHNsb3Qu
Y2FjaGVkUHJvcGVydHlUeXBlKCkgPT0gUHJvcGVydHlTbG90OjpHZXR0ZXIpIHsKICAgICAgICAg
bmVlZHNTdHViTGluayA9IHRydWU7CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJv
dG9PYmplY3QsIHJlZ1QxLCBjYWNoZWRPZmZzZXQpOwpAQCAtNzgyLDggKzc4NiwxMCBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgICAgIHN0dWJDYWxsLmFk
ZEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoY29uc3RfY2FzdDxJZGVudGlmaWVyKj4oJmlkZW50KSkp
OwogICAgICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChUcnVzdGVkSW1tUHRyKHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICBzdHViQ2Fs
bC5jYWxsKCk7Ci0gICAgfSBlbHNlCisgICAgfSBlbHNlIHsKKyAgICAgICAgaXNEaXJlY3QgPSB0
cnVlOwogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwg
Y2FjaGVkT2Zmc2V0KTsKKyAgICB9CiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKQEAg
LTgwNSw3ICs4MTEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0
CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxh
YmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAg
ICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwg
cHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlLCBpc0RpcmVjdCk7CiAK
ICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBo
b3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBM
b2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0
R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwpAQCAtODMzLDYgKzgzOSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICBBU1NFUlQocHJvdG9PYmplY3QpOwog
ICAgIAogICAgIGJvb2wgbmVlZHNTdHViTGluayA9IGZhbHNlOworICAgIGJvb2wgaXNEaXJlY3Qg
PSBmYWxzZTsKICAgICBpZiAoc2xvdC5jYWNoZWRQcm9wZXJ0eVR5cGUoKSA9PSBQcm9wZXJ0eVNs
b3Q6OkdldHRlcikgewogICAgICAgICBuZWVkc1N0dWJMaW5rID0gdHJ1ZTsKICAgICAgICAgY29t
cGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIGNhY2hlZE9mZnNldCk7CkBA
IC04NDksOCArODU2LDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxp
c3QKICAgICAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoVHJ1c3RlZEltbVB0cihjb25zdF9jYXN0
PElkZW50aWZpZXIqPigmaWRlbnQpKSk7CiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpKSk7CiAgICAgICAgIHN0dWJDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UKKyAgICB9IGVsc2Ug
eworICAgICAgICBpc0RpcmVjdCA9IHRydWU7CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOworICAgIH0KICAgICBKdW1wIHN1
Y2Nlc3MgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMpOwpAQCAtODczLDcgKzg4Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbkxpc3QKICAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlKCk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28g
dGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbik7Cisg
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLCBjaGFpbiwgaXNEaXJlY3QpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5
NjQ4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjk4LDcgKzE2OTgsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfCiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICAgICAgQVNTRVJUKCFzdHViSW5mby0+c3R1YlJv
dXRpbmUpOwotICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCksIHN0dWJJbmZv
LT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCksIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHRydWUpOwogICAgICAgICAgICAgc3R1YkluZm8tPmluaXRH
ZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51
LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTcyMywxMiArMTcyMywxMiBAQCBz
dGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAKICAgICBzd2l0Y2ggKHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgot
ICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHVi
SW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8t
PnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHByb3Rv
dHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGds
b2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5
SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJv
dG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpLCB0cnVlKTsKICAgICAgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgotICAgICAgICBwcm90b3R5
cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9i
YWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlk
Q2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpKTsKKyAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5z
dHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSwgdHJ1ZSk7CiAgICAg
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAg
ICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlz
dCwgMik7CiAgICAgICAgIGJyZWFrOwo=
</data>
<flag name="review"
          id="106682"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>