<?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>69201</bug_id>
          
          <creation_ts>2011-09-30 18:17:58 -0700</creation_ts>
          <short_desc>All of JSC&apos;s heuristics should be in one place for easier tuning</short_desc>
          <delta_ts>2011-10-01 15:04:57 -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>
          
          <blocked>69208</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>476480</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 18:17:58 -0700</bug_when>
    <thetext>Currenty JavaScriptCore has a large number of heuristic settings, such as optimization thresholds, recompilation thresholds, optimization delay thresholds, etc.  There are also a lot of old heuristics from even before tiered compilation, such as the maximum size of polymorphic access lists and the thrash thresholds for creating dictionaries and despecifying functions.

It would be great to have these thresholds in one file (or at least a handful of files), so that it is easier to reason about their relationships.

Settings that do not have to be in a header (because they are not accessed frequently and because they don&apos;t determine the layout of classes) should be in a .cpp file, so that they can be changed without recompiling all of WebKit.

Other settings should be in the corresponding header (of the same name), to make it easier to find them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476524</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 20:52:12 -0700</bug_when>
    <thetext>I hacked up a patch that does this, and also has an option where all of the heuristics can be controlled using environment variables.  This allowed me to tweak around with the various settings.  Here&apos;s what I find when I increase the threshold for when optimization kicks in by a factor of 10.  V8 wins, Kraken loses.

This is really worth investigating further.  Maybe there&apos;s a sweet spot!



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;Heuristics&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               Heuristics                                   
SunSpider:
   3d-cube                                7.6906+-0.2068    ?     7.7596+-0.2620       ?
   3d-morph                               7.4465+-0.1283    ?     7.6581+-0.1881       ? might be 1.0284x slower
   3d-raytrace                            8.2471+-0.1919    !     8.8701+-0.2425       ! definitely 1.0755x slower
   access-binary-trees                    1.8606+-0.1037    ?     1.9590+-0.0674       ? might be 1.0529x slower
   access-fannkuch                        6.6788+-0.2146          6.5927+-0.2252         might be 1.0131x faster
   access-nbody                           3.6278+-0.1156    ?     3.6838+-0.0670       ? might be 1.0154x slower
   access-nsieve                          2.6637+-0.0730    ?     2.6795+-0.0705       ?
   bitops-3bit-bits-in-byte               1.7849+-0.0586          1.7360+-0.0279         might be 1.0282x faster
   bitops-bits-in-byte                    2.7555+-0.0986    !     2.9485+-0.0850       ! definitely 1.0700x slower
   bitops-bitwise-and                     3.3116+-0.1161          3.3052+-0.0942       
   bitops-nsieve-bits                     5.6408+-0.2029          5.6077+-0.1539       
   controlflow-recursive                  2.0679+-0.0469    ?     2.1149+-0.0707       ? might be 1.0227x slower
   crypto-aes                             6.8625+-0.1968    ?     6.9410+-0.4183       ? might be 1.0114x slower
   crypto-md5                             2.8206+-0.0594    ?     2.9170+-0.1876       ? might be 1.0342x slower
   crypto-sha1                            2.5579+-0.0761    ?     2.5948+-0.0808       ? might be 1.0144x slower
   date-format-tofte                     10.1196+-0.3292         10.0692+-0.2650       
   date-format-xparb                      9.6261+-0.2888          9.2702+-0.2785         might be 1.0384x faster
   math-cordic                            6.4324+-0.1322    ?     6.5345+-0.2709       ? might be 1.0159x slower
   math-partial-sums                      7.5616+-0.1605    ?     7.7972+-0.1407       ? might be 1.0312x slower
   math-spectral-norm                     2.8596+-0.1089    ?     2.9433+-0.0722       ? might be 1.0293x slower
   regexp-dna                            10.8983+-0.1859    ?    11.0576+-0.1395       ? might be 1.0146x slower
   string-base64                          6.2564+-0.1731    ^     5.8365+-0.1670       ^ definitely 1.0719x faster
   string-fasta                           7.1414+-0.1872          7.1134+-0.2382       
   string-tagcloud                       12.0129+-0.3267    ?    12.2721+-0.3626       ? might be 1.0216x slower
   string-unpack-code                    21.6528+-0.6228         20.6743+-0.6671         might be 1.0473x faster
   string-validate-input                  6.6130+-0.2425    ?     6.6702+-0.2608       ?

   &lt;arithmetic&gt;                           6.4304+-0.0354    ?     6.4464+-0.0526       ?
   &lt;geometric&gt;                            5.2719+-0.0380    ?     5.3201+-0.0479       ?
   &lt;harmonic&gt;                             4.3149+-0.0548    ?     4.3748+-0.0496       ? might be 1.0139x slower

                                            TipOfTree               Heuristics                                   
V8:
   crypto                                73.9378+-1.7200    ^    70.7935+-1.1125       ^ definitely 1.0444x faster
   deltablue                            230.0161+-2.7634        226.3826+-1.2727         might be 1.0161x faster
   earley-boyer                          90.7387+-0.6798    ?    91.2552+-1.1652       ?
   raytrace                              62.5021+-0.8299         62.0781+-0.8338       
   regexp                               106.5030+-1.7636        104.6961+-0.8644         might be 1.0173x faster
   richards                             188.3154+-3.3034        184.6544+-2.0805         might be 1.0198x faster
   splay                                 92.9402+-1.3416         91.8982+-0.4769         might be 1.0113x faster

   &lt;arithmetic&gt;                         120.7076+-0.6592    ^   118.8226+-0.6105       ^ definitely 1.0159x faster
   &lt;geometric&gt;                          108.7153+-0.5950    ^   107.0578+-0.6092       ^ definitely 1.0155x faster
   &lt;harmonic&gt;                            99.4516+-0.5867    ^    97.9377+-0.6318       ^ definitely 1.0155x faster

                                            TipOfTree               Heuristics                                   
Kraken:
   ai-astar                             502.3658+-6.5577    ^   490.1612+-2.0308       ^ definitely 1.0249x faster
   audio-beat-detection                 194.3967+-3.6043        191.6740+-1.0048         might be 1.0142x faster
   audio-dft                            291.1872+-7.7290        286.4926+-5.5645         might be 1.0164x faster
   audio-fft                            129.9101+-2.1400    ^   126.8271+-0.5652       ^ definitely 1.0243x faster
   audio-oscillator                     269.2837+-3.6560        262.5009+-4.4634         might be 1.0258x faster
   imaging-darkroom                     426.1247+-4.0255    ^   336.4879+-5.2957       ^ definitely 1.2664x faster
   imaging-desaturate                   229.4139+-2.4708    ?   233.5722+-3.9622       ? might be 1.0181x slower
   imaging-gaussian-blur                582.8458+-3.2455    ?   591.1324+-9.3164       ? might be 1.0142x slower
   json-parse-financial                  49.6399+-0.6668         49.4632+-0.8152       
   json-stringify-tinderbox              71.6597+-1.1835         69.6183+-0.9957         might be 1.0293x faster
   stanford-crypto-aes                  132.8525+-1.3210    ^   102.1307+-1.1175       ^ definitely 1.3008x faster
   stanford-crypto-ccm                  103.1368+-1.0499        101.8944+-0.7486         might be 1.0122x faster
   stanford-crypto-pbkdf2               195.4435+-4.3892    !   391.9521+-5.5801       ! definitely 2.0054x slower
   stanford-crypto-sha256-iterative      85.7275+-0.7357    ?    88.3767+-3.3986       ? might be 1.0309x slower

   &lt;arithmetic&gt;                         233.1420+-0.4635    !   237.3060+-0.9258       ! definitely 1.0179x slower
   &lt;geometric&gt;                          182.6890+-0.4309    !   184.1216+-0.3057       ! definitely 1.0078x slower
   &lt;harmonic&gt;                           142.0580+-0.3506    ^   140.6889+-0.3872       ^ definitely 1.0097x faster

                                            TipOfTree               Heuristics                                   
All benchmarks:
   &lt;arithmetic&gt;                          90.9815+-0.1490    !    91.9500+-0.2205       ! definitely 1.0106x slower
   &lt;geometric&gt;                           23.7879+-0.1042    ?    23.9089+-0.1269       ?
   &lt;harmonic&gt;                             7.5872+-0.0941    ?     7.6871+-0.0850       ? might be 1.0132x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476528</commentid>
    <comment_count>2</comment_count>
      <attachid>109394</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 21:09:22 -0700</bug_when>
    <thetext>Created attachment 109394
the patch

This is performance-neutral, as I haven&apos;t changed any heuristics in this patch.  I have used it to see that there is room to tweak the heuristics, but I don&apos;t know yet what the sweet spot is.  I&apos;ll leave that for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476529</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 21:11:58 -0700</bug_when>
    <thetext>Attachment 109394 did not pass style-queue:

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

Source/JavaScriptCore/runtime/Heuristics.cpp:27:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/JavaScriptCore/runtime/Heuristics.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 13 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>476530</commentid>
    <comment_count>4</comment_count>
      <attachid>109395</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 21:15:01 -0700</bug_when>
    <thetext>Created attachment 109395
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476544</commentid>
    <comment_count>5</comment_count>
      <attachid>109398</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-30 23:11:41 -0700</bug_when>
    <thetext>Created attachment 109398
the patch - attempt to fix windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476600</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-01 15:04:57 -0700</bug_when>
    <thetext>Landed in r96463.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109394</attachid>
            <date>2011-09-30 21:09:22 -0700</date>
            <delta_ts>2011-09-30 21:15:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>heuristics_patch_1.diff</filename>
            <type>text/plain</type>
            <size>26497</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDktMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBB
bGwgb2YgSlNDJ3MgaGV1cmlzdGljcyBzaG91bGQgYmUgaW4gb25lIHBsYWNlIGZvciBlYXNpZXIg
dHVuaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
OTIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjaGFuZ2UgdGllcmVkIGNvbXBpbGF0aW9u
IGhldXJpc3RpY3MgaW4KKyAgICAgICAgb25lIHBsYWNlIChIZXVyaXN0aWNzLmNwcCkgd2l0aG91
dCByZWNvbXBpbGluZyB0aGUgd2hvbGUgcHJvamVjdC4KKyAgICAgICAgCisgICAgICAgIEl0IGFs
c28gbWFrZXMgaXQgcG9zc2libGUgdG8gZW5hYmxlIHNldHRpbmcgaGV1cmlzdGljcyB1c2luZwor
ICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuIFdo
ZW4gdHVybmVkIG9uLCBpdAorICAgICAgICBtYWtlcyB0dW5pbmcgdGhlIHN5c3RlbSBtdWNoIGVh
c2llci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIHJ1bnRp
bWUvSGV1cmlzdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpIZXVyaXN0aWNzOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OnNldEhldXJpc3RpYyk6CisgICAgICAgIChK
U0M6OkhldXJpc3RpY3M6OmluaXRpYWxpemVIZXVyaXN0aWNzKToKKyAgICAgICAgKiBydW50aW1l
L0hldXJpc3RpY3MuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorCiAyMDEx
LTA5LTMwICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBBdHRl
bXB0IHRvIGZpeCB0aGUgQXBwbGUgV2luZG93cyBhbmQgV2luQ2Fpcm8gRGVidWcgYnVpbGRzIGFm
dGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NjQ0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDYgKzExNCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKKyAgICBydW50aW1lL0hldXJpc3Rp
Y3MuY3BwCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmNwcAogICAgIHJ1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTY0NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtMzI5LDYgKzMyOSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hldXJpc3RpY3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lv
biA5NjQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwIFwKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAgXAorICAgIHJ1bnRpbWUvSGV1cmlz
dGljcy5jcHAgXAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogICAgIHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgXAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk2NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTczNCw2ICs3MzQsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxIZXVyaXN0aWNzLmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxIZXVyaXN0aWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSWRlbnRpZmllci5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk2NDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDggQEAKIAkJMEZEODJGMkIxNDI2
Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQgLyog
SmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENv
ZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAq
LzsgfTsKIAkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5MjAw
MTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQjE0
MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBIZXVy
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLzsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODM2LDYgKzgzOCw4IEBACiAJCTBG
RDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAv
KiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXVyaXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGV1cmlzdGljcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9T
QWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQx
N0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwMzEsNiArMjAzNSw4IEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBy
dW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkw
RkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8sCisJCQkJMEZFMjI4
RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAqLywKIAkJCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLywKIAkJCQkwRjc3MDA4RTE0MDJG
REQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VG
ODAwQjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLApAQCAtMjg1OCw2ICsyODY0LDcgQEAKIAkJCQlB
NzUyMUUxMzE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZENTJBQUUxNDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY4ODBGMUUxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIEhldXJp
c3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzM4OCw2ICszMzk1LDcgQEAKIAkJCQk4Njg4MEYx
RjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4Njg4MEY0NDE0MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRv
cjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTIyOEVFMTQzNkFC
MkMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk2NDQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NzIsNyArMTk3Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiAgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogCi0gICAgaWYgKG1f
b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IDUpCisgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyID49IEhldXJpc3RpY3M6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgPSAwOwpAQCAtMTk5OCw4ICsxOTk4LDggQEAgYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KCkKICAgICBwcmludGYoIlByb2ZpbGUgaG90bmVzczogJWxmLCAlbGZc
biIsIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCkpOwogI2VuZGlmCiAKLSAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IDAuNzUpCi0gICAgICAgICYmICghbnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVz
IC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMo
KSA+PSAwLjI1KSkKKyAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyB8
fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9m
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IEhldXJpc3RpY3M6OmRlc2lyZWRQcm9maWxlTGl2
ZW5lc3NSYXRlKQorICAgICAgICAmJiAoIW51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3Vi
bGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNr
ZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gSGV1cmlzdGljczo6ZGVzaXJlZFByb2Zp
bGVGdWxsbmVzc1JhdGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcisrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTY0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5Lmgi
CiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkhldXJpc3RpY3MuaCIKICNp
bmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJK
SVRXcml0ZUJhcnJpZXIuaCIKQEAgLTcxOCwzMiArNzE5LDI1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyB0byBhdm9pZCB0aHJhc2hpbmcuCiAgICAgICAgIHVuc2lnbmVkIHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gMTgpOworICAgICAgICAgICAgQVNTRVJU
KG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gSGV1cmlzdGljczo6cmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXJNYXgpOwogICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgY291bnRSZW9w
dGltaXphdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIrKzsKLSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID4gMTgpCi0gICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IDE4
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHBy
b3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhv
ZHMgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCi0gICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID4gSGV1cmlzdGljczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpCisgICAgICAgICAg
ICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IEhldXJpc3RpY3M6OnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyTWF4OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQz
Ml90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gLTEwMDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLTUwMDAgPDwgcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBIZXVyaXN0aWNz
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA8PCByZW9w
dGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
bnQzMl90KiBhZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpCkBAIC03NjIsNyArNzU2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGluZyBiYXNlbGlu
ZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVO
ZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IEhldXJpc3Rp
Y3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb247CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGltaXph
dGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC03NzIsNyArNzY2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KICAgICAgICAg
dm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKKyAg
ICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVy
VmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMgc3Rh
cnRpbmcgc3RhdGUsCkBAIC04MTMsNyArODA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplU29vbigpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gSGV1
cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tzIGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2Fu
CkBAIC04NDUsMjUgKzgzOSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIpOyB9CiAg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKTsgfQogICAgICAgICAKLSAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3aGljaCB0aGUgSklU
IHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCi0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAxOyB9Ci0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJldHVybigpIHsgcmV0
dXJuIDE1OyB9Ci0KLSAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSByYXRpbyB3ZSB3YW50
LgotICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpIHsgcmV0dXJuIDY7
IH0KLSAgICAgICAgCiAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVyZXMgdGhhdCB0cmln
Z2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KLSAgICAgICAgdW5zaWduZWQgbGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpOyB9Ci0gICAgICAgIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNo
b2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9s
ZCgpIHsgcmV0dXJuIEhldXJpc3RpY3M6OmxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZSA8PCBh
bHRlcm5hdGl2ZSgpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVu
c2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIEhldXJpc3Rp
Y3M6OmxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3AgPDwgYWx0ZXJuYXRpdmUoKS0+
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQogICAgICAgICAKICAgICAgICAgYm9vbCBz
aG91bGRSZW9wdGltaXplTm93KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2ly
ZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJn
ZUZhaWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIEhldXJpc3RpY3M6OmRl
c2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW8gKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgPj0gc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50
ZXIoKSA+PSBsYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBib29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpID49IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkgPj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAg
ICAgICAgICByZXR1cm4gSGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxS
YXRpbyAqIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49IGxhcmdlRmFpbENvdW50VGhyZXNo
b2xkRm9yTG9vcCgpOwogICAgICAgICB9CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NjQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsMTIgKzQ1MSwxMiBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAg
IEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJ
bW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOwotICAgIG11bDMy
KEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6
cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtdWwzMihJbW0zMihIZXVyaXN0aWNzOjpkZXNp
cmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86
OnJlZ1QyKTsKICAgICAKICAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVx
dWFsLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAogICAgIC8vIFJlb3B0
aW1pemUgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICBzdG9yZTMyKEltbTMyKENvZGVCbG9jazo6
Y291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpKSwgQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBzdG9y
ZTMyKEltbTMyKEhldXJpc3RpY3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4
dEludm9jYXRpb24pLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKICAg
ICAKICAgICBmZXdGYWlscy5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gOTY0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRPcHRpbWl6
YXRpb25DaGVjayhPcHRpbWl6YQogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IENvZGVC
bG9jazo6ZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkgOiBDb2RlQmxvY2s6OmV4ZWN1
dGVDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJuKCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRpbWl6ZSA9
IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlv
bkNoZWNrID8gSGV1cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AgOiBI
ZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuKSwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywga2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBj
dGlfb3B0aW1pemVfZnJvbV9sb29wIDogY3RpX29wdGltaXplX2Zyb21fcmV0KTsKICAgICBpZiAo
a2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2spCiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIZXVyaXN0aWNzLmgiCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCisjaW5jbHVkZSA8bGltaXRzPgorCisvLyBTZXQgdG8gMSB0byBj
b250cm9sIHRoZSBoZXVyaXN0aWNzIHVzaW5nIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyNkZWZp
bmUgRU5BQkxFX1JVTl9USU1FX0hFVVJJU1RJQ1MgMAorCisjaWYgRU5BQkxFKFJVTl9USU1FX0hF
VVJJU1RJQ1MpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgeworCitpbnQzMl90IGV4
ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CitpbnQzMl90IGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwOworaW50MzJfdCBleGVj
dXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKK2ludDMyX3QgZXhl
Y3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uOworaW50MzJfdCBleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uOworCitpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJJbmNyZW1lbnRGb3JMb29wOworaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yUmV0dXJuOworCit1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlv
OworCit1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7Cit1bnNpZ25lZCBsYXJn
ZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOworCit1bnNpZ25lZCByZW9wdGltaXphdGlv
blJldHJ5Q291bnRlck1heDsKK3Vuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyU3Rl
cDsKKwordW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5OworZG91YmxlIGRlc2lyZWRQ
cm9maWxlTGl2ZW5lc3NSYXRlOworZG91YmxlIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlOwor
CisjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCitzdGF0aWMgYm9vbCBwYXJzZShjb25z
dCBjaGFyKiBzdHJpbmcsIGludDMyX3QmIHZhbHVlKQoreworICAgIHJldHVybiBzc2NhbmYoc3Ry
aW5nLCAiJWQiLCAmdmFsdWUpID09IDE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNo
YXIqIHN0cmluZywgdW5zaWduZWQmIHZhbHVlKQoreworICAgIHJldHVybiBzc2NhbmYoc3RyaW5n
LCAiJXUiLCAmdmFsdWUpID09IDE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIq
IHN0cmluZywgZG91YmxlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3NjYW5mKHN0cmluZywgIiVs
ZiIsICZ2YWx1ZSkgPT0gMTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
K3ZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lLCBVIHZhbHVl
KQoreworICAgIGNvbnN0IGNoYXIqIHN0cmluZ1ZhbHVlID0gZ2V0ZW52KG5hbWUpOworICAgIGlm
ICghc3RyaW5nVmFsdWUpIHsKKyAgICAgICAgdmFyaWFibGUgPSBzYWZlQ2FzdDxUPih2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHBhcnNlKHN0cmluZ1ZhbHVl
LCB2YXJpYWJsZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IldBUk5JTkc6IGZhaWxlZCB0byBwYXJzZSAlcz0lc1xuIiwgbmFtZSwgc3RyaW5nVmFsdWUpOwor
ICAgIHZhcmlhYmxlID0gc2FmZUNhc3Q8VD4odmFsdWUpOworfQorCisjZGVmaW5lIFNFVCh2YXJp
YWJsZSwgdmFsdWUpIHNldEhldXJpc3RpYyh2YXJpYWJsZSwgIkpTQ18iICN2YXJpYWJsZSwgdmFs
dWUpCisjZWxzZQorI2RlZmluZSBTRVQodmFyaWFibGUsIHZhbHVlKSB2YXJpYWJsZSA9IHZhbHVl
CisjZW5kaWYKKwordm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCit7CisgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CisgICAg
U0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAtNTAw
MCk7CisgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CisgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbiwgICAgICAgICAgICAtMTAwKTsKKyAgICBT
RVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiwgIDApOwor
CisgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOworICAgIFNF
VChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7CisKKyAgICBTRVQoZGVz
aXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbywgNik7CisKKyAgICBTRVQobGFyZ2VGYWls
Q291bnRUaHJlc2hvbGRCYXNlLCAgICAgICAgMjApOworICAgIFNFVChsYXJnZUZhaWxDb3VudFRo
cmVzaG9sZEJhc2VGb3JMb29wLCAxKTsKKworICAgIFNFVChyZW9wdGltaXphdGlvblJldHJ5Q291
bnRlclN0ZXAsIDEpOworCisgICAgU0VUKG1heGltdW1PcHRpbWl6YXRpb25EZWxheSwgICA1KTsK
KyAgICBTRVQoZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUsIDAuNzUpOworICAgIFNFVChkZXNp
cmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSwgMC4yNSk7CisgICAgCisgICAgQVNTRVJUKGV4ZWN1dGlv
bkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uIDw9IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKTsKKyAgICBBU1NFUlQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAgPD0gZXhlY3V0aW9uQ291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCk7CisgICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAgPD0gZXhlY3V0aW9uQ291bnRlclZhbHVlRm9y
T3B0aW1pemVTb29uKTsKKyAgICBBU1NFUlQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlcldhcm1VcCA8IDApOworICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JP
cHRpbWl6ZVNvb24gPD0gZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2Nh
dGlvbik7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmVv
cHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBzaW1wbHkKKyAgICAvLyB0aGUgbGFy
Z2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgZXhlY3V0ZSBjb3VudGVy
LCB3aGVuIHVzaW5nIGl0CisgICAgLy8gdG8gbGVmdC1zaGlmdCB0aGUgZXhlY3V0aW9uIGNvdW50
ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFsdWUgZW5kcworICAgIC8vIHVwIGJl
aW5nIDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJpYmxlOyBpdCBwcm9iYWJseSB0YWtl
cyB1cCB+MTAwIGN5Y2xlcworICAgIC8vIHRvdGFsIG9uIGEgMzItYml0IHByb2Nlc3Nvci4KKyAg
ICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7CisgICAgd2hpbGUgKChzdGF0aWNf
Y2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpID49IHN0YXRpY19j
YXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkKKyAgICAg
ICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgrKzsKKyAgICAKKyAgICBBU1NFUlQoKHN0
YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPCAwKTsKKyAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPj0g
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkhldXJpc3RpY3MKKworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSGV1cmlzdGljc19oCisjZGVmaW5lIEhldXJpc3RpY3NfaAorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgeworCitleHRlcm4gaW50MzJfdCBleGVj
dXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOworZXh0ZXJuIGludDMyX3Qg
ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CitleHRlcm4g
aW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsK
K2V4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKK2V4
dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRp
b247CisKK2V4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwor
ZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKKworZXh0
ZXJuIHVuc2lnbmVkIGRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW87CisKK2V4dGVy
biB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7CitleHRlcm4gdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKKworZXh0ZXJuIHVuc2lnbmVkIHJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4OworZXh0ZXJuIHVuc2lnbmVkIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyU3RlcDsKKworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRp
b25EZWxheTsKK2V4dGVybiBkb3VibGUgZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGU7CitleHRl
cm4gZG91YmxlIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlOworCit2b2lkIGluaXRpYWxpemVI
ZXVyaXN0aWNzKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpIZXVyaXN0aWNzCisKKyNlbmRp
ZiAvLyBIZXVyaXN0aWNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9uIDk2NDQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxv
Y2F0b3IuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGV1cmlzdGljcy5oIgogI2lu
Y2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIlVTdHJpbmcuaCIKQEAgLTUyLDYgKzUzLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZ09uY2UoKQogewogICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUo
KTsKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICBIZXVyaXN0aWNzOjppbml0
aWFsaXplSGV1cmlzdGljcygpOwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
ICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109395</attachid>
            <date>2011-09-30 21:15:01 -0700</date>
            <delta_ts>2011-09-30 23:11:41 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>heuristics_patch_2.diff</filename>
            <type>text/plain</type>
            <size>26497</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDktMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBB
bGwgb2YgSlNDJ3MgaGV1cmlzdGljcyBzaG91bGQgYmUgaW4gb25lIHBsYWNlIGZvciBlYXNpZXIg
dHVuaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
OTIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjaGFuZ2UgdGllcmVkIGNvbXBpbGF0aW9u
IGhldXJpc3RpY3MgaW4KKyAgICAgICAgb25lIHBsYWNlIChIZXVyaXN0aWNzLmNwcCkgd2l0aG91
dCByZWNvbXBpbGluZyB0aGUgd2hvbGUgcHJvamVjdC4KKyAgICAgICAgCisgICAgICAgIEl0IGFs
c28gbWFrZXMgaXQgcG9zc2libGUgdG8gZW5hYmxlIHNldHRpbmcgaGV1cmlzdGljcyB1c2luZwor
ICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuIFdo
ZW4gdHVybmVkIG9uLCBpdAorICAgICAgICBtYWtlcyB0dW5pbmcgdGhlIHN5c3RlbSBtdWNoIGVh
c2llci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIHJ1bnRp
bWUvSGV1cmlzdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpIZXVyaXN0aWNzOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OnNldEhldXJpc3RpYyk6CisgICAgICAgIChK
U0M6OkhldXJpc3RpY3M6OmluaXRpYWxpemVIZXVyaXN0aWNzKToKKyAgICAgICAgKiBydW50aW1l
L0hldXJpc3RpY3MuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorCiAyMDEx
LTA5LTMwICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBBdHRl
bXB0IHRvIGZpeCB0aGUgQXBwbGUgV2luZG93cyBhbmQgV2luQ2Fpcm8gRGVidWcgYnVpbGRzIGFm
dGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NjQ0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDYgKzExNCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKKyAgICBydW50aW1lL0hldXJpc3Rp
Y3MuY3BwCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmNwcAogICAgIHJ1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTY0NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtMzI5LDYgKzMyOSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hldXJpc3RpY3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lv
biA5NjQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwIFwKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAgXAorICAgIHJ1bnRpbWUvSGV1cmlz
dGljcy5jcHAgXAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogICAgIHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgXAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk2NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTczNCw2ICs3MzQsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxIZXVyaXN0aWNzLmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxIZXVyaXN0aWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSWRlbnRpZmllci5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk2NDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDggQEAKIAkJMEZEODJGMkIxNDI2
Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQgLyog
SmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENv
ZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAq
LzsgfTsKIAkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5MjAw
MTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQjE0
MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBIZXVy
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLzsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODM2LDYgKzgzOCw4IEBACiAJCTBG
RDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAv
KiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXVyaXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGV1cmlzdGljcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9T
QWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQx
N0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwMzEsNiArMjAzNSw4IEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBy
dW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkw
RkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8sCisJCQkJMEZFMjI4
RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAqLywKIAkJCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLywKIAkJCQkwRjc3MDA4RTE0MDJG
REQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VG
ODAwQjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLApAQCAtMjg1OCw2ICsyODY0LDcgQEAKIAkJCQlB
NzUyMUUxMzE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZENTJBQUUxNDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY4ODBGMUUxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIEhldXJp
c3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzM4OCw2ICszMzk1LDcgQEAKIAkJCQk4Njg4MEYx
RjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4Njg4MEY0NDE0MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRv
cjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTIyOEVFMTQzNkFC
MkMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk2NDQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NzIsNyArMTk3Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiAgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogCi0gICAgaWYgKG1f
b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IDUpCisgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyID49IEhldXJpc3RpY3M6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgPSAwOwpAQCAtMTk5OCw4ICsxOTk4LDggQEAgYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KCkKICAgICBwcmludGYoIlByb2ZpbGUgaG90bmVzczogJWxmLCAlbGZc
biIsIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCkpOwogI2VuZGlmCiAKLSAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IDAuNzUpCi0gICAgICAgICYmICghbnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVz
IC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMo
KSA+PSAwLjI1KSkKKyAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyB8
fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9m
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IEhldXJpc3RpY3M6OmRlc2lyZWRQcm9maWxlTGl2
ZW5lc3NSYXRlKQorICAgICAgICAmJiAoIW51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3Vi
bGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNr
ZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gSGV1cmlzdGljczo6ZGVzaXJlZFByb2Zp
bGVGdWxsbmVzc1JhdGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcisrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTY0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5Lmgi
CiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkhldXJpc3RpY3MuaCIKICNp
bmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJK
SVRXcml0ZUJhcnJpZXIuaCIKQEAgLTcxOCwzMiArNzE5LDI1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyB0byBhdm9pZCB0aHJhc2hpbmcuCiAgICAgICAgIHVuc2lnbmVkIHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gMTgpOworICAgICAgICAgICAgQVNTRVJU
KG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gSGV1cmlzdGljczo6cmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXJNYXgpOwogICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgY291bnRSZW9w
dGltaXphdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIrKzsKLSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID4gMTgpCi0gICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IDE4
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHBy
b3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhv
ZHMgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCi0gICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID4gSGV1cmlzdGljczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpCisgICAgICAgICAg
ICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IEhldXJpc3RpY3M6OnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyTWF4OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQz
Ml90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gLTEwMDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLTUwMDAgPDwgcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBIZXVyaXN0aWNz
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA8PCByZW9w
dGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
bnQzMl90KiBhZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpCkBAIC03NjIsNyArNzU2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGluZyBiYXNlbGlu
ZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVO
ZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IEhldXJpc3Rp
Y3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb247CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGltaXph
dGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC03NzIsNyArNzY2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KICAgICAgICAg
dm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKKyAg
ICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVy
VmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMgc3Rh
cnRpbmcgc3RhdGUsCkBAIC04MTMsNyArODA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplU29vbigpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gSGV1
cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tzIGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2Fu
CkBAIC04NDUsMjUgKzgzOSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIpOyB9CiAg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKTsgfQogICAgICAgICAKLSAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3aGljaCB0aGUgSklU
IHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCi0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAxOyB9Ci0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJldHVybigpIHsgcmV0
dXJuIDE1OyB9Ci0KLSAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSByYXRpbyB3ZSB3YW50
LgotICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpIHsgcmV0dXJuIDY7
IH0KLSAgICAgICAgCiAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVyZXMgdGhhdCB0cmln
Z2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KLSAgICAgICAgdW5zaWduZWQgbGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpOyB9Ci0gICAgICAgIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNo
b2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9s
ZCgpIHsgcmV0dXJuIEhldXJpc3RpY3M6OmxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZSA8PCBh
bHRlcm5hdGl2ZSgpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVu
c2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIEhldXJpc3Rp
Y3M6OmxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3AgPDwgYWx0ZXJuYXRpdmUoKS0+
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQogICAgICAgICAKICAgICAgICAgYm9vbCBz
aG91bGRSZW9wdGltaXplTm93KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2ly
ZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJn
ZUZhaWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIEhldXJpc3RpY3M6OmRl
c2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW8gKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgPj0gc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50
ZXIoKSA+PSBsYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBib29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpID49IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkgPj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAg
ICAgICAgICByZXR1cm4gSGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxS
YXRpbyAqIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49IGxhcmdlRmFpbENvdW50VGhyZXNo
b2xkRm9yTG9vcCgpOwogICAgICAgICB9CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NjQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsMTIgKzQ1MSwxMiBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAg
IEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJ
bW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOwotICAgIG11bDMy
KEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6
cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtdWwzMihJbW0zMihIZXVyaXN0aWNzOjpkZXNp
cmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86
OnJlZ1QyKTsKICAgICAKICAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVx
dWFsLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAogICAgIC8vIFJlb3B0
aW1pemUgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICBzdG9yZTMyKEltbTMyKENvZGVCbG9jazo6
Y291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpKSwgQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBzdG9y
ZTMyKEltbTMyKEhldXJpc3RpY3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4
dEludm9jYXRpb24pLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKICAg
ICAKICAgICBmZXdGYWlscy5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gOTY0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRPcHRpbWl6
YXRpb25DaGVjayhPcHRpbWl6YQogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IENvZGVC
bG9jazo6ZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkgOiBDb2RlQmxvY2s6OmV4ZWN1
dGVDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJuKCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRpbWl6ZSA9
IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlv
bkNoZWNrID8gSGV1cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AgOiBI
ZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuKSwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywga2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBj
dGlfb3B0aW1pemVfZnJvbV9sb29wIDogY3RpX29wdGltaXplX2Zyb21fcmV0KTsKICAgICBpZiAo
a2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2spCiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIZXVyaXN0aWNzLmgiCisKKyNpbmNsdWRlIDxs
aW1pdHM+CisKKy8vIFNldCB0byAxIHRvIGNvbnRyb2wgdGhlIGhldXJpc3RpY3MgdXNpbmcgZW52
aXJvbm1lbnQgdmFyaWFibGVzLgorI2RlZmluZSBFTkFCTEVfUlVOX1RJTUVfSEVVUklTVElDUyAw
CisKKyNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgeworCitpbnQzMl90IGV4
ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CitpbnQzMl90IGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwOworaW50MzJfdCBleGVj
dXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKK2ludDMyX3QgZXhl
Y3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uOworaW50MzJfdCBleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uOworCitpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJJbmNyZW1lbnRGb3JMb29wOworaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yUmV0dXJuOworCit1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlv
OworCit1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7Cit1bnNpZ25lZCBsYXJn
ZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOworCit1bnNpZ25lZCByZW9wdGltaXphdGlv
blJldHJ5Q291bnRlck1heDsKK3Vuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyU3Rl
cDsKKwordW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5OworZG91YmxlIGRlc2lyZWRQ
cm9maWxlTGl2ZW5lc3NSYXRlOworZG91YmxlIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlOwor
CisjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCitzdGF0aWMgYm9vbCBwYXJzZShjb25z
dCBjaGFyKiBzdHJpbmcsIGludDMyX3QmIHZhbHVlKQoreworICAgIHJldHVybiBzc2NhbmYoc3Ry
aW5nLCAiJWQiLCAmdmFsdWUpID09IDE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNo
YXIqIHN0cmluZywgdW5zaWduZWQmIHZhbHVlKQoreworICAgIHJldHVybiBzc2NhbmYoc3RyaW5n
LCAiJXUiLCAmdmFsdWUpID09IDE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIq
IHN0cmluZywgZG91YmxlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3NjYW5mKHN0cmluZywgIiVs
ZiIsICZ2YWx1ZSkgPT0gMTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
K3ZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lLCBVIHZhbHVl
KQoreworICAgIGNvbnN0IGNoYXIqIHN0cmluZ1ZhbHVlID0gZ2V0ZW52KG5hbWUpOworICAgIGlm
ICghc3RyaW5nVmFsdWUpIHsKKyAgICAgICAgdmFyaWFibGUgPSBzYWZlQ2FzdDxUPih2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHBhcnNlKHN0cmluZ1ZhbHVl
LCB2YXJpYWJsZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IldBUk5JTkc6IGZhaWxlZCB0byBwYXJzZSAlcz0lc1xuIiwgbmFtZSwgc3RyaW5nVmFsdWUpOwor
ICAgIHZhcmlhYmxlID0gc2FmZUNhc3Q8VD4odmFsdWUpOworfQorCisjZGVmaW5lIFNFVCh2YXJp
YWJsZSwgdmFsdWUpIHNldEhldXJpc3RpYyh2YXJpYWJsZSwgIkpTQ18iICN2YXJpYWJsZSwgdmFs
dWUpCisjZWxzZQorI2RlZmluZSBTRVQodmFyaWFibGUsIHZhbHVlKSB2YXJpYWJsZSA9IHZhbHVl
CisjZW5kaWYKKwordm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCit7CisgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CisgICAg
U0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAtNTAw
MCk7CisgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CisgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbiwgICAgICAgICAgICAtMTAwKTsKKyAgICBT
RVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiwgIDApOwor
CisgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOworICAgIFNF
VChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7CisKKyAgICBTRVQoZGVz
aXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbywgNik7CisKKyAgICBTRVQobGFyZ2VGYWls
Q291bnRUaHJlc2hvbGRCYXNlLCAgICAgICAgMjApOworICAgIFNFVChsYXJnZUZhaWxDb3VudFRo
cmVzaG9sZEJhc2VGb3JMb29wLCAxKTsKKworICAgIFNFVChyZW9wdGltaXphdGlvblJldHJ5Q291
bnRlclN0ZXAsIDEpOworCisgICAgU0VUKG1heGltdW1PcHRpbWl6YXRpb25EZWxheSwgICA1KTsK
KyAgICBTRVQoZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUsIDAuNzUpOworICAgIFNFVChkZXNp
cmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSwgMC4yNSk7CisgICAgCisgICAgQVNTRVJUKGV4ZWN1dGlv
bkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uIDw9IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKTsKKyAgICBBU1NFUlQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAgPD0gZXhlY3V0aW9uQ291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCk7CisgICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAgPD0gZXhlY3V0aW9uQ291bnRlclZhbHVlRm9y
T3B0aW1pemVTb29uKTsKKyAgICBBU1NFUlQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlcldhcm1VcCA8IDApOworICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JP
cHRpbWl6ZVNvb24gPD0gZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2Nh
dGlvbik7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmVv
cHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBzaW1wbHkKKyAgICAvLyB0aGUgbGFy
Z2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgZXhlY3V0ZSBjb3VudGVy
LCB3aGVuIHVzaW5nIGl0CisgICAgLy8gdG8gbGVmdC1zaGlmdCB0aGUgZXhlY3V0aW9uIGNvdW50
ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFsdWUgZW5kcworICAgIC8vIHVwIGJl
aW5nIDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJpYmxlOyBpdCBwcm9iYWJseSB0YWtl
cyB1cCB+MTAwIGN5Y2xlcworICAgIC8vIHRvdGFsIG9uIGEgMzItYml0IHByb2Nlc3Nvci4KKyAg
ICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7CisgICAgd2hpbGUgKChzdGF0aWNf
Y2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpID49IHN0YXRpY19j
YXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkKKyAgICAg
ICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgrKzsKKyAgICAKKyAgICBBU1NFUlQoKHN0
YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPCAwKTsKKyAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPj0g
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkhldXJpc3RpY3MKKworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSGV1cmlzdGljc19oCisjZGVmaW5lIEhldXJpc3RpY3NfaAorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgeworCitleHRlcm4gaW50MzJfdCBleGVj
dXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwOworZXh0ZXJuIGludDMyX3Qg
ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXA7CitleHRlcm4g
aW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsK
K2V4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbjsKK2V4
dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRp
b247CisKK2V4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wOwor
ZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvclJldHVybjsKKworZXh0
ZXJuIHVuc2lnbmVkIGRlc2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW87CisKK2V4dGVy
biB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7CitleHRlcm4gdW5zaWduZWQg
bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKKworZXh0ZXJuIHVuc2lnbmVkIHJl
b3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4OworZXh0ZXJuIHVuc2lnbmVkIHJlb3B0aW1pemF0
aW9uUmV0cnlDb3VudGVyU3RlcDsKKworZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1PcHRpbWl6YXRp
b25EZWxheTsKK2V4dGVybiBkb3VibGUgZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGU7CitleHRl
cm4gZG91YmxlIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlOworCit2b2lkIGluaXRpYWxpemVI
ZXVyaXN0aWNzKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpIZXVyaXN0aWNzCisKKyNlbmRp
ZiAvLyBIZXVyaXN0aWNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9uIDk2NDQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxv
Y2F0b3IuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSGV1cmlzdGljcy5oIgogI2lu
Y2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIlVTdHJpbmcuaCIKQEAgLTUyLDYgKzUzLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRo
cmVhZGluZ09uY2UoKQogewogICAgIFdURjo6ZG91YmxlX2NvbnZlcnNpb246OmluaXRpYWxpemUo
KTsKICAgICBXVEY6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICBIZXVyaXN0aWNzOjppbml0
aWFsaXplSGV1cmlzdGljcygpOwogI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykK
ICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109398</attachid>
            <date>2011-09-30 23:11:41 -0700</date>
            <delta_ts>2011-10-01 03:26:41 -0700</delta_ts>
            <desc>the patch - attempt to fix windows</desc>
            <filename>heuristics_patch_3.diff</filename>
            <type>text/plain</type>
            <size>26520</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY0NTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAK
KzIwMTEtMDktMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBB
bGwgb2YgSlNDJ3MgaGV1cmlzdGljcyBzaG91bGQgYmUgaW4gb25lIHBsYWNlIGZvciBlYXNpZXIg
dHVuaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
OTIwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjaGFuZ2UgdGllcmVkIGNvbXBpbGF0aW9u
IGhldXJpc3RpY3MgaW4KKyAgICAgICAgb25lIHBsYWNlIChIZXVyaXN0aWNzLmNwcCkgd2l0aG91
dCByZWNvbXBpbGluZyB0aGUgd2hvbGUgcHJvamVjdC4KKyAgICAgICAgCisgICAgICAgIEl0IGFs
c28gbWFrZXMgaXQgcG9zc2libGUgdG8gZW5hYmxlIHNldHRpbmcgaGV1cmlzdGljcyB1c2luZwor
ICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuIFdo
ZW4gdHVybmVkIG9uLCBpdAorICAgICAgICBtYWtlcyB0dW5pbmcgdGhlIHN5c3RlbSBtdWNoIGVh
c2llci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxl
Lmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUucHJvOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBp
bGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0T3B0aW1pemF0aW9uQ2hlY2spOgorICAgICAgICAqIHJ1bnRp
bWUvSGV1cmlzdGljcy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpIZXVyaXN0aWNzOjpwYXJz
ZSk6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OnNldEhldXJpc3RpYyk6CisgICAgICAgIChK
U0M6OkhldXJpc3RpY3M6OmluaXRpYWxpemVIZXVyaXN0aWNzKToKKyAgICAgICAgKiBydW50aW1l
L0hldXJpc3RpY3MuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorCiAyMDEx
LTA5LTMwICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBBdHRl
bXB0IHRvIGZpeCB0aGUgQXBwbGUgV2luZG93cyBhbmQgV2luQ2Fpcm8gRGVidWcgYnVpbGRzIGFm
dGVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NjQ0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDYgKzExNCw3IEBAIFNFVChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVu
dGltZS9GdW5jdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFj
ay5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKKyAgICBydW50aW1lL0hldXJpc3Rp
Y3MuY3BwCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmNwcAogICAgIHJ1bnRpbWUvSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gOTY0NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBj
b3B5KQpAQCAtMzI5LDYgKzMyOSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dDQWN0aXZpdHlDYWxsYmFjay5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9HZXR0ZXJTZXR0ZXIuaCBcCisJU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hldXJpc3RpY3MuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRp
Zmllci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJvCShyZXZpc2lv
biA5NjQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTE0NCw2ICsxNDQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBydW50aW1l
L0Z1bmN0aW9uUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwIFwKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAgXAorICAgIHJ1bnRpbWUvSGV1cmlz
dGljcy5jcHAgXAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAgXAogICAgIHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgXAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDk2NDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2oJKHdvcmtpbmcgY29weSkKQEAgLTczNCw2ICs3MzQsMTQgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+
CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxIZXVyaXN0aWNzLmNw
cCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5c
cnVudGltZVxIZXVyaXN0aWNzLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSWRlbnRpZmllci5jcHAiCiAJCQkJPgogCQkJPC9G
aWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk2NDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDggQEAKIAkJMEZEODJGMkIxNDI2
Q0E2RDAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkYyOTE0MjZDQTVBMDAxNzlDOTQgLyog
SmV0dGlzb25lZENvZGVCbG9ja3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkQ4MkYyQzE0MjZDQTc0MDAxNzlDOTQgLyogSmV0dGlzb25lZENv
ZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEODJGMjgxNDI2Q0E1QTAwMTc5Qzk0IC8qIEpldHRpc29uZWRDb2RlQmxvY2tzLmNwcCAq
LzsgfTsKIAkJMEZEODJGNEIxNDI4MDZBMTAwMTc5Qzk0IC8qIEJpdFZlY3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJGNDkxNDI4MDY5MjAw
MTc5Qzk0IC8qIEJpdFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQjE0
MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBIZXVy
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCAqLzsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtODM2LDYgKzgzOCw4IEBACiAJCTBG
RDgyRjI4MTQyNkNBNUEwMDE3OUM5NCAvKiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRjI5MTQyNkNBNUEwMDE3OUM5NCAv
KiBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKZXR0aXNvbmVkQ29kZUJsb2Nrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQ4MkY0OTE0MjgwNjkyMDAxNzlDOTQgLyogQml0VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEJpdFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZXVyaXN0aWNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGV1cmlzdGljcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9T
QWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
T1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQx
N0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIwMzEsNiArMjAzNSw4IEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBy
dW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkw
RkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgKi8sCisJCQkJMEZFMjI4
RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIEhldXJpc3RpY3MuaCAqLywKIAkJCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLywKIAkJCQkwRjc3MDA4RTE0MDJG
REQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8sCiAJCQkJQkNGNjA1MTEwRTIwM0VG
ODAwQjlBNjREIC8qIEFyZ0xpc3QuY3BwICovLApAQCAtMjg1OCw2ICsyODY0LDcgQEAKIAkJCQlB
NzUyMUUxMzE0MjkxNjlBMDAzQzhEMEMgLyogQ2FyZFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZENTJBQUUxNDMwMzVBMDAwMjZEQzlGIC8qIFVuaW9uRmluZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY4ODBGMUUxNDMyOEJCOTAwQjA4RDQyIC8qIERGR0pJVENvbXBpbGVySW5saW5lTWV0aG9k
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIEhldXJp
c3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzM4OCw2ICszMzk1LDcgQEAKIAkJCQk4Njg4MEYx
RjE0MzI4QkI5MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4Njg4MEY0NDE0MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRv
cjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBE
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTIyOEVFMTQzNkFC
MkMwMDE5NkM0OCAvKiBIZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDk2NDQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NzIsNyArMTk3Miw3IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiAgICAgZHVtcFZhbHVlUHJvZmlsZXMoKTsKICNlbmRpZgogCi0gICAgaWYgKG1f
b3B0aW1pemF0aW9uRGVsYXlDb3VudGVyID49IDUpCisgICAgaWYgKG1fb3B0aW1pemF0aW9uRGVs
YXlDb3VudGVyID49IEhldXJpc3RpY3M6Om1heGltdW1PcHRpbWl6YXRpb25EZWxheSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZOb25Bcmd1bWVudFZh
bHVlUHJvZmlsZXMgPSAwOwpAQCAtMTk5OCw4ICsxOTk4LDggQEAgYm9vbCBDb2RlQmxvY2s6OnNo
b3VsZE9wdGltaXplTm93KCkKICAgICBwcmludGYoIlByb2ZpbGUgaG90bmVzczogJWxmLCAlbGZc
biIsIChkb3VibGUpbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzIC8gbnVtYmVy
T2ZOb25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIChkb3VibGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9m
aWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2Zp
bGVzKCkpOwogI2VuZGlmCiAKLSAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9m
aWxlcyB8fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51
bWJlck9mTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IDAuNzUpCi0gICAgICAgICYmICghbnVt
YmVyT2ZWYWx1ZVByb2ZpbGVzKCkgfHwgKGRvdWJsZSludW1iZXJPZlNhbXBsZXNJblByb2ZpbGVz
IC8gVmFsdWVQcm9maWxlOjpudW1iZXJPZkJ1Y2tldHMgLyBudW1iZXJPZlZhbHVlUHJvZmlsZXMo
KSA+PSAwLjI1KSkKKyAgICBpZiAoKCFudW1iZXJPZk5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyB8
fCAoZG91YmxlKW51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyAvIG51bWJlck9m
Tm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID49IEhldXJpc3RpY3M6OmRlc2lyZWRQcm9maWxlTGl2
ZW5lc3NSYXRlKQorICAgICAgICAmJiAoIW51bWJlck9mVmFsdWVQcm9maWxlcygpIHx8IChkb3Vi
bGUpbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyAvIFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNr
ZXRzIC8gbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgPj0gSGV1cmlzdGljczo6ZGVzaXJlZFByb2Zp
bGVGdWxsbmVzc1JhdGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBtX29wdGlt
aXphdGlvbkRlbGF5Q291bnRlcisrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTY0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5Lmgi
CiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgorI2luY2x1ZGUgIkhldXJpc3RpY3MuaCIKICNp
bmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJK
SVRXcml0ZUJhcnJpZXIuaCIKQEAgLTcxOCwzMiArNzE5LDI1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyB0byBhdm9pZCB0aHJhc2hpbmcuCiAgICAgICAgIHVuc2lnbmVkIHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJU
KG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gMTgpOworICAgICAgICAgICAgQVNTRVJU
KG1fcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIgPD0gSGV1cmlzdGljczo6cmVvcHRpbWl6YXRp
b25SZXRyeUNvdW50ZXJNYXgpOwogICAgICAgICAgICAgcmV0dXJuIG1fcmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgY291bnRSZW9w
dGltaXphdGlvbigpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVvcHRpbWl6YXRpb25SZXRy
eUNvdW50ZXIrKzsKLSAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID4gMTgpCi0gICAgICAgICAgICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IDE4
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHBy
b3ZpZGVkIHRvIHN1cHBvcnQgY2FsbGluZwotICAgICAgICAvLyBvcHRpbWl6ZVhZWigpIG1ldGhv
ZHMgZnJvbSBKSVQtZ2VuZXJhdGVkIGNvZGUuCi0gICAgICAgIHN0YXRpYyBpbnQzMl90IGNvdW50
ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb24oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChtX3Jlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVy
ID4gSGV1cmlzdGljczo6cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgpCisgICAgICAgICAg
ICAgICAgbV9yZW9wdGltaXphdGlvblJldHJ5Q291bnRlciA9IEhldXJpc3RpY3M6OnJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyTWF4OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpbnQz
Ml90IGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKQogICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gLTEwMDAgPDwgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRp
bWl6ZUFmdGVyV2FybVVwIDw8IHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGludDMyX3QgY291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRl
ckxvbmdXYXJtVXAoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gLTUwMDAgPDwgcmVv
cHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsKKyAgICAgICAgICAgIHJldHVybiBIZXVyaXN0aWNz
OjpleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCA8PCByZW9w
dGltaXphdGlvblJldHJ5Q291bnRlcigpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
bnQzMl90KiBhZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpCkBAIC03NjIsNyArNzU2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGV4cGVuc2l2ZSB0aGFuIGV4ZWN1dGluZyBiYXNlbGlu
ZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplTmV4dEludm9jYXRpb24oKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gY291bnRlclZhbHVlRm9yT3B0aW1pemVO
ZXh0SW52b2NhdGlvbigpOworICAgICAgICAgICAgbV9leGVjdXRlQ291bnRlciA9IEhldXJpc3Rp
Y3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4dEludm9jYXRpb247CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIENhbGwgdGhpcyB0byBwcmV2ZW50IG9wdGltaXph
dGlvbiBmcm9tIGhhcHBlbmluZyBhZ2Fpbi4gTm90ZSB0aGF0CkBAIC03NzIsNyArNzY2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIHRoZSBmdXR1cmUgYXMgd2VsbC4KICAgICAgICAg
dm9pZCBkb250T3B0aW1pemVBbnl0aW1lU29vbigpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1f
ZXhlY3V0ZUNvdW50ZXIgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKTsKKyAg
ICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSBIZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVy
VmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gQ2FsbCB0aGlzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgY291bnRlciB0byBpdHMgc3Rh
cnRpbmcgc3RhdGUsCkBAIC04MTMsNyArODA3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIGluIHRoZSBiYXNlbGluZSBjb2RlLgogICAgICAgICB2b2lkIG9wdGltaXplU29vbigpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG1fZXhlY3V0ZUNvdW50ZXIgPSAtMTAwIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7CisgICAgICAgICAgICBtX2V4ZWN1dGVDb3VudGVyID0gSGV1
cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uIDw8IHJlb3B0aW1p
emF0aW9uUmV0cnlDb3VudGVyKCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIFRo
ZSBzcGVjdWxhdGl2ZSBKSVQgdHJhY2tzIGl0cyBzdWNjZXNzIHJhdGUsIHNvIHRoYXQgd2UgY2Fu
CkBAIC04NDUsMjUgKzgzOSwxOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3NwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIpOyB9CiAg
ICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9zcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKTsgfQogICAgICAgICAKLSAgICAgICAgLy8gVGhlIGFtb3VudCBieSB3aGljaCB0aGUgSklU
IHdpbGwgaW5jcmVtZW50IG1fZXhlY3V0ZUNvdW50ZXIuCi0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvckxvb3AoKSB7IHJldHVybiAxOyB9Ci0gICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBleGVjdXRlQ291bnRlckluY3JlbWVudEZvclJldHVybigpIHsgcmV0
dXJuIDE1OyB9Ci0KLSAgICAgICAgLy8gVGhlIHN1Y2Nlc3MvZmFpbHVyZSByYXRpbyB3ZSB3YW50
LgotICAgICAgICB1bnNpZ25lZCBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpIHsgcmV0dXJuIDY7
IH0KLSAgICAgICAgCiAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgZmFpbHVyZXMgdGhhdCB0cmln
Z2VycyB0aGUgdXNlIG9mIHRoZSByYXRpby4KLSAgICAgICAgdW5zaWduZWQgbGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGQoKSB7IHJldHVybiAyMCA8PCBhbHRlcm5hdGl2ZSgpLT5yZW9wdGltaXphdGlv
blJldHJ5Q291bnRlcigpOyB9Ci0gICAgICAgIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNo
b2xkRm9yTG9vcCgpIHsgcmV0dXJuIDEgPDwgYWx0ZXJuYXRpdmUoKS0+cmVvcHRpbWl6YXRpb25S
ZXRyeUNvdW50ZXIoKTsgfQorICAgICAgICB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9s
ZCgpIHsgcmV0dXJuIEhldXJpc3RpY3M6OmxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZSA8PCBh
bHRlcm5hdGl2ZSgpLT5yZW9wdGltaXphdGlvblJldHJ5Q291bnRlcigpOyB9CisgICAgICAgIHVu
c2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkRm9yTG9vcCgpIHsgcmV0dXJuIEhldXJpc3Rp
Y3M6OmxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3AgPDwgYWx0ZXJuYXRpdmUoKS0+
cmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXIoKTsgfQogICAgICAgICAKICAgICAgICAgYm9vbCBz
aG91bGRSZW9wdGltaXplTm93KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGRlc2ly
ZWRTdWNjZXNzRmFpbFJhdGlvKCkgKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPj0gc3BlY3Vs
YXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBsYXJn
ZUZhaWxDb3VudFRocmVzaG9sZCgpOworICAgICAgICAgICAgcmV0dXJuIEhldXJpc3RpY3M6OmRl
c2lyZWRTcGVjdWxhdGl2ZVN1Y2Nlc3NGYWlsUmF0aW8gKiBzcGVjdWxhdGl2ZUZhaWxDb3VudGVy
KCkgPj0gc3BlY3VsYXRpdmVTdWNjZXNzQ291bnRlcigpICYmIHNwZWN1bGF0aXZlRmFpbENvdW50
ZXIoKSA+PSBsYXJnZUZhaWxDb3VudFRocmVzaG9sZCgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBib29sIHNob3VsZFJlb3B0aW1pemVGcm9tTG9vcE5vdygpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBkZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpICogc3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpID49IHNwZWN1bGF0aXZlU3VjY2Vzc0NvdW50ZXIoKSAmJiBzcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkgPj0gbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRGb3JMb29wKCk7CisgICAg
ICAgICAgICByZXR1cm4gSGV1cmlzdGljczo6ZGVzaXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxS
YXRpbyAqIHNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA+PSBzcGVjdWxhdGl2ZVN1Y2Nlc3NDb3Vu
dGVyKCkgJiYgc3BlY3VsYXRpdmVGYWlsQ291bnRlcigpID49IGxhcmdlRmFpbENvdW50VGhyZXNo
b2xkRm9yTG9vcCgpOwogICAgICAgICB9CiAgICAgICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiA5NjQ0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTEsMTIgKzQ1MSwxMiBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAg
IEp1bXAgZmV3RmFpbHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIEdQUkluZm86OnJlZ1QyLCBJ
bW0zMihjb2RlQmxvY2soKS0+bGFyZ2VGYWlsQ291bnRUaHJlc2hvbGQoKSkpOwotICAgIG11bDMy
KEltbTMyKGNvZGVCbG9jaygpLT5kZXNpcmVkU3VjY2Vzc0ZhaWxSYXRpbygpKSwgR1BSSW5mbzo6
cmVnVDIsIEdQUkluZm86OnJlZ1QyKTsKKyAgICBtdWwzMihJbW0zMihIZXVyaXN0aWNzOjpkZXNp
cmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlvKSwgR1BSSW5mbzo6cmVnVDIsIEdQUkluZm86
OnJlZ1QyKTsKICAgICAKICAgICBKdW1wIGxvd0ZhaWxSYXRlID0gYnJhbmNoMzIoQmVsb3dPckVx
dWFsLCBHUFJJbmZvOjpyZWdUMiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIAogICAgIC8vIFJlb3B0
aW1pemUgYXMgc29vbiBhcyBwb3NzaWJsZS4KLSAgICBzdG9yZTMyKEltbTMyKENvZGVCbG9jazo6
Y291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbigpKSwgQWRkcmVzcyhHUFJJbmZv
OjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBzdG9y
ZTMyKEltbTMyKEhldXJpc3RpY3M6OmV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplTmV4
dEludm9jYXRpb24pLCBBZGRyZXNzKEdQUkluZm86OnJlZ1QwLCBDb2RlQmxvY2s6Om9mZnNldE9m
RXhlY3V0ZUNvdW50ZXIoKSkpOwogICAgIEp1bXAgZG9uZUFkanVzdGluZyA9IGp1bXAoKTsKICAg
ICAKICAgICBmZXdGYWlscy5saW5rKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gOTY0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBKSVQ6OmVtaXRPcHRpbWl6
YXRpb25DaGVjayhPcHRpbWl6YQogICAgIGlmICghc2hvdWxkRW1pdFByb2ZpbGluZygpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgSnVtcCBza2lwT3B0aW1pemUgPSBicmFuY2hBZGQzMihT
aWduZWQsIFRydXN0ZWRJbW0zMihraW5kID09IExvb3BPcHRpbWl6YXRpb25DaGVjayA/IENvZGVC
bG9jazo6ZXhlY3V0ZUNvdW50ZXJJbmNyZW1lbnRGb3JMb29wKCkgOiBDb2RlQmxvY2s6OmV4ZWN1
dGVDb3VudGVySW5jcmVtZW50Rm9yUmV0dXJuKCkpLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmFkZHJlc3NPZkV4ZWN1dGVDb3VudGVyKCkpKTsKKyAgICBKdW1wIHNraXBPcHRpbWl6ZSA9
IGJyYW5jaEFkZDMyKFNpZ25lZCwgVHJ1c3RlZEltbTMyKGtpbmQgPT0gTG9vcE9wdGltaXphdGlv
bkNoZWNrID8gSGV1cmlzdGljczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AgOiBI
ZXVyaXN0aWNzOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuKSwgQWJzb2x1dGVB
ZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRyZXNzT2ZFeGVjdXRlQ291bnRlcigpKSk7CiAgICAgSklU
U3R1YkNhbGwgc3R1YkNhbGwodGhpcywga2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2sgPyBj
dGlfb3B0aW1pemVfZnJvbV9sb29wIDogY3RpX29wdGltaXplX2Zyb21fcmV0KTsKICAgICBpZiAo
a2luZCA9PSBMb29wT3B0aW1pemF0aW9uQ2hlY2spCiAgICAgICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbTMyKG1fYnl0ZWNvZGVPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIZXVyaXN0aWNzLmgiCisKKyNpbmNsdWRlIDxs
aW1pdHM+CisKKy8vIFNldCB0byAxIHRvIGNvbnRyb2wgdGhlIGhldXJpc3RpY3MgdXNpbmcgZW52
aXJvbm1lbnQgdmFyaWFibGVzLgorI2RlZmluZSBFTkFCTEVfUlVOX1RJTUVfSEVVUklTVElDUyAw
CisKKyNpZiBFTkFCTEUoUlVOX1RJTUVfSEVVUklTVElDUykKKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNlbmRp
ZgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEhldXJpc3RpY3MgeworCitpbnQzMl90IGV4
ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXA7CitpbnQzMl90IGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwOworaW50MzJfdCBleGVj
dXRpb25Db3VudGVyVmFsdWVGb3JEb250T3B0aW1pemVBbnl0aW1lU29vbjsKK2ludDMyX3QgZXhl
Y3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVTb29uOworaW50MzJfdCBleGVjdXRpb25Db3Vu
dGVyVmFsdWVGb3JPcHRpbWl6ZU5leHRJbnZvY2F0aW9uOworCitpbnQzMl90IGV4ZWN1dGlvbkNv
dW50ZXJJbmNyZW1lbnRGb3JMb29wOworaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5jcmVtZW50
Rm9yUmV0dXJuOworCit1bnNpZ25lZCBkZXNpcmVkU3BlY3VsYXRpdmVTdWNjZXNzRmFpbFJhdGlv
OworCit1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7Cit1bnNpZ25lZCBsYXJn
ZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOworCit1bnNpZ25lZCByZW9wdGltaXphdGlv
blJldHJ5Q291bnRlck1heDsKK3Vuc2lnbmVkIHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyU3Rl
cDsKKwordW5zaWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5OworZG91YmxlIGRlc2lyZWRQ
cm9maWxlTGl2ZW5lc3NSYXRlOworZG91YmxlIGRlc2lyZWRQcm9maWxlRnVsbG5lc3NSYXRlOwor
CisjaWYgRU5BQkxFKFJVTl9USU1FX0hFVVJJU1RJQ1MpCitzdGF0aWMgYm9vbCBwYXJzZShjb25z
dCBjaGFyKiBzdHJpbmcsIGludDMyX3QmIHZhbHVlKQoreworICAgIHJldHVybiBzc2NhbmYoc3Ry
aW5nLCAiJWQiLCAmdmFsdWUpID09IDE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNo
YXIqIHN0cmluZywgdW5zaWduZWQmIHZhbHVlKQoreworICAgIHJldHVybiBzc2NhbmYoc3RyaW5n
LCAiJXUiLCAmdmFsdWUpID09IDE7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IGNoYXIq
IHN0cmluZywgZG91YmxlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gc3NjYW5mKHN0cmluZywgIiVs
ZiIsICZ2YWx1ZSkgPT0gMTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4K
K3ZvaWQgc2V0SGV1cmlzdGljKFQmIHZhcmlhYmxlLCBjb25zdCBjaGFyKiBuYW1lLCBVIHZhbHVl
KQoreworICAgIGNvbnN0IGNoYXIqIHN0cmluZ1ZhbHVlID0gZ2V0ZW52KG5hbWUpOworICAgIGlm
ICghc3RyaW5nVmFsdWUpIHsKKyAgICAgICAgdmFyaWFibGUgPSBzYWZlQ2FzdDxUPih2YWx1ZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHBhcnNlKHN0cmluZ1ZhbHVl
LCB2YXJpYWJsZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmcHJpbnRmKHN0ZGVyciwg
IldBUk5JTkc6IGZhaWxlZCB0byBwYXJzZSAlcz0lc1xuIiwgbmFtZSwgc3RyaW5nVmFsdWUpOwor
ICAgIHZhcmlhYmxlID0gc2FmZUNhc3Q8VD4odmFsdWUpOworfQorCisjZGVmaW5lIFNFVCh2YXJp
YWJsZSwgdmFsdWUpIHNldEhldXJpc3RpYyh2YXJpYWJsZSwgIkpTQ18iICN2YXJpYWJsZSwgdmFs
dWUpCisjZWxzZQorI2RlZmluZSBTRVQodmFyaWFibGUsIHZhbHVlKSB2YXJpYWJsZSA9IHZhbHVl
CisjZW5kaWYKKwordm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCit7CisgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAsICAgICAtMTAwMCk7CisgICAg
U0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwLCAtNTAw
MCk7CisgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVT
b29uLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptaW4oKSk7CisgICAgU0VUKGV4ZWN1
dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplU29vbiwgICAgICAgICAgICAtMTAwKTsKKyAgICBT
RVQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbiwgIDApOwor
CisgICAgU0VUKGV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRGb3JMb29wLCAgIDEpOworICAgIFNF
VChleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yUmV0dXJuLCAxNSk7CisKKyAgICBTRVQoZGVz
aXJlZFNwZWN1bGF0aXZlU3VjY2Vzc0ZhaWxSYXRpbywgNik7CisKKyAgICBTRVQobGFyZ2VGYWls
Q291bnRUaHJlc2hvbGRCYXNlLCAgICAgICAgMjApOworICAgIFNFVChsYXJnZUZhaWxDb3VudFRo
cmVzaG9sZEJhc2VGb3JMb29wLCAxKTsKKworICAgIFNFVChyZW9wdGltaXphdGlvblJldHJ5Q291
bnRlclN0ZXAsIDEpOworCisgICAgU0VUKG1heGltdW1PcHRpbWl6YXRpb25EZWxheSwgICA1KTsK
KyAgICBTRVQoZGVzaXJlZFByb2ZpbGVMaXZlbmVzc1JhdGUsIDAuNzUpOworICAgIFNFVChkZXNp
cmVkUHJvZmlsZUZ1bGxuZXNzUmF0ZSwgMC4yNSk7CisgICAgCisgICAgQVNTRVJUKGV4ZWN1dGlv
bkNvdW50ZXJWYWx1ZUZvckRvbnRPcHRpbWl6ZUFueXRpbWVTb29uIDw9IGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJMb25nV2FybVVwKTsKKyAgICBBU1NFUlQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAgPD0gZXhlY3V0aW9uQ291bnRl
clZhbHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCk7CisgICAgQVNTRVJUKGV4ZWN1dGlvbkNvdW50
ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAgPD0gZXhlY3V0aW9uQ291bnRlclZhbHVlRm9y
T3B0aW1pemVTb29uKTsKKyAgICBBU1NFUlQoZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1p
emVBZnRlcldhcm1VcCA8IDApOworICAgIEFTU0VSVChleGVjdXRpb25Db3VudGVyVmFsdWVGb3JP
cHRpbWl6ZVNvb24gPD0gZXhlY3V0aW9uQ291bnRlclZhbHVlRm9yT3B0aW1pemVOZXh0SW52b2Nh
dGlvbik7CisgICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgcmVv
cHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBzaW1wbHkKKyAgICAvLyB0aGUgbGFy
Z2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUgZXhlY3V0ZSBjb3VudGVy
LCB3aGVuIHVzaW5nIGl0CisgICAgLy8gdG8gbGVmdC1zaGlmdCB0aGUgZXhlY3V0aW9uIGNvdW50
ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFsdWUgZW5kcworICAgIC8vIHVwIGJl
aW5nIDE4LCBzbyB0aGlzIGxvb3AgaXMgbm90IHNvIHRlcnJpYmxlOyBpdCBwcm9iYWJseSB0YWtl
cyB1cCB+MTAwIGN5Y2xlcworICAgIC8vIHRvdGFsIG9uIGEgMzItYml0IHByb2Nlc3Nvci4KKyAg
ICByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCA9IDA7CisgICAgd2hpbGUgKChzdGF0aWNf
Y2FzdDxpbnQ2NF90PihleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dh
cm1VcCkgPDwgKHJlb3B0aW1pemF0aW9uUmV0cnlDb3VudGVyTWF4ICsgMSkpID49IHN0YXRpY19j
YXN0PGludDY0X3Q+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpKSkKKyAgICAg
ICAgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXgrKzsKKyAgICAKKyAgICBBU1NFUlQoKHN0
YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJM
b25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPCAwKTsKKyAgICBB
U1NFUlQoKHN0YXRpY19jYXN0PGludDY0X3Q+KGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJMb25nV2FybVVwKSA8PCByZW9wdGltaXphdGlvblJldHJ5Q291bnRlck1heCkgPj0g
c3RhdGljX2Nhc3Q8aW50NjRfdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkhldXJpc3RpY3MKKworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgSGV1cmlzdGljc19oCisjZGVmaW5lIEhldXJpc3RpY3NfaAorCisjaW5j
bHVkZSA8c3RkaW50Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgSGV1cmlzdGljcyB7
CisKK2V4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJX
YXJtVXA7CitleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyTG9uZ1dhcm1VcDsKK2V4dGVybiBpbnQzMl90IGV4ZWN1dGlvbkNvdW50ZXJWYWx1ZUZvckRv
bnRPcHRpbWl6ZUFueXRpbWVTb29uOworZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yT3B0aW1pemVTb29uOworZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291bnRlclZhbHVl
Rm9yT3B0aW1pemVOZXh0SW52b2NhdGlvbjsKKworZXh0ZXJuIGludDMyX3QgZXhlY3V0aW9uQ291
bnRlckluY3JlbWVudEZvckxvb3A7CitleHRlcm4gaW50MzJfdCBleGVjdXRpb25Db3VudGVySW5j
cmVtZW50Rm9yUmV0dXJuOworCitleHRlcm4gdW5zaWduZWQgZGVzaXJlZFNwZWN1bGF0aXZlU3Vj
Y2Vzc0ZhaWxSYXRpbzsKKworZXh0ZXJuIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xk
QmFzZTsKK2V4dGVybiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29w
OworCitleHRlcm4gdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJNYXg7CitleHRl
cm4gdW5zaWduZWQgcmVvcHRpbWl6YXRpb25SZXRyeUNvdW50ZXJTdGVwOworCitleHRlcm4gdW5z
aWduZWQgbWF4aW11bU9wdGltaXphdGlvbkRlbGF5OworZXh0ZXJuIGRvdWJsZSBkZXNpcmVkUHJv
ZmlsZUxpdmVuZXNzUmF0ZTsKK2V4dGVybiBkb3VibGUgZGVzaXJlZFByb2ZpbGVGdWxsbmVzc1Jh
dGU7CisKK3ZvaWQgaW5pdGlhbGl6ZUhldXJpc3RpY3MoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkhldXJpc3RpY3MKKworI2VuZGlmIC8vIEhldXJpc3RpY3NfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkocmV2aXNpb24gOTY0NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogCiAj
aW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNs
dWRlICJIZXVyaXN0aWNzLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpT
R2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgpAQCAtNTIsNiArNTMsNyBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nT25jZSgpCiB7CiAgICAgV1RGOjpkb3VibGVf
Y29udmVyc2lvbjo6aW5pdGlhbGl6ZSgpOwogICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OworICAgIEhldXJpc3RpY3M6OmluaXRpYWxpemVIZXVyaXN0aWNzKCk7CiAjaWYgRU5BQkxFKFdS
SVRFX0JBUlJJRVJfUFJPRklMSU5HKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjppbml0aWFs
aXplKCk7CiAjZW5kaWYK
</data>
<flag name="review"
          id="106634"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>