<?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>151246</bug_id>
          
          <creation_ts>2015-11-12 21:17:42 -0800</creation_ts>
          <short_desc>[JSC] Add support for the extra registers that can be clobbered by Specials</short_desc>
          <delta_ts>2015-11-16 16:49:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141756</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-12 21:17:42 -0800</bug_when>
    <thetext>[JSC] Add support for the extra registers that can be clobbered by any Special</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141762</commentid>
    <comment_count>1</comment_count>
      <attachid>265467</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-12 21:25:38 -0800</bug_when>
    <thetext>Created attachment 265467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141764</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-12 21:28:30 -0800</bug_when>
    <thetext>Attachment 265467 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:131:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2683:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2684:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2696:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2727:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2728:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2744:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2761:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2762:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2774:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2798:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2799:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 12 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141933</commentid>
    <comment_count>3</comment_count>
      <attachid>265498</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-13 13:44:12 -0800</bug_when>
    <thetext>Created attachment 265498
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1141934</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-13 13:46:12 -0800</bug_when>
    <thetext>Attachment 265498 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:131:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2683:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2684:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2696:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2727:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2728:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2744:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2761:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2762:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2774:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2798:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2799:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
Total errors found: 12 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142062</commentid>
    <comment_count>5</comment_count>
      <attachid>265498</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-14 12:17:39 -0800</bug_when>
    <thetext>Comment on attachment 265498
Patch

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

R=me

&gt; Source/JavaScriptCore/b3/air/AirInst.h:131
&gt; +    void forEachExtraClobberedTmps(Arg::Type, const Functor&amp; functor);

I would say ClobberedTmp instead of Tmps since each is singular.

&gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:98
&gt; +    const RegisterSet&amp; clobberedRegisters = extraClobberedRegs();

Let&apos;s standardize on tmp or reg, but not both.

&gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:99
&gt; +    clobberedRegisters.forEach([functor, type] (Reg reg) {

Hmmm... Ignore this comment.

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:153
&gt; +                // All the Def()s interfere with eachother.

Each other</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142307</commentid>
    <comment_count>6</comment_count>
      <attachid>265498</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-16 13:00:37 -0800</bug_when>
    <thetext>Comment on attachment 265498
Patch

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

&gt; Source/JavaScriptCore/b3/air/AirIteratedRegisterCoalescing.cpp:148
&gt;          inst.forEachTmp([&amp;] (Tmp&amp; arg, Arg::Role role, Arg::Type argType) {

Maybe you should consider a whole new function that combines forEachTmp and forEachExtra.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142397</commentid>
    <comment_count>7</comment_count>
      <attachid>265638</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 16:39:54 -0800</bug_when>
    <thetext>Created attachment 265638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142398</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-16 16:43:26 -0800</bug_when>
    <thetext>Attachment 265638 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:131:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2777:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2778:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2790:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2821:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2822:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2838:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2855:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2856:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2868:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2892:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:2893:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:61:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142399</commentid>
    <comment_count>9</comment_count>
      <attachid>265638</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 16:44:27 -0800</bug_when>
    <thetext>Comment on attachment 265638
Patch

Clearing flags on attachment: 265638

Committed r192497: &lt;http://trac.webkit.org/changeset/192497&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142400</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 16:44:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142406</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 16:49:23 -0800</bug_when>
    <thetext>*** Bug 151146 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265467</attachid>
            <date>2015-11-12 21:25:38 -0800</date>
            <delta_ts>2015-11-13 13:44:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151246-20151112212532.patch</filename>
            <type>text/plain</type>
            <size>23769</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTRlYTI1Y2I3YmRjODhiODVhYjgzOTU4ZjI3NWMxZGIyM2MxYTZiLi4wMTE0ZDIyM2YwMDIxMDhl
ZTczMDNjZWRmMjAxMTg4ZWQ2YmYxZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxNS0xMS0xMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgdGhlIGV4dHJhIHJlZ2lzdGVy
cyB0aGF0IGNhbiBiZSBjbG9iYmVyZWQgYnkgYW55IFNwZWNpYWwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTI0NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwZWNpYWxzIGNhbiBjbG9iYmVyIGFyYml0
cmFyeSByZWdpc3RlcnMuIFRoaXMgd2FzIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBieSBBaXIKKyAg
ICAgICAgYW5kIG5vdGhpbmcgd2FzIHByZXZlbnRpbmcgdXMgZnJvbSByZS1hbGxvY2F0aW5nIHRo
b3NlIHJlZ2lzdGVycy4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhl
IGV4dHJhIGNsb2JiZXJlZCByZWdpc3RlcnMgaW4gdGhlIHR3byByZWdpc3RlciBhbGxvY2F0b3Jz
LgorCisgICAgICAgIEkgYWxzbyBmaXhlZCB0aGUgcmUtc3BpbGxpbmcgRklYTUUgb2YgdGhlIGl0
ZXJhdGVkIGFsbG9jYXRvciBiZWNhdXNlIHRoZSB0ZXN0IG1pZ2h0CisgICAgICAgIG5vdCBhbHdh
eXMgY29udmVyZ2Ugd2l0aG91dCBpdC4gU2luY2Ugd2UgYXJlIGF0IG1heGltdW0gcmVnaXN0ZXIg
cHJlc3N1cmUgYXQgdGhlIHBhdGNoIHBvaW50LAorICAgICAgICB3ZSBjb3VsZCBiZSBhbHdheXMg
c3BpbGxpbmcgdGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggd291bGQgbG9vcCBmb3JldmVyLgorCisg
ICAgICAgIFRvIGZpeCB0aGUgcmUtc3BpbGxpbmcsIEkganVzdCBrZXB0IGEgU2V0IG9mIGV2ZXJ5
IHZhbHVlIHNwaWxsZWQgb3IgZmlsbGVkIHNvIGZhci4gV2hlbiBzZWxlY3RpbmcKKyAgICAgICAg
YSBzcGlsbCBjYW5kaWRhdGUsIHdlIG5ldmVyIHBpY2sgYSBUbXAgZnJvbSB0aGF0IHNldC4KKwor
ICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0Fpckluc3QuaDoKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaEV4dHJhQ2xvYmJlcmVkVG1wcyk6CisgICAg
ICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6Okl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmJ1aWxkKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmFkZEVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3I6OnNlbGVjdFNwaWxsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWRkU3BpbGxBbmRG
aWxsVG9Qcm9ncmFtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdPblR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZyk6CisgICAgICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAgICAgICogYjMvdGVz
dGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aG91dE91
cHV0Q2xvYmJlcnNHUEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZVBhdGNocG9p
bnRXaXRoT3VwdXRDbG9iYmVyc0dQQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2ltcGxl
UGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsb2JiZXJzRlBBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91cHV0Q2xvYmJlcnNGUEFyZ3MpOgorICAgICAgICAo
SlNDOjpCMzo6cnVuKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKwogMjAxNS0xMS0x
MiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEIzIHNob3VsZCBi
ZSBhYmxlIHRvIGNvbXBpbGUgcHJvZ3JhbXMgd2l0aCBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBD
aGVja011bApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcApp
bmRleCBiMWQxNGEyNGU2OGNmY2M2NTBjOWNjNWQ2Yjc0Y2RmN2M4NTZmMGM0Li40ODVhMWNlMGY2
OTg3N2I0OGRjMGI1ZGE1MWEzODk0YjA3YWZmNzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcApAQCAtNjcsOCArNjcsMTAgQEAgdm9pZCBnZW5lcmF0
ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKICAgICAKICAgICBlbGltaW5hdGVEZWFk
Q29kZShjb2RlKTsKIAotICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBhIHJlYWwg
cmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkK
LSAgICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG9ubHkgZm9yIHRlc3Rp
bmcuCisgICAgLy8gUmVnaXN0ZXIgYWxsb2NhdGlvbiBmb3IgYWxsIHRoZSBUbXBzIHRoYXQgZG8g
bm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY2hpbmUgcmVnaXN0ZXIuCisgICAgLy8gQWZ0ZXIg
dGhpcyBwaGFzZSwgZXZlcnkgVG1wIGhhcyBhIHJlZy4KKyAgICAvLworICAgIC8vIEZvciBkZWJ1
Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1dCBldmVyeXRoaW5nIHRv
IHRoZSBzdGFjayBiZXR3ZWVuIGVhY2ggSW5zdC4KICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZyhjb2RlKTsKIAogICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFu
ZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmNwcAppbmRleCAyNDFlODY2Mjg4ZGY2MDRiN2YyZGE5MmEyODY3NjY4MjA1N2IwZDdlLi5m
NTE4MmQwYzExMzI5MDBlOTljMjM2YjJjOTdhY2Q0ZmY0NzBiMjFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcApAQCAt
NDcsNiArNDcsOSBAQCB2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAgICAg
ICAgICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3MuCiAg
ICAgICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKICAgICAg
ICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKQorICAg
ICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5tZXJnZShpbnN0LmV4dHJhQ2xvYmJlcmVkUmVn
cygpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuaAppbmRleCAzNGQ5NDQ4NzRmY2NmZGRjOGZlYzlmNTA3ZjFkOTVkMzljNWRhMDQ1Li44MjBl
ODIzOGNmMDViMjI4YzI2MjJkNDY3M2Y0ZGViNWU2YjEwZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3QuaApAQCAtMTI2LDYgKzEyNiwxMCBAQCBwdWJsaWM6CiAgICAgLy8g
ZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0
cnVlLgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKIAorICAg
IC8vIEl0ZXJhdGUgb3ZlciB0aGUgY2xvYmJlcmVkIHJlZ2lzdGVycywgaWYgYW55LgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoRXh0cmFDbG9iYmVyZWRU
bXBzKEFyZzo6VHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKICAgICAvLyBVc2UgdGhp
cyB0byByZXBvcnQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25l
IGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5vdGUKICAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCBy
ZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0
cnVlLgogICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCmluZGV4IGNk
MDcyNTViMWJmN2IwODgzNGM5M2RjMDUyMjg0Mjk2OTYzMDFmMGIuLjM2Mzk2MGJmYjJkYWEyMzcy
ODE2ZTRhNzdmMDNiYTMyODM1NmM2MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgKQEAgLTg5LDYgKzg5LDIxIEBAIGlubGluZSBjb25zdCBSZWdp
c3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKICAgICByZXR1cm4gYXJnc1swXS5z
cGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CitpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRXh0cmFDbG9iYmVyZWRUbXBz
KEFyZzo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGlmICghaGFz
U3BlY2lhbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xv
YmJlcmVkUmVnaXN0ZXJzID0gZXh0cmFDbG9iYmVyZWRSZWdzKCk7CisgICAgY2xvYmJlcmVkUmVn
aXN0ZXJzLmZvckVhY2goW2Z1bmN0b3IsIHR5cGVdIChSZWcgcmVnKSB7CisgICAgICAgIGlmIChy
ZWcuaXNHUFIoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkgeworICAgICAgICAgICAgVG1wIHJlZ2lz
dGVyVG1wKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKHJlZ2lzdGVyVG1wKTsKKyAgICAgICAg
fQorICAgIH0pOworfQorCiBpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQogewogICAgIEFTU0VSVChoYXNTcGVjaWFs
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAppbmRleCAwYjIwNzY3ZjZiZGE2MzViNGM4
MDQwNmJiMDMwYmEzMDBhYzNhODE0Li43NWM4ODQ4NjA0NjRjNTA3NWE5ZWIxNjhhNDM1Y2YwNDVi
NmUzZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcApAQCAtMTMwLDggKzEzMCw5IEBA
IHN0cnVjdCBBYnNvbHV0ZVRtcEhlbHBlcjxBcmc6OkZQPiB7CiB0ZW1wbGF0ZTxBcmc6OlR5cGUg
dHlwZT4KIGNsYXNzIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yIHsKIHB1Ymxp
YzoKLSAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcihDb2RlJiBjb2RlKQot
ICAgICAgICA6IG1fbnVtYmVyT2ZSZWdpc3RlcnMocmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKS5z
aXplKCkpCisgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3IoQ29kZSYgY29k
ZSwgY29uc3QgSGFzaFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICAgICAgOiBtX3Vuc3Bp
bGxhYmxlVG1wKHVuc3BpbGxhYmxlVG1wKQorICAgICAgICAsIG1fbnVtYmVyT2ZSZWdpc3RlcnMo
cmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKS5zaXplKCkpCiAgICAgewogICAgICAgICBpbml0aWFs
aXplRGVncmVlcyhjb2RlKTsKIApAQCAtMTQ0LDEyICsxNDUsMTIgQEAgcHVibGljOgogCiAgICAg
dm9pZCBidWlsZChJbnN0JiBpbnN0LCBjb25zdCBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMmIGxv
Y2FsQ2FsYykKICAgICB7Ci0gICAgICAgIC8vIEFsbCB0aGUgRGVmKClzIGludGVyZmVyZSB3aXRo
IGVhY2hvdGhlci4KICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSkgewogICAgICAgICAgICAgaWYgKGFyZ1R5cGUg
IT0gdHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmIChBcmc6
OmlzRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJm
ZXJlIHdpdGggZWFjaG90aGVyLgogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChbJl0g
KFRtcCYgb3RoZXJBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTE1NywxMCArMTU4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKGFy
Zywgb3RoZXJBcmcpOwogICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8g
VGhleSBhbHNvIGludGVyZmVyZSB3aXRoIGV2ZXJ5dGhpbmcgdGhhdCBpcyBjbG9iYmVyZWQgYnkg
dGhlIGluc3RydWN0aW9uLgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEV4dHJhQ2xvYmJl
cmVkVG1wcyh0eXBlLCBbJl0gKFRtcCBwcmVjb2xvcmVkUmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFkZEVkZ2UoYXJnLCBwcmVjb2xvcmVkUmVnKTsKKyAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKICAgICAgICAgaWYgKE1vdmVJbnN0SGVscGVyPHR5
cGU+OjptYXlCZUNvYWxlc2NhYmxlKGluc3QpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWluc3Qu
aGFzU3BlY2lhbCgpKTsKKwogICAgICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IGluc3Qu
YXJncykgewogICAgICAgICAgICAgICAgIEhhc2hTZXQ8SW5zdCo+JiBsaXN0ID0gbV9tb3ZlTGlz
dFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhcmcudG1wKCkpXTsKICAg
ICAgICAgICAgICAgICBsaXN0LmFkZCgmaW5zdCk7CkBAIC0yODAsNiArMjg4LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9KTsKKworICAg
ICAgICAvLyBBbGwgdGhlIGNsb2JiZXJlZCByZWdpc3RlcnMgYWxvIGNvbmZsaWN0IHdpdGggdGhl
IGxpdmUgdmFsdWVzLgorICAgICAgICBpbnN0LmZvckVhY2hFeHRyYUNsb2JiZXJlZFRtcHModHlw
ZSwgWyZdIChUbXAgcHJlY29sb3JlZFJlZykgeworICAgICAgICAgICAgZm9yIChjb25zdCBUbXAm
IGxpdmVUbXAgOiBsaXZlVG1wKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAuaXNHUCgp
ID09ICh0eXBlID09IEFyZzo6R1ApKQorICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKHByZWNv
bG9yZWRSZWcsIGxpdmVUbXApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9CiAK
ICAgICB2b2lkIGFkZEVkZ2UoY29uc3QgVG1wJiBhLCBjb25zdCBUbXAmIGIpCkBAIC01NjMsMTAg
KzU3OSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VsZWN0U3BpbGwoKQogICAgIHsKICAgICAg
ICAgLy8gRklYTUU6IHdlIHNob3VsZCBzZWxlY3QgYSBnb29kIGNhbmRpZGF0ZSBiYXNlZCBvbiBh
bGwgdGhlIGluZm9ybWF0aW9uIHdlIGhhdmUuCi0gICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQg
bmV2ZXIgc2VsZWN0IGEgc3BpbGxlZCB0bXAgYXMgd2Ugd291bGQgbmV2ZXIgY29udmVyZ2UuCi0K
ICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fc3BpbGxXb3JrbGlzdC5iZWdpbigpOwogCisgICAg
ICAgIHdoaWxlIChpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCkgJiYgbV91bnNwaWxs
YWJsZVRtcC5jb250YWlucygqaXRlcmF0b3IpKQorICAgICAgICAgICAgKytpdGVyYXRvcjsKKwor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdv
cmtsaXN0LmVuZCgpLCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvbG9yIHRoZSBBaXIgZ3JhcGgg
d2l0aCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSByZWdpc3RlcnMuIik7CisKICAgICAgICAgYXV0
byB2aWN0aW1JdGVyYXRvciA9IGl0ZXJhdG9yOwogICAgICAgICB1bnNpZ25lZCBtYXhEZWdyZWUg
PSBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoKml0ZXJh
dG9yKV07CiAKQEAgLTU3NCw2ICs1OTMsOSBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKDtpdGVy
YXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHRtcERlZ3JlZSA9IG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6
YWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpXTsKICAgICAgICAgICAgIGlmICh0bXBEZWdyZWUgPiBt
YXhEZWdyZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcC5jb250YWlu
cygqaXRlcmF0b3IpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAg
ICAgICAgIHZpY3RpbUl0ZXJhdG9yID0gaXRlcmF0b3I7CiAgICAgICAgICAgICAgICAgbWF4RGVn
cmVlID0gdG1wRGVncmVlOwogICAgICAgICAgICAgfQpAQCAtNzQyLDYgKzc2NCw3IEBAIHByaXZh
dGU6CiAgICAgfTsKICAgICB0eXBlZGVmIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxJbnRlcmZlcmVu
Y2VFZGdlPiBJbnRlcmZlcmVuY2VFZGdlSGFzaFRyYWl0czsKIAorICAgIGNvbnN0IEhhc2hTZXQ8
VG1wPiYgbV91bnNwaWxsYWJsZVRtcDsKICAgICB1bnNpZ25lZCBtX251bWJlck9mUmVnaXN0ZXJz
IHsgMCB9OwogCiAgICAgLy8gVGhlIGludGVyZmVyZW5jZSBncmFwaC4KQEAgLTgxMyw4ICs4MzYs
MTEgQEAgc3RhdGljIHZvaWQgYXNzaWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShDb2RlJiBjb2Rl
LCBjb25zdCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGUKIH0KIAogdGVtcGxhdGU8QXJnOjpUeXBlIHR5
cGU+Ci1zdGF0aWMgdm9pZCBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW0oQ29kZSYgY29kZSwgY29u
c3QgSGFzaFNldDxUbXA+JiBzcGlsbGVkVG1wKQorc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRGaWxs
VG9Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxlZFRtcCwgSGFz
aFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcCkKIHsKKyAgICAvLyBBbGwgdGhlIHNwaWxsZWQgdmFs
dWVzIGJlY29tZSB1bnNwaWxsYWJsZS4KKyAgICB1bnNwaWxsYWJsZVRtcC5hZGQoc3BpbGxlZFRt
cC5iZWdpbigpLCBzcGlsbGVkVG1wLmVuZCgpKTsKKwogICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNs
b3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4KICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4g
c3RhY2tTbG90czsKICAgICBmb3IgKFRtcCB0bXAgOiBzcGlsbGVkVG1wKSB7CkBAIC04NTksNiAr
ODg1LDkgQEAgc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRGaWxsVG9Qcm9ncmFtKENvZGUmIGNvZGUs
IGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxlZFRtcCkKICAgICAgICAgICAgICAgICAgICAgVG1w
IG5ld1RtcCA9IGNvZGUubmV3VG1wKHR5cGUpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgbmV3VG1wKTsK
ICAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VG1wOworCisgICAgICAgICAgICAgICAgICAg
IC8vIEFueSBuZXcgRmlsbCgpIHNob3VsZCBuZXZlciBiZSBzcGlsbGVkLgorICAgICAgICAgICAg
ICAgICAgICB1bnNwaWxsYWJsZVRtcC5hZGQodG1wKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwg
YXJnKTsKQEAgLTg2OSwxMCArODk4LDEwIEBAIHN0YXRpYyB2b2lkIGFkZFNwaWxsQW5kRmlsbFRv
UHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBIYXNoU2V0PFRtcD4mIHNwaWxsZWRUbXApCiB9CiAK
IHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgotc3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdPblR5cGUoQ29kZSYgY29kZSkKK3N0YXRpYyB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nT25UeXBlKENvZGUmIGNvZGUsIEhhc2hTZXQ8VG1wPiYgdW5zcGlsbGFibGVUbXBz
KQogewogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNj
aW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAgSXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8dHlwZT4gYWxsb2NhdG9yKGNvZGUsIHVuc3BpbGxhYmxl
VG1wcyk7CiAgICAgICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5lc3MoY29kZSk7CiAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgICAgICBMaXZlbmVzczxUbXA+
OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CkBAIC04ODgsNyArOTE3LDcg
QEAgc3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGUoQ29kZSYgY29k
ZSkKICAgICAgICAgICAgIGFzc2lnblJlZ2lzdGVyVG9UbXBJblByb2dyYW0oY29kZSwgYWxsb2Nh
dG9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBhZGRTcGlsbEFu
ZEZpbGxUb1Byb2dyYW08dHlwZT4oY29kZSwgYWxsb2NhdG9yLnNwaWxsZWRUbXAoKSk7CisgICAg
ICAgIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbTx0eXBlPihjb2RlLCBhbGxvY2F0b3Iuc3BpbGxl
ZFRtcCgpLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgIH0KIH0KIApAQCAtODk5LDEwICs5MjgsMTMg
QEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJiBjb2RlKQogICAgIGJvb2wg
Z3BJc0NvbG9yZWQgPSBmYWxzZTsKICAgICBib29sIGZwSXNDb2xvcmVkID0gZmFsc2U7CiAKKyAg
ICBIYXNoU2V0PFRtcD4gdW5zcGlsbGFibGVHUHM7CisgICAgSGFzaFNldDxUbXA+IHVuc3BpbGxh
YmxlRlBzOworCiAgICAgLy8gRmlyc3Qgd2UgcnVuIGJvdGggYWxsb2NhdG9yIHRvZ2V0aGVyIGFz
IGxvbmcgYXMgdGhleSBib3RoIHNwaWxsLgogICAgIHdoaWxlICghZ3BJc0NvbG9yZWQgJiYgIWZw
SXNDb2xvcmVkKSB7Ci0gICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9y
PEFyZzo6R1A+IGdwQWxsb2NhdG9yKGNvZGUpOwotICAgICAgICBJdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZ0FsbG9jYXRvcjxBcmc6OkZQPiBmcEFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAgSXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8QXJnOjpHUD4gZ3BBbGxvY2F0b3IoY29k
ZSwgdW5zcGlsbGFibGVHUHMpOworICAgICAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0Fs
bG9jYXRvcjxBcmc6OkZQPiBmcEFsbG9jYXRvcihjb2RlLCB1bnNwaWxsYWJsZUZQcyk7CiAKICAg
ICAgICAgLy8gTGl2ZW5lc3MgQW5hbHlzaXMgY2FuIGJlIHByb2hpYml0aXZlbHkgZXhwZW5zaXZl
LiBJdCBpcyBzaGFyZWQKICAgICAgICAgLy8gYmV0d2VlbiB0aGUgdHdvIGFsbG9jYXRvcnMgdG8g
YXZvaWQgZG9pbmcgaXQgdHdpY2UuCkBAIC05MjYsMTkgKzk1OCwxOSBAQCB2b2lkIGl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICBhc3NpZ25SZWdpc3Rl
clRvVG1wSW5Qcm9ncmFtKGNvZGUsIGdwQWxsb2NhdG9yKTsKICAgICAgICAgICAgIGdwSXNDb2xv
cmVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhZGRTcGlsbEFuZEZpbGxU
b1Byb2dyYW08QXJnOjpHUD4oY29kZSwgZ3BBbGxvY2F0b3Iuc3BpbGxlZFRtcCgpKTsKKyAgICAg
ICAgICAgIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbTxBcmc6OkdQPihjb2RlLCBncEFsbG9jYXRv
ci5zcGlsbGVkVG1wKCksIHVuc3BpbGxhYmxlR1BzKTsKIAogICAgICAgICBpZiAoZnBBbGxvY2F0
b3Iuc3BpbGxlZFRtcCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXNzaWduUmVnaXN0ZXJU
b1RtcEluUHJvZ3JhbShjb2RlLCBmcEFsbG9jYXRvcik7CiAgICAgICAgICAgICBmcElzQ29sb3Jl
ZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkU3BpbGxBbmRGaWxsVG9Q
cm9ncmFtPEFyZzo6RlA+KGNvZGUsIGZwQWxsb2NhdG9yLnNwaWxsZWRUbXAoKSk7CisgICAgICAg
ICAgICBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW08QXJnOjpGUD4oY29kZSwgZnBBbGxvY2F0b3Iu
c3BpbGxlZFRtcCgpLCB1bnNwaWxsYWJsZUZQcyk7CiAgICAgfTsKIAogICAgIGlmICghZ3BJc0Nv
bG9yZWQpCi0gICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6R1A+
KGNvZGUpOworICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZTxBcmc6OkdQ
Pihjb2RlLCB1bnNwaWxsYWJsZUdQcyk7CiAgICAgaWYgKCFmcElzQ29sb3JlZCkKLSAgICAgICAg
aXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpGUD4oY29kZSk7CisgICAgICAg
IGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6RlA+KGNvZGUsIHVuc3BpbGxh
YmxlRlBzKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCmluZGV4
IGZmZDA4ZDk4M2Q0YzQwMDE0NGM5YTE0NTRiNDg4MGU5NzQ1ZDZmZjUuLmQ5Nzk2OTJiODE0MWI1
OWNiYzJmZWU2MWMyZDMwNWMwZDJmMzI2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKQEAgLTYzLDYgKzYzLDEwIEBAIHZv
aWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzRGVmKHJvbGUpICYmIGFyZy5pc1JlZygpKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmVnaXN0ZXJTZXQuc2V0KGFyZy5yZWcoKSk7CiAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgICAgIC8vIFNwZWNpYWwgY2FuIGFsc28gY2xvYmJlciBhcmJpdHJhcnkgcmVnaXN0ZXJzLgor
ICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKQorICAgICAgICAgICAgICAgIHJlZ2lz
dGVyU2V0Lm1lcmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwogICAgICAgICB9OwogCiAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4
LS07KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IGRlN2Q2YWJhOTdhYWUy
NzJkZjMzMmU5NzkxZmMwOWUxOWU3ZDk0MzQuLmUyYWE2ZDQ0NDM5ZjY3YzdiZDA1ZWU3Y2VjYjNl
Y2I5YTBhNTc3ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0yNjY2LDYg
KzI2NjYsMTU0IEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnQoKQogICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50Pihwcm9jLCAxLCAyKSA9PSAzKTsKIH0KIAordm9pZCB0ZXN0U2ltcGxlUGF0
Y2hwb2ludFdpdGhvdXRPdXB1dENsb2JiZXJzR1BBcmdzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBh
cmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgIFZhbHVlKiBjb25zdDEgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgNDIpOworICAgIFZhbHVlKiBjb25zdDIgPSByb290LT5hcHBlbmROZXc8Q29u
c3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTMpOworCisgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgVm9pZCwg
T3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQoR1BSSW5mbzo6
YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBwYXRjaHBvaW50LT5h
cHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsK
KyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDIsIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAg
IFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7Cisg
ICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAgIENI
RUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBmZiksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAw
ZmYpLCBwYXJhbXMucmVwc1sxXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAw
ZmYpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICB9KTsKKworICAgIFZhbHVlKiBy
ZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzEs
IGFyZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywg
MSwgMikgPT0gMyk7Cit9CisKK3ZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9i
YmVyc0dQQXJncygpCit7CisgICAgLy8gV2UgY2FuJ3QgcHJlZGljdCB3aGVyZSB0aGUgb3V0cHV0
IHdpbGwgYmUgYnV0IHdlIHdhbnQgdG8gYmUgc3VyZSBpdCBpcyBub3QKKyAgICAvLyBvbmUgb2Yg
dGhlIGNsb2JiZXJlZCByZWdpc3RlcnMgd2hpY2ggaXMgYSBiaXQgaGFyZCB0byB0ZXN0LgorICAg
IC8vCisgICAgLy8gV2hhdCB3ZSBkbyBpcyBmb3JjZSB0aGUgaGFuZCBvZiBvdXIgcmVnaXN0ZXIg
YWxsb2NhdG9yIGJ5IGNsb2JiZXJpbmcgYWJzb2x1dGVseQorICAgIC8vIGV2ZXJ5dGhpbmcgYnV0
IDEuIFRoZSBvbmx5IHZhbGlkIGFsbG9jYXRpb24gaXMgdG8gZ2l2ZSBpdCB0byB0aGUgcmVzdWx0
IGFuZAorICAgIC8vIHNwaWxsIGV2ZXJ5dGhpbmcgZWxzZS4KKworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFy
ZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgVmFsdWUqIGNvbnN0MSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCA0Mik7CisgICAgVmFsdWUqIGNvbnN0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25z
dDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMyk7CisKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQ2NCwg
T3JpZ2luKCkpOworCisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckFsbCA9IFJlZ2lzdGVyU2V0Ojph
bGxHUFJzKCk7CisgICAgY2xvYmJlckFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpKTsKKyAgICBjbG9iYmVyQWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFy
ZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgY2xvYmJlckFsbC5jbGVhcihHUFJJbmZvOjphcmd1bWVu
dEdQUjIpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlckFsbCk7CisKKyAgICBwYXRj
aHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEsIFZhbHVlUmVwOjpTb21lUmVn
aXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDIs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKworICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUo
KSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFtcy5y
ZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQuYWRk
NjQocGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKworICAgICAg
ICAgICAgY2xvYmJlckFsbC5mb3JFYWNoKFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCByZWcuZ3By
KCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgVmFsdWUqIHJlc3VsdCA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcx
LCBhcmcyKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJu
LCBPcmlnaW4oKSwgcmVzdWx0KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9j
LCAxLCAyKSA9PSA1OCk7Cit9CisKK3ZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3Vw
dXRDbG9iYmVyc0ZQQXJncygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRG
UFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIxKTsKKyAgICBWYWx1ZSogY29u
c3QxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0
Mi41KTsKKyAgICBWYWx1ZSogY29uc3QyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAxMy4xKTsKKworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIFZvaWQsIE9yaWdp
bigpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0KEZQUkluZm86OmFyZ3Vt
ZW50RlBSMCwgRlBSSW5mbzo6YXJndW1lbnRGUFIxKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KENvbnN0cmFpbmVkVmFsdWUoY29uc3QxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAg
cGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QyLCBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOworICAgICAg
ICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNGUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwc1sxXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91Ymxl
KHBhcmFtcy5yZXBzWzBdLmZwcigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91Ymxl
KHBhcmFtcy5yZXBzWzFdLmZwcigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91Ymxl
KEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJs
ZShGUFJJbmZvOjphcmd1bWVudEZQUjEpOworICAgICAgICB9KTsKKworICAgIFZhbHVlKiByZXN1
bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzEsIGFy
ZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIHJlc3VsdCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywg
MS41LCAyLjUpID09IDQpOworfQorCit2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91cHV0
Q2xvYmJlcnNGUEFyZ3MoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBS
MCk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMSk7CisgICAgVmFsdWUqIGNvbnN0
MSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIu
NSk7CisgICAgVmFsdWUqIGNvbnN0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgMTMuMSk7CisKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBEb3VibGUsIE9yaWdp
bigpKTsKKworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJBbGwgPSBSZWdpc3RlclNldDo6YWxsRlBS
cygpOworICAgIGNsb2JiZXJBbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSk7CisgICAgY2xvYmJlckFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJl
UmVnaXN0ZXJzKCkpOworICAgIGNsb2JiZXJBbGwuY2xlYXIoRlBSSW5mbzo6YXJndW1lbnRGUFIy
KTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJBbGwpOworCisgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVy
KSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QyLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisg
ICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0g
Myk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0ZQUigpKTsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFy
YW1zLnJlcHNbMl0uaXNGUFIoKSk7CisgICAgICAgICAgICBqaXQuYWRkRG91YmxlKHBhcmFtcy5y
ZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5mcHIoKSwgcGFyYW1zLnJlcHNbMF0uZnByKCkp
OworCisgICAgICAgICAgICBjbG9iYmVyQWxsLmZvckVhY2goWyZdIChSZWcgcmVnKSB7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUocmVnLmZwcigpKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9KTsKKworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHBhdGNocG9pbnQsCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJnMSwgYXJnMikpOworICAgIHJv
b3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3Vs
dCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywgMS41LCAyLjUpID09
IDU5LjYpOworfQorCiB2b2lkIHRlc3RQYXRjaHBvaW50Q2FsbEFyZygpCiB7CiAgICAgUHJvY2Vk
dXJlIHByb2M7CkBAIC00Mzk0LDYgKzQ1NDIsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmls
dGVyKQogICAgIFJVTih0ZXN0Q29tcGxleCg0LCAzODQpKTsKIAogICAgIFJVTih0ZXN0U2ltcGxl
UGF0Y2hwb2ludCgpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRD
bG9iYmVyc0dQQXJncygpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRD
bG9iYmVyc0dQQXJncygpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3Vw
dXRDbG9iYmVyc0ZQQXJncygpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3Vw
dXRDbG9iYmVyc0ZQQXJncygpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRDYWxsQXJnKCkpOwog
ICAgIFJVTih0ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0ZXIoKSk7CiAgICAgUlVOKHRlc3RQYXRj
aHBvaW50QW55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCmluZGV4
IGVlZDZhOTQwZjJhM2U4M2UyNjBmMTdiOTE3MDBjYzE3Nzc4MWFkODMuLjQzYzJiNzRmMzExZjg0
ZWFmZDZmMjIxNzFlODE0NWQwYTk1NzkwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogICAgICAgICBzZXRNYW55KHJl
Z3MuLi4pOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3RhY2tSZWdpc3Rl
cnMoKTsKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgcmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCBzdGFja1JlZ2lzdGVy
cygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCByZXNlcnZlZEhh
cmR3YXJlUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHJ1bnRpbWVSZWdpc3Rl
cnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lhbFJlZ2lzdGVycygpOyAvLyBUaGUg
dW5pb24gb2Ygc3RhY2ssIHJlc2VydmVkIGhhcmR3YXJlLCBhbmQgcnVudGltZSByZWdpc3RlcnMu
CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKQEAgLTU5LDgg
KzU5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHZvbGF0aWxl
UmVnaXN0ZXJzRm9ySlNDYWxsKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpOyAvLyBUaGUgdW5pb24gb2YgY2FsbGVlIHNhdmVzIGFuZCBzcGVjaWFs
IHJlZ2lzdGVycy4KLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsR1BScygpOwotICAgIHN0YXRp
YyBSZWdpc3RlclNldCBhbGxGUFJzKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJl
Z2lzdGVyU2V0IGFsbEdQUnMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0
ZXJTZXQgYWxsRlBScygpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxSZWdpc3RlcnMoKTsK
IAogICAgIHN0YXRpYyBSZWdpc3RlclNldCByZWdpc3RlcnNUb05vdFNhdmVGb3JKU0NhbGwoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265498</attachid>
            <date>2015-11-13 13:44:12 -0800</date>
            <delta_ts>2015-11-16 16:39:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151246-20151113134405.patch</filename>
            <type>text/plain</type>
            <size>23943</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NWIyMjI2MjNjMDY5MmYzNGU0MmU2NTk5NWVkYzRiNzIxOGQ2ZmViLi5jZWE0OWUyNjQ3NjE2MWUy
YmZjZDUwNmRlMmYxZDkxMmI1Y2Q4NjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxNS0xMS0xMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgdGhlIGV4dHJhIHJlZ2lzdGVy
cyB0aGF0IGNhbiBiZSBjbG9iYmVyZWQgYnkgYW55IFNwZWNpYWwKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTI0NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwZWNpYWxzIGNhbiBjbG9iYmVyIGFyYml0
cmFyeSByZWdpc3RlcnMuIFRoaXMgd2FzIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBieSBBaXIKKyAg
ICAgICAgYW5kIG5vdGhpbmcgd2FzIHByZXZlbnRpbmcgdXMgZnJvbSByZS1hbGxvY2F0aW5nIHRo
b3NlIHJlZ2lzdGVycy4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhl
IGV4dHJhIGNsb2JiZXJlZCByZWdpc3RlcnMgaW4gdGhlIHR3byByZWdpc3RlciBhbGxvY2F0b3Jz
LgorCisgICAgICAgIEkgYWxzbyBmaXhlZCB0aGUgcmUtc3BpbGxpbmcgRklYTUUgb2YgdGhlIGl0
ZXJhdGVkIGFsbG9jYXRvciBiZWNhdXNlIHRoZSB0ZXN0IG1pZ2h0CisgICAgICAgIG5vdCBhbHdh
eXMgY29udmVyZ2Ugd2l0aG91dCBpdC4gU2luY2Ugd2UgYXJlIGF0IG1heGltdW0gcmVnaXN0ZXIg
cHJlc3N1cmUgYXQgdGhlIHBhdGNoIHBvaW50LAorICAgICAgICB3ZSBjb3VsZCBiZSBhbHdheXMg
c3BpbGxpbmcgdGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggd291bGQgbG9vcCBmb3JldmVyLgorCisg
ICAgICAgIFRvIGZpeCB0aGUgcmUtc3BpbGxpbmcsIEkganVzdCBrZXB0IGEgU2V0IG9mIGV2ZXJ5
IHZhbHVlIHNwaWxsZWQgb3IgZmlsbGVkIHNvIGZhci4gV2hlbiBzZWxlY3RpbmcKKyAgICAgICAg
YSBzcGlsbCBjYW5kaWRhdGUsIHdlIG5ldmVyIHBpY2sgYSBUbXAgZnJvbSB0aGF0IHNldC4KKwor
ICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmdlbmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0Fpckluc3QuaDoKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaEV4dHJhQ2xvYmJlcmVkVG1wcyk6CisgICAg
ICAgICogYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6Okl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmJ1aWxkKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I6OmFkZEVkZ2Vz
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3I6OnNlbGVjdFNwaWxsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6YWRkU3BpbGxBbmRG
aWxsVG9Qcm9ncmFtKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXRlcmF0ZWRSZWdpc3RlckNv
YWxlc2NpbmdPblR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZyk6CisgICAgICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAgICAgICogYjMvdGVz
dGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aG91dE91
cHV0Q2xvYmJlcnNHUEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZVBhdGNocG9p
bnRXaXRoT3VwdXRDbG9iYmVyc0dQQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2ltcGxl
UGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsb2JiZXJzRlBBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91cHV0Q2xvYmJlcnNGUEFyZ3MpOgorICAgICAgICAo
SlNDOjpCMzo6cnVuKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuaDoKKwogMjAxNS0xMS0x
MyAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cG90dGVyODhAZ21haWwuY29tPgogCiAgICAgICAgIEFs
bG93IGFueSBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uIGFzIGEgdmFsaWQgQXNzaWdubWVudEVsZW1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKaW5kZXgg
YjFkMTRhMjRlNjhjZmNjNjUwYzljYzVkNmI3NGNkZjdjODU2ZjBjNC4uNDg1YTFjZTBmNjk4Nzdi
NDhkYzBiNWRhNTFhMzg5NGIwN2FmZjcyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5jcHAKQEAgLTY3LDggKzY3LDEwIEBAIHZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgCiAgICAgZWxpbWluYXRlRGVhZENvZGUo
Y29kZSk7CiAKLSAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFsIHJlZ2lz
dGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygpCi0gICAg
Ly8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0aW5nLgor
ICAgIC8vIFJlZ2lzdGVyIGFsbG9jYXRpb24gZm9yIGFsbCB0aGUgVG1wcyB0aGF0IGRvIG5vdCBo
YXZlIGEgY29ycmVzcG9uZGluZyBtYWNoaW5lIHJlZ2lzdGVyLgorICAgIC8vIEFmdGVyIHRoaXMg
cGhhc2UsIGV2ZXJ5IFRtcCBoYXMgYSByZWcuCisgICAgLy8KKyAgICAvLyBGb3IgZGVidWdnaW5n
LCB5b3UgY2FuIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKSB0byBwdXQgZXZlcnl0aGluZyB0byB0aGUg
c3RhY2sgYmV0d2VlbiBlYWNoIEluc3QuCiAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmco
Y29kZSk7CiAKICAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBp
bG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5j
cHAKaW5kZXggMjQxZTg2NjI4OGRmNjA0YjdmMmRhOTJhMjg2NzY2ODIwNTdiMGQ3ZS4uZGQyOGY0
YjIyMjE5NTkxOTkxZDNlZDcxOTgwMDJkOTEzMzFhZjgxYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJBaXJJbnNlcnRpb25T
ZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgogI2luY2x1ZGUgIkFpclBoYXNlU2Nv
cGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewpA
QCAtNDcsNiArNDgsOSBAQCB2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCiAgICAg
ICAgICAgICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3Mu
CiAgICAgICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKICAg
ICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKQor
ICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5tZXJnZShpbnN0LmV4dHJhQ2xvYmJlcmVk
UmVncygpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaAppbmRleCAzNGQ5NDQ4NzRmY2NmZGRjOGZlYzlmNTA3ZjFkOTVkMzljNWRhMDQ1Li44
MjBlODIzOGNmMDViMjI4YzI2MjJkNDY3M2Y0ZGViNWU2YjEwZGE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuaApAQCAtMTI2LDYgKzEyNiwxMCBAQCBwdWJsaWM6CiAgICAg
Ly8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJu
cyB0cnVlLgogICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKIAor
ICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgY2xvYmJlcmVkIHJlZ2lzdGVycywgaWYgYW55LgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoRXh0cmFDbG9iYmVy
ZWRUbXBzKEFyZzo6VHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKICAgICAvLyBVc2Ug
dGhpcyB0byByZXBvcnQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBk
b25lIGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5vdGUKICAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5
LCByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJu
cyB0cnVlLgogICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCmluZGV4
IGNkMDcyNTViMWJmN2IwODgzNGM5M2RjMDUyMjg0Mjk2OTYzMDFmMGIuLjM2Mzk2MGJmYjJkYWEy
MzcyODE2ZTRhNzdmMDNiYTMyODM1NmM2MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKQEAgLTg5LDYgKzg5LDIxIEBAIGlubGluZSBjb25zdCBS
ZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKICAgICByZXR1cm4gYXJnc1sw
XS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7CiB9CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CitpbmxpbmUgdm9pZCBJbnN0Ojpmb3JFYWNoRXh0cmFDbG9iYmVyZWRU
bXBzKEFyZzo6VHlwZSB0eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGlmICgh
aGFzU3BlY2lhbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBSZWdpc3RlclNldCYg
Y2xvYmJlcmVkUmVnaXN0ZXJzID0gZXh0cmFDbG9iYmVyZWRSZWdzKCk7CisgICAgY2xvYmJlcmVk
UmVnaXN0ZXJzLmZvckVhY2goW2Z1bmN0b3IsIHR5cGVdIChSZWcgcmVnKSB7CisgICAgICAgIGlm
IChyZWcuaXNHUFIoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkgeworICAgICAgICAgICAgVG1wIHJl
Z2lzdGVyVG1wKHJlZyk7CisgICAgICAgICAgICBmdW5jdG9yKHJlZ2lzdGVyVG1wKTsKKyAgICAg
ICAgfQorICAgIH0pOworfQorCiBpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJz
KGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQogewogICAgIEFTU0VSVChoYXNTcGVj
aWFsKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVy
YXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAppbmRleCAwYjIwNzY3ZjZiZGE2MzVi
NGM4MDQwNmJiMDMwYmEzMDBhYzNhODE0Li43NWM4ODQ4NjA0NjRjNTA3NWE5ZWIxNjhhNDM1Y2Yw
NDViNmUzZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcApAQCAtMTMwLDggKzEzMCw5
IEBAIHN0cnVjdCBBYnNvbHV0ZVRtcEhlbHBlcjxBcmc6OkZQPiB7CiB0ZW1wbGF0ZTxBcmc6OlR5
cGUgdHlwZT4KIGNsYXNzIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yIHsKIHB1
YmxpYzoKLSAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcihDb2RlJiBjb2Rl
KQotICAgICAgICA6IG1fbnVtYmVyT2ZSZWdpc3RlcnMocmVnc0luUHJpb3JpdHlPcmRlcih0eXBl
KS5zaXplKCkpCisgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3IoQ29kZSYg
Y29kZSwgY29uc3QgSGFzaFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcCkKKyAgICAgICAgOiBtX3Vu
c3BpbGxhYmxlVG1wKHVuc3BpbGxhYmxlVG1wKQorICAgICAgICAsIG1fbnVtYmVyT2ZSZWdpc3Rl
cnMocmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKS5zaXplKCkpCiAgICAgewogICAgICAgICBpbml0
aWFsaXplRGVncmVlcyhjb2RlKTsKIApAQCAtMTQ0LDEyICsxNDUsMTIgQEAgcHVibGljOgogCiAg
ICAgdm9pZCBidWlsZChJbnN0JiBpbnN0LCBjb25zdCBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMm
IGxvY2FsQ2FsYykKICAgICB7Ci0gICAgICAgIC8vIEFsbCB0aGUgRGVmKClzIGludGVyZmVyZSB3
aXRoIGVhY2hvdGhlci4KICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiBhcmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSkgewogICAgICAgICAgICAgaWYgKGFyZ1R5
cGUgIT0gdHlwZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmIChB
cmc6OmlzRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50
ZXJmZXJlIHdpdGggZWFjaG90aGVyLgogICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcChb
Jl0gKFRtcCYgb3RoZXJBcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGFyZ1R5cGUgIT0gdHlwZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKQEAgLTE1NywxMCArMTU4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdl
KGFyZywgb3RoZXJBcmcpOwogICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg
Ly8gVGhleSBhbHNvIGludGVyZmVyZSB3aXRoIGV2ZXJ5dGhpbmcgdGhhdCBpcyBjbG9iYmVyZWQg
YnkgdGhlIGluc3RydWN0aW9uLgorICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEV4dHJhQ2xv
YmJlcmVkVG1wcyh0eXBlLCBbJl0gKFRtcCBwcmVjb2xvcmVkUmVnKSB7CisgICAgICAgICAgICAg
ICAgICAgIGFkZEVkZ2UoYXJnLCBwcmVjb2xvcmVkUmVnKTsKKyAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAKICAgICAgICAgaWYgKE1vdmVJbnN0SGVscGVy
PHR5cGU+OjptYXlCZUNvYWxlc2NhYmxlKGluc3QpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWlu
c3QuaGFzU3BlY2lhbCgpKTsKKwogICAgICAgICAgICAgZm9yIChjb25zdCBBcmcmIGFyZyA6IGlu
c3QuYXJncykgewogICAgICAgICAgICAgICAgIEhhc2hTZXQ8SW5zdCo+JiBsaXN0ID0gbV9tb3Zl
TGlzdFtBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleChhcmcudG1wKCkpXTsK
ICAgICAgICAgICAgICAgICBsaXN0LmFkZCgmaW5zdCk7CkBAIC0yODAsNiArMjg4LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9KTsKKwor
ICAgICAgICAvLyBBbGwgdGhlIGNsb2JiZXJlZCByZWdpc3RlcnMgYWxvIGNvbmZsaWN0IHdpdGgg
dGhlIGxpdmUgdmFsdWVzLgorICAgICAgICBpbnN0LmZvckVhY2hFeHRyYUNsb2JiZXJlZFRtcHMo
dHlwZSwgWyZdIChUbXAgcHJlY29sb3JlZFJlZykgeworICAgICAgICAgICAgZm9yIChjb25zdCBU
bXAmIGxpdmVUbXAgOiBsaXZlVG1wKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpdmVUbXAuaXNH
UCgpID09ICh0eXBlID09IEFyZzo6R1ApKQorICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKHBy
ZWNvbG9yZWRSZWcsIGxpdmVUbXApOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9
CiAKICAgICB2b2lkIGFkZEVkZ2UoY29uc3QgVG1wJiBhLCBjb25zdCBUbXAmIGIpCkBAIC01NjMs
MTAgKzU3OSwxMyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2VsZWN0U3BpbGwoKQogICAgIHsKICAg
ICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBzZWxlY3QgYSBnb29kIGNhbmRpZGF0ZSBiYXNlZCBv
biBhbGwgdGhlIGluZm9ybWF0aW9uIHdlIGhhdmUuCi0gICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91
bGQgbmV2ZXIgc2VsZWN0IGEgc3BpbGxlZCB0bXAgYXMgd2Ugd291bGQgbmV2ZXIgY29udmVyZ2Uu
Ci0KICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fc3BpbGxXb3JrbGlzdC5iZWdpbigpOwogCisg
ICAgICAgIHdoaWxlIChpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCkgJiYgbV91bnNw
aWxsYWJsZVRtcC5jb250YWlucygqaXRlcmF0b3IpKQorICAgICAgICAgICAgKytpdGVyYXRvcjsK
KworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGls
bFdvcmtsaXN0LmVuZCgpLCAiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvbG9yIHRoZSBBaXIgZ3Jh
cGggd2l0aCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSByZWdpc3RlcnMuIik7CisKICAgICAgICAg
YXV0byB2aWN0aW1JdGVyYXRvciA9IGl0ZXJhdG9yOwogICAgICAgICB1bnNpZ25lZCBtYXhEZWdy
ZWUgPSBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxwZXI8dHlwZT46OmFic29sdXRlSW5kZXgoKml0
ZXJhdG9yKV07CiAKQEAgLTU3NCw2ICs1OTMsOSBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKDtp
dGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5kKCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAg
ICAgIHVuc2lnbmVkIHRtcERlZ3JlZSA9IG1fZGVncmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBl
Pjo6YWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpXTsKICAgICAgICAgICAgIGlmICh0bXBEZWdyZWUg
PiBtYXhEZWdyZWUpIHsKKyAgICAgICAgICAgICAgICBpZiAobV91bnNwaWxsYWJsZVRtcC5jb250
YWlucygqaXRlcmF0b3IpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAg
ICAgICAgICAgIHZpY3RpbUl0ZXJhdG9yID0gaXRlcmF0b3I7CiAgICAgICAgICAgICAgICAgbWF4
RGVncmVlID0gdG1wRGVncmVlOwogICAgICAgICAgICAgfQpAQCAtNzQyLDYgKzc2NCw3IEBAIHBy
aXZhdGU6CiAgICAgfTsKICAgICB0eXBlZGVmIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxJbnRlcmZl
cmVuY2VFZGdlPiBJbnRlcmZlcmVuY2VFZGdlSGFzaFRyYWl0czsKIAorICAgIGNvbnN0IEhhc2hT
ZXQ8VG1wPiYgbV91bnNwaWxsYWJsZVRtcDsKICAgICB1bnNpZ25lZCBtX251bWJlck9mUmVnaXN0
ZXJzIHsgMCB9OwogCiAgICAgLy8gVGhlIGludGVyZmVyZW5jZSBncmFwaC4KQEAgLTgxMyw4ICs4
MzYsMTEgQEAgc3RhdGljIHZvaWQgYXNzaWduUmVnaXN0ZXJUb1RtcEluUHJvZ3JhbShDb2RlJiBj
b2RlLCBjb25zdCBJdGVyYXRlZFJlZ2lzdGVyQ29hbGUKIH0KIAogdGVtcGxhdGU8QXJnOjpUeXBl
IHR5cGU+Ci1zdGF0aWMgdm9pZCBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW0oQ29kZSYgY29kZSwg
Y29uc3QgSGFzaFNldDxUbXA+JiBzcGlsbGVkVG1wKQorc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRG
aWxsVG9Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxlZFRtcCwg
SGFzaFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcCkKIHsKKyAgICAvLyBBbGwgdGhlIHNwaWxsZWQg
dmFsdWVzIGJlY29tZSB1bnNwaWxsYWJsZS4KKyAgICB1bnNwaWxsYWJsZVRtcC5hZGQoc3BpbGxl
ZFRtcC5iZWdpbigpLCBzcGlsbGVkVG1wLmVuZCgpKTsKKwogICAgIC8vIEFsbG9jYXRlIHN0YWNr
IHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4KICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90
Kj4gc3RhY2tTbG90czsKICAgICBmb3IgKFRtcCB0bXAgOiBzcGlsbGVkVG1wKSB7CkBAIC04NTks
NiArODg1LDkgQEAgc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRGaWxsVG9Qcm9ncmFtKENvZGUmIGNv
ZGUsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxlZFRtcCkKICAgICAgICAgICAgICAgICAgICAg
VG1wIG5ld1RtcCA9IGNvZGUubmV3VG1wKHR5cGUpOwogICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgbmV3VG1w
KTsKICAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VG1wOworCisgICAgICAgICAgICAgICAg
ICAgIC8vIEFueSBuZXcgRmlsbCgpIHNob3VsZCBuZXZlciBiZSBzcGlsbGVkLgorICAgICAgICAg
ICAgICAgICAgICB1bnNwaWxsYWJsZVRtcC5hZGQodG1wKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCiAgICAgICAgICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRt
cCwgYXJnKTsKQEAgLTg2OSwxMCArODk4LDEwIEBAIHN0YXRpYyB2b2lkIGFkZFNwaWxsQW5kRmls
bFRvUHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBIYXNoU2V0PFRtcD4mIHNwaWxsZWRUbXApCiB9
CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgotc3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmdPblR5cGUoQ29kZSYgY29kZSkKK3N0YXRpYyB2b2lkIGl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nT25UeXBlKENvZGUmIGNvZGUsIEhhc2hTZXQ8VG1wPiYgdW5zcGlsbGFibGVU
bXBzKQogewogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2Fs
ZXNjaW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAgSXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8dHlwZT4gYWxsb2NhdG9yKGNvZGUsIHVuc3BpbGxh
YmxlVG1wcyk7CiAgICAgICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5lc3MoY29kZSk7CiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CiAgICAgICAgICAgICBMaXZlbmVzczxU
bXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CkBAIC04ODgsNyArOTE3
LDcgQEAgc3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGUoQ29kZSYg
Y29kZSkKICAgICAgICAgICAgIGFzc2lnblJlZ2lzdGVyVG9UbXBJblByb2dyYW0oY29kZSwgYWxs
b2NhdG9yKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBhZGRTcGls
bEFuZEZpbGxUb1Byb2dyYW08dHlwZT4oY29kZSwgYWxsb2NhdG9yLnNwaWxsZWRUbXAoKSk7Cisg
ICAgICAgIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbTx0eXBlPihjb2RlLCBhbGxvY2F0b3Iuc3Bp
bGxlZFRtcCgpLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgIH0KIH0KIApAQCAtODk5LDEwICs5Mjgs
MTMgQEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZyhDb2RlJiBjb2RlKQogICAgIGJv
b2wgZ3BJc0NvbG9yZWQgPSBmYWxzZTsKICAgICBib29sIGZwSXNDb2xvcmVkID0gZmFsc2U7CiAK
KyAgICBIYXNoU2V0PFRtcD4gdW5zcGlsbGFibGVHUHM7CisgICAgSGFzaFNldDxUbXA+IHVuc3Bp
bGxhYmxlRlBzOworCiAgICAgLy8gRmlyc3Qgd2UgcnVuIGJvdGggYWxsb2NhdG9yIHRvZ2V0aGVy
IGFzIGxvbmcgYXMgdGhleSBib3RoIHNwaWxsLgogICAgIHdoaWxlICghZ3BJc0NvbG9yZWQgJiYg
IWZwSXNDb2xvcmVkKSB7Ci0gICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2Nh
dG9yPEFyZzo6R1A+IGdwQWxsb2NhdG9yKGNvZGUpOwotICAgICAgICBJdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZ0FsbG9jYXRvcjxBcmc6OkZQPiBmcEFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAg
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8QXJnOjpHUD4gZ3BBbGxvY2F0b3Io
Y29kZSwgdW5zcGlsbGFibGVHUHMpOworICAgICAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
Z0FsbG9jYXRvcjxBcmc6OkZQPiBmcEFsbG9jYXRvcihjb2RlLCB1bnNwaWxsYWJsZUZQcyk7CiAK
ICAgICAgICAgLy8gTGl2ZW5lc3MgQW5hbHlzaXMgY2FuIGJlIHByb2hpYml0aXZlbHkgZXhwZW5z
aXZlLiBJdCBpcyBzaGFyZWQKICAgICAgICAgLy8gYmV0d2VlbiB0aGUgdHdvIGFsbG9jYXRvcnMg
dG8gYXZvaWQgZG9pbmcgaXQgdHdpY2UuCkBAIC05MjYsMTkgKzk1OCwxOSBAQCB2b2lkIGl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICBhc3NpZ25SZWdp
c3RlclRvVG1wSW5Qcm9ncmFtKGNvZGUsIGdwQWxsb2NhdG9yKTsKICAgICAgICAgICAgIGdwSXND
b2xvcmVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhZGRTcGlsbEFuZEZp
bGxUb1Byb2dyYW08QXJnOjpHUD4oY29kZSwgZ3BBbGxvY2F0b3Iuc3BpbGxlZFRtcCgpKTsKKyAg
ICAgICAgICAgIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbTxBcmc6OkdQPihjb2RlLCBncEFsbG9j
YXRvci5zcGlsbGVkVG1wKCksIHVuc3BpbGxhYmxlR1BzKTsKIAogICAgICAgICBpZiAoZnBBbGxv
Y2F0b3Iuc3BpbGxlZFRtcCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgYXNzaWduUmVnaXN0
ZXJUb1RtcEluUHJvZ3JhbShjb2RlLCBmcEFsbG9jYXRvcik7CiAgICAgICAgICAgICBmcElzQ29s
b3JlZCA9IHRydWU7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkU3BpbGxBbmRGaWxs
VG9Qcm9ncmFtPEFyZzo6RlA+KGNvZGUsIGZwQWxsb2NhdG9yLnNwaWxsZWRUbXAoKSk7CisgICAg
ICAgICAgICBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW08QXJnOjpGUD4oY29kZSwgZnBBbGxvY2F0
b3Iuc3BpbGxlZFRtcCgpLCB1bnNwaWxsYWJsZUZQcyk7CiAgICAgfTsKIAogICAgIGlmICghZ3BJ
c0NvbG9yZWQpCi0gICAgICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6
R1A+KGNvZGUpOworICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ09uVHlwZTxBcmc6
OkdQPihjb2RlLCB1bnNwaWxsYWJsZUdQcyk7CiAgICAgaWYgKCFmcElzQ29sb3JlZCkKLSAgICAg
ICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpGUD4oY29kZSk7CisgICAg
ICAgIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6RlA+KGNvZGUsIHVuc3Bp
bGxhYmxlRlBzKTsKIH0KIAogfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCmlu
ZGV4IGZmZDA4ZDk4M2Q0YzQwMDE0NGM5YTE0NTRiNDg4MGU5NzQ1ZDZmZjUuLmQ5Nzk2OTJiODE0
MWI1OWNiYzJmZWU2MWMyZDMwNWMwZDJmMzI2ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKQEAgLTYzLDYgKzYzLDEwIEBA
IHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRGVmKHJvbGUpICYmIGFyZy5pc1JlZygpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmVnaXN0ZXJTZXQuc2V0KGFyZy5yZWcoKSk7CiAgICAgICAgICAgICAgICAgfSk7CisKKyAg
ICAgICAgICAgIC8vIFNwZWNpYWwgY2FuIGFsc28gY2xvYmJlciBhcmJpdHJhcnkgcmVnaXN0ZXJz
LgorICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKQorICAgICAgICAgICAgICAgIHJl
Z2lzdGVyU2V0Lm1lcmdlKGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwogICAgICAgICB9Owog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdElu
ZGV4LS07KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IGRlN2Q2YWJhOTdh
YWUyNzJkZjMzMmU5NzkxZmMwOWUxOWU3ZDk0MzQuLmUyYWE2ZDQ0NDM5ZjY3YzdiZDA1ZWU3Y2Vj
YjNlY2I5YTBhNTc3ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0yNjY2
LDYgKzI2NjYsMTU0IEBAIHZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnQoKQogICAgIENIRUNLKGNv
bXBpbGVBbmRSdW48aW50Pihwcm9jLCAxLCAyKSA9PSAzKTsKIH0KIAordm9pZCB0ZXN0U2ltcGxl
UGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsb2JiZXJzR1BBcmdzKCkKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVl
KiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgIFZhbHVlKiBjb25zdDEgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgNDIpOworICAgIFZhbHVlKiBjb25zdDIgPSByb290LT5hcHBlbmROZXc8
Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTMpOworCisgICAgUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gcm9vdC0+YXBwZW5kTmV3PFBhdGNocG9pbnRWYWx1ZT4ocHJvYywgVm9p
ZCwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQoR1BSSW5m
bzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBwYXRjaHBvaW50
LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIp
KTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDIsIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAg
ICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMik7
CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0dQUigpKTsKKyAgICAgICAgICAg
IENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOworICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBmZiksIHBhcmFtcy5yZXBzWzBdLmdwcigp
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBm
ZjAwZmYpLCBwYXJhbXMucmVwc1sxXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZmKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBm
ZjAwZmYpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICB9KTsKKworICAgIFZhbHVl
KiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFy
ZzEsIGFyZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJv
YywgMSwgMikgPT0gMyk7Cit9CisKK3ZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRD
bG9iYmVyc0dQQXJncygpCit7CisgICAgLy8gV2UgY2FuJ3QgcHJlZGljdCB3aGVyZSB0aGUgb3V0
cHV0IHdpbGwgYmUgYnV0IHdlIHdhbnQgdG8gYmUgc3VyZSBpdCBpcyBub3QKKyAgICAvLyBvbmUg
b2YgdGhlIGNsb2JiZXJlZCByZWdpc3RlcnMgd2hpY2ggaXMgYSBiaXQgaGFyZCB0byB0ZXN0Lgor
ICAgIC8vCisgICAgLy8gV2hhdCB3ZSBkbyBpcyBmb3JjZSB0aGUgaGFuZCBvZiBvdXIgcmVnaXN0
ZXIgYWxsb2NhdG9yIGJ5IGNsb2JiZXJpbmcgYWJzb2x1dGVseQorICAgIC8vIGV2ZXJ5dGhpbmcg
YnV0IDEuIFRoZSBvbmx5IHZhbGlkIGFsbG9jYXRpb24gaXMgdG8gZ2l2ZSBpdCB0byB0aGUgcmVz
dWx0IGFuZAorICAgIC8vIHNwaWxsIGV2ZXJ5dGhpbmcgZWxzZS4KKworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUq
IGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgVmFsdWUqIGNvbnN0MSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHBy
b2MsIE9yaWdpbigpLCA0Mik7CisgICAgVmFsdWUqIGNvbnN0MiA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMyk7CisKKyAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQ2
NCwgT3JpZ2luKCkpOworCisgICAgUmVnaXN0ZXJTZXQgY2xvYmJlckFsbCA9IFJlZ2lzdGVyU2V0
OjphbGxHUFJzKCk7CisgICAgY2xvYmJlckFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpKTsKKyAgICBjbG9iYmVyQWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVk
SGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgY2xvYmJlckFsbC5jbGVhcihHUFJJbmZvOjphcmd1
bWVudEdQUjIpOworICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoY2xvYmJlckFsbCk7CisKKyAgICBw
YXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEsIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25z
dDIsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKworICAgIHBhdGNocG9pbnQtPnNldEdlbmVy
YXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzLnNp
emUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzBdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0uaXNHUFIoKSk7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKHBhcmFt
cy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5ncHIoKSk7CisgICAgICAgICAgICBqaXQu
YWRkNjQocGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKworICAg
ICAgICAgICAgY2xvYmJlckFsbC5mb3JFYWNoKFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCByZWcu
Z3ByKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgVmFsdWUqIHJlc3Vs
dCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgcGF0Y2hwb2lu
dCwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBh
cmcxLCBhcmcyKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihw
cm9jLCAxLCAyKSA9PSA1OCk7Cit9CisKK3ZvaWQgdGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0
T3VwdXRDbG9iYmVyc0ZQQXJncygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1l
bnRGUFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIxKTsKKyAgICBWYWx1ZSog
Y29uc3QxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigp
LCA0Mi41KTsKKyAgICBWYWx1ZSogY29uc3QyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0RG91Ymxl
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMy4xKTsKKworICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBvaW50VmFsdWU+KHByb2MsIFZvaWQsIE9y
aWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0KEZQUkluZm86OmFy
Z3VtZW50RlBSMCwgRlBSSW5mbzo6YXJndW1lbnRGUFIxKSk7CisgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7Cisg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QyLCBWYWx1ZVJlcDo6
U29tZVJlZ2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICBb
Jl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBh
cmFtcykgeworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHMuc2l6ZSgpID09IDIpOworICAg
ICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNGUFIoKSk7CisgICAgICAgICAgICBDSEVD
SyhwYXJhbXMucmVwc1sxXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91
YmxlKHBhcmFtcy5yZXBzWzBdLmZwcigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91
YmxlKHBhcmFtcy5yZXBzWzFdLmZwcigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlWmVyb1RvRG91
YmxlKEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgICAgICAgICBqaXQubW92ZVplcm9Ub0Rv
dWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjEpOworICAgICAgICB9KTsKKworICAgIFZhbHVlKiBy
ZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzEs
IGFyZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJv
YywgMS41LCAyLjUpID09IDQpOworfQorCit2b2lkIHRlc3RTaW1wbGVQYXRjaHBvaW50V2l0aE91
cHV0Q2xvYmJlcnNGUEFyZ3MoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50
RlBSMCk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMSk7CisgICAgVmFsdWUqIGNv
bnN0MSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
NDIuNSk7CisgICAgVmFsdWUqIGNvbnN0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMTMuMSk7CisKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2ludFZhbHVlPihwcm9jLCBEb3VibGUsIE9y
aWdpbigpKTsKKworICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXJBbGwgPSBSZWdpc3RlclNldDo6YWxs
RlBScygpOworICAgIGNsb2JiZXJBbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKSk7CisgICAgY2xvYmJlckFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3
YXJlUmVnaXN0ZXJzKCkpOworICAgIGNsb2JiZXJBbGwuY2xlYXIoRlBSSW5mbzo6YXJndW1lbnRG
UFIyKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNsb2JiZXJBbGwpOworCisgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QxLCBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QyLCBW
YWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisKKyAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
CisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwcy5zaXplKCkg
PT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1swXS5pc0ZQUigpKTsKKyAgICAg
ICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBSKCkpOworICAgICAgICAgICAgQ0hFQ0so
cGFyYW1zLnJlcHNbMl0uaXNGUFIoKSk7CisgICAgICAgICAgICBqaXQuYWRkRG91YmxlKHBhcmFt
cy5yZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5mcHIoKSwgcGFyYW1zLnJlcHNbMF0uZnBy
KCkpOworCisgICAgICAgICAgICBjbG9iYmVyQWxsLmZvckVhY2goWyZdIChSZWcgcmVnKSB7Cisg
ICAgICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3VibGUocmVnLmZwcigpKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9KTsKKworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHBhdGNocG9pbnQsCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJnMSwgYXJnMikpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJl
c3VsdCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywgMS41LCAyLjUp
ID09IDU5LjYpOworfQorCiB2b2lkIHRlc3RQYXRjaHBvaW50Q2FsbEFyZygpCiB7CiAgICAgUHJv
Y2VkdXJlIHByb2M7CkBAIC00Mzk0LDYgKzQ1NDIsMTAgQEAgdm9pZCBydW4oY29uc3QgY2hhciog
ZmlsdGVyKQogICAgIFJVTih0ZXN0Q29tcGxleCg0LCAzODQpKTsKIAogICAgIFJVTih0ZXN0U2lt
cGxlUGF0Y2hwb2ludCgpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3Vw
dXRDbG9iYmVyc0dQQXJncygpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3Vw
dXRDbG9iYmVyc0dQQXJncygpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0
T3VwdXRDbG9iYmVyc0ZQQXJncygpKTsKKyAgICBSVU4odGVzdFNpbXBsZVBhdGNocG9pbnRXaXRo
T3VwdXRDbG9iYmVyc0ZQQXJncygpKTsKICAgICBSVU4odGVzdFBhdGNocG9pbnRDYWxsQXJnKCkp
OwogICAgIFJVTih0ZXN0UGF0Y2hwb2ludEZpeGVkUmVnaXN0ZXIoKSk7CiAgICAgUlVOKHRlc3RQ
YXRjaHBvaW50QW55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCmlu
ZGV4IGVlZDZhOTQwZjJhM2U4M2UyNjBmMTdiOTE3MDBjYzE3Nzc4MWFkODMuLjQzYzJiNzRmMzEx
Zjg0ZWFmZDZmMjIxNzFlODE0NWQwYTk1NzkwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgKQEAgLTQ1LDggKzQ1LDggQEAgcHVibGljOgogICAgICAgICBzZXRNYW55
KHJlZ3MuLi4pOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3RhY2tSZWdp
c3RlcnMoKTsKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgcmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVy
cygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCBzdGFja1JlZ2lz
dGVycygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBSZWdpc3RlclNldCByZXNlcnZl
ZEhhcmR3YXJlUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHJ1bnRpbWVSZWdp
c3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgc3BlY2lhbFJlZ2lzdGVycygpOyAvLyBU
aGUgdW5pb24gb2Ygc3RhY2ssIHJlc2VydmVkIGhhcmR3YXJlLCBhbmQgcnVudGltZSByZWdpc3Rl
cnMuCiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKQEAgLTU5
LDggKzU5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHZvbGF0
aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IHN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpOyAvLyBUaGUgdW5pb24gb2YgY2FsbGVlIHNhdmVzIGFuZCBzcGVj
aWFsIHJlZ2lzdGVycy4KLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsR1BScygpOwotICAgIHN0
YXRpYyBSZWdpc3RlclNldCBhbGxGUFJzKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFJlZ2lzdGVyU2V0IGFsbEdQUnMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgUmVn
aXN0ZXJTZXQgYWxsRlBScygpOwogICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxSZWdpc3RlcnMo
KTsKIAogICAgIHN0YXRpYyBSZWdpc3RlclNldCByZWdpc3RlcnNUb05vdFNhdmVGb3JKU0NhbGwo
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265638</attachid>
            <date>2015-11-16 16:39:54 -0800</date>
            <delta_ts>2015-11-16 16:43:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151246-20151116163945.patch</filename>
            <type>text/plain</type>
            <size>24765</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyNDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MTZiYmRkZDMzOGIyN2Q5MTljOTlkMzYzYzcyOTQ2ODdiYTViMDQzLi4yYjg2Y2E1OTM4NDE5MjY4
YzVjODVjYWJhYTU4OGJkMzY2MjMyNjRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxNS0xMS0xNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgdGhlIGV4dHJhIHJlZ2lzdGVy
cyB0aGF0IGNhbiBiZSBjbG9iYmVyZWQgYnkgU3BlY2lhbHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTI0NgorCisgICAgICAgIFJldmlld2VkIGJ5
IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFNwZWNpYWxzIGNhbiBjbG9iYmVyIGFyYml0cmFy
eSByZWdpc3RlcnMuIFRoaXMgd2FzIG5vdCBoYW5kbGVkIGNvcnJlY3RseSBieSBBaXIKKyAgICAg
ICAgYW5kIG5vdGhpbmcgd2FzIHByZXZlbnRpbmcgdXMgZnJvbSByZS1hbGxvY2F0aW5nIHRob3Nl
IHJlZ2lzdGVycy4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIGV4
dHJhIGNsb2JiZXJlZCByZWdpc3RlcnMgaW4gdGhlIHR3byByZWdpc3RlciBhbGxvY2F0b3JzLgor
CisgICAgICAgIEkgYWxzbyBmaXhlZCB0aGUgcmUtc3BpbGxpbmcgRklYTUUgb2YgdGhlIGl0ZXJh
dGVkIGFsbG9jYXRvciBiZWNhdXNlIHRoZSB0ZXN0IG1pZ2h0CisgICAgICAgIG5vdCBhbHdheXMg
Y29udmVyZ2Ugd2l0aG91dCBpdC4gU2luY2Ugd2UgYXJlIGF0IG1heGltdW0gcmVnaXN0ZXIgcHJl
c3N1cmUgYXQgdGhlIHBhdGNoIHBvaW50LAorICAgICAgICB3ZSBjb3VsZCBiZSBhbHdheXMgc3Bp
bGxpbmcgdGhlIHJldHVybiB2YWx1ZSwgd2hpY2ggd291bGQgbG9vcCBmb3JldmVyLgorCisgICAg
ICAgIFRvIGZpeCB0aGUgcmUtc3BpbGxpbmcsIEkganVzdCBrZXB0IGEgU2V0IG9mIGV2ZXJ5IHZh
bHVlIHNwaWxsZWQgb3IgZmlsbGVkIHNvIGZhci4gV2hlbiBzZWxlY3RpbmcKKyAgICAgICAgYSBz
cGlsbCBjYW5kaWRhdGUsIHdlIG5ldmVyIHBpY2sgYSBUbXAgZnJvbSB0aGF0IHNldC4KKworICAg
ICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omdl
bmVyYXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMvYWly
L0Fpckluc3QuaDoKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKToKKyAg
ICAgICAgKiBiMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6SXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6YnVpbGQpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjo6YWRkRWRn
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0Fs
bG9jYXRvcjo6c2VsZWN0U3BpbGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjphZGRTcGlsbEFu
ZEZpbGxUb1Byb2dyYW0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppdGVyYXRlZFJlZ2lzdGVy
Q29hbGVzY2luZ09uVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Oml0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy90
ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRob3V0
T3VwdXRDbG9iYmVyc0dQQXJncyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U2ltcGxlUGF0Y2hw
b2ludFdpdGhPdXB1dENsb2JiZXJzR1BBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTaW1w
bGVQYXRjaHBvaW50V2l0aG91dE91cHV0Q2xvYmJlcnNGUEFyZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVyc0ZQQXJncyk6CisgICAgICAg
IChKU0M6OkIzOjpydW4pOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5oOgorCiAyMDE1LTEx
LTE2ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBC
dWlsZCBmaXggYWZ0ZXIgcjE5MjQ5MgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAppbmRleCBiMWQxNGEyNGU2OGNmY2M2NTBjOWNjNWQ2Yjc0Y2RmN2M4NTZm
MGM0Li40ODVhMWNlMGY2OTg3N2I0OGRjMGI1ZGE1MWEzODk0YjA3YWZmNzJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcApAQCAtNjcsOCArNjcsMTAg
QEAgdm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKICAgICAKICAg
ICBlbGltaW5hdGVEZWFkQ29kZShjb2RlKTsKIAotICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291
bGQgaGF2ZSBhIHJlYWwgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3Bp
bGxFdmVyeXRoaW5nKCkKLSAgICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9y
IG9ubHkgZm9yIHRlc3RpbmcuCisgICAgLy8gUmVnaXN0ZXIgYWxsb2NhdGlvbiBmb3IgYWxsIHRo
ZSBUbXBzIHRoYXQgZG8gbm90IGhhdmUgYSBjb3JyZXNwb25kaW5nIG1hY2hpbmUgcmVnaXN0ZXIu
CisgICAgLy8gQWZ0ZXIgdGhpcyBwaGFzZSwgZXZlcnkgVG1wIGhhcyBhIHJlZy4KKyAgICAvLwor
ICAgIC8vIEZvciBkZWJ1Z2dpbmcsIHlvdSBjYW4gdXNlIHNwaWxsRXZlcnl0aGluZygpIHRvIHB1
dCBldmVyeXRoaW5nIHRvIHRoZSBzdGFjayBiZXR3ZWVuIGVhY2ggSW5zdC4KICAgICBpdGVyYXRl
ZFJlZ2lzdGVyQ29hbGVzY2luZyhjb2RlKTsKIAogICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQg
dGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBs
aWNpdC4gSXQgYWxzbwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAppbmRleCAyNDFlODY2Mjg4ZGY2MDRiN2YyZGE5MmEyODY3
NjY4MjA1N2IwZDdlLi5kZDI4ZjRiMjIyMTk1OTE5OTFkM2VkNzE5ODAwMmQ5MTMzMWFmODFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQWlyQ29kZS5oIgogI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CkBAIC00Nyw2ICs0OCw5IEBAIHZvaWQgaGFuZGxlQ2FsbGVlU2F2
ZXMoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgLy8gQXQgZmlyc3Qgd2UganVzdCBy
ZWNvcmQgYWxsIHVzZWQgcmVncy4KICAgICAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVz
LnNldCh0bXAucmVnKCkpOwogICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAo
aW5zdC5oYXNTcGVjaWFsKCkpCisgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLm1lcmdl
KGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkpOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCmluZGV4IDM0ZDk0NDg3NGZjY2ZkZGM4ZmVjOWY1
MDdmMWQ5NWQzOWM1ZGEwNDUuLjA0MzBmZjk0NDk0YzdlZTJlYjZlYTRiN2M4NDBhYjBjNzQwNWU2
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCkBAIC0xMjYsNiArMTI2
LDEwIEBAIHB1YmxpYzoKICAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlm
IGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCiAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
Q2xvYmJlcmVkUmVncygpOwogCisgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBEZWZzIGFuZCB0aGUg
ZXh0cmEgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKEFyZzo6VHlwZSwgY29u
c3QgRnVuY3RvciYgZnVuY3Rvcik7CisKICAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQgd2hpY2gg
cmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3JlIGNvZGVn
ZW4uIE5vdGUKICAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVnaXN0ZXJz
KCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgogICAgIHZvaWQgcmVw
b3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCmluZGV4IGNkMDcyNTViMWJmN2IwODgzNGM5
M2RjMDUyMjg0Mjk2OTYzMDFmMGIuLjEzMDc1OTAyYTlmNjcxNmNjNThjZDE3YjFiMDI4MDFhMDlm
OTI2Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElu
bGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVz
LmgKQEAgLTg5LDYgKzg5LDI2IEBAIGlubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0
cmFDbG9iYmVyZWRSZWdzKCkKICAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xv
YmJlcmVkUmVncygqdGhpcyk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Citpbmxp
bmUgdm9pZCBJbnN0Ojpmb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAoQXJnOjpUeXBlIHR5
cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgZm9yRWFjaFRtcChbJl0gKFRtcCYg
dG1wQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIGFyZ1R5cGUpIHsKKyAgICAgICAgaWYg
KGFyZ1R5cGUgPT0gdHlwZSAmJiBBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgZnVuY3Rv
cih0bXBBcmcpOworICAgIH0pOworCisgICAgaWYgKCFoYXNTcGVjaWFsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWRSZWdpc3RlcnMgPSBleHRy
YUNsb2JiZXJlZFJlZ3MoKTsKKyAgICBjbG9iYmVyZWRSZWdpc3RlcnMuZm9yRWFjaChbZnVuY3Rv
ciwgdHlwZV0gKFJlZyByZWcpIHsKKyAgICAgICAgaWYgKHJlZy5pc0dQUigpID09ICh0eXBlID09
IEFyZzo6R1ApKSB7CisgICAgICAgICAgICBUbXAgcmVnaXN0ZXJUbXAocmVnKTsKKyAgICAgICAg
ICAgIGZ1bmN0b3IocmVnaXN0ZXJUbXApOworICAgICAgICB9CisgICAgfSk7Cit9CisKIGlubGlu
ZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMpCiB7CiAgICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmcuY3BwCmluZGV4IGZmMDIwNTAwOTVhN2QxYWVkZmEyMGU3ZjZhZDdiYmQ3NzUzOTI3MmQu
LjM4YjUxOTI2MzE3YzVjOTVjN2EzMWVjNjIxYWMzMjY2YWJmMTEzOGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Npbmcu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3Rl
ckNvYWxlc2NpbmcuY3BwCkBAIC0xMzAsOCArMTMwLDkgQEAgc3RydWN0IEFic29sdXRlVG1wSGVs
cGVyPEFyZzo6RlA+IHsKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgogY2xhc3MgSXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3IgewogcHVibGljOgotICAgIEl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nQWxsb2NhdG9yKENvZGUmIGNvZGUpCi0gICAgICAgIDogbV9udW1iZXJPZlJl
Z2lzdGVycyhyZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpLnNpemUoKSkKKyAgICBJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcihDb2RlJiBjb2RlLCBjb25zdCBIYXNoU2V0PFRtcD4m
IHVuc3BpbGxhYmxlVG1wKQorICAgICAgICA6IG1fdW5zcGlsbGFibGVUbXAodW5zcGlsbGFibGVU
bXApCisgICAgICAgICwgbV9udW1iZXJPZlJlZ2lzdGVycyhyZWdzSW5Qcmlvcml0eU9yZGVyKHR5
cGUpLnNpemUoKSkKICAgICB7CiAgICAgICAgIGluaXRpYWxpemVEZWdyZWVzKGNvZGUpOwogCkBA
IC0xNDQsMjAgKzE0NSwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGJ1aWxkKEluc3QmIGluc3Qs
IGNvbnN0IExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyYgbG9jYWxDYWxjKQogICAgIHsKLSAgICAg
ICAgLy8gQWxsIHRoZSBEZWYoKXMgaW50ZXJmZXJlIHdpdGggZWFjaG90aGVyLgotICAgICAgICBp
bnN0LmZvckVhY2hUbXAoWyZdIChUbXAmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSBh
cmdUeXBlKSB7Ci0gICAgICAgICAgICBpZiAoYXJnVHlwZSAhPSB0eXBlKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKLSAgICAg
ICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAmIG90aGVyQXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlICE9IHR5
cGUpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGluc3QuZm9yRWFj
aERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKHR5cGUsIFsmXSAoVG1wJiBhcmcpIHsKKyAgICAgICAg
ICAgIC8vIEFsbCB0aGUgRGVmKClzIGludGVyZmVyZSB3aXRoIGVhY2hvdGhlciBhbmQgd2l0aCBh
bGwgdGhlIGV4dHJhIGNsb2JiZXJlZCBUbXBzLgorICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIG5v
dCB1c2UgZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKCkgaGVyZSBzaW5jZSBjb2xvcmVk
IFRtcHMKKyAgICAgICAgICAgIC8vIGRvIG5vdCBuZWVkIGludGVyZmVyZW5jZSBlZGdlcyBpbiBv
dXIgaW1wbGVtZW50YXRpb24uCisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoWyZdIChUbXAm
IG90aGVyQXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIG90aGVyQXJnVHlwZSkgeworICAg
ICAgICAgICAgICAgIGlmIChvdGhlckFyZ1R5cGUgIT0gdHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShhcmcsIG90aGVyQXJnKTsKLSAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Rl
Zihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShhcmcsIG90aGVyQXJnKTsKKyAg
ICAgICAgICAgIH0pOwogICAgICAgICB9KTsKIAogICAgICAgICBpZiAoTW92ZUluc3RIZWxwZXI8
dHlwZT46Om1heUJlQ29hbGVzY2FibGUoaW5zdCkpIHsKQEAgLTI4MiwxMiArMjgwLDEwIEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBhZGRFZGdlcyhJbnN0JiBpbnN0LCBjb25zdCBIYXNoU2V0PFRtcD4m
IGxpdmVUbXApCiAgICAgewogICAgICAgICAvLyBBbGwgdGhlIERlZigpcyBpbnRlcmZlcmUgd2l0
aCBldmVydGhpbmcgbGl2ZS4KLSAgICAgICAgaW5zdC5mb3JFYWNoVG1wKFsmXSAoVG1wJiBhcmcs
IEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgYXJnVHlwZSkgewotICAgICAgICAgICAgaWYgKGFy
Z1R5cGUgPT0gdHlwZSAmJiBBcmc6OmlzRGVmKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgZm9y
IChjb25zdCBUbXAmIGxpdmVUbXAgOiBsaXZlVG1wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZEVkZ2UoYXJnLCBsaXZlVG1wKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
IGluc3QuZm9yRWFjaERlZkFuZEV4dHJhQ2xvYmJlcmVkVG1wKHR5cGUsIFsmXSAoVG1wJiBhcmcp
IHsKKyAgICAgICAgICAgIGZvciAoY29uc3QgVG1wJiBsaXZlVG1wIDogbGl2ZVRtcCkgeworICAg
ICAgICAgICAgICAgIGlmIChsaXZlVG1wLmlzR1AoKSA9PSAodHlwZSA9PSBBcmc6OkdQKSkKKyAg
ICAgICAgICAgICAgICAgICAgYWRkRWRnZShhcmcsIGxpdmVUbXApOwogICAgICAgICAgICAgfQog
ICAgICAgICB9KTsKICAgICB9CkBAIC01NzMsMTAgKzU2OSwxMyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2VsZWN0U3BpbGwoKQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBzZWxl
Y3QgYSBnb29kIGNhbmRpZGF0ZSBiYXNlZCBvbiBhbGwgdGhlIGluZm9ybWF0aW9uIHdlIGhhdmUu
Ci0gICAgICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgbmV2ZXIgc2VsZWN0IGEgc3BpbGxlZCB0bXAg
YXMgd2Ugd291bGQgbmV2ZXIgY29udmVyZ2UuCi0KICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
c3BpbGxXb3JrbGlzdC5iZWdpbigpOwogCisgICAgICAgIHdoaWxlIChpdGVyYXRvciAhPSBtX3Nw
aWxsV29ya2xpc3QuZW5kKCkgJiYgbV91bnNwaWxsYWJsZVRtcC5jb250YWlucygqaXRlcmF0b3Ip
KQorICAgICAgICAgICAgKytpdGVyYXRvcjsKKworICAgICAgICBSRUxFQVNFX0FTU0VSVF9XSVRI
X01FU1NBR0UoaXRlcmF0b3IgIT0gbV9zcGlsbFdvcmtsaXN0LmVuZCgpLCAiSXQgaXMgbm90IHBv
c3NpYmxlIHRvIGNvbG9yIHRoZSBBaXIgZ3JhcGggd2l0aCB0aGUgbnVtYmVyIG9mIGF2YWlsYWJs
ZSByZWdpc3RlcnMuIik7CisKICAgICAgICAgYXV0byB2aWN0aW1JdGVyYXRvciA9IGl0ZXJhdG9y
OwogICAgICAgICB1bnNpZ25lZCBtYXhEZWdyZWUgPSBtX2RlZ3JlZXNbQWJzb2x1dGVUbXBIZWxw
ZXI8dHlwZT46OmFic29sdXRlSW5kZXgoKml0ZXJhdG9yKV07CiAKQEAgLTU4NCw2ICs1ODMsOSBA
QCBwcml2YXRlOgogICAgICAgICBmb3IgKDtpdGVyYXRvciAhPSBtX3NwaWxsV29ya2xpc3QuZW5k
KCk7ICsraXRlcmF0b3IpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHRtcERlZ3JlZSA9IG1fZGVn
cmVlc1tBYnNvbHV0ZVRtcEhlbHBlcjx0eXBlPjo6YWJzb2x1dGVJbmRleCgqaXRlcmF0b3IpXTsK
ICAgICAgICAgICAgIGlmICh0bXBEZWdyZWUgPiBtYXhEZWdyZWUpIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV91bnNwaWxsYWJsZVRtcC5jb250YWlucygqaXRlcmF0b3IpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAgICAgICAgIHZpY3RpbUl0ZXJhdG9yID0gaXRl
cmF0b3I7CiAgICAgICAgICAgICAgICAgbWF4RGVncmVlID0gdG1wRGVncmVlOwogICAgICAgICAg
ICAgfQpAQCAtNzQ5LDYgKzc1MSw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB0eXBlZGVmIFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxJbnRlcmZlcmVuY2VFZGdlPiBJbnRlcmZlcmVuY2VFZGdlSGFz
aFRyYWl0czsKIAorICAgIGNvbnN0IEhhc2hTZXQ8VG1wPiYgbV91bnNwaWxsYWJsZVRtcDsKICAg
ICB1bnNpZ25lZCBtX251bWJlck9mUmVnaXN0ZXJzIHsgMCB9OwogCiAgICAgLy8gVGhlIGludGVy
ZmVyZW5jZSBncmFwaC4KQEAgLTkwMSw4ICs5MDQsMTEgQEAgc3RhdGljIHZvaWQgYXNzaWduUmVn
aXN0ZXJUb1RtcEluUHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBJdGVyYXRlZFJlZ2lzdGVyQ29h
bGUKIH0KIAogdGVtcGxhdGU8QXJnOjpUeXBlIHR5cGU+Ci1zdGF0aWMgdm9pZCBhZGRTcGlsbEFu
ZEZpbGxUb1Byb2dyYW0oQ29kZSYgY29kZSwgY29uc3QgSGFzaFNldDxUbXA+JiBzcGlsbGVkVG1w
KQorc3RhdGljIHZvaWQgYWRkU3BpbGxBbmRGaWxsVG9Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0
IEhhc2hTZXQ8VG1wPiYgc3BpbGxlZFRtcCwgSGFzaFNldDxUbXA+JiB1bnNwaWxsYWJsZVRtcCkK
IHsKKyAgICAvLyBBbGwgdGhlIHNwaWxsZWQgdmFsdWVzIGJlY29tZSB1bnNwaWxsYWJsZS4KKyAg
ICB1bnNwaWxsYWJsZVRtcC5hZGQoc3BpbGxlZFRtcC5iZWdpbigpLCBzcGlsbGVkVG1wLmVuZCgp
KTsKKwogICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICBIYXNoTWFwPFRtcCwgU3RhY2tTbG90Kj4gc3RhY2tTbG90czsKICAgICBmb3IgKFRtcCB0
bXAgOiBzcGlsbGVkVG1wKSB7CkBAIC05NDcsNiArOTUzLDkgQEAgc3RhdGljIHZvaWQgYWRkU3Bp
bGxBbmRGaWxsVG9Qcm9ncmFtKENvZGUmIGNvZGUsIGNvbnN0IEhhc2hTZXQ8VG1wPiYgc3BpbGxl
ZFRtcCkKICAgICAgICAgICAgICAgICAgICAgVG1wIG5ld1RtcCA9IGNvZGUubmV3VG1wKHR5cGUp
OwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KGluc3RJbmRleCwgbW92
ZSwgaW5zdC5vcmlnaW4sIGFyZywgbmV3VG1wKTsKICAgICAgICAgICAgICAgICAgICAgdG1wID0g
bmV3VG1wOworCisgICAgICAgICAgICAgICAgICAgIC8vIEFueSBuZXcgRmlsbCgpIHNob3VsZCBu
ZXZlciBiZSBzcGlsbGVkLgorICAgICAgICAgICAgICAgICAgICB1bnNwaWxsYWJsZVRtcC5hZGQo
dG1wKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYo
cm9sZSkpCiAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoaW5zdEluZGV4
ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKQEAgLTk1NywxMCArOTY2LDEwIEBA
IHN0YXRpYyB2b2lkIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbShDb2RlJiBjb2RlLCBjb25zdCBI
YXNoU2V0PFRtcD4mIHNwaWxsZWRUbXApCiB9CiAKIHRlbXBsYXRlPEFyZzo6VHlwZSB0eXBlPgot
c3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdPblR5cGUoQ29kZSYgY29kZSkK
K3N0YXRpYyB2b2lkIGl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlKENvZGUmIGNvZGUs
IEhhc2hTZXQ8VG1wPiYgdW5zcGlsbGFibGVUbXBzKQogewogICAgIHdoaWxlICh0cnVlKSB7Ci0g
ICAgICAgIEl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPHR5cGU+IGFsbG9jYXRv
cihjb2RlKTsKKyAgICAgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxvY2F0b3I8dHlw
ZT4gYWxsb2NhdG9yKGNvZGUsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgIExpdmVuZXNzPFRt
cD4gbGl2ZW5lc3MoY29kZSk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CiAgICAgICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVu
ZXNzLCBibG9jayk7CkBAIC05NzYsNyArOTg1LDcgQEAgc3RhdGljIHZvaWQgaXRlcmF0ZWRSZWdp
c3RlckNvYWxlc2NpbmdPblR5cGUoQ29kZSYgY29kZSkKICAgICAgICAgICAgIGFzc2lnblJlZ2lz
dGVyVG9UbXBJblByb2dyYW0oY29kZSwgYWxsb2NhdG9yKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW08dHlwZT4oY29kZSwg
YWxsb2NhdG9yLnNwaWxsZWRUbXAoKSk7CisgICAgICAgIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3Jh
bTx0eXBlPihjb2RlLCBhbGxvY2F0b3Iuc3BpbGxlZFRtcCgpLCB1bnNwaWxsYWJsZVRtcHMpOwog
ICAgIH0KIH0KIApAQCAtOTg3LDEwICs5OTYsMTMgQEAgdm9pZCBpdGVyYXRlZFJlZ2lzdGVyQ29h
bGVzY2luZyhDb2RlJiBjb2RlKQogICAgIGJvb2wgZ3BJc0NvbG9yZWQgPSBmYWxzZTsKICAgICBi
b29sIGZwSXNDb2xvcmVkID0gZmFsc2U7CiAKKyAgICBIYXNoU2V0PFRtcD4gdW5zcGlsbGFibGVH
UHM7CisgICAgSGFzaFNldDxUbXA+IHVuc3BpbGxhYmxlRlBzOworCiAgICAgLy8gRmlyc3Qgd2Ug
cnVuIGJvdGggYWxsb2NhdG9yIHRvZ2V0aGVyIGFzIGxvbmcgYXMgdGhleSBib3RoIHNwaWxsLgog
ICAgIHdoaWxlICghZ3BJc0NvbG9yZWQgJiYgIWZwSXNDb2xvcmVkKSB7Ci0gICAgICAgIEl0ZXJh
dGVkUmVnaXN0ZXJDb2FsZXNjaW5nQWxsb2NhdG9yPEFyZzo6R1A+IGdwQWxsb2NhdG9yKGNvZGUp
OwotICAgICAgICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjxBcmc6OkZQPiBm
cEFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAgSXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmdBbGxv
Y2F0b3I8QXJnOjpHUD4gZ3BBbGxvY2F0b3IoY29kZSwgdW5zcGlsbGFibGVHUHMpOworICAgICAg
ICBJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZ0FsbG9jYXRvcjxBcmc6OkZQPiBmcEFsbG9jYXRv
cihjb2RlLCB1bnNwaWxsYWJsZUZQcyk7CiAKICAgICAgICAgLy8gTGl2ZW5lc3MgQW5hbHlzaXMg
Y2FuIGJlIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlLiBJdCBpcyBzaGFyZWQKICAgICAgICAgLy8g
YmV0d2VlbiB0aGUgdHdvIGFsbG9jYXRvcnMgdG8gYXZvaWQgZG9pbmcgaXQgdHdpY2UuCkBAIC0x
MDE0LDE5ICsxMDI2LDE5IEBAIHZvaWQgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcoQ29kZSYg
Y29kZSkKICAgICAgICAgICAgIGFzc2lnblJlZ2lzdGVyVG9UbXBJblByb2dyYW0oY29kZSwgZ3BB
bGxvY2F0b3IpOwogICAgICAgICAgICAgZ3BJc0NvbG9yZWQgPSB0cnVlOwogICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGFkZFNwaWxsQW5kRmlsbFRvUHJvZ3JhbTxBcmc6OkdQPihjb2RlLCBn
cEFsbG9jYXRvci5zcGlsbGVkVG1wKCkpOworICAgICAgICAgICAgYWRkU3BpbGxBbmRGaWxsVG9Q
cm9ncmFtPEFyZzo6R1A+KGNvZGUsIGdwQWxsb2NhdG9yLnNwaWxsZWRUbXAoKSwgdW5zcGlsbGFi
bGVHUHMpOwogCiAgICAgICAgIGlmIChmcEFsbG9jYXRvci5zcGlsbGVkVG1wKCkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBhc3NpZ25SZWdpc3RlclRvVG1wSW5Qcm9ncmFtKGNvZGUsIGZwQWxs
b2NhdG9yKTsKICAgICAgICAgICAgIGZwSXNDb2xvcmVkID0gdHJ1ZTsKICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBhZGRTcGlsbEFuZEZpbGxUb1Byb2dyYW08QXJnOjpGUD4oY29kZSwgZnBB
bGxvY2F0b3Iuc3BpbGxlZFRtcCgpKTsKKyAgICAgICAgICAgIGFkZFNwaWxsQW5kRmlsbFRvUHJv
Z3JhbTxBcmc6OkZQPihjb2RlLCBmcEFsbG9jYXRvci5zcGlsbGVkVG1wKCksIHVuc3BpbGxhYmxl
RlBzKTsKICAgICB9OwogCiAgICAgaWYgKCFncElzQ29sb3JlZCkKLSAgICAgICAgaXRlcmF0ZWRS
ZWdpc3RlckNvYWxlc2NpbmdPblR5cGU8QXJnOjpHUD4oY29kZSk7CisgICAgICAgIGl0ZXJhdGVk
UmVnaXN0ZXJDb2FsZXNjaW5nT25UeXBlPEFyZzo6R1A+KGNvZGUsIHVuc3BpbGxhYmxlR1BzKTsK
ICAgICBpZiAoIWZwSXNDb2xvcmVkKQotICAgICAgICBpdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
Z09uVHlwZTxBcmc6OkZQPihjb2RlKTsKKyAgICAgICAgaXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmdPblR5cGU8QXJnOjpGUD4oY29kZSwgdW5zcGlsbGFibGVGUHMpOwogfQogCiB9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKaW5kZXggZmZkMDhkOTgzZDRjNDAwMTQ0YzlhMTQ1
NGI0ODgwZTk3NDVkNmZmNS4uOTczN2E2NmNlZDQ1NzQwNDE0NTVjNTU3MWYxNzcyYWVjNTU0ZGE2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcApAQCAtNTgsMTEgKzU4LDEyIEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
IGNvZGUpCiAKICAgICAgICAgICAgIC8vIEdvdHRhIGFjY291bnQgZm9yIGRlYWQgYXNzaWdubWVu
dHMgdG8gcmVnaXN0ZXJzLiBUaGVzZSBtYXkgaGFwcGVuIGJlY2F1c2UgdGhlIGlucHV0CiAgICAg
ICAgICAgICAvLyBjb2RlIGlzIHN1Ym9wdGltYWwuCi0gICAgICAgICAgICBpbnN0LmZvckVhY2hB
cmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBhcmcu
aXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldChhcmcucmVn
KCkpOwotICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXV0byB1cGRhdGVSZWdpc3Rl
clNldCA9IFsmcmVnaXN0ZXJTZXRdIChjb25zdCBUbXAmIHRtcCkgeworICAgICAgICAgICAgICAg
IGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0KHRt
cC5yZWcoKSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaW5zdC5mb3JFYWNoRGVmQW5k
RXh0cmFDbG9iYmVyZWRUbXAoQXJnOjpHUCwgdXBkYXRlUmVnaXN0ZXJTZXQpOworICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoRGVmQW5kRXh0cmFDbG9iYmVyZWRUbXAoQXJnOjpGUCwgdXBkYXRlUmVn
aXN0ZXJTZXQpOwogICAgICAgICB9OwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4
ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCmluZGV4IGJkYThmMGUxNmIwOTYwMjBiZTYzMTRiYzM3YzBiNGIzZmNjZmM3MjkuLjBi
MjU5NGNlMDg2NGIwM2FiYmJjNWQ0ZmRlY2RhNDA0ZWQxMGYxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy90ZXN0YjMuY3BwCkBAIC0yNzYwLDYgKzI3NjAsMTU0IEBAIHZvaWQgdGVzdFNpbXBsZVBh
dGNocG9pbnQoKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAxLCAyKSA9PSAz
KTsKIH0KIAordm9pZCB0ZXN0U2ltcGxlUGF0Y2hwb2ludFdpdGhvdXRPdXB1dENsb2JiZXJzR1BB
cmdzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZh
bHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBjb25zdDEgPSByb290LT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpOworICAgIFZhbHVlKiBj
b25zdDIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTMp
OworCisgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gcm9vdC0+YXBwZW5kTmV3PFBh
dGNocG9pbnRWYWx1ZT4ocHJvYywgVm9pZCwgT3JpZ2luKCkpOworICAgIHBhdGNocG9pbnQtPmNs
b2JiZXIoUmVnaXN0ZXJTZXQoR1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDEs
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3Ry
YWluZWRWYWx1ZShjb25zdDIsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBDSEVDSyhw
YXJhbXMucmVwcy5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sw
XS5pc0dQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzR1BSKCkpOwor
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHgwMGZmMDBm
ZiksIHBhcmFtcy5yZXBzWzBdLmdwcigpKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBwYXJhbXMucmVwc1sxXS5ncHIoKSk7Cisg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigweDAwZmYwMGZm
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDB4MDBmZjAwZmYpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICB9KTsKKworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxD
b250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBDSEVD
Syhjb21waWxlQW5kUnVuPGludD4ocHJvYywgMSwgMikgPT0gMyk7Cit9CisKK3ZvaWQgdGVzdFNp
bXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVyc0dQQXJncygpCit7CisgICAgLy8gV2UgY2Fu
J3QgcHJlZGljdCB3aGVyZSB0aGUgb3V0cHV0IHdpbGwgYmUgYnV0IHdlIHdhbnQgdG8gYmUgc3Vy
ZSBpdCBpcyBub3QKKyAgICAvLyBvbmUgb2YgdGhlIGNsb2JiZXJlZCByZWdpc3RlcnMgd2hpY2gg
aXMgYSBiaXQgaGFyZCB0byB0ZXN0LgorICAgIC8vCisgICAgLy8gV2hhdCB3ZSBkbyBpcyBmb3Jj
ZSB0aGUgaGFuZCBvZiBvdXIgcmVnaXN0ZXIgYWxsb2NhdG9yIGJ5IGNsb2JiZXJpbmcgYWJzb2x1
dGVseQorICAgIC8vIGV2ZXJ5dGhpbmcgYnV0IDEuIFRoZSBvbmx5IHZhbGlkIGFsbG9jYXRpb24g
aXMgdG8gZ2l2ZSBpdCB0byB0aGUgcmVzdWx0IGFuZAorICAgIC8vIHNwaWxsIGV2ZXJ5dGhpbmcg
ZWxzZS4KKworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFs
dWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIGNvbnN0MSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CisgICAgVmFsdWUqIGNv
bnN0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMyk7
CisKKyAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0
Y2hwb2ludFZhbHVlPihwcm9jLCBJbnQ2NCwgT3JpZ2luKCkpOworCisgICAgUmVnaXN0ZXJTZXQg
Y2xvYmJlckFsbCA9IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgY2xvYmJlckFsbC5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBjbG9iYmVyQWxsLmV4Y2x1
ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgY2xvYmJl
ckFsbC5jbGVhcihHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXIoY2xvYmJlckFsbCk7CisKKyAgICBwYXRjaHBvaW50LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1
ZShjb25zdDEsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKyAgICBwYXRjaHBvaW50LT5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShjb25zdDIsIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKwor
ICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgWyZdIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAg
ICAgIENIRUNLKHBhcmFtcy5yZXBzLnNpemUoKSA9PSAzKTsKKyAgICAgICAgICAgIENIRUNLKHBh
cmFtcy5yZXBzWzBdLmlzR1BSKCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMV0u
aXNHUFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1syXS5pc0dQUigpKTsKKyAg
ICAgICAgICAgIGppdC5tb3ZlKHBhcmFtcy5yZXBzWzFdLmdwcigpLCBwYXJhbXMucmVwc1swXS5n
cHIoKSk7CisgICAgICAgICAgICBqaXQuYWRkNjQocGFyYW1zLnJlcHNbMl0uZ3ByKCksIHBhcmFt
cy5yZXBzWzBdLmdwcigpKTsKKworICAgICAgICAgICAgY2xvYmJlckFsbC5mb3JFYWNoKFsmXSAo
UmVnIHJlZykgeworICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDB4MDBmZjAwZmYpLCByZWcuZ3ByKCkpOworICAgICAgICAgICAgfSk7CisgICAgICAg
IH0pOworCisgICAgVmFsdWUqIHJlc3VsdCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
QWRkLCBPcmlnaW4oKSwgcGF0Y2hwb2ludCwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcxLCBhcmcyKSk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcmVzdWx0KTsKKworICAgIENI
RUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAxLCAyKSA9PSA1OCk7Cit9CisKK3ZvaWQgdGVz
dFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG9iYmVyc0ZQQXJncygpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJn
dW1lbnRGUFIxKTsKKyAgICBWYWx1ZSogY29uc3QxID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0RG91
YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mi41KTsKKyAgICBWYWx1ZSogY29uc3QyID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxMy4xKTsKKwor
ICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IHJvb3QtPmFwcGVuZE5ldzxQYXRjaHBv
aW50VmFsdWU+KHByb2MsIFZvaWQsIE9yaWdpbigpKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFJlZ2lzdGVyU2V0KEZQUkluZm86OmFyZ3VtZW50RlBSMCwgRlBSSW5mbzo6YXJndW1lbnRGUFIx
KSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29uc3QxLCBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVk
VmFsdWUoY29uc3QyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKAorICAgICAgICBbJl0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgQ0hFQ0socGFyYW1z
LnJlcHMuc2l6ZSgpID09IDIpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMF0uaXNG
UFIoKSk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMucmVwc1sxXS5pc0ZQUigpKTsKKyAgICAg
ICAgICAgIGppdC5tb3ZlWmVyb1RvRG91YmxlKHBhcmFtcy5yZXBzWzBdLmZwcigpKTsKKyAgICAg
ICAgICAgIGppdC5tb3ZlWmVyb1RvRG91YmxlKHBhcmFtcy5yZXBzWzFdLmZwcigpKTsKKyAgICAg
ICAgICAgIGppdC5tb3ZlWmVyb1RvRG91YmxlKEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAg
ICAgICAgICBqaXQubW92ZVplcm9Ub0RvdWJsZShGUFJJbmZvOjphcmd1bWVudEZQUjEpOworICAg
ICAgICB9KTsKKworICAgIFZhbHVlKiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEFkZCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250
cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBDSEVDSyhj
b21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywgMS41LCAyLjUpID09IDQpOworfQorCit2b2lkIHRl
c3RTaW1wbGVQYXRjaHBvaW50V2l0aE91cHV0Q2xvYmJlcnNGUEFyZ3MoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
VmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3Vt
ZW50RlBSMSk7CisgICAgVmFsdWUqIGNvbnN0MSA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJs
ZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIuNSk7CisgICAgVmFsdWUqIGNvbnN0MiA9IHJvb3Qt
PmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTMuMSk7CisKKyAg
ICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSByb290LT5hcHBlbmROZXc8UGF0Y2hwb2lu
dFZhbHVlPihwcm9jLCBEb3VibGUsIE9yaWdpbigpKTsKKworICAgIFJlZ2lzdGVyU2V0IGNsb2Ji
ZXJBbGwgPSBSZWdpc3RlclNldDo6YWxsRlBScygpOworICAgIGNsb2JiZXJBbGwuZXhjbHVkZShS
ZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgY2xvYmJlckFsbC5leGNsdWRlKFJl
Z2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIGNsb2JiZXJBbGwu
Y2xlYXIoRlBSSW5mbzo6YXJndW1lbnRGUFIyKTsKKyAgICBwYXRjaHBvaW50LT5jbG9iYmVyKGNs
b2JiZXJBbGwpOworCisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoY29u
c3QxLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisgICAgcGF0Y2hwb2ludC0+YXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUoY29uc3QyLCBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKSk7CisKKyAgICBw
YXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgIFsmXSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBD
SEVDSyhwYXJhbXMucmVwcy5zaXplKCkgPT0gMyk7CisgICAgICAgICAgICBDSEVDSyhwYXJhbXMu
cmVwc1swXS5pc0ZQUigpKTsKKyAgICAgICAgICAgIENIRUNLKHBhcmFtcy5yZXBzWzFdLmlzRlBS
KCkpOworICAgICAgICAgICAgQ0hFQ0socGFyYW1zLnJlcHNbMl0uaXNGUFIoKSk7CisgICAgICAg
ICAgICBqaXQuYWRkRG91YmxlKHBhcmFtcy5yZXBzWzFdLmZwcigpLCBwYXJhbXMucmVwc1syXS5m
cHIoKSwgcGFyYW1zLnJlcHNbMF0uZnByKCkpOworCisgICAgICAgICAgICBjbG9iYmVyQWxsLmZv
ckVhY2goWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgaml0Lm1vdmVaZXJvVG9Eb3Vi
bGUocmVnLmZwcigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgIFZhbHVl
KiByZXN1bHQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIHBh
dGNocG9pbnQsCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmln
aW4oKSwgYXJnMSwgYXJnMikpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIHJlc3VsdCk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVu
PGRvdWJsZT4ocHJvYywgMS41LCAyLjUpID09IDU5LjYpOworfQorCiB2b2lkIHRlc3RQYXRjaHBv
aW50Q2FsbEFyZygpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC00NTE2LDYgKzQ2NjQsMTAg
QEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0Q29tcGxleCg0LCAz
ODQpKTsKIAogICAgIFJVTih0ZXN0U2ltcGxlUGF0Y2hwb2ludCgpKTsKKyAgICBSVU4odGVzdFNp
bXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG9iYmVyc0dQQXJncygpKTsKKyAgICBSVU4odGVz
dFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVyc0dQQXJncygpKTsKKyAgICBSVU4odGVz
dFNpbXBsZVBhdGNocG9pbnRXaXRob3V0T3VwdXRDbG9iYmVyc0ZQQXJncygpKTsKKyAgICBSVU4o
dGVzdFNpbXBsZVBhdGNocG9pbnRXaXRoT3VwdXRDbG9iYmVyc0ZQQXJncygpKTsKICAgICBSVU4o
dGVzdFBhdGNocG9pbnRDYWxsQXJnKCkpOwogICAgIFJVTih0ZXN0UGF0Y2hwb2ludEZpeGVkUmVn
aXN0ZXIoKSk7CiAgICAgUlVOKHRlc3RQYXRjaHBvaW50QW55KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5oCmluZGV4IGVlZDZhOTQwZjJhM2U4M2UyNjBmMTdiOTE3MDBj
YzE3Nzc4MWFkODMuLjQzYzJiNzRmMzExZjg0ZWFmZDZmMjIxNzFlODE0NWQwYTk1NzkwODggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKQEAgLTQ1LDggKzQ1LDggQEAg
cHVibGljOgogICAgICAgICBzZXRNYW55KHJlZ3MuLi4pOwogICAgIH0KICAgICAKLSAgICBzdGF0
aWMgUmVnaXN0ZXJTZXQgc3RhY2tSZWdpc3RlcnMoKTsKLSAgICBzdGF0aWMgUmVnaXN0ZXJTZXQg
cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBSZWdpc3RlclNldCBzdGFja1JlZ2lzdGVycygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBSZWdpc3RlclNldCByZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCk7CiAgICAgc3RhdGlj
IFJlZ2lzdGVyU2V0IHJ1bnRpbWVSZWdpc3RlcnMoKTsKICAgICBzdGF0aWMgUmVnaXN0ZXJTZXQg
c3BlY2lhbFJlZ2lzdGVycygpOyAvLyBUaGUgdW5pb24gb2Ygc3RhY2ssIHJlc2VydmVkIGhhcmR3
YXJlLCBhbmQgcnVudGltZSByZWdpc3RlcnMuCiAgICAgc3RhdGljIFJlZ2lzdGVyU2V0IGNhbGxl
ZVNhdmVSZWdpc3RlcnMoKTsKQEAgLTU5LDggKzU5LDggQEAgcHVibGljOgogI2VuZGlmCiAgICAg
c3RhdGljIFJlZ2lzdGVyU2V0IHZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCk7CiAgICAgc3Rh
dGljIFJlZ2lzdGVyU2V0IHN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpOyAvLyBUaGUgdW5pb24g
b2YgY2FsbGVlIHNhdmVzIGFuZCBzcGVjaWFsIHJlZ2lzdGVycy4KLSAgICBzdGF0aWMgUmVnaXN0
ZXJTZXQgYWxsR1BScygpOwotICAgIHN0YXRpYyBSZWdpc3RlclNldCBhbGxGUFJzKCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZ2lzdGVyU2V0IGFsbEdQUnMoKTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgUmVnaXN0ZXJTZXQgYWxsRlBScygpOwogICAgIHN0YXRpYyBS
ZWdpc3RlclNldCBhbGxSZWdpc3RlcnMoKTsKIAogICAgIHN0YXRpYyBSZWdpc3RlclNldCByZWdp
c3RlcnNUb05vdFNhdmVGb3JKU0NhbGwoKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>