<?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>70675</bug_id>
          
          <creation_ts>2011-10-22 03:44:15 -0700</creation_ts>
          <short_desc>DFG should inline constructors</short_desc>
          <delta_ts>2011-10-23 20:57:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>oliver</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>488912</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-22 03:44:15 -0700</bug_when>
    <thetext>patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488916</commentid>
    <comment_count>1</comment_count>
      <attachid>112084</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-22 03:54:59 -0700</bug_when>
    <thetext>Created attachment 112084
the patch

4% speed-up according to V8 harness:


[pizlo@minime benchmarks] /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc run.js 
Richards: 8780
DeltaBlue: 6195
Crypto: 15235
RayTrace: 8287
EarleyBoyer: 10410
RegExp: 2151
Splay: 6976
----
Score (version 6): 7269
[pizlo@minime benchmarks] /Volumes/Data/pizlo/septenary/OpenSource/WebKitBuild/Release/jsc run.js 
Richards: 10047
DeltaBlue: 6519
Crypto: 15977
RayTrace: 8753
EarleyBoyer: 10705
RegExp: 2181
Splay: 6675
----
Score (version 6): 7572
[pizlo@minime benchmarks] irb
&gt;&gt; 7572/7269.0
=&gt; 1.04168386297978


1% speed-up on V8 on my harness, neutral on other benchmarks:


Benchmark report for SunSpider, V8, and Kraken.

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

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime()
function to get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in
milliseconds.

                                            TipOfTree               ConsInline                                   
SunSpider:
   3d-cube                                7.2502+-0.1566    ?     7.4241+-0.4383       ? might be 1.0240x slower
   3d-morph                               7.5676+-0.0866    ?     8.4787+-0.9762       ? might be 1.1204x slower
   3d-raytrace                            7.5516+-0.2596          7.4375+-0.1591         might be 1.0153x faster
   access-binary-trees                    1.7166+-0.0328    ^     1.6273+-0.0497       ^ definitely 1.0548x faster
   access-fannkuch                        6.3365+-0.0832    ?     6.3654+-0.1030       ?
   access-nbody                           3.5732+-0.0582    !     3.7319+-0.0873       ! definitely 1.0444x slower
   access-nsieve                          2.5630+-0.0862    ?     2.6547+-0.0490       ? might be 1.0358x slower
   bitops-3bit-bits-in-byte               1.2803+-0.0286    ?     1.2819+-0.0207       ?
   bitops-bits-in-byte                    2.3518+-0.0529    ?     2.4004+-0.0596       ? might be 1.0207x slower
   bitops-bitwise-and                     3.2922+-0.1064    ?     3.3937+-0.1164       ? might be 1.0308x slower
   bitops-nsieve-bits                     5.3601+-0.1407          5.2309+-0.0517         might be 1.0247x faster
   controlflow-recursive                  2.0984+-0.0529    ?     2.1200+-0.0335       ? might be 1.0103x slower
   crypto-aes                             7.3575+-0.2023    ?     7.3963+-0.2192       ?
   crypto-md5                             2.7472+-0.0559          2.7357+-0.0696       
   crypto-sha1                            2.4900+-0.0766    ?     2.4985+-0.0680       ?
   date-format-tofte                      9.8812+-0.2257    ?     9.8824+-0.2363       ?
   date-format-xparb                      9.5621+-0.1806    ^     8.7831+-0.1166       ^ definitely 1.0887x faster
   math-cordic                            6.5373+-0.1107          6.4235+-0.1160         might be 1.0177x faster
   math-partial-sums                      7.5956+-0.1112    ?     7.6460+-0.1109       ?
   math-spectral-norm                     2.5853+-0.0535    ?     2.6329+-0.0769       ? might be 1.0184x slower
   regexp-dna                            11.4690+-0.1394         11.4664+-0.1727       
   string-base64                          4.3160+-0.1102    ?     4.3448+-0.0889       ?
   string-fasta                           6.2094+-0.0823    ?     6.2978+-0.0990       ? might be 1.0142x slower
   string-tagcloud                       11.3336+-0.1578    ?    11.5913+-0.2544       ? might be 1.0227x slower
   string-unpack-code                    20.3200+-0.1921         20.1866+-0.2716       
   string-validate-input                  5.1760+-0.1041    ?     5.1819+-0.1007       ?

   &lt;arithmetic&gt; *                         6.0970+-0.0179    ?     6.1236+-0.0458       ?
   &lt;geometric&gt;                            4.9267+-0.0190    ?     4.9532+-0.0305       ?
   &lt;harmonic&gt;                             3.9497+-0.0254    ?     3.9661+-0.0276       ?

                                            TipOfTree               ConsInline                                   
V8:
   crypto                                73.9880+-0.2918         73.7529+-0.5499       
   deltablue                            173.8198+-1.3253    !   179.6263+-2.7360       ! definitely 1.0334x slower
   earley-boyer                          93.0532+-1.8014         91.2528+-0.7812         might be 1.0197x faster
   raytrace                              61.3150+-0.5954    !    62.7879+-0.5693       ! definitely 1.0240x slower
   regexp                               104.4297+-0.5066        103.7345+-0.3769       
   richards                             142.0401+-0.5765    ^   127.8421+-0.5193       ^ definitely 1.1111x faster
   splay                                 93.9640+-0.6277    ?    94.5348+-0.4781       ?

   &lt;arithmetic&gt;                         106.0871+-0.4671    ^   104.7902+-0.4849       ^ definitely 1.0124x faster
   &lt;geometric&gt; *                        100.3137+-0.4654    ^    99.2872+-0.3231       ^ definitely 1.0103x faster
   &lt;harmonic&gt;                            95.1158+-0.4689         94.5168+-0.2367       

                                            TipOfTree               ConsInline                                   
Kraken:
   ai-astar                             497.7574+-3.5969    ?   498.2722+-3.0312       ?
   audio-beat-detection                 191.8794+-0.5609        191.1399+-1.0241       
   audio-dft                            266.4364+-1.5335    ?   266.9498+-1.4698       ?
   audio-fft                            124.2544+-1.3752    ?   125.3001+-1.2179       ?
   audio-oscillator                     253.1079+-1.1617        252.1611+-1.5947       
   imaging-darkroom                     399.4923+-2.0173    ?   401.5801+-3.3485       ?
   imaging-desaturate                   219.5839+-0.7144        218.3193+-0.8419       
   imaging-gaussian-blur                553.5648+-2.3533    ?   555.3602+-2.6159       ?
   json-parse-financial                  58.0299+-0.2573    ?    58.1449+-0.3121       ?
   json-stringify-tinderbox              67.7843+-0.3542    !    69.1365+-0.3027       ! definitely 1.0199x slower
   stanford-crypto-aes                  131.0778+-1.4147    ?   132.4949+-1.5185       ? might be 1.0108x slower
   stanford-crypto-ccm                  103.1864+-0.9377    ^   100.0750+-0.8265       ^ definitely 1.0311x faster
   stanford-crypto-pbkdf2               194.1026+-2.9607    ?   194.6423+-1.1617       ?
   stanford-crypto-sha256-iterative      71.1651+-0.2844    ?    71.2943+-0.2904       ?

   &lt;arithmetic&gt; *                       223.6730+-0.2954    ?   223.9193+-0.4074       ?
   &lt;geometric&gt;                          176.5280+-0.2268    ?   176.6925+-0.2631       ?
   &lt;harmonic&gt;                           139.5016+-0.1914    ?   139.7505+-0.1984       ?

                                            TipOfTree               ConsInline                                   
All benchmarks:
   &lt;arithmetic&gt;                          85.7990+-0.1153         85.6940+-0.1770       
   &lt;geometric&gt;                           22.4107+-0.0641    ?    22.4489+-0.0838       ?
   &lt;harmonic&gt;                             6.9560+-0.0440    ?     6.9838+-0.0474       ?

                                            TipOfTree               ConsInline                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                       51.5260+-0.1013         51.4428+-0.1681</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488918</commentid>
    <comment_count>2</comment_count>
      <attachid>112084</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-10-22 04:09:17 -0700</bug_when>
    <thetext>Comment on attachment 112084
the patch

Attachment 112084 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10202195</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488925</commentid>
    <comment_count>3</comment_count>
      <attachid>112087</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-22 05:13:10 -0700</bug_when>
    <thetext>Created attachment 112087
the patch

All tests pass.  Attempting to fix GTK build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488949</commentid>
    <comment_count>4</comment_count>
      <attachid>112087</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-10-22 11:29:32 -0700</bug_when>
    <thetext>Comment on attachment 112087
the patch

Can you add test cases for the fixed bugs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489120</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-23 20:31:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 112087 [details])
&gt; Can you add test cases for the fixed bugs?

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489126</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-23 20:57:45 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/98214</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112084</attachid>
            <date>2011-10-22 03:54:59 -0700</date>
            <delta_ts>2011-10-22 05:13:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>inlinecons_patch_1.diff</filename>
            <type>text/plain</type>
            <size>26457</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgxOTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAK
KzIwMTEtMTAtMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIGlubGluZSBjb25zdHJ1Y3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIHN1cHBvcnQgZm9yIGlubGluaW5nIGNv
bnN0cnVjdG9ycy4gQWxzbyBmaXhlcyB0d28gcGF0aG9sb2dpZXMKKyAgICAgICAgdW5jb3ZlcmVk
IGFsb25nIHRoZSB3YXk6IENoZWNrTWV0aG9kIGNsYWltZWQgdGhhdCBpdCBuZXZlciByZXR1cm5l
ZCBhCisgICAgICAgIHJlc3VsdCAoY2F1c2luZyBDaGVja01ldGhvZCAtPiBTZXRMb2NhbCAtPiBH
ZXRMb2NhbCBzZXF1ZW5jZXMgdG8KKyAgICAgICAgcmVzdWx0IGluIHRoZSBHZXRMb2NhbCBkb2lu
ZyBPU1IgZXhpdCksIGFuZCBnZXRfYnlfaWQgcGFyc2luZyBuZXZlcgorICAgICAgICBjaGVja2Vk
IGlmIGl0IHdhcyBob3QgaW4gc2xvdyBwYXRoLiBBbHNvIGZpZGRsZWQgd2l0aCBpbmxpbmluZwor
ICAgICAgICBoZXVyaXN0aWNzOyBpdCBhcHBlYXJzIHRoYXQgZm9yIG5vdywgdGhlIG1vcmUgaW5s
aW5pbmcsIHRoZSBoYXBwaWVyCisgICAgICAgIFY4IGlzLiBGaW5hbGx5LCBhIGJ1ZyB3YXMgdW5j
b3ZlcmVkIHdoZXJlIGEgc2lsZW50IHNwaWxsIG9mIGEgYm94ZWQKKyAgICAgICAgaW50ZWdlciB0
aGF0IGhhZCBwcmV2aW91c2x5IGJlZW4gc3BpbGxlZCB1bmJveGVkIGNhdXNlcyB0aGUgc2lsZW50
CisgICAgICAgIGZpbGwgdG8gZm9yZ2V0IHRvIHVuYm94LgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhcHBlYXJzIHRvIGJlIGEgNCUgc3BlZWQtdXAgb24gVjggaW4gdGhlaXIgaGFybmVzcywgb3Ig
YSAxJQorICAgICAgICBzcGVlZC11cCBpbiBteSBoYXJuZXNzLiBUaGUgZGlmZmVyZW5jZSBpcyBk
dWUgdG8gd2FybS11cDogaW4gbXkKKyAgICAgICAgaGFybmVzcyB3ZSBzZWUgc2lnbmlmaWNhbnQg
YW1vdW50cyBvZiB0aW1lIHNwZW50IGluIGNvbXBpbGF0aW9uLCBidXQKKyAgICAgICAgaW4gVjgn
cyBoYXJuZXNzIGNvbXBpbGF0aW9uIGdldHMgYW1vcnRpemVzLiBQcm9maWxpbmcgaW5kaWNhdGVz
IHRoYXQKKyAgICAgICAgd2UgaGF2ZSB0aGUgcG90ZW50aWFsIGZvciBhIDUlIHdpbiBmcm9tIGJh
c2ljIG9wdGltaXphdGlvbnMgbGlrZQorICAgICAgICBnZW5lcmF0aW5nIE9TUiBleGl0cyBsYXpp
bHkgYW5kIGhvbGRpbmcgb250byBieXRlY29kZSBsb25nZXIuCisKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Oklu
bGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgor
ICAgICAgICAoSlNDOjpERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAg
ICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbkZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lRnVuY3Rp
b25Gb3IpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6c2lsZW50RmlsbEdQUik6CisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OmlzQ2FsbCk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjppbnRyaW5zaWNGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlz
dGljcy5jcHA6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OmluaXRpYWxpemVIZXVyaXN0aWNz
KToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuaDoKKwogMjAxMS0xMC0yMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBpbmxpbmluZyBzb21ldGlt
ZXMgZmFpbHMgdG8gcmVzZXQgY29uc3RhbnQgcmVmZXJlbmNlcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiA5ODE4NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMCw2ICs2MDAsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
Tm9kZUluZGV4IG5vCiAgICAgY2FzZSBDaGVja01ldGhvZDoKICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3Rh
bnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRhSW5kZXgo
KV0uc3RydWN0dXJlKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0T2Jq
ZWN0T3RoZXIpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk4MTg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4
LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAgICBib29s
IGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlw
ZSBvcCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCisgICAgLy8gSGFuZGxlIGNh
bGxzLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmlu
c2ljcy4KKyAgICB2b2lkIGhhbmRsZUNhbGwoSW50ZXJwcmV0ZXIqLCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAg
ICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNl
IGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9v
bCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5k
ZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24s
IEpTRnVuY3Rpb24qLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0KTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxU
YXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwg
Ym9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiwgaW50IGZpcnN0
QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlm
IGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9v
bCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50
cmluc2ljLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24pOwogICAgIC8vIFByZXBhcmUgdG8gcGFyc2UgYSBibG9jay4KQEAgLTc5Niw3ICs3OTgsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9jYWxsZXI7
CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29k
ZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxv
Y2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5W
YWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQpOworICAgICAgICBJ
bmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0
ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVnaXN0
ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAg
ICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKQogICAgICAgICB7CkBAIC04MzcsMzEgKzgz
OSw2OSBAQCBwcml2YXRlOgogICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFt
ZSk7IFwKICAgICByZXR1cm4gIW1fcGFyc2VGYWlsZWQKIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBl
IG9wLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0g
ICAgaWYgKCF1c2VzUmVzdWx0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChsYXN0
QXJnID09IGZpcnN0QXJnKSB7Ci0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFudE5h
TigpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgICAKLSAgICBpZiAobGFzdEFy
ZyA9PSBmaXJzdEFyZyArIDEpIHsKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGdldFRvTnVt
YmVyKGZpcnN0QXJnICsgMSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgQVNT
RVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3Qp
KTsKICAgICAKLSAgICBpZiAobGFzdEFyZyA9PSBmaXJzdEFyZyArIDIpIHsKLSAgICAgICAgc2V0
KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgZ2V0
VG9OdW1iZXIoZmlyc3RBcmcgKyAxKSwgZ2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAyKSkpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBlbnVtIHsgQ29uc3RhbnRGdW5jdGlvbiwg
TGlua2VkRnVuY3Rpb24sIFVua25vd25GdW5jdGlvbiB9IGNhbGxUeXBlOworICAgICAgICAgICAg
CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIHByaW50ZigiU2xvdyBjYXNlIGNv
dW50IGZvciBjYWxsIGF0IEAlbHUgYmMjJXU6ICV1LlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3Vy
cmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRp
ZgorICAgICAgICAgICAgCisgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29k
ZUJsb2NrLCBjYWxsVGFyZ2V0KSkKKyAgICAgICAgY2FsbFR5cGUgPSBDb25zdGFudEZ1bmN0aW9u
OworICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRD
YWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4
KSkKKyAgICAgICAgY2FsbFR5cGUgPSBMaW5rZWRGdW5jdGlvbjsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxUeXBlID0gVW5rbm93bkZ1bmN0aW9uOworICAgIGlmIChjYWxsVHlwZSAhPSBVbmtub3du
RnVuY3Rpb24pIHsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQg
LSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAg
aW50IGxhc3RBcmcgPSBmaXJzdEFyZyArIGFyZ0NvdW50IC0gMTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHJlc3VsdD8KKyAgICAgICAgYm9vbCB1c2VzUmVzdWx0
ID0gZmFsc2U7CisgICAgICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21waWxl
ciBoYXBweQorICAgICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBP
UENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rp
b24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgaWYgKGlu
dGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2Nh
bGxfcHV0X3Jlc3VsdCkgeworICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1dEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVzZXNSZXN1bHQgPSB0cnVlOworICAgICAg
ICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG5leHRPZmZz
ZXQpOworICAgICAgICAgICAgbmV4dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0
X3Jlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlv
bjsKKyAgICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOworICAgICAgICBib29sIGNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb247CisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDb25zdGFu
dEZ1bmN0aW9uKSB7CisgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gbV9ncmFwaC52YWx1
ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCk7CisgICAgICAgICAg
ICBpbnRyaW5zaWMgPSBleHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpY0Zv
cihraW5kKTsKKyAgICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSB0cnVl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IExpbmtl
ZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFz
dFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgICAgICBpbnRyaW5zaWMgPSBleHBlY3RlZEZ1bmN0
aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpY0ZvcihraW5kKTsKKyAgICAgICAgICAgIGNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljKSB7CisgICAgICAgICAg
ICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZXhwZWN0ZWRGdW5jdGlvbiksIGNhbGxUYXJn
ZXQpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5z
aWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFy
ZywgcHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2Ug
aWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGNhbGxUYXJnZXQsIHJlc3VsdE9wZXJhbmQsIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVu
Y3Rpb24sIGV4cGVjdGVkRnVuY3Rpb24sIGZpcnN0QXJnLCBsYXN0QXJnLCBuZXh0T2Zmc2V0LCBr
aW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgLy8gRG9uJ3QgaGFu
ZGxlID49MyBhcmd1bWVudHMgZm9yIG5vdy4KLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBp
bnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRP
cGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qIGV4
cGVjdGVkRnVuY3Rpb24sIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVuc2lnbmVkIG5leHRP
ZmZzZXQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1
bHQsIGludCBjYWxsVGFyZ2V0LCBOb2RlSW5kZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJl
c3VsdE9wZXJhbmQsIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlv
biogZXhwZWN0ZWRGdW5jdGlvbiwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQg
bmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIEZpcnN0
LCB0aGUgcmVhbGx5IHNpbXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0
aW9uPwogICAgIGlmICghZXhwZWN0ZWRGdW5jdGlvbikKQEAgLTg5MCw4ICs5MzAsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgCiAgICAgLy8gRG9lcyB0
aGUgY29kZSBibG9jaydzIHNpemUgbWF0Y2ggdGhlIGhldXJpc3RpY3MvcmVxdWlyZW1lbnRzIGZv
ciBiZWluZwogICAgIC8vIGFuIGlubGluZSBjYW5kaWRhdGU/Ci0gICAgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZUZvckNhbGwp
OwotICAgIGlmICghbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwocHJvZmlsZWRCbG9jaykpCisg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxv
Y2tGb3Ioa2luZCk7CisgICAgaWYgKCFtaWdodElubGluZUZ1bmN0aW9uRm9yKHByb2ZpbGVkQmxv
Y2ssIGtpbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gSWYgd2UgZ2V0
IGhlcmUgdGhlbiBpdCBsb29rcyBsaWtlIHdlIHNob3VsZCBkZWZpbml0ZWx5IGlubGluZSB0aGlz
IGNvZGUuIFByb2NlZWQKQEAgLTg5OSwxNCArOTM5LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICAvLyBOb3RlIHRoYXQgdGhlIGNvZGUgYmxvY2sgd2Ug
Z2V0IGhlcmUgaXMgaW50ZW5kZWQgdG8gZGllIGFmdGVyIGhhbmRsZUlubGluaW5nKCkKICAgICAv
LyByZXR1cm5zLgogICAgIEpTT2JqZWN0KiBleGNlcHRpb247Ci0gICAgT3duUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZHVjZUNvZGVCbG9ja0ZvcihleHBlY3RlZEZ1
bmN0aW9uLT5zY29wZSgpLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNl
cHRpb24pOworICAgIE93blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPnBy
b2R1Y2VDb2RlQmxvY2tGb3IoZXhwZWN0ZWRGdW5jdGlvbi0+c2NvcGUoKSwgT3B0aW1pemluZ0Nv
bXBpbGF0aW9uLCBraW5kLCBleGNlcHRpb24pOwogICAgIGlmICghY29kZUJsb2NrKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKCFleGNlcHRpb24pOwogICAgIAogICAgIC8vIE5v
dyB0aGF0IHdlIGhhdmUgdGhlIGJ5dGVjb2RlLCBjaGVjayBpZiB3ZSByZWFsbHkgY2FuIGlubGlu
ZSBpdC4gVGhpcyBtYXkgZmFpbAogICAgIC8vIGlmIHRoZSBjb2RlIGJsb2NrIGNvbnRhaW5zIHNv
bWUgbmFzdHkgb3Bjb2Rlcy4KLSAgICBpZiAoIWNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2Rl
QmxvY2suZ2V0KCkpKQorICAgIGlmICghY2FuSW5saW5lRnVuY3Rpb25Gb3IoY29kZUJsb2NrLmdl
dCgpLCBraW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQpAQCAtOTE5LDYgKzk1OSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKGJvb2wKICAgICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCiAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24p
LCBjYWxsVGFyZ2V0Tm9kZUluZGV4KTsKICAgICAKKyAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2gg
Y29uc3RhbnRzIQorICAgIAogICAgIGZsdXNoKGNhbGxUYXJnZXQpOwogICAgIGZvciAoaW50IGFy
ZyA9IGZpcnN0QXJnICsgMTsgYXJnIDw9IGxhc3RBcmc7ICsrYXJnKQogICAgICAgICBmbHVzaChh
cmcpOwpAQCAtOTM3LDcgKzk3OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKGJvb2wKICAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmVuc3VyZUxvY2Fscyhu
ZXdOdW1Mb2NhbHMpOwogICAgIH0KIAotICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tF
bnRyeSh0aGlzLCBjb2RlQmxvY2suZ2V0KCksIHByb2ZpbGVkQmxvY2ssIG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQoY2FsbFRhcmdldCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxpZFZpcnR1YWxSZWdp
c3RlciksIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQpOworICAgIElubGlu
ZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlzLCBjb2RlQmxvY2suZ2V0KCksIHByb2Zp
bGVkQmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgKFZpcnR1YWxSZWdpc3Rlcilt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2FsbFRhcmdldCksIChWaXJ0dWFsUmVnaXN0
ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHVzZXNSZXN1bHQgPyByZXN1bHRPcGVy
YW5kIDogSW52YWxpZFZpcnR1YWxSZWdpc3RlciksIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsIGtpbmQpOwogICAgIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVh
bCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICB1bnNpZ25lZCBvbGRJbmRleCA9IG1fY3Vy
cmVudEluZGV4OwpAQCAtMTAzOSw2ICsxMDgxLDMwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKGJvb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5v
ZGVUeXBlIG9wLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnKQoreworICAgIGlmICghdXNlc1Jl
c3VsdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobGFzdEFyZyA9PSBmaXJzdEFy
ZykgeworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29uc3RhbnROYU4oKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAgCisgICAgaWYgKGxhc3RBcmcgPT0gZmlyc3RBcmcg
KyAxKSB7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBnZXRUb051bWJlcihmaXJzdEFyZyAr
IDEpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChsYXN0QXJn
ID09IGZpcnN0QXJnICsgMikgeworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFw
aChvcCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihmaXJzdEFyZyArIDEpLCBn
ZXRUb051bWJlcihmaXJzdEFyZyArIDIpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICAvLyBEb24ndCBoYW5kbGUgPj0zIGFyZ3VtZW50cyBmb3Igbm93LgorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJv
b2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGlu
dCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKIHsKICAg
ICBzd2l0Y2ggKGludHJpbnNpYykgewpAQCAtMTIyNCw3ICsxMjkwLDEwIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZTogewotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKSk7CisgICAgICAgICAg
ICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldERpcmVjdChtX2lubGlu
ZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlVlIpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChHZXRDYWxsZWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9j
YWxsZWUpOwogICAgICAgICB9CiAKQEAgLTE1ODMsNyArMTY1Miw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2l6
ZV90IG9mZnNldCA9IG5vdEZvdW5kOwogICAgICAgICAgICAgU3RydWN0dXJlU2V0IHN0cnVjdHVy
ZVNldDsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7CisgICAgICAgICAgICBpZiAo
c3R1YkluZm8uc2VlbiAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtl
bHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpIHsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjogewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKQEAg
LTE5NTQsNzQgKzIwMjMsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChUaHJvd1JlZmVyZW5jZUVycm9yKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CiAgICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY2FsbFRh
cmdldCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IGVudW0geyBDb25zdGFudEZ1bmN0aW9uLCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9u
IH0gY2FsbFR5cGU7Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJj
IyV1OiAldS5cbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCht
X2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7Ci0jZW5kaWYKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFy
Z2V0KSkKLSAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENvbnN0YW50RnVuY3Rpb247Ci0gICAg
ICAgICAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0
Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZSAmJiAhbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRl
eCkpCi0gICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBMaW5rZWRGdW5jdGlvbjsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IFVua25vd25GdW5jdGlvbjsKLSAg
ICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBVbmtub3duRnVuY3Rpb24pIHsKLSAgICAgICAgICAg
ICAgICBpbnQgYXJnQ291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQg
LSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAg
ICAgICAgICBpbnQgbGFzdEFyZyA9IGZpcnN0QXJnICsgYXJnQ291bnQgLSAxOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSByZXN1bHQ/Ci0gICAgICAg
ICAgICAgICAgYm9vbCB1c2VzUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW50IHJl
c3VsdE9wZXJhbmQgPSAwOyAvLyBtYWtlIGNvbXBpbGVyIGhhcHB5Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgbmV4dE9mZnNldCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9j
YWxsKTsKLSAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICAgICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IFByZWRpY3ROb25lOwotICAgICAgICAgICAgICAg
IGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9
PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0T3BlcmFu
ZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICAgICAgdXNl
c1Jlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVk
aWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBuZXh0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAg
bmV4dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0X3Jlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb247
Ci0gICAgICAgICAgICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOwotICAgICAgICAgICAg
ICAgIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbjsKLSAgICAgICAgICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikgewotICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZEZ1bmN0aW9uID0gbV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVC
bG9jaywgY2FsbFRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9IGV4cGVj
dGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBMaW5rZWRG
dW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRl
eCkubGFzdFNlZW5DYWxsZWUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9
IGV4cGVjdGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGludHJpbnNp
YyAhPSBOb0ludHJpbnNpYykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNlcnRhaW5BYm91
dEV4cGVjdGVkRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2FsbFRhcmdldCk7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlSW50cmluc2lj
KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RBcmcsIGxhc3RBcmcs
IHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgp
IGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGNhbGxUYXJnZXQsIHJlc3VsdE9wZXJhbmQsIGNlcnRhaW5BYm91dEV4cGVj
dGVkRnVuY3Rpb24sIGV4cGVjdGVkRnVuY3Rpb24sIGZpcnN0QXJnLCBsYXN0QXJnLCBuZXh0T2Zm
c2V0KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBp
bnNpZGUgYnJhY2VzLgotICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCk7CisgICAg
ICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgICAgIGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ29kZUZvckNhbGwpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbCk7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9w
X2NvbnN0cnVjdDogewotICAgICAgICAgICAgYWRkQ2FsbChpbnRlcnByZXRlciwgY3VycmVudElu
c3RydWN0aW9uLCBDb25zdHJ1Y3QpOworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAg
ICAgICAgIGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3Ry
dWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnN0
cnVjdCk7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGxfcHV0
X3Jlc3VsdDoKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CkBA
IC0yMjYyLDcgKzIyNzAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBz
SWZOCiAgICAgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyA9IHRydWU7CiB9CiAKLUJ5dGVDb2RlUGFy
c2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBi
eXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxl
ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwgVmlydHVhbFJlZ2lzdGVyIGlubGlu
ZUNhbGxGcmFtZVN0YXJ0KQorQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxv
Y2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5W
YWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNvZGVQYXJzZXIp
CiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJv
ZmlsZWRCbG9jaykKQEAgLTIyODUsNyArMjI5Myw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxlZVZSID0gY2Fs
bGVlVlI7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+
Y3VycmVudENvZGVPcmlnaW4oKTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLm51bUFyZ3VtZW50
c0luY2x1ZGluZ1RoaXMgPSBjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVyczsKLSAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLmlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0Nh
bGwgPSBpc0NhbGwoa2luZCk7CiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+
aW5saW5lQ2FsbEZyYW1lcygpLmFwcGVuZChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZSA9ICZieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxG
cmFtZXMoKS5sYXN0KCk7CiAgICAgICAgIApAQCAtMjQxMiw3ICsyNDIwLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3RydWN0aW9uLgogICAg
IEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAotICAgIElubGluZVN0YWNrRW50cnkgaW5s
aW5lU3RhY2tFbnRyeSh0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCBOb0Jsb2Nr
LCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKTsKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnko
dGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgTm9CbG9jaywgSW52YWxpZFZpcnR1
YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciwgQ29kZUZvckNhbGwpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gOTgx
ODQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5IEBAIGlubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rp
b25Gb3JDYWxsKEMKIHsKICAgICByZXR1cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkg
PD0gSGV1cmlzdGljczo6bWF4aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3Ry
dWN0aW9uQ291bnQ7CiB9Ci1pbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KENvZGVCbG9jayopCitpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCkgPD0gSGV1cmlzdGljczo6bWF4aW11bUZ1
bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKIH0KIAog
Ly8gT3Bjb2RlIGNoZWNraW5nLgpAQCAtMTgwLDEwICsxODAsNiBAQCBpbmxpbmUgYm9vbCBjYW5J
bmxpbmVPcGNvZGUoT3Bjb2RlSUQgb3BjCiAgICAgY2FzZSBvcF9yZXNvbHZlX2Jhc2U6CiAgICAg
Y2FzZSBvcF9yZXNvbHZlX2dsb2JhbDoKICAgICAgICAgCi0gICAgLy8gVHJpdmlhbCB0byBzdXBw
b3J0IHdpdGggdGhlIGNvcHkgcHJvcGFnYXRpb24gbWFjaGluZSB3ZSBhbHJlYWR5IGhhdmUsIGJ1
dCB0aGUgZ2x1ZQotICAgIC8vIGlzbid0IHRoZXJlLCB5ZXQuCi0gICAgY2FzZSBvcF9nZXRfY2Fs
bGVlOgotICAgICAgICAKICAgICAvLyBJbmxpbmluZyBkb2Vzbid0IGNvcnJlY3RseSByZW1hcCBy
ZWd1bGFyIGV4cHJlc3Npb24gb3BlcmFuZHMuCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzksNiArMjM1LDIyIEBAIGlubGluZSBib29sIGNhbklu
bGluZUZ1bmN0aW9uRm9yQ29uc3RydWMKICAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZv
ckNvbnN0cnVjdChjb2RlQmxvY2spICYmIGNhbklubGluZU9wY29kZXMoY29kZUJsb2NrKTsKIH0K
IAoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvcihDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IENvZGVG
b3JDYWxsKQorICAgICAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwoY29kZUJs
b2NrKTsKKyAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICByZXR1cm4g
bWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2spOworfQorCitpbmxpbmUg
Ym9vbCBjYW5JbmxpbmVGdW5jdGlvbkZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQoreworICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQorICAg
ICAgICByZXR1cm4gY2FuSW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jayk7CisgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJuIGNhbklubGluZUZ1bmN0
aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jayk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIERGR0NhcGFiaWxpdGllc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTgxODQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM4LDE1ICszMzgsMTcgQEAgcHJvdGVjdGVkOgogICAgICAgICBBU1NFUlQo
aW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXREb3VibGUpOwogICAgICAgICBEYXRh
Rm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwogCi0gICAgICAg
IGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICBpZiAo
cmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgp
ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CisgICAgICAgICAgICBBU1NFUlQoaXNKU0ludGVnZXIo
aW5mby5yZWdpc3RlckZvcm1hdCgpKSk7CiAgICAgICAgICAgICBpZiAobm9kZS5oYXNDb25zdGFu
dCgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlSW5kZXgp
KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGVJbmRleCkpLCBpbmZvLmdwcigpKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihzcGlsbE1lKSwgaW5m
by5ncHIoKSk7CisgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKGluZm8uZ3ByKCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIGlmIChyZWdp
c3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCkgewogICAgICAgICAgICAgaWYgKG5vZGUuaXND
b25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5ODE4NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgZW51bSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHsgQ29kZUZvckNh
bGwsIENvZGVGb3JDb25zdHJ1Y3QgfTsKICAgICBlbnVtIENvbXBpbGF0aW9uS2luZCB7IEZpcnN0
Q29tcGlsYXRpb24sIE9wdGltaXppbmdDb21waWxhdGlvbiB9OwogCisgICAgaW5saW5lIGJvb2wg
aXNDYWxsKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCiAgICAgY2xhc3MgRXhlY3V0YWJsZUJhc2UgOiBwdWJsaWMgSlNDZWxsIHsKICAgICAg
ICAgZnJpZW5kIGNsYXNzIEpJVDsKIApAQCAtMTU3LDcgKzE2NSwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAgIC8vIEludHJpbnNp
Y3MgYXJlIG9ubHkgZm9yIGNhbGxzLCBjdXJyZW50bHkuCiAgICAgICAgIHZpcnR1YWwgREZHOjpJ
bnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3Q7CisgICAgICAgIAorICAgICAgICBERkc6OkludHJp
bnNpYyBpbnRyaW5zaWNGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAoaXNDYWxsKGtpbmQpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBpbnRyaW5zaWMoKTsKKyAgICAgICAgICAgIHJldHVybiBERkc6Ok5vSW50cmluc2ljOwor
ICAgICAgICB9CiAjZW5kaWYKIAogICAgIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiA5ODE4NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw2ICs0NSw3IEBAIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6
YXQKIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGltaXphdGlvbkNhbmRp
ZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNhbGxJ
bmxpbmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwordW5zaWduZWQgbWF4aW11bUZ1bmN0aW9u
Rm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKIAogdW5zaWduZWQg
bWF4aW11bUlubGluaW5nRGVwdGg7CiAKQEAgLTExOSw5ICsxMjAsMTAgQEAgdm9pZCBpbml0aWFs
aXplSGV1cmlzdGljcygpCiAgICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNhbGxPcHRpbWl6YXRp
b25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAgICAgIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSk7CiAgICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSk7CiAgICAgCi0gICAgU0VUKG1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxp
bmVDYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCAxMDApOworICAgIFNFVChtYXhpbXVtRnVuY3Rp
b25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTUwKTsKKyAgICBTRVQo
bWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3Vu
dCwgODApOwogICAgIAotICAgIFNFVChtYXhpbXVtSW5saW5pbmdEZXB0aCwgMyk7CisgICAgU0VU
KG1heGltdW1JbmxpbmluZ0RlcHRoLCA1KTsKIAogICAgIFNFVChleGVjdXRpb25Db3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwLCAgICAgLTEwMDApOwogICAgIFNFVChleGVjdXRpb25D
b3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyTG9uZ1dhcm1VcCwgLTUwMDApOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAkocmV2aXNpb24gOTgxODQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDYgKzM2LDcgQEAgZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZv
ckNhbGxPcAogZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdE9wdGlt
aXphdGlvbkNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKIGV4dGVybiB1bnNpZ25lZCBtYXhp
bXVtRnVuY3Rpb25Gb3JDYWxsSW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK2V4dGVy
biB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RJbmxpbmVDYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OwogCiBleHRlcm4gdW5zaWduZWQgbWF4aW11bUlubGluaW5nRGVwdGg7IC8v
IERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlubGluaW5nLCAyID0gb25lIGxldmVs
LCBldGMuCiAK
</data>
<flag name="commit-queue"
          id="110082"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112087</attachid>
            <date>2011-10-22 05:13:10 -0700</date>
            <delta_ts>2011-10-22 11:29:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>inlinecons_patch_2.diff</filename>
            <type>text/plain</type>
            <size>26629</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTgxOTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAK
KzIwMTEtMTAtMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
Rkcgc2hvdWxkIGlubGluZSBjb25zdHJ1Y3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwNjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBBZGRzIHN1cHBvcnQgZm9yIGlubGluaW5nIGNv
bnN0cnVjdG9ycy4gQWxzbyBmaXhlcyB0d28gcGF0aG9sb2dpZXMKKyAgICAgICAgdW5jb3ZlcmVk
IGFsb25nIHRoZSB3YXk6IENoZWNrTWV0aG9kIGNsYWltZWQgdGhhdCBpdCBuZXZlciByZXR1cm5l
ZCBhCisgICAgICAgIHJlc3VsdCAoY2F1c2luZyBDaGVja01ldGhvZCAtPiBTZXRMb2NhbCAtPiBH
ZXRMb2NhbCBzZXF1ZW5jZXMgdG8KKyAgICAgICAgcmVzdWx0IGluIHRoZSBHZXRMb2NhbCBkb2lu
ZyBPU1IgZXhpdCksIGFuZCBnZXRfYnlfaWQgcGFyc2luZyBuZXZlcgorICAgICAgICBjaGVja2Vk
IGlmIGl0IHdhcyBob3QgaW4gc2xvdyBwYXRoLiBBbHNvIGZpZGRsZWQgd2l0aCBpbmxpbmluZwor
ICAgICAgICBoZXVyaXN0aWNzOyBpdCBhcHBlYXJzIHRoYXQgZm9yIG5vdywgdGhlIG1vcmUgaW5s
aW5pbmcsIHRoZSBoYXBwaWVyCisgICAgICAgIFY4IGlzLiBGaW5hbGx5LCBhIGJ1ZyB3YXMgdW5j
b3ZlcmVkIHdoZXJlIGEgc2lsZW50IHNwaWxsIG9mIGEgYm94ZWQKKyAgICAgICAgaW50ZWdlciB0
aGF0IGhhZCBwcmV2aW91c2x5IGJlZW4gc3BpbGxlZCB1bmJveGVkIGNhdXNlcyB0aGUgc2lsZW50
CisgICAgICAgIGZpbGwgdG8gZm9yZ2V0IHRvIHVuYm94LgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhcHBlYXJzIHRvIGJlIGEgNCUgc3BlZWQtdXAgb24gVjggaW4gdGhlaXIgaGFybmVzcywgb3Ig
YSAxJQorICAgICAgICBzcGVlZC11cCBpbiBteSBoYXJuZXNzLiBUaGUgZGlmZmVyZW5jZSBpcyBk
dWUgdG8gd2FybS11cDogaW4gbXkKKyAgICAgICAgaGFybmVzcyB3ZSBzZWUgc2lnbmlmaWNhbnQg
YW1vdW50cyBvZiB0aW1lIHNwZW50IGluIGNvbXBpbGF0aW9uLCBidXQKKyAgICAgICAgaW4gVjgn
cyBoYXJuZXNzIGNvbXBpbGF0aW9uIGdldHMgYW1vcnRpemVzLiBQcm9maWxpbmcgaW5kaWNhdGVz
IHRoYXQKKyAgICAgICAgd2UgaGF2ZSB0aGUgcG90ZW50aWFsIGZvciBhIDUlIHdpbiBmcm9tIGJh
c2ljIG9wdGltaXphdGlvbnMgbGlrZQorICAgICAgICBnZW5lcmF0aW5nIE9TUiBleGl0cyBsYXpp
bHkgYW5kIGhvbGRpbmcgb250byBieXRlY29kZSBsb25nZXIuCisKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhl
Y3V0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Oklu
bGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5oOgor
ICAgICAgICAoSlNDOjpERkc6Om1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QpOgorICAg
ICAgICAoSlNDOjpERkc6OmNhbklubGluZU9wY29kZSk6CisgICAgICAgIChKU0M6OkRGRzo6bWln
aHRJbmxpbmVGdW5jdGlvbkZvcik6CisgICAgICAgIChKU0M6OkRGRzo6Y2FuSW5saW5lRnVuY3Rp
b25Gb3IpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6c2lsZW50RmlsbEdQUik6CisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OmlzQ2FsbCk6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjppbnRyaW5zaWNGb3IpOgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlz
dGljcy5jcHA6CisgICAgICAgIChKU0M6OkhldXJpc3RpY3M6OmluaXRpYWxpemVIZXVyaXN0aWNz
KToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuaDoKKwogMjAxMS0xMC0yMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBpbmxpbmluZyBzb21ldGlt
ZXMgZmFpbHMgdG8gcmVzZXQgY29uc3RhbnQgcmVmZXJlbmNlcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiA5ODE5MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwMCw2ICs2MDAsNyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
Tm9kZUluZGV4IG5vCiAgICAgY2FzZSBDaGVja01ldGhvZDoKICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3Rh
bnRzIChpLmUuIHByb3RvdHlwZXMpLgogICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRhSW5kZXgo
KV0uc3RydWN0dXJlKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0T2Jq
ZWN0T3RoZXIpOwogICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk4MTkyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4
LDEwIEBAIHByaXZhdGU6CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KICAgICBib29s
IGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlw
ZSBvcCwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZyk7CiAgICAgCisgICAgLy8gSGFuZGxlIGNh
bGxzLiBUaGlzIHJlc29sdmVzIGlzc3VlcyBzdXJyb3VuZGluZyBpbmxpbmluZyBhbmQgaW50cmlu
c2ljcy4KKyAgICB2b2lkIGhhbmRsZUNhbGwoSW50ZXJwcmV0ZXIqLCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAg
ICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNl
IGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9v
bCB1c2VzUmVzdWx0LCBpbnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5k
ZXgsIGludCByZXN1bHRPcGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24s
IEpTRnVuY3Rpb24qLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0KTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgaW50IGNhbGxU
YXJnZXQsIE5vZGVJbmRleCBjYWxsVGFyZ2V0Tm9kZUluZGV4LCBpbnQgcmVzdWx0T3BlcmFuZCwg
Ym9vbCBjZXJ0YWluQWJvdXRFeHBlY3RlZEZ1bmN0aW9uLCBKU0Z1bmN0aW9uKiwgaW50IGZpcnN0
QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMuIFJldHVybiB0cnVlIGlm
IGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9v
bCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50
cmluc2ljLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnLCBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b24pOwogICAgIC8vIFByZXBhcmUgdG8gcGFyc2UgYSBibG9jay4KQEAgLTc5Niw3ICs3OTgsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgSW5saW5lU3RhY2tFbnRyeSogbV9jYWxsZXI7
CiAgICAgICAgIAotICAgICAgICBJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29k
ZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxv
Y2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5W
YWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQpOworICAgICAgICBJ
bmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxvY2tIZWFkLCBWaXJ0dWFsUmVnaXN0
ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5WYWx1ZVZSLCBWaXJ0dWFsUmVnaXN0
ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgICAg
ICAKICAgICAgICAgfklubGluZVN0YWNrRW50cnkoKQogICAgICAgICB7CkBAIC04MzcsMzEgKzgz
OSw2OSBAQCBwcml2YXRlOgogICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFt
ZSk7IFwKICAgICByZXR1cm4gIW1fcGFyc2VGYWlsZWQKIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBl
IG9wLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7Ci0g
ICAgaWYgKCF1c2VzUmVzdWx0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChsYXN0
QXJnID09IGZpcnN0QXJnKSB7Ci0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFudE5h
TigpKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgICAKLSAgICBpZiAobGFzdEFy
ZyA9PSBmaXJzdEFyZyArIDEpIHsKLSAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGdldFRvTnVt
YmVyKGZpcnN0QXJnICsgMSkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgQVNT
RVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3Qp
KTsKICAgICAKLSAgICBpZiAobGFzdEFyZyA9PSBmaXJzdEFyZyArIDIpIHsKLSAgICAgICAgc2V0
KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgZ2V0
VG9OdW1iZXIoZmlyc3RBcmcgKyAxKSwgZ2V0VG9OdW1iZXIoZmlyc3RBcmcgKyAyKSkpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBOb2RlSW5kZXggY2FsbFRhcmdldCA9IGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBlbnVtIHsgQ29uc3RhbnRGdW5jdGlvbiwg
TGlua2VkRnVuY3Rpb24sIFVua25vd25GdW5jdGlvbiB9IGNhbGxUeXBlOworICAgICAgICAgICAg
CisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgIHByaW50ZigiU2xvdyBjYXNlIGNv
dW50IGZvciBjYWxsIGF0IEAlbHUgYmMjJXU6ICV1LlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3Vy
cmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyNlbmRp
ZgorICAgICAgICAgICAgCisgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29k
ZUJsb2NrLCBjYWxsVGFyZ2V0KSkKKyAgICAgICAgY2FsbFR5cGUgPSBDb25zdGFudEZ1bmN0aW9u
OworICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRD
YWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4
KSkKKyAgICAgICAgY2FsbFR5cGUgPSBMaW5rZWRGdW5jdGlvbjsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxUeXBlID0gVW5rbm93bkZ1bmN0aW9uOworICAgIGlmIChjYWxsVHlwZSAhPSBVbmtub3du
RnVuY3Rpb24pIHsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQg
LSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAg
aW50IGxhc3RBcmcgPSBmaXJzdEFyZyArIGFyZ0NvdW50IC0gMTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgLy8gRG8gd2UgaGF2ZSBhIHJlc3VsdD8KKyAgICAgICAgYm9vbCB1c2VzUmVzdWx0
ID0gZmFsc2U7CisgICAgICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21waWxl
ciBoYXBweQorICAgICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBP
UENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rp
b24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOworICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgaWYgKGlu
dGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2Nh
bGxfcHV0X3Jlc3VsdCkgeworICAgICAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1dEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVzZXNSZXN1bHQgPSB0cnVlOworICAgICAg
ICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24obV9ncmFwaC5zaXplKCksIG5leHRPZmZz
ZXQpOworICAgICAgICAgICAgbmV4dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0
X3Jlc3VsdCk7CisgICAgICAgIH0KKyAgICAgICAgSlNGdW5jdGlvbiogZXhwZWN0ZWRGdW5jdGlv
bjsKKyAgICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOworICAgICAgICBib29sIGNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb247CisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDb25zdGFu
dEZ1bmN0aW9uKSB7CisgICAgICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gbV9ncmFwaC52YWx1
ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCk7CisgICAgICAgICAg
ICBpbnRyaW5zaWMgPSBleHBlY3RlZEZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpY0Zv
cihraW5kKTsKKyAgICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSB0cnVl
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IExpbmtl
ZEZ1bmN0aW9uKTsKKyAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFz
dFNlZW5DYWxsZWUuZ2V0KCk7CisgICAgICAgICAgICBpbnRyaW5zaWMgPSBleHBlY3RlZEZ1bmN0
aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpY0ZvcihraW5kKTsKKyAgICAgICAgICAgIGNlcnRh
aW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljKSB7CisgICAgICAgICAg
ICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZXhwZWN0ZWRGdW5jdGlvbiksIGNhbGxUYXJn
ZXQpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChoYW5kbGVJbnRyaW5z
aWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCBmaXJzdEFyZywgbGFzdEFy
ZywgcHJlZGljdGlvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2Ug
aWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIGNhbGxUYXJnZXQsIHJlc3VsdE9wZXJhbmQsIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVu
Y3Rpb24sIGV4cGVjdGVkRnVuY3Rpb24sIGZpcnN0QXJnLCBsYXN0QXJnLCBuZXh0T2Zmc2V0LCBr
aW5kKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgLy8gRG9uJ3QgaGFu
ZGxlID49MyBhcmd1bWVudHMgZm9yIG5vdy4KLSAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAKKyAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKIH0K
IAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBp
bnQgY2FsbFRhcmdldCwgTm9kZUluZGV4IGNhbGxUYXJnZXROb2RlSW5kZXgsIGludCByZXN1bHRP
cGVyYW5kLCBib29sIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24sIEpTRnVuY3Rpb24qIGV4
cGVjdGVkRnVuY3Rpb24sIGludCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIHVuc2lnbmVkIG5leHRP
ZmZzZXQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1
bHQsIGludCBjYWxsVGFyZ2V0LCBOb2RlSW5kZXggY2FsbFRhcmdldE5vZGVJbmRleCwgaW50IHJl
c3VsdE9wZXJhbmQsIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbiwgSlNGdW5jdGlv
biogZXhwZWN0ZWRGdW5jdGlvbiwgaW50IGZpcnN0QXJnLCBpbnQgbGFzdEFyZywgdW5zaWduZWQg
bmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIEZpcnN0
LCB0aGUgcmVhbGx5IHNpbXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0
aW9uPwogICAgIGlmICghZXhwZWN0ZWRGdW5jdGlvbikKQEAgLTg5MCw4ICs5MzAsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgCiAgICAgLy8gRG9lcyB0
aGUgY29kZSBibG9jaydzIHNpemUgbWF0Y2ggdGhlIGhldXJpc3RpY3MvcmVxdWlyZW1lbnRzIGZv
ciBiZWluZwogICAgIC8vIGFuIGlubGluZSBjYW5kaWRhdGU/Ci0gICAgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxvY2tGb3IoQ29kZUZvckNhbGwp
OwotICAgIGlmICghbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNhbGwocHJvZmlsZWRCbG9jaykpCisg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZmlsZWRDb2RlQmxv
Y2tGb3Ioa2luZCk7CisgICAgaWYgKCFtaWdodElubGluZUZ1bmN0aW9uRm9yKHByb2ZpbGVkQmxv
Y2ssIGtpbmQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gSWYgd2UgZ2V0
IGhlcmUgdGhlbiBpdCBsb29rcyBsaWtlIHdlIHNob3VsZCBkZWZpbml0ZWx5IGlubGluZSB0aGlz
IGNvZGUuIFByb2NlZWQKQEAgLTg5OSwxNCArOTM5LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICAvLyBOb3RlIHRoYXQgdGhlIGNvZGUgYmxvY2sgd2Ug
Z2V0IGhlcmUgaXMgaW50ZW5kZWQgdG8gZGllIGFmdGVyIGhhbmRsZUlubGluaW5nKCkKICAgICAv
LyByZXR1cm5zLgogICAgIEpTT2JqZWN0KiBleGNlcHRpb247Ci0gICAgT3duUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+cHJvZHVjZUNvZGVCbG9ja0ZvcihleHBlY3RlZEZ1
bmN0aW9uLT5zY29wZSgpLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24sIENvZGVGb3JDYWxsLCBleGNl
cHRpb24pOworICAgIE93blB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPnBy
b2R1Y2VDb2RlQmxvY2tGb3IoZXhwZWN0ZWRGdW5jdGlvbi0+c2NvcGUoKSwgT3B0aW1pemluZ0Nv
bXBpbGF0aW9uLCBraW5kLCBleGNlcHRpb24pOwogICAgIGlmICghY29kZUJsb2NrKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKCFleGNlcHRpb24pOwogICAgIAogICAgIC8vIE5v
dyB0aGF0IHdlIGhhdmUgdGhlIGJ5dGVjb2RlLCBjaGVjayBpZiB3ZSByZWFsbHkgY2FuIGlubGlu
ZSBpdC4gVGhpcyBtYXkgZmFpbAogICAgIC8vIGlmIHRoZSBjb2RlIGJsb2NrIGNvbnRhaW5zIHNv
bWUgbmFzdHkgb3Bjb2Rlcy4KLSAgICBpZiAoIWNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2Rl
QmxvY2suZ2V0KCkpKQorICAgIGlmICghY2FuSW5saW5lRnVuY3Rpb25Gb3IoY29kZUJsb2NrLmdl
dCgpLCBraW5kKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQpAQCAtOTE5LDYgKzk1OSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUlubGluaW5nKGJvb2wKICAgICBpZiAoIWNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24pCiAg
ICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGV4cGVjdGVkRnVuY3Rpb24p
LCBjYWxsVGFyZ2V0Tm9kZUluZGV4KTsKICAgICAKKyAgICAvLyBGSVhNRTogRG9uJ3QgZmx1c2gg
Y29uc3RhbnRzIQorICAgIAogICAgIGZsdXNoKGNhbGxUYXJnZXQpOwogICAgIGZvciAoaW50IGFy
ZyA9IGZpcnN0QXJnICsgMTsgYXJnIDw9IGxhc3RBcmc7ICsrYXJnKQogICAgICAgICBmbHVzaChh
cmcpOwpAQCAtOTM3LDcgKzk3OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKGJvb2wKICAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3NbaV0tPmVuc3VyZUxvY2Fscyhu
ZXdOdW1Mb2NhbHMpOwogICAgIH0KIAotICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tF
bnRyeSh0aGlzLCBjb2RlQmxvY2suZ2V0KCksIHByb2ZpbGVkQmxvY2ssIG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpIC0gMSwgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQoY2FsbFRhcmdldCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxpZFZpcnR1YWxSZWdp
c3RlciksIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQpOworICAgIElubGlu
ZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSh0aGlzLCBjb2RlQmxvY2suZ2V0KCksIHByb2Zp
bGVkQmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgKFZpcnR1YWxSZWdpc3Rlcilt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoY2FsbFRhcmdldCksIChWaXJ0dWFsUmVnaXN0
ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHVzZXNSZXN1bHQgPyByZXN1bHRPcGVy
YW5kIDogSW52YWxpZFZpcnR1YWxSZWdpc3RlciksIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsIGtpbmQpOwogICAgIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVh
bCBpbmxpbmluZyByZWFsbHkgaGFwcGVucy4KICAgICB1bnNpZ25lZCBvbGRJbmRleCA9IG1fY3Vy
cmVudEluZGV4OwpAQCAtMTAzOSw2ICsxMDgxLDMwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKGJvb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5v
ZGVUeXBlIG9wLCBpbnQgZmlyc3RBcmcsIGludCBsYXN0QXJnKQoreworICAgIGlmICghdXNlc1Jl
c3VsdCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobGFzdEFyZyA9PSBmaXJzdEFy
ZykgeworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29uc3RhbnROYU4oKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAgCisgICAgaWYgKGxhc3RBcmcgPT0gZmlyc3RBcmcg
KyAxKSB7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBnZXRUb051bWJlcihmaXJzdEFyZyAr
IDEpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChsYXN0QXJn
ID09IGZpcnN0QXJnICsgMikgeworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFw
aChvcCwgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihmaXJzdEFyZyArIDEpLCBn
ZXRUb051bWJlcihmaXJzdEFyZyArIDIpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICAvLyBEb24ndCBoYW5kbGUgPj0zIGFyZ3VtZW50cyBmb3Igbm93LgorICAgIHJl
dHVybiBmYWxzZTsKK30KKwogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJv
b2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGlu
dCBmaXJzdEFyZywgaW50IGxhc3RBcmcsIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKIHsKICAg
ICBzd2l0Y2ggKGludHJpbnNpYykgewpAQCAtMTIyNCw3ICsxMjkwLDEwIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZTogewotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKSk7CisgICAgICAgICAg
ICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGdldERpcmVjdChtX2lubGlu
ZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVlVlIpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
YWRkVG9HcmFwaChHZXRDYWxsZWUpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9j
YWxsZWUpOwogICAgICAgICB9CiAKQEAgLTE1ODMsNyArMTY1Miw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2l6
ZV90IG9mZnNldCA9IG5vdEZvdW5kOwogICAgICAgICAgICAgU3RydWN0dXJlU2V0IHN0cnVjdHVy
ZVNldDsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuKSB7CisgICAgICAgICAgICBpZiAo
c3R1YkluZm8uc2VlbiAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtl
bHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpIHsKICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfc2VsZjogewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKQEAg
LTE5NTQsNzQgKzIwMjMsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChUaHJvd1JlZmVyZW5jZUVycm9yKTsKICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX3Rocm93X3JlZmVyZW5jZV9lcnJvcik7CiAgICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggY2FsbFRh
cmdldCA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgICAg
IGVudW0geyBDb25zdGFudEZ1bmN0aW9uLCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9u
IH0gY2FsbFR5cGU7Ci0gICAgICAgICAgICAKLSNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJj
IyV1OiAldS5cbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCht
X2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7Ci0jZW5kaWYKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNvbnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFy
Z2V0KSkKLSAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENvbnN0YW50RnVuY3Rpb247Ci0gICAg
ICAgICAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0
Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZSAmJiAhbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRl
eCkpCi0gICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBMaW5rZWRGdW5jdGlvbjsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IFVua25vd25GdW5jdGlvbjsKLSAg
ICAgICAgICAgIGlmIChjYWxsVHlwZSAhPSBVbmtub3duRnVuY3Rpb24pIHsKLSAgICAgICAgICAg
ICAgICBpbnQgYXJnQ291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
ICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICAgICAgaW50IGZpcnN0QXJnID0gcmVnaXN0ZXJPZmZzZXQg
LSBhcmdDb3VudCAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKLSAgICAgICAg
ICAgICAgICBpbnQgbGFzdEFyZyA9IGZpcnN0QXJnICsgYXJnQ291bnQgLSAxOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIC8vIERvIHdlIGhhdmUgYSByZXN1bHQ/Ci0gICAgICAg
ICAgICAgICAgYm9vbCB1c2VzUmVzdWx0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaW50IHJl
c3VsdE9wZXJhbmQgPSAwOyAvLyBtYWtlIGNvbXBpbGVyIGhhcHB5Ci0gICAgICAgICAgICAgICAg
dW5zaWduZWQgbmV4dE9mZnNldCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9j
YWxsKTsKLSAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICAgICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IFByZWRpY3ROb25lOwotICAgICAgICAgICAgICAg
IGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9
PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0T3BlcmFu
ZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICAgICAgICAgICAgICAgICAgdXNl
c1Jlc3VsdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVk
aWN0aW9uKG1fZ3JhcGguc2l6ZSgpLCBuZXh0T2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAg
bmV4dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0X3Jlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGV4cGVjdGVkRnVuY3Rpb247
Ci0gICAgICAgICAgICAgICAgREZHOjpJbnRyaW5zaWMgaW50cmluc2ljOwotICAgICAgICAgICAg
ICAgIGJvb2wgY2VydGFpbkFib3V0RXhwZWN0ZWRGdW5jdGlvbjsKLSAgICAgICAgICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ29uc3RhbnRGdW5jdGlvbikgewotICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZEZ1bmN0aW9uID0gbV9ncmFwaC52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChtX2NvZGVC
bG9jaywgY2FsbFRhcmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9IGV4cGVj
dGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSB0cnVlOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBMaW5rZWRG
dW5jdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRl
eCkubGFzdFNlZW5DYWxsZWUuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludHJpbnNpYyA9
IGV4cGVjdGVkRnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGNlcnRhaW5BYm91dEV4cGVjdGVkRnVuY3Rpb24gPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGludHJpbnNp
YyAhPSBOb0ludHJpbnNpYykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWNlcnRhaW5BYm91
dEV4cGVjdGVkRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrRnVuY3Rpb24sIE9wSW5mbyhleHBlY3RlZEZ1bmN0aW9uKSwgY2FsbFRhcmdldCk7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlSW50cmluc2lj
KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgZmlyc3RBcmcsIGxhc3RBcmcs
IHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgp
IGhhcyB0byBiZSBpbnNpZGUgYnJhY2VzLgotICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIGNhbGxUYXJnZXQsIHJlc3VsdE9wZXJhbmQsIGNlcnRhaW5BYm91dEV4cGVj
dGVkRnVuY3Rpb24sIGV4cGVjdGVkRnVuY3Rpb24sIGZpcnN0QXJnLCBsYXN0QXJnLCBuZXh0T2Zm
c2V0KSkgewotICAgICAgICAgICAgICAgICAgICAvLyBORVhUX09QQ09ERSgpIGhhcyB0byBiZSBp
bnNpZGUgYnJhY2VzLgotICAgICAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCk7CisgICAg
ICAgIGNhc2Ugb3BfY2FsbDoKKyAgICAgICAgICAgIGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ29kZUZvckNhbGwpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbCk7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9w
X2NvbnN0cnVjdDogewotICAgICAgICAgICAgYWRkQ2FsbChpbnRlcnByZXRlciwgY3VycmVudElu
c3RydWN0aW9uLCBDb25zdHJ1Y3QpOworICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICAg
ICAgICAgIGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3Ry
dWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NvbnN0
cnVjdCk7Ci0gICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGxfcHV0
X3Jlc3VsdDoKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7CkBA
IC0yMjYyLDcgKzIyNzAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBz
SWZOCiAgICAgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyA9IHRydWU7CiB9CiAKLUJ5dGVDb2RlUGFy
c2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KEJ5dGVDb2RlUGFyc2VyKiBi
eXRlQ29kZVBhcnNlciwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRC
bG9jaywgQmxvY2tJbmRleCBjYWxsc2l0ZUJsb2NrSGVhZCwgVmlydHVhbFJlZ2lzdGVyIGNhbGxl
ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgcmV0dXJuVmFsdWVWUiwgVmlydHVhbFJlZ2lzdGVyIGlubGlu
ZUNhbGxGcmFtZVN0YXJ0KQorQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZVN0YWNrRW50cnkoQnl0ZUNvZGVQYXJzZXIqIGJ5dGVDb2RlUGFyc2VyLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBCbG9ja0luZGV4IGNhbGxzaXRlQmxv
Y2tIZWFkLCBWaXJ0dWFsUmVnaXN0ZXIgY2FsbGVlVlIsIFZpcnR1YWxSZWdpc3RlciByZXR1cm5W
YWx1ZVZSLCBWaXJ0dWFsUmVnaXN0ZXIgaW5saW5lQ2FsbEZyYW1lU3RhcnQsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKICAgICA6IG1fYnl0ZUNvZGVQYXJzZXIoYnl0ZUNvZGVQYXJzZXIp
CiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2socHJv
ZmlsZWRCbG9jaykKQEAgLTIyODUsNyArMjI5Myw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLmNhbGxlZVZSID0gY2Fs
bGVlVlI7CiAgICAgICAgIGlubGluZUNhbGxGcmFtZS5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+
Y3VycmVudENvZGVPcmlnaW4oKTsKICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLm51bUFyZ3VtZW50
c0luY2x1ZGluZ1RoaXMgPSBjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVyczsKLSAgICAgICAgaW5s
aW5lQ2FsbEZyYW1lLmlzQ2FsbCA9IHRydWU7CisgICAgICAgIGlubGluZUNhbGxGcmFtZS5pc0Nh
bGwgPSBpc0NhbGwoa2luZCk7CiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+
aW5saW5lQ2FsbEZyYW1lcygpLmFwcGVuZChpbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZSA9ICZieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmlubGluZUNhbGxG
cmFtZXMoKS5sYXN0KCk7CiAgICAgICAgIApAQCAtMjQxMiw3ICsyNDIwLDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3RydWN0aW9uLgogICAg
IEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAotICAgIElubGluZVN0YWNrRW50cnkgaW5s
aW5lU3RhY2tFbnRyeSh0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJsb2NrLCBOb0Jsb2Nr
LCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyLCBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKTsKKyAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnko
dGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgTm9CbG9jaywgSW52YWxpZFZpcnR1
YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3RlciwgSW52YWxpZFZpcnR1YWxSZWdpc3Rl
ciwgQ29kZUZvckNhbGwpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAkocmV2aXNpb24gOTgx
OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJERkdJbnRyaW5zaWMuaCIK
ICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUg
IkhldXJpc3RpY3MuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgpAQCAtNTgsOSArNTksOSBAQCBpbmxpbmUgYm9vbCBtaWdodElubGluZUZ1bmN0
aW9uRm9yQ2FsbChDCiB7CiAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgp
IDw9IEhldXJpc3RpY3M6Om1heGltdW1GdW5jdGlvbkZvckNhbGxJbmxpbmVDYW5kaWRhdGVJbnN0
cnVjdGlvbkNvdW50OwogfQotaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0
cnVjdChDb2RlQmxvY2sqKQoraW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0
cnVjdChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0
dXJuIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgpIDw9IEhldXJpc3RpY3M6Om1heGltdW1G
dW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiB9CiAK
IC8vIE9wY29kZSBjaGVja2luZy4KQEAgLTE4MCwxMCArMTgxLDYgQEAgaW5saW5lIGJvb2wgY2Fu
SW5saW5lT3Bjb2RlKE9wY29kZUlEIG9wYwogICAgIGNhc2Ugb3BfcmVzb2x2ZV9iYXNlOgogICAg
IGNhc2Ugb3BfcmVzb2x2ZV9nbG9iYWw6CiAgICAgICAgIAotICAgIC8vIFRyaXZpYWwgdG8gc3Vw
cG9ydCB3aXRoIHRoZSBjb3B5IHByb3BhZ2F0aW9uIG1hY2hpbmUgd2UgYWxyZWFkeSBoYXZlLCBi
dXQgdGhlIGdsdWUKLSAgICAvLyBpc24ndCB0aGVyZSwgeWV0LgotICAgIGNhc2Ugb3BfZ2V0X2Nh
bGxlZToKLSAgICAgICAgCiAgICAgLy8gSW5saW5pbmcgZG9lc24ndCBjb3JyZWN0bHkgcmVtYXAg
cmVndWxhciBleHByZXNzaW9uIG9wZXJhbmRzLgogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjM5LDYgKzIzNiwyMiBAQCBpbmxpbmUgYm9vbCBjYW5J
bmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjCiAgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDb25zdHJ1Y3QoY29kZUJsb2NrKSAmJiBjYW5JbmxpbmVPcGNvZGVzKGNvZGVCbG9jayk7CiB9
CiAKK2lubGluZSBib29sIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkKKyAgICAgICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVC
bG9jayk7CisgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7CisgICAgcmV0dXJu
IG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDb25zdHJ1Y3QoY29kZUJsb2NrKTsKK30KKworaW5saW5l
IGJvb2wgY2FuSW5saW5lRnVuY3Rpb25Gb3IoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKK3sKKyAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAg
ICAgICAgcmV0dXJuIGNhbklubGluZUZ1bmN0aW9uRm9yQ2FsbChjb2RlQmxvY2spOworICAgIEFT
U0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOworICAgIHJldHVybiBjYW5JbmxpbmVGdW5j
dGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2spOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZiAvLyBERkdDYXBhYmlsaXRpZXNfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk4MTkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzOCwxNSArMzM4LDE3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQVNTRVJU
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0RG91YmxlKTsKICAgICAgICAgRGF0
YUZvcm1hdCByZWdpc3RlckZvcm1hdCA9IGluZm8ucmVnaXN0ZXJGb3JtYXQoKTsKIAotICAgICAg
ICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpIHsKKyAgICAgICAgaWYg
KHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICAgICAgQVNTRVJUKGlzSlNJbnRlZ2Vy
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkpOwogICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3Rh
bnQoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4
KSk7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlSW5kZXgpKSwgaW5mby5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Ioc3BpbGxNZSksIGlu
Zm8uZ3ByKCkpOworICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcihpbmZvLmdwcigpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBpZiAocmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKICAgICAgICAgICAgIGlmIChub2RlLmlz
Q29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlND
b25zdGFudChub2RlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTgxOTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGVudW0gQ29kZVNwZWNpYWxpemF0aW9uS2luZCB7IENvZGVGb3JD
YWxsLCBDb2RlRm9yQ29uc3RydWN0IH07CiAgICAgZW51bSBDb21waWxhdGlvbktpbmQgeyBGaXJz
dENvbXBpbGF0aW9uLCBPcHRpbWl6aW5nQ29tcGlsYXRpb24gfTsKIAorICAgIGlubGluZSBib29s
IGlzQ2FsbChDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBpZiAo
a2luZCA9PSBDb2RlRm9yQ2FsbCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBB
U1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKwogICAgIGNsYXNzIEV4ZWN1dGFibGVCYXNlIDogcHVibGljIEpTQ2VsbCB7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAKQEAgLTE1Nyw3ICsxNjUsMTUgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAvLyBJbnRyaW5z
aWNzIGFyZSBvbmx5IGZvciBjYWxscywgY3VycmVudGx5LgogICAgICAgICB2aXJ0dWFsIERGRzo6
SW50cmluc2ljIGludHJpbnNpYygpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgREZHOjpJbnRy
aW5zaWMgaW50cmluc2ljRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGlzQ2FsbChraW5kKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gaW50cmluc2ljKCk7CisgICAgICAgICAgICByZXR1cm4gREZHOjpOb0ludHJpbnNpYzsK
KyAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkocmV2aXNpb24gOTgxOTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDUsNiArNDUsNyBAQCB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1p
emF0CiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRpbWl6YXRpb25DYW5k
aWRhdGVJbnN0cnVjdGlvbkNvdW50OwogCiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDYWxs
SW5saW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudDsKK3Vuc2lnbmVkIG1heGltdW1GdW5jdGlv
bkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CiAKIHVuc2lnbmVk
IG1heGltdW1JbmxpbmluZ0RlcHRoOwogCkBAIC0xMTksOSArMTIwLDEwIEBAIHZvaWQgaW5pdGlh
bGl6ZUhldXJpc3RpY3MoKQogICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsT3B0aW1pemF0
aW9uQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgICAgICBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpOwogICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRp
bWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50LCBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpOwogICAgIAotICAgIFNFVChtYXhpbXVtRnVuY3Rpb25Gb3JDYWxsSW5s
aW5lQ2FuZGlkYXRlSW5zdHJ1Y3Rpb25Db3VudCwgMTAwKTsKKyAgICBTRVQobWF4aW11bUZ1bmN0
aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQsIDE1MCk7CisgICAgU0VU
KG1heGltdW1GdW5jdGlvbkZvckNvbnN0cnVjdElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291
bnQsIDgwKTsKICAgICAKLSAgICBTRVQobWF4aW11bUlubGluaW5nRGVwdGgsIDMpOworICAgIFNF
VChtYXhpbXVtSW5saW5pbmdEZXB0aCwgNSk7CiAKICAgICBTRVQoZXhlY3V0aW9uQ291bnRlclZh
bHVlRm9yT3B0aW1pemVBZnRlcldhcm1VcCwgICAgIC0xMDAwKTsKICAgICBTRVQoZXhlY3V0aW9u
Q291bnRlclZhbHVlRm9yT3B0aW1pemVBZnRlckxvbmdXYXJtVXAsIC01MDAwKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHJldmlzaW9uIDk4MTky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIGV4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25G
b3JDYWxsT3AKIGV4dGVybiB1bnNpZ25lZCBtYXhpbXVtRnVuY3Rpb25Gb3JDb25zdHJ1Y3RPcHRp
bWl6YXRpb25DYW5kaWRhdGVJbnN0cnVjdGlvbkNvdW50OwogCiBleHRlcm4gdW5zaWduZWQgbWF4
aW11bUZ1bmN0aW9uRm9yQ2FsbElubGluZUNhbmRpZGF0ZUluc3RydWN0aW9uQ291bnQ7CitleHRl
cm4gdW5zaWduZWQgbWF4aW11bUZ1bmN0aW9uRm9yQ29uc3RydWN0SW5saW5lQ2FuZGlkYXRlSW5z
dHJ1Y3Rpb25Db3VudDsKIAogZXh0ZXJuIHVuc2lnbmVkIG1heGltdW1JbmxpbmluZ0RlcHRoOyAv
LyBEZXB0aCBvZiBpbmxpbmUgc3RhY2ssIHNvIDEgPSBubyBpbmxpbmluZywgMiA9IG9uZSBsZXZl
bCwgZXRjLgogCg==
</data>
<flag name="review"
          id="110085"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>