<?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>149970</bug_id>
          
          <creation_ts>2015-10-09 15:19:44 -0700</creation_ts>
          <short_desc>FTL should generate a unique OSR exit for each duplicated OSR exit stackmap intrinsic.</short_desc>
          <delta_ts>2015-10-19 13:32:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>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>
          
          <blocked>149409</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1132023</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-09 15:19:44 -0700</bug_when>
    <thetext>Currently, when we compile an OSR exit, we just find a single Stackmap::Record that matches
the stackmapID. But there may be many such records. We need the actual one that corresponds
to the proper OSR exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132675</commentid>
    <comment_count>1</comment_count>
      <attachid>262967</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-12 19:37:03 -0700</bug_when>
    <thetext>Created attachment 262967
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132677</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-12 19:40:01 -0700</bug_when>
    <thetext>Attachment 262967 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:48:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:49:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:50:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLOSRExit.cpp:54:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLCompile.cpp:393:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 5 in 10 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>1133967</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-10-16 12:12:08 -0700</bug_when>
    <thetext>Oops ... I closed the wrong bug.  Re-opening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134628</commentid>
    <comment_count>4</comment_count>
      <attachid>262967</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-10-19 11:05:01 -0700</bug_when>
    <thetext>Comment on attachment 262967
patch

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

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        a signle OSR exit data structure. Then, when we compiled an OSR exit, we 

&quot;single&quot; =&gt; &quot;single&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134630</commentid>
    <comment_count>5</comment_count>
      <attachid>262967</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-19 11:07:47 -0700</bug_when>
    <thetext>Comment on attachment 262967
patch

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

&gt; Source/JavaScriptCore/ftl/FTLJITCode.h:89
&gt; +    SegmentedVector&lt;OSRExitDescriptor, 8&gt; osrExitDescriptors;

This should probably go to FTL::State since it&apos;s not used after FTL::compile().

&gt; Source/JavaScriptCore/ftl/FTLStackMaps.h:129
&gt; -    typedef HashMap&lt;uint32_t, Vector&lt;Record&gt;, WTF::IntHash&lt;uint32_t&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt;&gt; RecordMap;
&gt; +    struct RecordMapValue {
&gt; +        Vector&lt;Record&gt; records;
&gt; +        Vector&lt;uint32_t&gt; indices;
&gt; +    };
&gt; +    typedef HashMap&lt;uint32_t, RecordMapValue, WTF::IntHash&lt;uint32_t&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt;&gt; RecordMap;

What about using Vector&lt;RecordAndIndex&gt; instead of RecordMapValue?  It&apos;s usually better to have one vector that contains a tuple, than a tuple containing multiple vectors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134673</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-19 13:30:43 -0700</bug_when>
    <thetext>landed in:
http://trac.webkit.org/changeset/191313</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134675</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-19 13:32:01 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 262967 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262967&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLJITCode.h:89
&gt; &gt; +    SegmentedVector&lt;OSRExitDescriptor, 8&gt; osrExitDescriptors;
&gt; 
&gt; This should probably go to FTL::State since it&apos;s not used after
&gt; FTL::compile().
Fil and I spoke over IRC: this is actually used after FTL::compile()
because each FTL::OSRExit has a reference to an item in this vector.
So I&apos;m keeping it in FTL::JITCode.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLStackMaps.h:129
&gt; &gt; -    typedef HashMap&lt;uint32_t, Vector&lt;Record&gt;, WTF::IntHash&lt;uint32_t&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt;&gt; RecordMap;
&gt; &gt; +    struct RecordMapValue {
&gt; &gt; +        Vector&lt;Record&gt; records;
&gt; &gt; +        Vector&lt;uint32_t&gt; indices;
&gt; &gt; +    };
&gt; &gt; +    typedef HashMap&lt;uint32_t, RecordMapValue, WTF::IntHash&lt;uint32_t&gt;, WTF::UnsignedWithZeroKeyHashTraits&lt;uint32_t&gt;&gt; RecordMap;
&gt; 
&gt; What about using Vector&lt;RecordAndIndex&gt; instead of RecordMapValue?  It&apos;s
&gt; usually better to have one vector that contains a tuple, than a tuple
&gt; containing multiple vectors.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262967</attachid>
            <date>2015-10-12 19:37:03 -0700</date>
            <delta_ts>2015-10-19 11:07:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>38741</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwOTIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE1LTEwLTEyICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZ2VuZXJhdGUgYSB1bmlxdWUgT1NSIGV4aXQgZm9yIGVhY2ggZHVwbGljYXRl
ZCBPU1IgZXhpdCBzdGFja21hcCBpbnRyaW5zaWMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5NzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHdlIGxvd2VyIERGRyB0byBMTFZNLCB3ZSBnZW5l
cmF0ZSBhIHN0YWNrbWFwIGludHJuc2ljIGZvciBPU1IgCisgICAgICAgIGV4aXRzLiBXZSBhbHNv
IHJlY29yZGVkIHRoZSBPU1IgZXhpdCBpbnNpZGUgRlRMOjpKSVRDb2RlIGR1cmluZyBsb3dlcmlu
Zy4KKyAgICAgICAgVGhpcyBzdGFja21hcCBpbnRyaW5zaWMgbWF5IGJlIGR1cGxpY2F0ZWQgb3Ig
ZXZlbiByZW1vdmVkIGJ5IExMVk0uCisgICAgICAgIFdoZW4gdGhlIHN0YWNrbWFwIGludHJpbnNp
YyBpcyBkdXBsaWNhdGVkLCB3ZSB1c2VkIHRvIGdlbmVyYXRlIGp1c3QKKyAgICAgICAgYSBzaWdu
bGUgT1NSIGV4aXQgZGF0YSBzdHJ1Y3R1cmUuIFRoZW4sIHdoZW4gd2UgY29tcGlsZWQgYW4gT1NS
IGV4aXQsIHdlIAorICAgICAgICB3b3VsZCBsb29rIGZvciB0aGUgZmlyc3QgcmVjb3JkIGluIHRo
ZSByZWNvcmQgbGlzdCB0aGF0IGhhZCB0aGUgc2FtZSBzdGFja21hcCBJRAorICAgICAgICBhcyB3
aGF0IHRoZSBPU1IgZXhpdCBkYXRhIHN0cnVjdHVyZSBoYWQuIFdlIGRpZCB0aGlzIGV2ZW4gd2hl
biB0aGUgT1NSIGV4aXQKKyAgICAgICAgc3RhY2ttYXAgaW50cmluc2ljIHdhcyBkdXBsaWNhdGVk
LiBUaGlzIHdvdWxkIGxlYWQgdXMgdG8gZ3JhYiB0aGUgd3JvbmcgRlRMOjpTdGFja01hcHM6OlJl
Y29yZC4KKworICAgICAgICBOb3csIGVhY2ggT1NSIGV4aXQga25vd3MgZXhhY3RseSB3aGljaCBG
VEw6OlN0YWNrTWFwczo6UmVjb3JkIGl0IGNvcnJlc3BvbmRzIHRvLgorICAgICAgICBXZSBhY2Nv
bXBsaXNoIHRoaXMgYnkgaGF2aW5nIGFuIE9TUkV4aXREZXNjcmlwdG9yIHRoYXQgaXMgcmVjb3Jk
ZWQgZHVyaW5nCisgICAgICAgIGxvd2VyaW5nLiBFYWNoIGRlc2NyaXB0b3IgbWF5IGJlIHJlZmVy
ZW5jZWQgbXkgemVybywgb25lLCBvciBtb3JlIE9TUkV4aXRzLgorICAgICAgICBOb3csIG5vIG1v
cmUgdGhhbiBvbmUgc3RhY2ttYXAgaW50cmluc2ljIGNvcnJlc3BvbmRzIHRvIHRoZSBzYW1lIGlu
ZGV4IGluc2lkZSAKKyAgICAgICAgSklUQ29kZSdzIE9TUkV4aXQgVmVjdG9yLiBBbHNvLCBlYWNo
IE9TUkV4aXQganVtcCBub3cganVtcHMgdG8gYSBjb2RlIGxvY2F0aW9uLgorCisgICAgICAgICog
ZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2Vj
dGlvbik6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVENvZGU6OnZhbGlkYXRlUmVmZXJlbmNlcyk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6bGl2ZVJlZ2lzdGVyc1RvUHJlc2VydmVBdEV4Y2VwdGlvbkhhbmRsaW5nQ2FsbFNpdGUpOgor
ICAgICAgICAqIGZ0bC9GVExKSVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXpl
ci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9u
KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUlzVW5kZWZpbmVkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRPU1JFeGl0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0T1NSRXhpdENhbGwp
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJ1aWxkRXhpdEFyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y2FsbFN0YWNr
bWFwKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
T1NSRXhpdERlc2NyaXB0b3I6Ok9TUkV4aXREZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRM
OjpPU1JFeGl0RGVzY3JpcHRvcjo6dmFsaWRhdGVSZWZlcmVuY2VzKToKKyAgICAgICAgKEpTQzo6
RlRMOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojpjb2Rl
TG9jYXRpb25Gb3JSZXBhdGNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojp2YWxpZGF0
ZVJlZmVyZW5jZXMpOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAg
ICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUp
OgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6CisgICAgICAgIChK
U0M6OkZUTDo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6
CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y29tcGlsZVN0dWIpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVGVExPU1JFeGl0KToK
KyAgICAgICAgKiBmdGwvRlRMU3RhY2tNYXBzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpTdGFj
a01hcHM6OmNvbXB1dGVSZWNvcmRNYXApOgorICAgICAgICAqIGZ0bC9GVExTdGFja01hcHMuaDoK
KwogMjAxNS0xMC0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAog
ICAgICAgICBJbnRyb2R1Y2UgU3ltYm9sIHR5cGUgZm9yIHByb3BlcnR5IHR5cGUgaW5mZXJlbmNl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9u
IDE5MDg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0NCwxMCArMTQ0LDEwIEBAIHN0YXRpYyBpbnQgb2Zmc2V0T2ZTdGFj
a1JlZ2lvbihTdGFja01hcHMKICAgICAKICAgICBTdGFja01hcHM6OlJlY29yZE1hcDo6aXRlcmF0
b3IgaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YWNrbWFwSUQpOwogICAgIFJFTEVBU0VfQVNTRVJU
KGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKTsKLSAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1
ZS5zaXplKCkgPT0gMSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXRlci0+dmFsdWVbMF0ubG9jYXRp
b25zLnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5yZWNvcmRz
LnNpemUoKSA9PSAxKTsKKyAgICBSRUxFQVNFX0FTU0VSVChpdGVyLT52YWx1ZS5yZWNvcmRzWzBd
LmxvY2F0aW9ucy5zaXplKCkgPT0gMSk7CiAgICAgTG9jYXRpb24gY2FwdHVyZWRMb2NhdGlvbiA9
Ci0gICAgICAgIExvY2F0aW9uOjpmb3JTdGFja21hcHMobnVsbHB0ciwgaXRlci0+dmFsdWVbMF0u
bG9jYXRpb25zWzBdKTsKKyAgICAgICAgTG9jYXRpb246OmZvclN0YWNrbWFwcyhudWxscHRyLCBp
dGVyLT52YWx1ZS5yZWNvcmRzWzBdLmxvY2F0aW9uc1swXSk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
Y2FwdHVyZWRMb2NhdGlvbi5raW5kKCkgPT0gTG9jYXRpb246OlJlZ2lzdGVyKTsKICAgICBSRUxF
QVNFX0FTU0VSVChjYXB0dXJlZExvY2F0aW9uLmdwcigpID09IEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKTsKICAgICBSRUxFQVNFX0FTU0VSVCghKGNhcHR1cmVkTG9jYXRpb24uYWRkZW5kKCkg
JSBzaXplb2YoUmVnaXN0ZXIpKSk7CkBAIC0yMTAsNyArMjEwLDcgQEAgdm9pZCBnZW5lcmF0ZUlD
RmFzdFBhdGgoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgVmVjdG9yPFN0YWNr
TWFwczo6UmVjb3JkPiYgcmVjb3JkcyA9IGl0ZXItPnZhbHVlOworICAgIFZlY3RvcjxTdGFja01h
cHM6OlJlY29yZD4mIHJlY29yZHMgPSBpdGVyLT52YWx1ZS5yZWNvcmRzOwogICAgIAogICAgIFJF
TEVBU0VfQVNTRVJUKHJlY29yZHMuc2l6ZSgpID09IGljLm1fZ2VuZXJhdG9ycy5zaXplKCkpOwog
ICAgIApAQCAtMjQ4LDcgKzI0OCw3IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlQ2hlY2tJbklDRmFz
dFBhdGgoCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgVmVjdG9yPFN0YWNrTWFw
czo6UmVjb3JkPiYgcmVjb3JkcyA9IGl0ZXItPnZhbHVlOworICAgIFZlY3RvcjxTdGFja01hcHM6
OlJlY29yZD4mIHJlY29yZHMgPSBpdGVyLT52YWx1ZS5yZWNvcmRzOwogICAgIAogICAgIFJFTEVB
U0VfQVNTRVJUKHJlY29yZHMuc2l6ZSgpID09IGljLm1fZ2VuZXJhdG9ycy5zaXplKCkpOwogCkBA
IC0zMTcsOSArMzE3LDkgQEAgdm9pZCBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKFZlY3RvcjxD
YQogICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBpdGVyLT52
YWx1ZS5zaXplKCk7ICsraikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgaXRl
ci0+dmFsdWUucmVjb3Jkcy5zaXplKCk7ICsraikgewogICAgICAgICAgICAgQ2FsbFR5cGUgY29w
eSA9IGNhbGw7Ci0gICAgICAgICAgICBjb3B5Lm1faW5zdHJ1Y3Rpb25PZmZzZXQgPSBpdGVyLT52
YWx1ZVtqXS5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgIGNvcHkubV9pbnN0cnVjdGlv
bk9mZnNldCA9IGl0ZXItPnZhbHVlLnJlY29yZHNbal0uaW5zdHJ1Y3Rpb25PZmZzZXQ7CiAgICAg
ICAgICAgICBjYWxscy5hcHBlbmQoY29weSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTAsNiAr
MzkwLDIyIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAg
ICAgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlciA9IFdURjo6bW92
ZShsaW5rQnVmZmVyKTsKICAgICB9CiAKKyAgICBSRUxFQVNFX0FTU0VSVChzdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LnNpemUoKSA9PSAwKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rh
dGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIE9T
UkV4aXREZXNjcmlwdG9yJiBleGl0RGVzY3JpcHRvciA9IHN0YXRlLmppdENvZGUtPm9zckV4aXRE
ZXNjcmlwdG9yc1tpXTsKKyAgICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZXhpdERl
c2NyaXB0b3IubV9zdGFja21hcElEKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVu
ZCgpKSB7CisgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IGl0ZXItPnZhbHVlLnJlY29yZHMuc2l6ZSgpOyBqKyspIHsKKyAgICAgICAgICAgIE9TUkV4aXQg
ZXhpdChleGl0RGVzY3JpcHRvcik7CisgICAgICAgICAgICBleGl0Lm1fc3RhY2ttYXBSZWNvcmRJ
bmRleCA9IGl0ZXItPnZhbHVlLmluZGljZXNbal07CisgICAgICAgICAgICBzdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LmFwcGVuZChleGl0KTsKKyAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+b3Ny
RXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICAgICAgfQorICAgIH0K
ICAgICBFeGl0VGh1bmtHZW5lcmF0b3IgZXhpdFRodW5rR2VuZXJhdG9yKHN0YXRlKTsKICAgICBl
eGl0VGh1bmtHZW5lcmF0b3IuZW1pdFRodW5rcygpOwogICAgIGlmIChleGl0VGh1bmtHZW5lcmF0
b3IuZGlkVGhpbmdzKCkpIHsKQEAgLTQwOSwyOCArNDI1LDIyIEBAIHN0YXRpYyB2b2lkIGZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRD
b2RlLT5vc3JFeGl0W2ldOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIE9T
UiBzdGFja21hcCAjIiwgZXhpdC5tX3N0YWNrbWFwSUQsICIgZm9yICIsIGV4aXQubV9jb2RlT3Jp
Z2luLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBPU1Igc3RhY2tt
YXAgIyIsIGV4aXQubV9kZXNjcmlwdG9yLm1fc3RhY2ttYXBJRCwgIiBmb3IgIiwgZXhpdC5tX2Nv
ZGVPcmlnaW4sICJcbiIpOwogCi0gICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmlu
ZChleGl0Lm1fc3RhY2ttYXBJRCk7Ci0gICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAu
ZW5kKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAg
ICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyA9IGxpbmtCdWZmZXItPmxvY2F0aW9uT2YoaW5mby5t
X3RodW5rTGFiZWwpOwogICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBs
aW5rQnVmZmVyLT5vZmZzZXRPZihpbmZvLm1fdGh1bmtKdW1wKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGotLTspCi0g
ICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tqXSA9IGV4aXQubV92YWx1ZXNbal0ud2l0aExv
Y2Fsc09mZnNldChsb2NhbHNPZmZzZXQpOwotICAgICAgICAgICAgZm9yIChFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlv
bnMpCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBleGl0Lm1fZGVzY3JpcHRvci5tX3Zh
bHVlcy5zaXplKCk7IGotLTspCisgICAgICAgICAgICAgICAgZXhpdC5tX2Rlc2NyaXB0b3IubV92
YWx1ZXNbal0gPSBleGl0Lm1fZGVzY3JpcHRvci5tX3ZhbHVlc1tqXS53aXRoTG9jYWxzT2Zmc2V0
KGxvY2Fsc09mZnNldCk7CisgICAgICAgICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fZGVzY3JpcHRvci5tX21hdGVyaWFsaXph
dGlvbnMpCiAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hY2NvdW50Rm9yTG9jYWxz
T2Zmc2V0KGxvY2Fsc09mZnNldCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICBEdW1wQ29udGV4dCBj
b250ZXh0OwotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHZhbHVlczogIiwgaW5D
b250ZXh0KGV4aXQubV92YWx1ZXMsICZjb250ZXh0KSwgIlxuIik7Ci0gICAgICAgICAgICAgICAg
aWYgKCFleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgRXhpdCB2YWx1ZXM6ICIsIGluQ29udGV4dChleGl0Lm1fZGVzY3JpcHRv
ci5tX3ZhbHVlcywgJmNvbnRleHQpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4aXQu
bV9kZXNjcmlwdG9yLm1fbWF0ZXJpYWxpemF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgIE1hdGVyaWFsaXphdGlvbnM6IFxuIik7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXph
dGlvbiA6IGV4aXQubV9tYXRlcmlhbGl6YXRpb25zKQorICAgICAgICAgICAgICAgICAgICBmb3Ig
KEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1f
ZGVzY3JpcHRvci5tX21hdGVyaWFsaXphdGlvbnMpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICAgIE1hdGVyaWFsaXplKCIsIHBvaW50ZXJEdW1wKG1hdGVyaWFsaXphdGlv
biksICIpXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NjAsOCAr
NDcwLDggQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBnZXRCeUlkLmNvZGVPcmlnaW4oKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFN0YWNrTWFw
czo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5yZWNvcmRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlLnJlY29y
ZHNbaV07CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVn
aXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOwogICAgICAgICAgICAgICAgIApAQCAt
NDk5LDggKzUwOSw4IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gcHV0QnlJZC5jb2RlT3JpZ2luKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBT
dGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUucmVjb3Jkcy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1
ZS5yZWNvcmRzW2ldOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7CiAgICAgICAgICAg
ICAgICAgCkBAIC01MzksOCArNTQ5LDggQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBjaGVja0luLmNvZGVPcmlnaW4oKTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkgewotICAgICAg
ICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXTsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5yZWNvcmRzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9
IGl0ZXItPnZhbHVlLnJlY29yZHNbaV07CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3JkKTsKICAgICAgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0ID0gcmVjb3JkLmxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKICAgICAgICAg
ICAgICAgICBHUFJSZWcgb2JqID0gcmVjb3JkLmxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKQEAg
LTU3Niw4ICs1ODYsOCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBkZXNjcmlwdG9yLmNvZGVPcmlnaW4oKTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtp
XTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVyLT52YWx1ZS5yZWNv
cmRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJl
Y29yZCA9IGl0ZXItPnZhbHVlLnJlY29yZHNbaV07CiAgICAgICAgICAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3JkKTsKICAgICAgICAgICAg
ICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKICAgICAgICAgICAgICAgICBmb3IgKGF1
dG8gbG9jYXRpb24gOiByZWNvcmQubG9jYXRpb25zKQpAQCAtNjkzLDggKzcwMyw4IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAvLyBJdCdzIHNvcnQgb2Yg
cmVtb3RlbHkgcG9zc2libGUgdGhhdCB3ZSB3b24ndCBoYXZlIGFuIGluLWJhbmQgZXhjZXB0aW9u
IGhhbmRsaW5nCiAgICAgLy8gcGF0aCwgZm9yIHNvbWUga2luZHMgb2YgZnVuY3Rpb25zLgogICAg
IGlmIChpdGVyICE9IHJlY29yZE1hcC5lbmQoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBpdGVyLT52YWx1ZS5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFN0YWNrTWFwczo6UmVj
b3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aXRlci0+dmFsdWUucmVjb3Jkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0YWNrTWFw
czo6UmVjb3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZS5yZWNvcmRzW2ldOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJl
bCgKICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9u
KSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldCk7CkBAIC03MDksOCArNzE5LDggQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgIC8vIEl0J3Mgc29ydCBvZiBy
ZW1vdGVseSBwb3NzaWJsZSB0aGF0IHdlIHdvbid0IGhhdmUgYW4gaW4tYmFuZCBleGNlcHRpb24g
aGFuZGxpbmcKICAgICAvLyBwYXRoLCBmb3Igc29tZSBraW5kcyBvZiBmdW5jdGlvbnMuCiAgICAg
aWYgKGl0ZXIgIT0gcmVjb3JkTWFwLmVuZCgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGl0ZXItPnZhbHVlLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNv
cmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
dGVyLT52YWx1ZS5yZWNvcmRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RhY2tNYXBz
OjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlLnJlY29yZHNbaV07CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHNvdXJjZSA9IENvZGVMb2NhdGlvbkxhYmVs
KAogICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24p
ICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0KTsKQEAgLTcyMiwyNSArNzMyLDIwIEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICBmb3IgKHVuc2lnbmVkIGV4
aXRJbmRleCA9IDA7IGV4aXRJbmRleCA8IGppdENvZGUtPm9zckV4aXQuc2l6ZSgpOyArK2V4aXRJ
bmRleCkgewogICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gc3RhdGUuZmlu
YWxpemVyLT5vc3JFeGl0W2V4aXRJbmRleF07CiAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBqaXRD
b2RlLT5vc3JFeGl0W2V4aXRJbmRleF07Ci0gICAgICAgIGl0ZXIgPSByZWNvcmRNYXAuZmluZChl
eGl0Lm1fc3RhY2ttYXBJRCk7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Y29uc3Qgdm9pZCo+
IGNvZGVBZGRyZXNzZXM7CiAgICAgICAgIAotICAgICAgICBpZiAoaXRlciAhPSByZWNvcmRNYXAu
ZW5kKCkpIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZXItPnZhbHVlLnNpemUo
KTsgaS0tOykgewotICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVjb3JkJiByZWNvcmQgPSBp
dGVyLT52YWx1ZVtpXTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzb3VyY2UgPSBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAgICAgICAgICAgICAg
ICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQuaW5zdHJ1
Y3Rpb25PZmZzZXQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvZGVBZGRy
ZXNzZXMuYXBwZW5kKGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVj
b3JkLmluc3RydWN0aW9uT2Zmc2V0ICsgTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGluZm8ubV9p
c0ludmFsaWRhdGlvblBvaW50KQotICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24u
anVtcFJlcGxhY2VtZW50cy5hcHBlbmQoSnVtcFJlcGxhY2VtZW50KHNvdXJjZSwgaW5mby5tX3Ro
dW5rQWRkcmVzcykpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJl
c3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIFN0YWNrTWFwczo6UmVjb3Jk
JiByZWNvcmQgPSBqaXRDb2RlLT5zdGFja21hcHMucmVjb3Jkc1tleGl0Lm1fc3RhY2ttYXBSZWNv
cmRJbmRleF07CisgICAgICAgIAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzb3VyY2UgPSBD
b2RlTG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJh
dGVkRnVuY3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0KTsKKyAgICAgICAgCisgICAg
ICAgIGNvZGVBZGRyZXNzZXMuYXBwZW5kKGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVu
Y3Rpb24pICsgcmVjb3JkLmluc3RydWN0aW9uT2Zmc2V0ICsgTWFjcm9Bc3NlbWJsZXI6Om1heEp1
bXBSZXBsYWNlbWVudFNpemUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZXhpdC5tX2Rlc2Ny
aXB0b3IubV9pc0ludmFsaWRhdGlvblBvaW50KQorICAgICAgICAgICAgaml0Q29kZS0+Y29tbW9u
Lmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKEp1bXBSZXBsYWNlbWVudChzb3VyY2UsIGluZm8ubV90
aHVua0FkZHJlc3MpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGxhY2VXaXRoSnVtcChzb3VyY2UsIGluZm8ubV90aHVua0FkZHJlc3MpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGdyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAgICAgICAgICBncmFwaC5jb21w
aWxhdGlvbigpLT5hZGRPU1JFeGl0U2l0ZShjb2RlQWRkcmVzc2VzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTkwODg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDcgKzE0MSw3IEBAIHZvaWQgSklUQ29kZTo6dmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFQK
ICAgICBjb21tb24udmFsaWRhdGVSZWZlcmVuY2VzKHRyYWNrZWRSZWZlcmVuY2VzKTsKICAgICAK
ICAgICBmb3IgKE9TUkV4aXQmIGV4aXQgOiBvc3JFeGl0KQotICAgICAgICBleGl0LnZhbGlkYXRl
UmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CisgICAgICAgIGV4aXQubV9kZXNjcmlwdG9y
LnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKIFJlZ2lzdGVyU2V0
IEpJVENvZGU6OmxpdmVSZWdpc3RlcnNUb1ByZXNlcnZlQXRFeGNlcHRpb25IYW5kbGluZ0NhbGxT
aXRlKENvZGVCbG9jayosIENhbGxTaXRlSW5kZXgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTkwODg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAgcHVi
bGljOgogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAgICAgU2VnbWVudGVkVmVj
dG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CisgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXREZXNj
cmlwdG9yLCA4PiBvc3JFeGl0RGVzY3JpcHRvcnM7CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwczsK
ICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93UGF0aHM7
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuY3BwCShyZXZpc2lvbiAxOTA4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDE3ICs3OSw4IEBAIGJvb2wg
SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICB9CiAgICAgCiAgICAgaWYgKGV4
aXRUaHVua3NMaW5rQnVmZmVyKSB7Ci0gICAgICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwIHJlY29y
ZE1hcCA9IGppdENvZGUtPnN0YWNrbWFwcy5jb21wdXRlUmVjb3JkTWFwKCk7Ci0gICAgICAgIAog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3NyRXhpdC5zaXplKCk7ICsraSkgewog
ICAgICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG9zckV4aXRbaV07Ci0g
ICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gaml0Q29kZS0+b3NyRXhpdFtpXTsKLSAgICAgICAg
ICAgIFN0YWNrTWFwczo6UmVjb3JkTWFwOjppdGVyYXRvciBpdGVyID0gcmVjb3JkTWFwLmZpbmQo
ZXhpdC5tX3N0YWNrbWFwSUQpOwotICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVu
ZCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gSXQncyBPSywgaXQgd2FzIG9wdGltaXplZCBvdXQu
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
ICAgICAgICAgICAgIGV4aXRUaHVua3NMaW5rQnVmZmVyLT5saW5rKAogICAgICAgICAgICAgICAg
IGluZm8ubV90aHVua0p1bXAsCiAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTkwODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MTYsMjIgKzQ5MTYsMjAgQEAgcHJp
dmF0ZToKIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhp
dE9LKTsKICAgICAgICAgCi0gICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBl
bmQoT1NSRXhpdCgKKyAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRv
cnMuYXBwZW5kKE9TUkV4aXREZXNjcmlwdG9yKAogICAgICAgICAgICAgVW5jb3VudGFibGVJbnZh
bGlkYXRpb24sIERhdGFGb3JtYXROb25lLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCks
CiAgICAgICAgICAgICBtX29yaWdpbi5mb3JFeGl0LCBtX29yaWdpbi5zZW1hbnRpYywKICAgICAg
ICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7
Ci0gICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29t
cGlsYXRpb25JbmZvKCkpOwogICAgICAgICAKLSAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRs
U3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7Ci0gICAgICAgIE9TUkV4aXRDb21waWxhdGlv
bkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5sYXN0KCk7CisgICAg
ICAgIE9TUkV4aXREZXNjcmlwdG9yJiBleGl0RGVzY3JpcHRvciA9IG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdERlc2NyaXB0b3JzLmxhc3QoKTsKICAgICAgICAgCiAgICAgICAgIEV4aXRBcmd1
bWVudExpc3QgYXJndW1lbnRzOwogICAgICAgICAKLSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRz
KGV4aXQsIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUoKSwgZXhpdC5tX2NvZGVPcmlnaW4pOwot
ICAgICAgICBjYWxsU3RhY2ttYXAoZXhpdCwgYXJndW1lbnRzKTsKKyAgICAgICAgYnVpbGRFeGl0
QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlKCksIGV4
aXREZXNjcmlwdG9yLm1fY29kZU9yaWdpbik7CisgICAgICAgIGNhbGxTdGFja21hcChleGl0RGVz
Y3JpcHRvciwgYXJndW1lbnRzKTsKICAgICAgICAgCi0gICAgICAgIGluZm8ubV9pc0ludmFsaWRh
dGlvblBvaW50ID0gdHJ1ZTsKKyAgICAgICAgZXhpdERlc2NyaXB0b3IubV9pc0ludmFsaWRhdGlv
blBvaW50ID0gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSXNVbmRlZmluZWQo
KQpAQCAtODU4Miw3ICs4NTgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgRXhpdEtpbmQga2luZCwg
Rm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25k
aXRpb24pCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdC5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1h
cCgpLCAiXG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxT
dGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmls
aXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CiAgICAgICAgICAgICBpZiAoIW1fYXZh
aWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVy
aWVzKSwgIlxuIik7CiAgICAgICAgIH0KQEAgLTg2MTEsMTkgKzg2MDksMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhbkZhbHNlKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4
aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LnNpemUoKSk7Ci0gICAg
ICAgIAotICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQo
CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFwcGVuZChP
U1JFeGl0RGVzY3JpcHRvcigKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBt
X2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKICAgICAg
ICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGljLAogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKICAgICAgICAg
ICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsKLSAgICAg
ICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlv
bkluZm8oKSk7CiAKLSAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+
b3NyRXhpdC5sYXN0KCk7CisgICAgICAgIE9TUkV4aXREZXNjcmlwdG9yJiBleGl0RGVzY3JpcHRv
ciA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmxhc3QoKTsKIAogICAg
ICAgICBpZiAoZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuVHJ1ZSkgewotICAgICAgICAg
ICAgZW1pdE9TUkV4aXRDYWxsKGV4aXQsIGxvd1ZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRPU1JF
eGl0Q2FsbChleGl0RGVzY3JpcHRvciwgbG93VmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTg2MzcsMjYgKzg2MzIsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7
CiAgICAgICAgIAotICAgICAgICBlbWl0T1NSRXhpdENhbGwoZXhpdCwgbG93VmFsdWUpOworICAg
ICAgICBlbWl0T1NSRXhpdENhbGwoZXhpdERlc2NyaXB0b3IsIGxvd1ZhbHVlKTsKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBl
bWl0T1NSRXhpdENhbGwoT1NSRXhpdCYgZXhpdCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUpCisg
ICAgdm9pZCBlbWl0T1NSRXhpdENhbGwoT1NSRXhpdERlc2NyaXB0b3ImIGV4aXREZXNjcmlwdG9y
LCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSkKICAgICB7CiAgICAgICAgIEV4aXRBcmd1bWVudExp
c3QgYXJndW1lbnRzOwogICAgICAgICAKLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
ZXhpdC5tX2NvZGVPcmlnaW47CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXRE
ZXNjcmlwdG9yLm1fY29kZU9yaWdpbjsKICAgICAgICAgCi0gICAgICAgIGJ1aWxkRXhpdEFyZ3Vt
ZW50cyhleGl0LCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2RlT3JpZ2luKTsKKyAgICAgICAgYnVp
bGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBhcmd1bWVudHMsIGxvd1ZhbHVlLCBjb2Rl
T3JpZ2luKTsKICAgICAgICAgCi0gICAgICAgIGNhbGxTdGFja21hcChleGl0LCBhcmd1bWVudHMp
OworICAgICAgICBjYWxsU3RhY2ttYXAoZXhpdERlc2NyaXB0b3IsIGFyZ3VtZW50cyk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAgICBPU1JFeGl0JiBl
eGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVl
LAorICAgICAgICBPU1JFeGl0RGVzY3JpcHRvciYgZXhpdERlc2NyaXB0b3IsIEV4aXRBcmd1bWVu
dExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsCiAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIGlmICghIWxvd1ZhbHVlKQpAQCAtODY3
OCwxMiArODY3MywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
bWFwLmFkZChub2RlLCBudWxscHRyKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpIHsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucy5hZGQobm9kZS0+
b3AoKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
aXREZXNjcmlwdG9yLm1fbWF0ZXJpYWxpemF0aW9ucy5hZGQobm9kZS0+b3AoKSwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2Ny
aXB0b3IubV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGludCBvcGVyYW5kID0g
ZXhpdERlc2NyaXB0b3IubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZhaWxhYmlsaXR5TWFw
Lm1fbG9jYWxzW2ldOwogICAgICAgICAgICAgCkBAIC04NjkzLDcgKzg2ODgsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAoIShhdmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFw
aC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgY29kZU9yaWdpbikp
KSB8fCBtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBleGl0
VmFsdWVGb3JBdmFpbGFiaWxpdHkoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7CisgICAg
ICAgICAgICBleGl0RGVzY3JpcHRvci5tX3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJp
bGl0eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgZm9yIChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmlsaXR5TWFwLm1faGVhcCkgewpA
QCAtODcwNSwyMCArODcwMCwyMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0Lm1fdmFsdWVzLCAiXG4iKTsKLSAgICAg
ICAgICAgIGlmICghZXhpdC5tX21hdGVyaWFsaXphdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0RGVzY3JpcHRvci5tX3Zh
bHVlcywgIlxuIik7CisgICAgICAgICAgICBpZiAoIWV4aXREZXNjcmlwdG9yLm1fbWF0ZXJpYWxp
emF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1h
dGVyaWFsaXphdGlvbnM6IFxuIik7Ci0gICAgICAgICAgICAgICAgZm9yIChFeGl0VGltZU9iamVj
dE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlv
bnMpCisgICAgICAgICAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiog
bWF0ZXJpYWxpemF0aW9uIDogZXhpdERlc2NyaXB0b3IubV9tYXRlcmlhbGl6YXRpb25zKQogICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICAiLCBwb2ludGVyRHVtcChtYXRl
cmlhbGl6YXRpb24pLCAiXG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNhbGxTdGFja21hcChPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0
JiBhcmd1bWVudHMpCisgICAgdm9pZCBjYWxsU3RhY2ttYXAoT1NSRXhpdERlc2NyaXB0b3ImIGV4
aXREZXNjcmlwdG9yLCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMpCiAgICAgewotICAgICAg
ICBleGl0Lm1fc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgZXhpdERlc2Ny
aXB0b3IubV9zdGFja21hcElEID0gbV9zdGFja21hcElEcysrOwogICAgICAgICBhcmd1bWVudHMu
aW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNl
bWVudFNpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0SW50
NjQoZXhpdC5tX3N0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJndW1lbnRzLmluc2VydCgwLCBtX291
dC5jb25zdEludDY0KGV4aXREZXNjcmlwdG9yLm1fc3RhY2ttYXBJRCkpOwogICAgICAgICAKICAg
ICAgICAgbV9vdXQuY2FsbChtX291dC5zdGFja21hcEludHJpbnNpYygpLCBhcmd1bWVudHMpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2
aXNpb24gMTkwODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjggKzQwLDIyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAotT1NSRXhpdDo6T1NSRXhpdCgK
K09TUkV4aXREZXNjcmlwdG9yOjpPU1JFeGl0RGVzY3JpcHRvcigKICAgICBFeGl0S2luZCBleGl0
S2luZCwgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1hdCwKICAgICBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAogICAgIENv
ZGVPcmlnaW4gb3JpZ2luRm9yUHJvZmlsZSwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsCiAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpCi0gICAgOiBPU1JFeGl0QmFzZShleGl0S2luZCwg
Y29kZU9yaWdpbiwgb3JpZ2luRm9yUHJvZmlsZSkKKyAgICA6IG1fa2luZChleGl0S2luZCkKKyAg
ICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUob3JpZ2luRm9yUHJvZmlsZSkKICAgICAsIG1fcHJvZmlsZURhdGFGb3JtYXQocHJvZmls
ZURhdGFGb3JtYXQpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCi0gICAgLCBt
X3BhdGNoYWJsZUNvZGVPZmZzZXQoMCkKICAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRz
LCBudW1iZXJPZkxvY2FscykKKyAgICAsIG1faXNJbnZhbGlkYXRpb25Qb2ludChmYWxzZSkKIHsK
IH0KIAotQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAotewotICAgIHJldHVybiBDb2RlTG9jYXRpb25K
dW1wKAotICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPigKLSAgICAgICAgICAgIGZ0bENv
ZGVCbG9jay0+aml0Q29kZSgpLT5mdGwoKS0+ZXhpdFRodW5rcygpLmRhdGFMb2NhdGlvbigpKSAr
Ci0gICAgICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCk7Ci19Ci0KLXZvaWQgT1NSRXhpdDo6dmFs
aWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJiB0cmFja2VkUmVmZXJlbmNl
cykKK3ZvaWQgT1NSRXhpdERlc2NyaXB0b3I6OnZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFj
a2VkUmVmZXJlbmNlcyYgdHJhY2tlZFJlZmVyZW5jZXMpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV92YWx1ZXMuc2l6ZSgpOyBpLS07KQogICAgICAgICBtX3ZhbHVlc1tpXS52YWxpZGF0ZVJl
ZmVyZW5jZXModHJhY2tlZFJlZmVyZW5jZXMpOwpAQCAtNzAsNiArNjQsMjIgQEAgdm9pZCBPU1JF
eGl0Ojp2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVAogICAgICAgICBtYXRlcmlhbGl6YXRpb24t
PnZhbGlkYXRlUmVmZXJlbmNlcyh0cmFja2VkUmVmZXJlbmNlcyk7CiB9CiAKKworT1NSRXhpdDo6
T1NSRXhpdChPU1JFeGl0RGVzY3JpcHRvciYgZGVzY3JpcHRvcikKKyAgICA6IE9TUkV4aXRCYXNl
KGRlc2NyaXB0b3IubV9raW5kLCBkZXNjcmlwdG9yLm1fY29kZU9yaWdpbiwgZGVzY3JpcHRvci5t
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkKKyAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9y
KQorICAgICwgbV9zdGFja21hcFJlY29yZEluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSkKK3sKK30KKworQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9jYXRp
b25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAoreworICAgIHJldHVy
biBDb2RlTG9jYXRpb25KdW1wKAorICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPigKKyAg
ICAgICAgICAgIGZ0bENvZGVCbG9jay0+aml0Q29kZSgpLT5mdGwoKS0+ZXhpdFRodW5rcygpLmRh
dGFMb2NhdGlvbigpKSArCisgICAgICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCk7Cit9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE5MDg4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzMsMTMgKzEzMywxNSBAQCBuYW1lc3BhY2UgRlRMIHsKIC8vICAgaW50cmluc2ljcyAo
b3IgbWV0YS1kYXRhLCBvciBzb21ldGhpbmcpIHRvIGluZm9ybSB0aGUgYmFja2VuZCB0aGF0IGl0
J3Mgc2FmZSB0bwogLy8gICBtYWtlIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0SWYoKScg
bW9yZSB0cnV0aHkuCiAKLXN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2Ug
ewotICAgIE9TUkV4aXQoCitzdHJ1Y3QgT1NSRXhpdERlc2NyaXB0b3IgeworICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKAogICAgICAgICBFeGl0S2luZCwgRGF0YUZvcm1hdCBwcm9maWxlRGF0YUZvcm1h
dCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKICAgICAgICAgQ29kZU9yaWdpbiwgQ29k
ZU9yaWdpbiBvcmlnaW5Gb3JQcm9maWxlLAogICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBtX2NvZGU7CisKKyAgICBFeGl0S2luZCBtX2tpbmQ7CisgICAgQ29kZU9yaWdpbiBt
X2NvZGVPcmlnaW47CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsK
ICAgICAKICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUg
YSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCiAgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0
aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQpAQCAtMTQ5LDIy
ICsxNTEsMzAgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAg
IERhdGFGb3JtYXQgbV9wcm9maWxlRGF0YUZvcm1hdDsKICAgICBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlIG1fdmFsdWVQcm9maWxlOwogICAgIAotICAgIC8vIE9mZnNldCB3aXRoaW4gdGhl
IGV4aXQgc3R1YnMgb2YgdGhlIHN0dWIgZm9yIHRoaXMgZXhpdC4KLSAgICB1bnNpZ25lZCBtX3Bh
dGNoYWJsZUNvZGVPZmZzZXQ7Ci0gICAgCiAgICAgT3BlcmFuZHM8RXhpdFZhbHVlPiBtX3ZhbHVl
czsKICAgICBCYWc8RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24+IG1fbWF0ZXJpYWxpemF0
aW9uczsKICAgICAKICAgICB1aW50MzJfdCBtX3N0YWNrbWFwSUQ7CisgICAgYm9vbCBtX2lzSW52
YWxpZGF0aW9uUG9pbnQ7CiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3Qg
VHJhY2tlZFJlZmVyZW5jZXMmKTsKK307CisKK3N0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6
T1NSRXhpdEJhc2UgeworICAgIE9TUkV4aXQoT1NSRXhpdERlc2NyaXB0b3ImKTsKKworICAgIE9T
UkV4aXREZXNjcmlwdG9yJiBtX2Rlc2NyaXB0b3I7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG1fY29kZTsKKyAgICAvLyBPZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHVi
IGZvciB0aGlzIGV4aXQuCisgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAg
IC8vIE9mZnNldCB3aXRoaW4gU3RhY2ttYXA6OnJlY29yZHMKKyAgICB1aW50MzJfdCBtX3N0YWNr
bWFwUmVjb3JkSW5kZXg7CisKICAgICBDb2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlvbkZvclJl
cGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0OwotICAgIAogICAgIHZvaWQgY29u
c2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9j
aykKICAgICB7CiAgICAgICAgIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRF
eGl0U2l0ZShwcm9maWxlZENvZGVCbG9jaywgRXhpdEZyb21GVEwpOwogICAgIH0KLSAgICAKLSAg
ICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYpOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHJldmlzaW9uIDE5
MDg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9u
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgewogCiBzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyB7CiAgICAg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCi0gICAgICAgIDogbV9pc0ludmFsaWRhdGlvblBvaW50
KGZhbHNlKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1f
dGh1bmtMYWJlbDsKICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3RodW5rSnVt
cDsKICAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3RodW5rQWRkcmVzczsKLSAgICBib29sIG1faXNJ
bnZhbGlkYXRpb25Qb2ludDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE5MDg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDE1ICsxNzYsOCBAQCBzdGF0aWMg
dm9pZCBjb21waWxlUmVjb3ZlcnkoCiBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICB1bnNp
Z25lZCBleGl0SUQsIEpJVENvZGUqIGppdENvZGUsIE9TUkV4aXQmIGV4aXQsIFZNKiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgU3RhY2tNYXBzOjpSZWNvcmQqIHJlY29yZCA9IG51
bGxwdHI7Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gaml0Q29kZS0+c3RhY2ttYXBzLnJl
Y29yZHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHJlY29yZCA9ICZqaXRDb2RlLT5zdGFja21h
cHMucmVjb3Jkc1tpXTsKLSAgICAgICAgaWYgKHJlY29yZC0+cGF0Y2hwb2ludElEID09IGV4aXQu
bV9zdGFja21hcElEKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIFJFTEVB
U0VfQVNTRVJUKHJlY29yZC0+cGF0Y2hwb2ludElEID09IGV4aXQubV9zdGFja21hcElEKTsKKyAg
ICBTdGFja01hcHM6OlJlY29yZCogcmVjb3JkID0gJmppdENvZGUtPnN0YWNrbWFwcy5yZWNvcmRz
W2V4aXQubV9zdGFja21hcFJlY29yZEluZGV4XTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmQt
PnBhdGNocG9pbnRJRCA9PSBleGl0Lm1fZGVzY3JpcHRvci5tX3N0YWNrbWFwSUQpOwogICAgIAog
ICAgIC8vIFRoaXMgY29kZSByZXF1aXJlcyBmcmFtZVBvaW50ZXJSZWdpc3RlciBpcyB0aGUgc2Ft
ZSBhcyBjYWxsRnJhbWVSZWdpc3RlcgogICAgIHN0YXRpY19hc3NlcnQoTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCAiTWFj
cm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyIGFuZCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciBtdXN0IGJlIHRoZSBzYW1lIik7CkBAIC0xOTgsNyArMTkxLDcgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVN0dWIoCiAgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVk
IGZvciB0aG9zZSBvYmplY3QgYWxsb2NhdGlvbnMuCiAgICAgdW5zaWduZWQgbnVtTWF0ZXJpYWxp
emF0aW9ucyA9IDA7CiAgICAgc2l6ZV90IG1heE1hdGVyaWFsaXphdGlvbk51bUFyZ3VtZW50cyA9
IDA7Ci0gICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0
aW9uIDogZXhpdC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fZGVzY3JpcHRvci5tX21h
dGVyaWFsaXphdGlvbnMpIHsKICAgICAgICAgbnVtTWF0ZXJpYWxpemF0aW9ucysrOwogICAgICAg
ICAKICAgICAgICAgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzID0gc3RkOjptYXgoCkBA
IC0yMDgsMTggKzIwMSwxOCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAKICAgICBT
Y3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0tPnNjcmF0Y2hCdWZmZXJGb3JTaXplKAog
ICAgICAgICBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICogKAotICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlcy5zaXplKCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVt
QXJndW1lbnRzKSArCisgICAgICAgICAgICBleGl0Lm1fZGVzY3JpcHRvci5tX3ZhbHVlcy5zaXpl
KCkgKyBudW1NYXRlcmlhbGl6YXRpb25zICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRz
KSArCiAgICAgICAgIHJlcXVpcmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkgKwogICAgICAg
ICBjb2RlQmxvY2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKS0+c2l6ZSgpICogc2l6ZW9mKHVpbnQ2
NF90KSk7CiAgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2ggPSBzY3JhdGNoQnVmZmVyID8gc3Rh
dGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpIDog
MDsKLSAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgPSBzY3JhdGNo
ICsgZXhpdC5tX3ZhbHVlcy5zaXplKCk7CisgICAgRW5jb2RlZEpTVmFsdWUqIG1hdGVyaWFsaXph
dGlvblBvaW50ZXJzID0gc2NyYXRjaCArIGV4aXQubV9kZXNjcmlwdG9yLm1fdmFsdWVzLnNpemUo
KTsKICAgICBFbmNvZGVkSlNWYWx1ZSogbWF0ZXJpYWxpemF0aW9uQXJndW1lbnRzID0gbWF0ZXJp
YWxpemF0aW9uUG9pbnRlcnMgKyBudW1NYXRlcmlhbGl6YXRpb25zOwogICAgIGNoYXIqIHJlZ2lz
dGVyU2NyYXRjaCA9IGJpdHdpc2VfY2FzdDxjaGFyKj4obWF0ZXJpYWxpemF0aW9uQXJndW1lbnRz
ICsgbWF4TWF0ZXJpYWxpemF0aW9uTnVtQXJndW1lbnRzKTsKICAgICB1aW50NjRfdCogdW53aW5k
U2NyYXRjaCA9IGJpdHdpc2VfY2FzdDx1aW50NjRfdCo+KHJlZ2lzdGVyU2NyYXRjaCArIHJlcXVp
cmVkU2NyYXRjaE1lbW9yeVNpemVJbkJ5dGVzKCkpOwogICAgIAogICAgIEhhc2hNYXA8RXhpdFRp
bWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSo+IG1hdGVyaWFsaXphdGlv
blRvUG9pbnRlcjsKICAgICB1bnNpZ25lZCBtYXRlcmlhbGl6YXRpb25Db3VudCA9IDA7Ci0gICAg
Zm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uIDogZXhp
dC5tX21hdGVyaWFsaXphdGlvbnMpIHsKKyAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxp
emF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fZGVzY3JpcHRvci5tX21hdGVyaWFsaXph
dGlvbnMpIHsKICAgICAgICAgbWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmFkZCgKICAgICAgICAg
ICAgIG1hdGVyaWFsaXphdGlvbiwgbWF0ZXJpYWxpemF0aW9uUG9pbnRlcnMgKyBtYXRlcmlhbGl6
YXRpb25Db3VudCsrKTsKICAgICB9CkBAIC0yNTMsMTAgKzI0NiwxMCBAQCBzdGF0aWMgdm9pZCBj
b21waWxlU3R1YigKICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRh
Z01hc2spLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIAogICAgIC8vIERvIHNvbWUg
dmFsdWUgcHJvZmlsaW5nLgotICAgIGlmIChleGl0Lm1fcHJvZmlsZURhdGFGb3JtYXQgIT0gRGF0
YUZvcm1hdE5vbmUpIHsKKyAgICBpZiAoZXhpdC5tX2Rlc2NyaXB0b3IubV9wcm9maWxlRGF0YUZv
cm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSkgewogICAgICAgICByZWNvcmQtPmxvY2F0aW9uc1swXS5y
ZXN0b3JlSW50byhqaXQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJ
bmZvOjpyZWdUMCk7CiAgICAgICAgIHJlYm94QWNjb3JkaW5nVG9Gb3JtYXQoCi0gICAgICAgICAg
ICBleGl0Lm1fcHJvZmlsZURhdGFGb3JtYXQsIGppdCwgR1BSSW5mbzo6cmVnVDAsIEdQUkluZm86
OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMik7CisgICAgICAgICAgICBleGl0Lm1fZGVzY3JpcHRvci5t
X3Byb2ZpbGVEYXRhRm9ybWF0LCBqaXQsIEdQUkluZm86OnJlZ1QwLCBHUFJJbmZvOjpyZWdUMSwg
R1BSSW5mbzo6cmVnVDIpOwogICAgICAgICAKICAgICAgICAgaWYgKGV4aXQubV9raW5kID09IEJh
ZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgewogICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsK
QEAgLTI3MCw4ICsyNjMsOCBAQCBzdGF0aWMgdm9pZCBjb21waWxlU3R1YigKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghIWV4aXQubV92YWx1ZVByb2ZpbGUpCi0gICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgZXhpdC5tX3ZhbHVlUHJvZmlsZS5n
ZXRTcGVjRmFpbEJ1Y2tldCgwKSk7CisgICAgICAgIGlmICghIWV4aXQubV9kZXNjcmlwdG9yLm1f
dmFsdWVQcm9maWxlKQorICAgICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIGV4
aXQubV9kZXNjcmlwdG9yLm1fdmFsdWVQcm9maWxlLmdldFNwZWNGYWlsQnVja2V0KDApKTsKICAg
ICB9CiAKICAgICAvLyBNYXRlcmlhbGl6ZSBhbGwgb2JqZWN0cy4gRG9uJ3QgbWF0ZXJpYWxpemUg
YW4gb2JqZWN0IHVudGlsIGFsbApAQCAtMjgxLDcgKzI3NCw3IEBAIHN0YXRpYyB2b2lkIGNvbXBp
bGVTdHViKAogICAgIC8vIGFsbG9jYXRpb24gb2YgdGhlIGZvcm1lci4KIAogICAgIEhhc2hTZXQ8
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiB0b01hdGVyaWFsaXplOwotICAgIGZvciAo
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9t
YXRlcmlhbGl6YXRpb25zKQorICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24q
IG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9kZXNjcmlwdG9yLm1fbWF0ZXJpYWxpemF0aW9ucykK
ICAgICAgICAgdG9NYXRlcmlhbGl6ZS5hZGQobWF0ZXJpYWxpemF0aW9uKTsKIAogICAgIHdoaWxl
ICghdG9NYXRlcmlhbGl6ZS5pc0VtcHR5KCkpIHsKQEAgLTM0NCw3ICszMzcsNyBAQCBzdGF0aWMg
dm9pZCBjb21waWxlU3R1YigKICAgICAvLyBOb3cgdGhhdCBhbGwgdGhlIG9iamVjdHMgaGF2ZSBi
ZWVuIGFsbG9jYXRlZCwgd2UgcG9wdWxhdGUgdGhlbQogICAgIC8vIHdpdGggdGhlIGNvcnJlY3Qg
dmFsdWVzLiBUaGlzIHRpbWUgd2UgY2FuIHJlY292ZXIgYWxsIHRoZQogICAgIC8vIGZpZWxkcywg
aW5jbHVkaW5nIHRob3NlIHRoYXQgYXJlIG9ubHkgbmVlZGVkIGZvciB0aGUgYWxsb2NhdGlvbi4K
LSAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24g
OiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucykgeworICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA6IGV4aXQubV9kZXNjcmlwdG9yLm1fbWF0ZXJp
YWxpemF0aW9ucykgewogICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BlcnR5SW5kZXggPSBtYXRl
cmlhbGl6YXRpb24tPnByb3BlcnRpZXMoKS5zaXplKCk7IHByb3BlcnR5SW5kZXgtLTspIHsKICAg
ICAgICAgICAgIGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUgPSBtYXRlcmlhbGl6YXRpb24tPnByb3Bl
cnRpZXMoKVtwcm9wZXJ0eUluZGV4XS52YWx1ZSgpOwogICAgICAgICAgICAgY29tcGlsZVJlY292
ZXJ5KApAQCAtMzY1LDE2ICszNTgsMTYgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAg
Ly8gU2F2ZSBhbGwgc3RhdGUgZnJvbSB3aGVyZXZlciB0aGUgZXhpdCBkYXRhIHRlbGxzIHVzIGl0
IHdhcywgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4KICAgICAvLyB0aGUgc2NyYXRjaCBi
dWZmZXIuIFRoaXMgYWxzbyBkb2VzIHRoZSByZWJveGluZy4KICAgICAKLSAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07KSB7CisgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IGV4aXQubV9kZXNjcmlwdG9yLm1fdmFsdWVzLnNpemUoKTsgaW5kZXgt
LTspIHsKICAgICAgICAgY29tcGlsZVJlY292ZXJ5KAotICAgICAgICAgICAgaml0LCBleGl0Lm1f
dmFsdWVzW2luZGV4XSwgcmVjb3JkLCBqaXRDb2RlLT5zdGFja21hcHMsIHJlZ2lzdGVyU2NyYXRj
aCwKKyAgICAgICAgICAgIGppdCwgZXhpdC5tX2Rlc2NyaXB0b3IubV92YWx1ZXNbaW5kZXhdLCBy
ZWNvcmQsIGppdENvZGUtPnN0YWNrbWFwcywgcmVnaXN0ZXJTY3JhdGNoLAogICAgICAgICAgICAg
bWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyKTsKICAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6
cmVnVDAsIHNjcmF0Y2ggKyBpbmRleCk7CiAgICAgfQogICAgIAogICAgIC8vIEhlbmNlZm9ydGgg
d2UgbWFrZSBpdCBsb29rIGxpa2UgdGhlIGV4aXRpbmcgZnVuY3Rpb24gd2FzIGNhbGxlZCB0aHJv
dWdoIGEgcmVnaXN0ZXIKICAgICAvLyBwcmVzZXJ2YXRpb24gd3JhcHBlci4gVGhpcyBpbXBsaWVz
IHRoYXQgRlAgbXVzdCBiZSBudWRnZWQgZG93biBieSBhIGNlcnRhaW4gYW1vdW50LiBUaGVuCi0g
ICAgLy8gd2UgcmVzdG9yZSB0aGUgdmFyaW91cyB0aGluZ3MgYWNjb3JkaW5nIHRvIGVpdGhlciBl
eGl0Lm1fdmFsdWVzIG9yIGJ5IGNvcHlpbmcgZnJvbSB0aGUKKyAgICAvLyB3ZSByZXN0b3JlIHRo
ZSB2YXJpb3VzIHRoaW5ncyBhY2NvcmRpbmcgdG8gZWl0aGVyIGV4aXQubV9kZXNjcmlwdG9yLm1f
dmFsdWVzIG9yIGJ5IGNvcHlpbmcgZnJvbSB0aGUKICAgICAvLyBvbGQgZnJhbWUsIGFuZCBmaW5h
bGx5IHdlIHNhdmUgdGhlIHZhcmlvdXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGludG8gd2hlcmUg
dGhlCiAgICAgLy8gcmVzdG9yYXRpb24gdGh1bmsgd291bGQgcmVzdG9yZSB0aGVtIGZyb20uCiAg
ICAgCkBAIC00MjIsNyArNDE1LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAgICAv
LyBGaXJzdCBzZXQgdXAgU1Agc28gdGhhdCBvdXIgZGF0YSBkb2Vzbid0IGdldCBjbG9iYmVyZWQg
Ynkgc2lnbmFscy4KICAgICB1bnNpZ25lZCBjb25zZXJ2YXRpdmVTdGFja0RlbHRhID0KLSAgICAg
ICAgKGV4aXQubV92YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKSArIGJhc2VsaW5lQ29kZUJsb2NrLT5j
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSkgKiBzaXplb2YoUmVnaXN0ZXIpICsK
KyAgICAgICAgKGV4aXQubV9kZXNjcmlwdG9yLm1fdmFsdWVzLm51bWJlck9mTG9jYWxzKCkgKyBi
YXNlbGluZUNvZGVCbG9jay0+Y2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSArCiAgICAgICAgIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
OwogICAgIGNvbnNlcnZhdGl2ZVN0YWNrRGVsdGEgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
CiAgICAgICAgIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgY29uc2VydmF0aXZlU3RhY2tEZWx0YSk7
CkBAIC00NzYsOCArNDY5LDggQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAKICAgICAvLyBO
b3cgZ2V0IHN0YXRlIG91dCBvZiB0aGUgc2NyYXRjaCBidWZmZXIgYW5kIHBsYWNlIGl0IGJhY2sg
aW50byB0aGUgc3RhY2suIFRoZSB2YWx1ZXMgYXJlCiAgICAgLy8gYWxyZWFkeSByZWJveGVkIHNv
IHdlIGp1c3QgbW92ZSB0aGVtLgotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBleGl0Lm1fdmFs
dWVzLnNpemUoKTsgaW5kZXgtLTspIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4
aXQubV92YWx1ZXMudmlydHVhbFJlZ2lzdGVyRm9ySW5kZXgoaW5kZXgpOworICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSBleGl0Lm1fZGVzY3JpcHRvci5tX3ZhbHVlcy5zaXplKCk7IGluZGV4LS07
KSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBleGl0Lm1fZGVzY3JpcHRvci5tX3Zh
bHVlcy52aXJ0dWFsUmVnaXN0ZXJGb3JJbmRleChpbmRleCk7CiAKICAgICAgICAgaWYgKHJlZy5p
c0xvY2FsKCkgJiYgcmVnLnRvTG9jYWwoKSA8IHN0YXRpY19jYXN0PGludD4oYmFzZWxpbmVWaXJ0
dWFsUmVnaXN0ZXJzRm9yQ2FsbGVlU2F2ZXMpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC00
OTcsNyArNDkwLDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgICgiRlRMIE9T
UiBleGl0ICMldSAoJXMsICVzKSBmcm9tICVzLCB3aXRoIG9wZXJhbmRzID0gJXMsIGFuZCByZWNv
cmQgPSAlcyIsCiAgICAgICAgICAgICBleGl0SUQsIHRvQ1N0cmluZyhleGl0Lm1fY29kZU9yaWdp
bikuZGF0YSgpLAogICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRv
Q1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCksCi0gICAgICAgICAgICB0b0NTdHJpbmcoaWdub3Jp
bmdDb250ZXh0PER1bXBDb250ZXh0PihleGl0Lm1fdmFsdWVzKSkuZGF0YSgpLAorICAgICAgICAg
ICAgdG9DU3RyaW5nKGlnbm9yaW5nQ29udGV4dDxEdW1wQ29udGV4dD4oZXhpdC5tX2Rlc2NyaXB0
b3IubV92YWx1ZXMpKS5kYXRhKCksCiAgICAgICAgICAgICB0b0NTdHJpbmcoKnJlY29yZCkuZGF0
YSgpKSk7CiB9CiAKQEAgLTUyNywxMCArNTIwLDEwIEBAIGV4dGVybiAiQyIgdm9pZCogY29tcGls
ZUZUTE9TUkV4aXQoRXhlY1MKICAgICAgICAgZGF0YUxvZygiICAgIE9yaWdpbjogIiwgZXhpdC5t
X2NvZGVPcmlnaW4sICJcbiIpOwogICAgICAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSAhPSBleGl0Lm1fY29kZU9yaWdpbikKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBP
cmlnaW4gZm9yIGV4aXQgcHJvZmlsZTogIiwgZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZSwgIlxuIik7Ci0gICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHZhbHVlczogIiwgZXhpdC5tX3Zh
bHVlcywgIlxuIik7Ci0gICAgICAgIGlmICghZXhpdC5tX21hdGVyaWFsaXphdGlvbnMuaXNFbXB0
eSgpKSB7CisgICAgICAgIGRhdGFMb2coIiAgICBFeGl0IHZhbHVlczogIiwgZXhpdC5tX2Rlc2Ny
aXB0b3IubV92YWx1ZXMsICJcbiIpOworICAgICAgICBpZiAoIWV4aXQubV9kZXNjcmlwdG9yLm1f
bWF0ZXJpYWxpemF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBN
YXRlcmlhbGl6YXRpb25zOlxuIik7Ci0gICAgICAgICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0Lm1fbWF0ZXJpYWxpemF0aW9ucykK
KyAgICAgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFs
aXphdGlvbiA6IGV4aXQubV9kZXNjcmlwdG9yLm1fbWF0ZXJpYWxpemF0aW9ucykKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICAgICIsIHBvaW50ZXJEdW1wKG1hdGVyaWFsaXphdGlvbiks
ICJcbiIpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGFja01hcHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhY2tNYXBzLmNwcAkocmV2aXNpb24gMTkwODg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGFja01hcHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsOCArMjUw
LDExIEBAIHZvaWQgU3RhY2tNYXBzOjpkdW1wTXVsdGlsaW5lKFByaW50U3RyZWEKIFN0YWNrTWFw
czo6UmVjb3JkTWFwIFN0YWNrTWFwczo6Y29tcHV0ZVJlY29yZE1hcCgpIGNvbnN0CiB7CiAgICAg
UmVjb3JkTWFwIHJlc3VsdDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsg
aS0tOykKLSAgICAgICAgcmVzdWx0LmFkZChyZWNvcmRzW2ldLnBhdGNocG9pbnRJRCwgVmVjdG9y
PFJlY29yZD4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChyZWNvcmRzW2ldKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSByZWNvcmRzLnNpemUoKTsgaS0tOykgeworICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IHJlc3VsdC5hZGQocmVjb3Jkc1tpXS5wYXRjaHBvaW50SUQsIFJlY29yZE1hcFZhbHVl
KCkpOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLnJlY29yZHMuYXBwZW5kKHJl
Y29yZHNbaV0pOworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmluZGljZXMuYXBw
ZW5kKGkpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YWNrTWFwcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHJldmlzaW9uIDE5MDg4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhY2tNYXBzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsMTEgQEAgc3RydWN0IFN0YWNrTWFwcyB7CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wTXVsdGlsaW5lKFByaW50U3RyZWFtJiwgY29uc3Qg
Y2hhciogcHJlZml4KSBjb25zdDsKICAgICAKLSAgICB0eXBlZGVmIEhhc2hNYXA8dWludDMyX3Qs
IFZlY3RvcjxSZWNvcmQ+LCBXVEY6OkludEhhc2g8dWludDMyX3Q+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4gUmVjb3JkTWFwOworICAgIHN0cnVjdCBSZWNv
cmRNYXBWYWx1ZSB7CisgICAgICAgIFZlY3RvcjxSZWNvcmQ+IHJlY29yZHM7CisgICAgICAgIFZl
Y3Rvcjx1aW50MzJfdD4gaW5kaWNlczsKKyAgICB9OworICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50
MzJfdCwgUmVjb3JkTWFwVmFsdWUsIFdURjo6SW50SGFzaDx1aW50MzJfdD4sIFdURjo6VW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiBSZWNvcmRNYXA7CiAgICAgCiAgICAg
UmVjb3JkTWFwIGNvbXB1dGVSZWNvcmRNYXAoKSBjb25zdDsKIAo=
</data>
<flag name="review"
          id="288157"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>