<?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>86552</bug_id>
          
          <creation_ts>2012-05-15 17:31:21 -0700</creation_ts>
          <short_desc>DFG should optimize aliased uses of the Arguments object of the current call frame</short_desc>
          <delta_ts>2012-05-24 05:36:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87378</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>624770</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-15 17:31:21 -0700</bug_when>
    <thetext>We currently optimize the heck out of:

arguments[i]
arguments.length

But we fail to do the same optimizations if we have:

var x = arguments;
x[i]
x.length

In particular, we will presently allocate (and tear off) an arguments object, and then optimize x[i] and x.length to be array-like accesses to that arguments object. While that is faster than what the baseline JIT and LLInt would do, it&apos;s still rather redundant, since the DFG has most of the machinery in place to realize that this aliased form of arguments access is equivalent to the non-aliased form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624775</commentid>
    <comment_count>1</comment_count>
      <attachid>142107</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-15 17:35:14 -0700</bug_when>
    <thetext>Created attachment 142107
work in progress

Still need to implement the OSR side of this optimization.

And check that the code even compiles. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624812</commentid>
    <comment_count>2</comment_count>
      <attachid>142114</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-15 18:21:54 -0700</bug_when>
    <thetext>Created attachment 142114
more

Wrote the 64-bit side of the OSR part of this optimization.

Still haven&apos;t even tried compiling this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624820</commentid>
    <comment_count>3</comment_count>
      <attachid>142115</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-15 18:29:32 -0700</bug_when>
    <thetext>Created attachment 142115
fixed some issues

Fixed some issues that I found through code inspection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>625012</commentid>
    <comment_count>4</comment_count>
      <attachid>142158</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-15 23:04:06 -0700</bug_when>
    <thetext>Created attachment 142158
it&apos;s starting to do things

Still more work to be done though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627024</commentid>
    <comment_count>5</comment_count>
      <attachid>142563</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-17 15:06:08 -0700</bug_when>
    <thetext>Created attachment 142563
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627073</commentid>
    <comment_count>6</comment_count>
      <attachid>142563</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-17 15:53:10 -0700</bug_when>
    <thetext>Comment on attachment 142563
the patch

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

Test cases and 32bit, please.

&gt; Source/JavaScriptCore/dfg/DFGArgumentsSimplificationPhase.cpp:442
&gt; +                    // we should remote the phantom reference, since:

s/remote/remove/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627210</commentid>
    <comment_count>7</comment_count>
      <attachid>142606</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-17 18:45:55 -0700</bug_when>
    <thetext>Created attachment 142606
almost ready

I just need to turn some of my ad-hoc tests into LayoutTests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627339</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-17 22:30:16 -0700</bug_when>
    <thetext>Landed with a bunch of LayoutTests in http://trac.webkit.org/changeset/117542</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>627340</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-17 22:32:52 -0700</bug_when>
    <thetext>
&gt; s/remote/remove/

Forgot to fix in the main commit.  Fix landed in http://trac.webkit.org/changeset/117543</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632426</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-23 22:32:42 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/118323</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142107</attachid>
            <date>2012-05-15 17:35:14 -0700</date>
            <delta_ts>2012-05-15 18:21:54 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>aliased_arguments_patch_1.diff</filename>
            <type>text/plain</type>
            <size>40735</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDEyLTA1LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhbGlhc2VkIHVzZXMgb2YgdGhlIEFyZ3VtZW50cyBvYmplY3Qg
b2YgdGhlIGN1cnJlbnQgY2FsbCBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODY1NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6
OnJ1bik6CisgICAgICAgIChBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpvYnNlcnZlQmFkQXJndW1l
bnRzVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
OjpvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6CisgICAgICAg
IChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6aXNPS1RvT3B0aW1pemUp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5o
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpleGVjdXRhYmxlRm9yKToKKyAgICAgICAgKEdy
YXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YXJndW1lbnRzUmVnaXN0ZXJGb3IpOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbG9iYmVyc1dvcmxkKToKKyAgICAgICAgKiBkZmcv
REZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OlZhcmlhYmxlQWNjZXNzRGF0YSk6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjptZXJnZUlzQXJndW1lbnRz
QWxpYXMpOgorICAgICAgICAoVmFyaWFibGVBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmlzQXJndW1lbnRzQWxpYXMpOgorCiAyMDEyLTA1LTE0ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBvcHRp
bWl6ZSBpbmxpbmVkIHVzZXMgb2YgYXJndW1lbnRzLmxlbmd0aCBhbmQgYXJndW1lbnRzW2ldCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzksMTkgKzEwNzksMTggQEAgYm9vbCBB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgaWYgKCFtX2dyYXBo
Lm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikpKSB7Ci0gICAgICAg
ICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMg
YXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKLSAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVu
dHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0
YW50IGZvbGRpbmcKLSAgICAgICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNh
dXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCi0gICAg
ICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVy
IG9uLgotICAgICAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsK
LSAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4
ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6
ZQorICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qg
c3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCisgICAgICAgIC8vIG9mIEdldE15
QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJl
cmluZyBvcGVyYXRpb24uCisgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRp
b25zIG9uIHRoaXMgbGF0ZXIgb24uCisgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzTnVtYmVy
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBj
bG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgYXJndW1lbnRzIG9iamVjdCBoYWQgYSBnZXR0
ZXIKICAgICAgICAgLy8gaW5zdGFsbGVkIG9uIHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAgICAg
IGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CkBAIC0xMTAxLDE1ICsxMTAwLDE0IEBA
IGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAgICAgICBpZiAoIW1f
Z3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlucygKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKSkpIHsKLSAg
ICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBl
IGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQotICAgICAgICAgICAgLy8gdGhlIGFy
Z3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0aGVyIG9wdGlt
aXplZCBieSB0aGUKLSAgICAgICAgICAgIC8vIEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIp
OwotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CisgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFi
bGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQorICAg
ICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5n
IGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQorICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAg
ICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9w
ZXJ0eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAgICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBz
cGVjdWxhdGUgYWdhaW5zdCB0aGlzLgogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleElu
QmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTcwMTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw4NCBAQAogI2luY2x1ZGUgIkRG
R0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFs
aWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorbmFtZXNwYWNlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBOdWxsYWJsZUhhc2hUcmFpdHM8VD4gOiBwdWJs
aWMgSGFzaFRyYWl0czxUPiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVy
byA9IGZhbHNlOworICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7IHJldHVybiByZWludGVycHJl
dF9jYXN0PFQ+KDEpOyB9Cit9OworCitzdHJ1Y3QgQXJndW1lbnRzQWxpYXNpbmdEYXRhIHsKKyAg
ICBJbmxpbmVDYWxsRnJhbWUqIGNhbGxDb250ZXh0OworICAgIGJvb2wgY2FsbENvbnRleHRTZXQ7
CisgICAgYm9vbCBtdWx0aXBsZUNhbGxDb250ZXh0czsKKyAgICAKKyAgICBib29sIGFzc2lnbmVk
RnJvbUFyZ3VtZW50czsKKyAgICBib29sIGFzc2lnbmVkRnJvbU1hbnlUaGluZ3M7CisgICAgCisg
ICAgYm9vbCBlc2NhcGVzOworICAgIAorICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSgpCisgICAg
ICAgIDogY2FsbENvbnRleHQoMCkKKyAgICAgICAgLCBjYWxsQ29udGV4dFNldChmYWxzZSkKKyAg
ICAgICAgLCBtdWx0aXBsZUNhbGxDb250ZXh0cyhmYWxzZSkKKyAgICAgICAgLCBhc3NpZ25lZEZy
b21Bcmd1bWVudHMoZmFsc2UpCisgICAgICAgICwgYXNzaWduZWRGcm9tTWFueVRoaW5ncyhmYWxz
ZSkKKyAgICAgICAgLCBlc2NhcGVzKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBtZXJnZUNhbGxDb250ZXh0KElubGluZUNhbGxGcmFtZSogbmV3Q2FsbENvbnRleHQpCisgICAg
eworICAgICAgICBpZiAobXVsdGlwbGVDYWxsQ29udGV4dHMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBpZiAoIWNhbGxDb250ZXh0U2V0KSB7CisgICAgICAgICAgICBj
YWxsQ29udGV4dCA9IG5ld0NhbGxDb250ZXh0OworICAgICAgICAgICAgY2FsbENvbnRleHRTZXQg
PSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoY2FsbENvbnRleHQgPT0gbmV3Q2FsbENvbnRleHQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBtdWx0aXBsZUNhbGxDb250ZXh0cyA9IHRydWU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgY2FsbENvbnRleHRJc1ZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBjYWxsQ29udGV4dFNldCAmJiAhbXVsdGlwbGVDYWxsQ29udGV4dHM7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCkKKyAgICB7CisgICAgICAgIGFzc2ln
bmVkRnJvbUFyZ3VtZW50cyA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgbWVyZ2VOb25B
cmd1bWVudHNBc3NpZ25tZW50KCkKKyAgICB7CisgICAgICAgIGFzc2lnbmVkRnJvbU1hbnlUaGlu
Z3MgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGFyZ3VtZW50c0Fzc2lnbm1lbnRJc1Zh
bGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhc3NpZ25lZEZyb21Bcmd1bWVudHMgJiYgIWFz
c2lnbmVkRnJvbU1hbnlUaGluZ3M7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNWYWxpZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gY2FsbENvbnRleHRJc1ZhbGlkKCkgJiYgYXJndW1lbnRzQXNz
aWdubWVudElzVmFsaWQoKSAmJiAhZXNjYXBlczsKKyAgICB9Cit9OworCit9IC8vIGVuZCBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKIGNsYXNzIEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UgOiBw
dWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uo
R3JhcGgmIGdyYXBoKQpAQCAtNTEsNiArMTI2LDE3MyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAg
ICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCisgICAgICAgIC8vIFJlY29yZCB3
aGljaCBhcmd1bWVudHMgYXJlIGtub3duIHRvIGVzY2FwZSBubyBtYXR0ZXIgd2hhdC4KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPmlubGluZUNhbGxGcmFtZXMoKS5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gJmNvZGVCbG9jaygpLT5pbmxpbmVDYWxsRnJhbWVzKClbaV07CisgICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAorICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFibGVGb3IoaW5saW5lQ2FsbEZyYW1lKSkp
CisgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChpbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVhdGUgZGF0YSBmb3IgdmFyaWFi
bGUgYWNjZXNzIGRhdGFzIHRoYXQgd2Ugd2lsbCB3YW50IHRvIGFuYWx5emUuCisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEubGVuZ3RoKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmFkZCh2
YXJpYWJsZUFjY2Vzc0RhdGEsIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSgpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2YXJpYWJsZXMgYWxpYXMgdGhl
IGFyZ3VtZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJlCisgICAgICAgIC8vIHVzZWQgb25s
eSBmb3IgR2V0QnlWYWwgYW5kIEdldEFyZ3VtZW50c0xlbmd0aCBhY2Nlc3Nlcy4gQXQgdGhlIHNh
bWUgdGltZSwKKyAgICAgICAgLy8gaWRlbnRpZnkgdXNlcyBvZiBDcmVhdGVBcmd1bWVudHMgdGhh
dCBhcmUgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgYXJndW1lbnRzCisgICAgICAgIC8vIGJlaW5n
IGFsaWFzZWQgb25seSB0byB2YXJpYWJsZXMgdGhhdCBzYXRpc2Z5IHRoZXNlIGNvbnN0cmFpbnRz
LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxk
MSgpXTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbCBrbm93
cyB0aGF0IGlmIGl0J3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdmFyaWFibGUgdGhh
dCB3ZSB0aGluayBpcyBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMsIHRoZW4gaXQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIG1heSBlc2NhcGUgYXQgdGhpcyBwb2ludC4gSW4gZnV0dXJlLCB3
ZSBjb3VsZCB0cmFjayB0cmFuc2l0aXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlh
c2luZy4gQnV0IG5vdCB5ZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIGl0J3Mg
YSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoZSBhcmd1bWVudHMsIHRoYXQgd2Uga25vdyB0aGF0IGl0IG1pZ2h0IGFjdHVh
bGx5IG5vdCBiZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0
YSYgZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2lu
Zy5nZXQodmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCisgICAgICAg
ICAgICAgICAgICAgICAgICA9PSBtX2dyYXBoLmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29k
ZU9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3Vy
Y2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXJndW1l
bnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5nZXQodmFyaWFibGVB
Y2Nlc3NEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUFyZ3VtZW50c0Fzc2ln
bm1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZh
cmlhYmxlJ3MgdXNlcyBhcmUgaW4gdGhlIHNhbWUgY29udGV4dCBhcworICAgICAgICAgICAgICAg
ICAgICAvLyB0aGUgYXJndW1lbnRzIGl0IGlzIGFsaWFzaW5nLgorICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChzb3VyY2UuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgY2Fz
ZSBGbHVzaDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2lu
Z0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEp
OworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBT
ZXRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5nZXQodmFyaWFibGVBY2Nlc3NE
YXRhKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1l
bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnlWYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24o
KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJl
ZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2VzKG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhub2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRT
cGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXJn
dW1lbnRzIGlzIHVzZWQgYXMgYW4gaW5kZXgsIHRoZW4gaXQncyBhbiBlc2NhcGluZyB1c2UuCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28gYXdmdWwgYW5kIHByZXR0eSBtdWNo
IGltcG9zc2libGUgc2luY2UgaXQgd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlt
cGx5IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ29vZCB0byBiZSBkZWZlbnNpdmUgYW5kIHRob3Jv
dWdoLgorICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2Rl
LmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVu
dHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudHNMZW5ndGg6IHsKKyAgICAgICAgICAgICAg
ICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBv
YnNlcnZlQmFkQXJndW1lbnRVc2VzKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIE5vdyB3ZSBrbm93IHdoaWNoIHZhcmlhYmxlcyBhcmUgYWxpYXNlZCB0byBhcmd1
bWVudHMuIEJ1dCBpZiBhbnkgb2YgdGhlbSBhcmUKKyAgICAgICAgLy8gZm91bmQgdG8gaGF2ZSBl
c2NhcGVkLCBvciB3ZXJlIG90aGVyd2lzZSBpbnZhbGlkYXRlZCwgdGhlbiB3ZSBuZWVkIHRvIG1h
cmsKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhcyByZXF1aXJpbmcgY3JlYXRpb24uIFRoaXMg
aXMgYSBwcm9wZXJ0eSBvZiBTZXRMb2NhbHMgdG8KKyAgICAgICAgLy8gdmFyaWFibGVzIHRoYXQg
YXJlIG5laXRoZXIgdGhlIGNvcnJlY3QgYXJndW1lbnRzIHJlZ2lzdGVyIG5vciBhcmUgbWFya2Vk
IGFzCisgICAgICAgIC8vIGJlaW5nIGFyZ3VtZW50cy1hbGlhc2VkLgorICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2Nr
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5C
bG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQo
aW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2Rl
SW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgp
ICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlIGFjcHR1cmVkIGNhc2Ugd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4g
Y2FyZSBvZiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXMgcGFzcy4KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJn
dW1lbnRzQWxpYXNpbmcuZ2V0KHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICAgICAg
aWYgKGRhdGEuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIElu
c2VydGlvblNldDxOb2RlSW5kZXg+IGluc2VydGlvblNldDsKICAgICAgICAgCiAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKQEAgLTYwLDExICszMDIsMTExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2Nr
IDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2Rl
SW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29u
dGFpbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9y
KG5vZGUuY29kZU9yaWdpbikpKQorICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAg
ICAgICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5vcCgpICE9IENyZWF0ZUFyZ3VtZW50cykK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEg
PSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0b3JlIGludG8gdGhlIGFyZ3VtZW50cyBy
ZWdpc3RlciBmb3IgYW4gSW5saW5lQ2FsbEZyYW1lKgorICAgICAgICAgICAgICAgICAgICAvLyB0
aGF0IGRvZXMgbm90IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4ga2lsbCBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3Jp
Z2luKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250
YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGaW5kIHRoZSBGbHVzaC4gSXQgc2hvdWxkIGJlIHRoZSBuZXh0IGluc3Ry
dWN0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSYgZmx1c2ggPSBtX2dyYXBoW2Js
b2NrLT5hdChpbmRleEluQmxvY2sgKyAxKV07CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoZmx1c2gub3AoKSA9PSBGbHVzaCk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
Zmx1c2gudmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gdmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChmbHVzaC5jaGlsZDEoKSA9PSBub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQmUgZGVmZW5zaXZlIGluIHJlbGVhc2UgbW9kZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbHVzaC5vcCgpICE9IEZsdXNoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgZmx1c2gudmFyaWFibGVBY2Nlc3NEYXRhKCkgIT0gdmFy
aWFibGVBY2Nlc3NEYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZmx1c2guY2hp
bGQxKCkgIT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2guc2V0T3BBbmREZWZhdWx0RmxhZ3MoTm9wKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmREZXJlZkNoaWxkMShmbHVz
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldFJlZkNvdW50KDApOworICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3RvcmUgaW50byBhIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdGhhdCBpcyBtYXJrZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1l
bnRzIGFsaWFzaW5nIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUqIHRoYXQgZG9lcyBub3QgY3JlYXRl
CisgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cywgdGhlbiBmbGFnIHRoZSBWYXJpYWJs
ZUFjY2Vzc0RhdGEgYXMgYmVpbmcgYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRz
LWFsaWFzZWQuIFRoaXMnbGwgbGV0IHRoZSBPU1IgZXhpdCBtYWNoaW5lcnkgZG8gdGhlIHJpZ2h0
CisgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNvIHRoYXQgdGhlIFNldExv
Y2FsIHNob3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCisgICAgICAgICAgICAgICAgICAgIC8v
IHdlIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRoIEdldE15QXJndW1lbnRz
TGVuZ3RoIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwuCisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2FyZ3VtZW50c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFj
Y2Vzc0RhdGEpLmlzVmFsaWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNjZXNzRGF0YS0+
bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9u
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGls
ZDIoKV0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZUFy
cmF5UHJlZGljdGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgY2FuIGJlIHNpbXBsaWZpZWQgdG8gR2V0TXlBcmd1bWVudEJ5VmFsIGlmIHdlIGtu
b3cgdGhhdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQgc2F0aXNmaWVzIGVpdGhlciBj
b25kaXRpb24gKDEpIG9yICgyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEpIEl0cyBm
aXJzdCBjaGlsZCBpcyBhIHZhbGlkIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSBhbmQgdGhlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyAgICBJbmxpbmVDYWxsRnJhbWUqIGlzIG5vdCBtYXJrZWQg
YXMgY3JlYXRpbmcgYXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gMikgSXRz
IGZpcnN0IGNoaWxkIGlzIENyZWF0ZUFyZ3VtZW50cyBhbmQgaXRzIElubGluZUNhbGxGcmFtZSoK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIGlzIG5vdCBtYXJrZWQgYXMgY3JlYXRpbmcg
YXJndW1lbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlzT0tUb09wdGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IG5vZGUuY2hpbGRy
ZW4uY2hpbGQyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxk
MigpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1
bHRGbGFncyhHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8g
Rm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRoaXMgb3Agbm93IHRoYXQgaXQncyBhIEdldE15QXJn
dW1lbnRCeVZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVudHNM
ZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBo
W25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDEoKSA9IEVk
Z2UoKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRN
eUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0
aW9uIG9mIHRoaXMgb3Agbm9ldyB0aGF0IGl0J3MgYSBHZXRNeUFyZ3VtZW50c0xlbmd0aC4KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgorICAg
ICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOiB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChjcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5v
cCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC04Miwx
MCArNDI0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2V4
ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkKKyAg
ICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAgICAgICAgICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNy
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1
bWVudEJ5VmFsU2FmZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15
QXJndW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3Ao
R2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICghbm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uaGFz
Q29uc3RhbnQoKSkKQEAgLTE0MCw2ICs0ODgsMTAzIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAg
ICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgSGFzaFNldDxJ
bmxpbmVDYWxsRnJhbWUqLAorICAgICAgICAgICAgRGVmYXVsdEhhc2g8SW5saW5lQ2FsbEZyYW1l
Kj46Okhhc2gsCisgICAgICAgICAgICBOdWxsYWJsZUhhc2hUcmFpdHM8SW5saW5lQ2FsbEZyYW1l
Kj4gPiBtX2NyZWF0ZXNBcmd1bWVudHM7CisgICAgSGFzaE1hcDxWYXJpYWJsZUFjY2Vzc0RhdGEq
LCBBcmd1bWVudHNBbGlhc2luZ0RhdGEsCisgICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPjo6SGFzaCwKKyAgICAgICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJp
YWJsZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1lbnRzQWxpYXNpbmc7CisKKyAgICB2b2lkIG9ic2Vy
dmVCYWRBcmd1bWVudHNVc2UoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKCFlZGdlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dy
YXBoW2VkZ2VdOworICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChjaGlsZC5sb2NhbCgpID09IG1fZ3Jh
cGguYXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbikpIHsKKyAgICAgICAgICAg
IG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NwdHVyZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0
YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZ2V0KHZhcmlhYmxlQWNjZXNzRGF0YSk7Cisg
ICAgICAgIGRhdGEuZXNjYXBlcyA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZXMoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCisgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKGNoaWxkKG5vZGUsIGkpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKKyAgICAgICAgaWYgKGNoaWxk
Lm9wKCkgIT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gY2FuIHRoaXMgaGFwcGVu
PyBBdCBsZWFzdCB0d28gY2FzZXMgdGhhdCBJIGNhbiB0aGluaworICAgICAgICAgICAgLy8gb2Y6
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gMSkgQWxpYXNlZCB1c2Ugb2YgYXJndW1l
bnRzIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrLAorICAgICAgICAgICAgLy8gICAgbGlrZToKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICB2YXIgYSA9IGFyZ3VtZW50czsKKyAgICAg
ICAgICAgIC8vICAgIHZhciB4ID0gYXJndW1lbnRzW2ldOworICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIDIpIElmIHdlJ3JlIGFjY2Vzc2luZyBhcmd1bWVudHMgd2UgZ290IGZyb20gdGhl
IGhlYXAhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICE9IGNoaWxkLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKHZhcmlh
YmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9
IG1fYXJndW1lbnRzQWxpYXNpbmcuZ2V0KHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgIGRh
dGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlJiBzb3VyY2UpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHNvdXJjZS5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsK
KyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gc291
cmNlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNz
RGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
QXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgaWYgKCFkYXRh
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CisgICAgICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9OwogCiBi
b29sIHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NTMsNyArMjQ1Myw2IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKICAgICAgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVu
dHMgPSB0cnVlOwotICAgICAgICAgICAgbV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVu
dHNFc2NhcGVkLmFkZChtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCkpOwogICAgICAgICAg
ICAgTm9kZUluZGV4IGNyZWF0ZUFyZ3VtZW50cyA9IGFkZFRvR3JhcGgoQ3JlYXRlQXJndW1lbnRz
LCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNyZWF0ZUFyZ3VtZW50cyk7CiAgICAg
ICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVudHMpOwpAQCAtMjQ3Myw3ICsyNDcyLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6IHsKICAgICAgICAgICAgIG1fZ3Jh
cGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0TXlBcmd1bWVudHNMZW5ndGgpKTsKKyAg
ICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBo
KEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
Z2V0X2FyZ3VtZW50c19sZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0ODEs
NyArMjQ4MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwogICAgICAgICAgICAgc2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaCgKLSAgICAgICAgICAgICAgICAgICAgR2V0TXlBcmd1bWVudEJ5VmFsLCBPcEluZm8oMCks
IE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpLAorICAgICAgICAgICAgICAgICAgICBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlLCBPcEluZm8oMCksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpLAogICAgICAg
ICAgICAgICAgICAgICBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1bWVudF9ieV92YWwpOwogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMTcwMTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwMiwxMiArMzAyLDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGVGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZUZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
ICAgICB7Ci0gICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUNh
bGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGVGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBleGVjdXRhYmxlRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpAQCAtMzE1LDYgKzMyMCwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgfQogICAgIAorICAgIGludCBhcmd1
bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biBjb2RlQmxvY2soKS0+YXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgKKyAgICAgICAgICAgIGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSArCisgICAgICAg
ICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgfQorICAg
IAogICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGVJbmRleCBub2RlSW5kZXgp
CiAgICAgewogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKQEAgLTQxMCw5ICs0MjUs
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5v
ZGUpOwogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgcmV0dXJuICFieVZhbElz
UHVyZShub2RlKTsKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgICAg
ICByZXR1cm4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlucygKLSAg
ICAgICAgICAgICAgICBleGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikpOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBpbiByZWxl
YXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTI4LDYg
KzUyOCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAg
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAg
ICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMTcwMTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8q
IGFzIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbG9jYWwgYWNjZXNzLCBhbmQgdGh1cyBoYWQgdGhl
aXIgb3duIHByb2ZpbGluZy4gKi9cCiAgICAgbWFjcm8oR2V0TG9jYWxVbmxpbmtlZCwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgXAotICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5nIHNldC4g
Ki9cCisgICAgLyogTWFya2VyIGZvciBhbiBhcmd1bWVudCBiZWluZyBzZXQgYXQgdGhlIHByb2xv
Z3VlIG9mIGEgZnVuY3Rpb24uICovXAogICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBcCiAgICAg
XAogICAgIC8qIEhpbnQgdGhhdCBpbmxpbmluZyBiZWdpbnMgaGVyZS4gTm8gY29kZSBpcyBnZW5l
cmF0ZWQgZm9yIHRoaXMgbm9kZS4gSXQncyBvbmx5ICovXApAQCAtMTk4LDggKzE5OCwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogc2Vuc2UuICovXAogICAgIG1h
Y3JvKENyZWF0ZUFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oVGVhck9mZkFy
Z3VtZW50cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEdldE15QXJndW1lbnRzTGVu
Z3RoLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQp
IFwKLSAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oR2V0TXlBcmd1bWVudHNM
ZW5ndGgsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhHZXRN
eUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZh
bFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCkgXAogICAgIG1hY3JvKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgY3JlYXRpbmcgZnVuY3Rpb25zLiAqL1wKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDM3LDEzICs0MzcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWw6IHsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3Mo
Tm9kZVVzZWRBc051bWJlciB8IE5vZGVVc2VkQXNJbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3Ro
OiB7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOiB7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdEludDMyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC02MTYsNyArNjE2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBHZXRGbG9hdDY0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgog
ICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6Ci0gICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtl
ZDogeworICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CisgICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudHNMZW5ndGg6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOiB7CiAgICAg
ICAgICAgICAvLyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFn
ZSBvZiBjb21waWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVw
KCksIHdoaWNoIGZvbGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODkwLDIx
ICszODkwLDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9qaXQuZ3JhcGgoKS5t
X2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAg
ICAgIG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkgewotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2Nh
cGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdFB0cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCi0gICAg
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAgICAg
ICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBB
cmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAor
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmls
ZTo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LnN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIs
IG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
ICAgICAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5jaFRl
c3RQdHIoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKQEAgLTM5NDMsNDYgKzM5
NDUsNTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9qaXQuZ3JhcGgoKS5t
X2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAg
ICAgIG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkgeworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6YWRkcmVzc0ZvcigKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRz
UmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKKworICAgICAgICBtX2ppdC5hZGQzMihU
cnVzdGVkSW1tMzIoMSksIGluZGV4R1BSLCByZXN1bHRHUFIpOworICAgICAgICBpZiAobm9kZS5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAor
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsCisg
ICAgICAgICAgICAgICAgICAgIEltbTMyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmFyZ3VtZW50cy5zaXplKCkpKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAotICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwotCi0gICAgICAgICAg
ICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4R1BSLCByZXN1bHRHUFIpOwotICAg
ICAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMigKLSAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWws
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBJbW0zMihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpKSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6
cGF5bG9hZEZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLAorICAg
ICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihSZWdpc3RlckZpbGU6OkFy
Z3VtZW50Q291bnQpKSk7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9q
aXQubmVnMzIocmVzdWx0R1BSKTsKLSAgICAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRy
KHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsK
KyAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAoKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUKLSAgICAg
ICAgICAgICAgICAgICAgICA/IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgOiAwKSArIENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXRJbmNsdWRpbmdUaGlzKDApKSAqIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICAgICAg
ICAgIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBKSVRD
b21waWxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LAorICAgICAgICAgICAg
ICAgICgobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAg
PyBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldAorICAgICAgICAg
ICAgICAgICAgOiAwKSArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDAp
KSAqIHNpemVvZihSZWdpc3RlcikpLAorICAgICAgICAgICAgcmVzdWx0R1BSKTsKIAotICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsOCBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlvbihQcmVkaWN0Tm9u
ZSkKICAgICAgICAgLCBtX2ZsYWdzKDApCiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShF
bXB0eURvdWJsZUZvcm1hdFN0YXRlKQorICAgICAgICAsIG1faXNDYXB0dXJlZChmYWxzZSkKKyAg
ICAgICAgLCBtX2lzQXJndW1lbnRzQWxpYXMoZmFsc2UpCiAgICAgewogICAgICAgICBjbGVhclZv
dGVzKCk7CiAgICAgfQpAQCAtNTgsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9mbGFn
cygwKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0
ZSkKICAgICAgICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKKyAgICAgICAgLCBtX2lzQXJn
dW1lbnRzQWxpYXMoZmFsc2UpCiAgICAgewogICAgICAgICBjbGVhclZvdGVzKCk7CiAgICAgfQpA
QCAtODcsNiArOTAsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pc0NhcHR1cmVkOwog
ICAgIH0KICAgICAKKyAgICBib29sIG1lcmdlSXNBcmd1bWVudHNBbGlhcyhib29sIGlzQXJndW1l
bnRzQWxpYXMpCisgICAgeworICAgICAgICBib29sIG5ld0lzQXJndW1lbnRzQWxpYXMgPSBtX2lz
QXJndW1lbnRzQWxpYXMgfCBpc0FyZ3VtZW50c0FsaWFzOworICAgICAgICBpZiAobmV3SXNBcmd1
bWVudHNBbGlhcyA9PSBtX2lzQXJndW1lbnRzQWxpYXMpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIG1faXNBcmd1bWVudHNBbGlhcyA9IG5ld0lzQXJndW1lbnRzQWxpYXM7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQXJndW1lbnRzQWxp
YXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNBcmd1bWVudHNBbGlhczsKKyAgICB9Cisg
ICAgCiAgICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogc2VsZiA9IGZpbmQoKTsKQEAgLTIzNyw2ICsyNTQs
NyBAQCBwcml2YXRlOgogICAgIERvdWJsZUZvcm1hdFN0YXRlIG1fZG91YmxlRm9ybWF0U3RhdGU7
CiAgICAgCiAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CisgICAgYm9vbCBtX2lzQXJndW1lbnRzQWxp
YXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142114</attachid>
            <date>2012-05-15 18:21:54 -0700</date>
            <delta_ts>2012-05-15 18:29:32 -0700</delta_ts>
            <desc>more</desc>
            <filename>aliased_arguments_patch_2.diff</filename>
            <type>text/plain</type>
            <size>53686</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MTk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDEyLTA1LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhbGlhc2VkIHVzZXMgb2YgdGhlIEFyZ3VtZW50cyBvYmplY3Qg
b2YgdGhlIGN1cnJlbnQgY2FsbCBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODY1NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBi
eXRlY29kZS9WYWx1ZVJlY292ZXJ5Lmg6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OmFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCk6CisgICAgICAgIChWYWx1ZVJlY292ZXJ5KToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpvYnNlcnZl
QmFkQXJndW1lbnRzVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlOjpvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6aXNPS1Rv
T3B0aW1pemUpOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1JlZ2lzdGVyRm9yKToKKyAgICAg
ICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmV4ZWN1dGFi
bGVGb3IpOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphcmd1
bWVudHNSZWdpc3RlckZvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNsb2JiZXJzV29y
bGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENv
bXBpbGVyOjpPU1JFeGl0Q29tcGlsZXIpOgorICAgICAgICAoT1NSRXhpdENvbXBpbGVyKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdh
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVB
Y2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlQWNjZXNzRGF0YTo6bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKToKKyAgICAgICAgKFZhcmlhYmxl
QWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjppc0Fy
Z3VtZW50c0FsaWFzKToKKwogMjAxMi0wNS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIERGRyBzaG91bGQgb3B0aW1pemUgaW5saW5lZCB1c2VzIG9mIGFyZ3Vt
ZW50cy5sZW5ndGggYW5kIGFyZ3VtZW50c1tpXQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSw4IEBAIGVudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CiAgICAgRG91
YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUsCiAgICAgQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlLAogICAgIEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGFu
IEFyZ3VtZW50cyBvYmplY3QuCisgICAgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkLAogICAg
IC8vIEl0J3MgYSBjb25zdGFudC4KICAgICBDb25zdGFudCwKICAgICAvLyBEb24ndCBrbm93IGhv
dyB0byByZWNvdmVyIGl0LgpAQCAtMTkwLDYgKzE5MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZCgpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBWYWx1ZVJl
Y292ZXJ5VGVjaG5pcXVlIHRlY2huaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlOyB9
CiAgICAgCiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWUg
PT0gQ29uc3RhbnQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3OSwxOSAr
MTA3OSwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250
YWlucygKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3Jp
Z2luKSkpIHsKLSAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9l
cyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQotICAgICAgICAg
ICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2ll
bnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwotICAgICAgICAgICAgLy8gb2YgR2V0TXlBcmd1
bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVyaW5n
IG9wZXJhdGlvbi4KLSAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRp
b25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
anNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSAtIDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgLy8gV2Ug
a25vdyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywg
c28gd2UgY2FuIG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUg
dGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKKyAg
ICAgICAgLy8gb2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGggaXMgYSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KKyAgICAgICAgLy8gV2UgcGVyZm9ybSBm
dXJ0aGVyIG9wdGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KKyAgICAgICAgaWYgKG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOgogICAgICAgICAvLyBU
aGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMg
b2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBw
cm9wZXJ0eS4KICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKQEAgLTEx
MDEsMTUgKzExMDAsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVk
LmNvbnRhaW5zKAotICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihub2RlLmNv
ZGVPcmlnaW4pKSkgewotICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhlY3V0YWJs
ZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGltaXplCi0gICAg
ICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJl
aW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQotICAgICAgICAgICAgLy8gQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2Ug
Y2FuIG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0
aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCisgICAgICAgIC8vIEFy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbFNhZmU6CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVj
dHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAgICAgICAgLy8gYSBn
ZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCiAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDg0
IEBACiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE51bGxhYmxlSGFz
aFRyYWl0czxUPiA6IHB1YmxpYyBIYXNoVHJhaXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4oMSk7IH0KK307CisKK3N0cnVjdCBBcmd1bWVudHNB
bGlhc2luZ0RhdGEgeworICAgIElubGluZUNhbGxGcmFtZSogY2FsbENvbnRleHQ7CisgICAgYm9v
bCBjYWxsQ29udGV4dFNldDsKKyAgICBib29sIG11bHRpcGxlQ2FsbENvbnRleHRzOworICAgIAor
ICAgIGJvb2wgYXNzaWduZWRGcm9tQXJndW1lbnRzOworICAgIGJvb2wgYXNzaWduZWRGcm9tTWFu
eVRoaW5nczsKKyAgICAKKyAgICBib29sIGVzY2FwZXM7CisgICAgCisgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhKCkKKyAgICAgICAgOiBjYWxsQ29udGV4dCgwKQorICAgICAgICAsIGNhbGxDb250
ZXh0U2V0KGZhbHNlKQorICAgICAgICAsIG11bHRpcGxlQ2FsbENvbnRleHRzKGZhbHNlKQorICAg
ICAgICAsIGFzc2lnbmVkRnJvbUFyZ3VtZW50cyhmYWxzZSkKKyAgICAgICAgLCBhc3NpZ25lZEZy
b21NYW55VGhpbmdzKGZhbHNlKQorICAgICAgICAsIGVzY2FwZXMoZmFsc2UpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIG1lcmdlQ2FsbENvbnRleHQoSW5saW5lQ2FsbEZyYW1lKiBuZXdD
YWxsQ29udGV4dCkKKyAgICB7CisgICAgICAgIGlmIChtdWx0aXBsZUNhbGxDb250ZXh0cykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghY2FsbENvbnRleHRTZXQp
IHsKKyAgICAgICAgICAgIGNhbGxDb250ZXh0ID0gbmV3Q2FsbENvbnRleHQ7CisgICAgICAgICAg
ICBjYWxsQ29udGV4dFNldCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChjYWxsQ29udGV4dCA9PSBuZXdDYWxsQ29udGV4dCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG11bHRpcGxlQ2FsbENvbnRleHRz
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYWxsQ29udGV4dElzVmFsaWQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNhbGxDb250ZXh0U2V0ICYmICFtdWx0aXBsZUNhbGxDb250ZXh0
czsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZUFyZ3VtZW50c0Fzc2lnbm1lbnQoKQorICAg
IHsKKyAgICAgICAgYXNzaWduZWRGcm9tQXJndW1lbnRzID0gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBtZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKQorICAgIHsKKyAgICAgICAgYXNz
aWduZWRGcm9tTWFueVRoaW5ncyA9IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgYXJndW1l
bnRzQXNzaWdubWVudElzVmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc2lnbmVkRnJv
bUFyZ3VtZW50cyAmJiAhYXNzaWduZWRGcm9tTWFueVRoaW5nczsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1ZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsQ29udGV4dElzVmFsaWQo
KSAmJiBhcmd1bWVudHNBc3NpZ25tZW50SXNWYWxpZCgpICYmICFlc2NhcGVzOworICAgIH0KK307
CisKK30gLy8gZW5kIGFub255bW91cyBuYW1lc3BhY2UKKwogY2xhc3MgQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCkBAIC01MSw2ICsxMjYsMTg0IEBAIHB1Ymxp
YzoKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKKyAg
ICAgICAgLy8gUmVjb3JkIHdoaWNoIGFyZ3VtZW50cyBhcmUga25vd24gdG8gZXNjYXBlIG5vIG1h
dHRlciB3aGF0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+aW5saW5l
Q2FsbEZyYW1lcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSAmY29kZUJsb2NrKCktPmlubGluZUNhbGxGcmFtZXMoKVtpXTsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2Fw
ZWQuY29udGFpbnMoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihp
bmxpbmVDYWxsRnJhbWUpKSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENyZWF0
ZSBkYXRhIGZvciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMgdGhhdCB3ZSB3aWxsIHdhbnQgdG8gYW5h
bHl6ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YS5sZW5ndGgoKTsgaS0tOykgeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKKyAg
ICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc1Jvb3QoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuYWRkKHZhcmlhYmxlQWNjZXNzRGF0YSwgQXJndW1lbnRzQWxpYXNpbmdEYXRh
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZh
cmlhYmxlcyBhbGlhcyB0aGUgYXJndW1lbnRzIGFuZCBub3RoaW5nIGVsc2UsIGFuZCBhcmUKKyAg
ICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQgR2V0QXJndW1lbnRzTGVuZ3RoIGFj
Y2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAorICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9mIENy
ZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVudHMK
KyAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlzZnkg
dGhlc2UgY29uc3RyYWludHMuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2Yg
dGhlIFNldExvY2FsIGtub3dzIHRoYXQgaWYgaXQncworICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywg
dGhlbiBpdAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBv
aW50LiBJbiBmdXR1cmUsIHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFsaWFzaW5nLiBCdXQgbm90IHlldC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBz
dXJlIHRoYXQgaWYgaXQncyBhIHZhcmlhYmxlIHRoYXQgd2UgdGhpbmsgaXMgYWxpYXNlZCB0bwor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cywgdGhhdCB3ZSBrbm93IHRo
YXQgaXQgbWlnaHQgYWN0dWFsbHkgbm90IGJlLgorICAgICAgICAgICAgICAgICAgICAgICAgQXJn
dW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2FyZ3VtZW50c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmxvY2FsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgID09IG1fZ3JhcGguYXJndW1lbnRzUmVn
aXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gc291cmNlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNz
RGF0YS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNB
cmd1bWVudHMuYWRkKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFz
aW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQXJndW1lbnRzQXNzaWdubWVudCgpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVu
c3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFz
CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCisg
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250
ZXh0KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFBoaTogewor
ICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEg
PSBtX2FyZ3VtZW50c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAg
ICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBt
X2FyZ3VtZW50c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAg
ICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBJZiBh
IHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBmbHVzaCB0aGVuIGJ5IGRlZmluaXRpb24gaXQgZXNjYXBl
cy4KKyAgICAgICAgICAgICAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50czogeworICAgICAgICAgICAgICAgICAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEt
PmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFz
aW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rp
b24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBhcmd1bWVudHMgaXMgdXNlZCBhcyBhbiBpbmRleCwgdGhlbiBp
dCdzIGFuIGVzY2FwaW5nIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoYXQncyBz
byBhd2Z1bCBhbmQgcHJldHR5IG11Y2ggaW1wb3NzaWJsZSBzaW5jZSBpdCB3b3VsZAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGlj
dGVkIGludGVnZXIsIGJ1dCBpdCdzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBnb29kIHRv
IGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNl
cyhub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50c0xl
bmd0aDogeworICAgICAgICAgICAgICAgICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5v
ZGUsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudFVzZXMobm9kZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGtub3cgd2hpY2ggdmFyaWFi
bGVzIGFyZSBhbGlhc2VkIHRvIGFyZ3VtZW50cy4gQnV0IGlmIGFueSBvZiB0aGVtIGFyZQorICAg
ICAgICAvLyBmb3VuZCB0byBoYXZlIGVzY2FwZWQsIG9yIHdlcmUgb3RoZXJ3aXNlIGludmFsaWRh
dGVkLCB0aGVuIHdlIG5lZWQgdG8gbWFyaworICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGFzIHJl
cXVpcmluZyBjcmVhdGlvbi4gVGhpcyBpcyBhIHByb3BlcnR5IG9mIFNldExvY2FscyB0bworICAg
ICAgICAvLyB2YXJpYWJsZXMgdGhhdCBhcmUgbmVpdGhlciB0aGUgY29ycmVjdCBhcmd1bWVudHMg
cmVnaXN0ZXIgbm9yIGFyZSBtYXJrZWQgYXMKKyAgICAgICAgLy8gYmVpbmcgYXJndW1lbnRzLWFs
aWFzZWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRl
eCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJs
b2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIGlmIChub2RlLm9wKCkgIT0gU2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5vcCgpICE9IENyZWF0ZUFyZ3Vt
ZW50cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWNwdHVyZWQgY2FzZSB3b3VsZCBo
YXZlIGFscmVhZHkgYmVlbiB0YWtlbiBjYXJlIG9mIGluIHRoZQorICAgICAgICAgICAgICAgICAg
ICAvLyBwcmV2aW91cyBwYXNzLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5nZXQodmFyaWFibGVBY2Nlc3NE
YXRhKTsKKyAgICAgICAgICAgICAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291
cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgSW5zZXJ0aW9uU2V0PE5vZGVJbmRleD4gaW5zZXJ0aW9uU2V0
OwogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtNjAs
MTEgKzMxMywxMTEgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleElu
QmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykg
ewogICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJ
bkJsb2NrKTsKICAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhd
OworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGg6IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9leGVjdXRhYmxlc1do
b3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKSkpCisgICAgICAgICAgICAg
ICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9w
KCkgIT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3Rv
cmUgaW50byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUqCisg
ICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgY3JlYXRlIGFyZ3VtZW50cywgdGhl
biBraWxsIGl0LgorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAh
bV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIEZsdXNoLiBJdCBz
aG91bGQgYmUgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlJiBmbHVzaCA9IG1fZ3JhcGhbYmxvY2stPmF0KGluZGV4SW5CbG9jayArIDEpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChmbHVzaC5vcCgpID09IEZsdXNoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChmbHVzaC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJp
YWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLmNo
aWxkMSgpID09IG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZSBkZWZl
bnNpdmUgaW4gcmVsZWFzZSBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNo
Lm9wKCkgIT0gRmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmbHVzaC52YXJp
YWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBmbHVzaC5jaGlsZDEoKSAhPSBub2RlSW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaC5zZXRP
cEFuZERlZmF1bHRGbGFncyhOb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5j
bGVhckFuZERlcmVmQ2hpbGQxKGZsdXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
c2V0UmVmQ291bnQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nl
c3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBz
dG9yZSBpbnRvIGEgVmFyaWFibGVBY2Nlc3NEYXRhKiB0aGF0IGlzIG1hcmtlZCBhcworICAgICAg
ICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgYWxpYXNpbmcgZm9yIGFuIElubGluZUNhbGxGcmFt
ZSogdGhhdCBkb2VzIG5vdCBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRz
LCB0aGVuIGZsYWcgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YSBhcyBiZWluZyBhbgorICAgICAgICAg
ICAgICAgICAgICAvLyBhcmd1bWVudHMtYWxpYXNlZC4gVGhpcydsbCBsZXQgdGhlIE9TUiBleGl0
IG1hY2hpbmVyeSBkbyB0aGUgcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmdzLiBO
b3RlIGFsc28gdGhhdCB0aGUgU2V0TG9jYWwgc2hvdWxkIGJlY29tZSBkZWFkIGFzIHNvb24gYXMK
KyAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBhbGwgdXNlcyBvZiB0aGlzIHZhcmlh
YmxlIHdpdGggR2V0TXlBcmd1bWVudHNMZW5ndGggYW5kCisgICAgICAgICAgICAgICAgICAgIC8v
IEdldE15QXJndW1lbnRCeVZhbC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXJndW1lbnRz
QWxpYXNpbmcuZ2V0KHZhcmlhYmxlQWNjZXNzRGF0YSkuaXNWYWxpZCgpCisgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQXJndW1lbnRzQWxpYXModHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byBHZXRN
eUFyZ3VtZW50QnlWYWwgaWYgd2Uga25vdyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpdCBzYXRpc2ZpZXMgZWl0aGVyIGNvbmRpdGlvbiAoMSkgb3IgKDIpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gMSkgSXRzIGZpcnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRzQWxp
YXNpbmdEYXRhIGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIElubGluZUNh
bGxGcmFtZSogaXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1lbnRzIGFu
ZCBpdHMgSW5saW5lQ2FsbEZyYW1lKgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgaXMg
bm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVy
ZWYobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVu
LmNoaWxkMSgpID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBu
b3cgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldEFyZ3VtZW50c0xlbmd0aDogeworICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzT0tUb09wdGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmRlcmVmKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LmNoaWxkcmVuLmNoaWxkMSgpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLnNl
dE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKKyAgICAgICAgICAgICAg
ICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2Nr
OyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdl
dE15QXJndW1lbnRzTGVuZ3RoLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudHNMZW5ndGg6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xl
bmd0aFNhZmU6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhT
YWZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldE15QXJndW1lbnRz
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTgyLDEwICs0MzUsMTYgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29u
dGFpbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9y
KG5vZGUuY29kZU9yaWdpbikpKQorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5
VmFsOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAg
ICAgICAgICAgICAgICAgICBpZiAoY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5oYXNDb25zdGFudCgpKQpAQCAtMTQwLDYgKzQ5OSwxMDQgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBIYXNoU2V0PElubGluZUNhbGxGcmFtZSosCisgICAgICAgICAgICBEZWZh
dWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwKKyAgICAgICAgICAgIE51bGxhYmxlSGFz
aFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPiA+IG1fY3JlYXRlc0FyZ3VtZW50czsKKyAgICBIYXNo
TWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSwKKyAgICAgICAg
ICAgIERlZmF1bHRIYXNoPFZhcmlhYmxlQWNjZXNzRGF0YSo+OjpIYXNoLAorICAgICAgICAgICAg
TnVsbGFibGVIYXNoVHJhaXRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+ID4gbV9hcmd1bWVudHNBbGlh
c2luZzsKKworICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07CisgICAgICAgIGlmIChjaGlsZC5vcCgp
ICE9IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYg
KGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2Rl
T3JpZ2luKSkgeworICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGlsZC5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmlzQ3B0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5nZXQo
dmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhOb2RlJiBub2RlKQorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsg
aS0tOykKKyAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2UoY2hpbGQobm9kZSwgaSkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UoTm9kZSYg
bm9kZSwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2Vk
Z2VdOworICAgICAgICBpZiAoY2hpbGQub3AoKSAhPSBHZXRMb2NhbCkgeworICAgICAgICAgICAg
Ly8gV2hlbiBjYW4gdGhpcyBoYXBwZW4/IEF0IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRo
aW5rCisgICAgICAgICAgICAvLyBvZjoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAx
KSBBbGlhc2VkIHVzZSBvZiBhcmd1bWVudHMgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2ssCisgICAg
ICAgICAgICAvLyAgICBsaWtlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIHZh
ciBhID0gYXJndW1lbnRzOworICAgICAgICAgICAgLy8gICAgdmFyIHggPSBhcmd1bWVudHNbaV07
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gMikgSWYgd2UncmUgYWNjZXNzaW5nIGFy
Z3VtZW50cyB3ZSBnb3QgZnJvbSB0aGUgaGVhcCEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChjaGlsZC5vcCgpID09IENyZWF0ZUFyZ3VtZW50cworICAgICAg
ICAgICAgICAgICYmIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAg
ICAgICAgICAhPSBjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAg
ICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKHZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0
YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZ2V0KHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAg
IGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlJiBzb3VyY2UpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHNvdXJjZS5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6
IHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0g
c291cmNlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNj
ZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgaWYgKCFk
YXRhLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICht
X2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CisgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiB9Owog
CiBib29sIHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJl
dmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlI
ZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMSwxNCArMzExLDE4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgfQogICAgIAotICAgIGludCBh
cmd1bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIGlu
dCBhcmd1bWVudHNSZWdpc3RlckZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
ICAgICB7Ci0gICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5h
cmd1bWVudHNSZWdpc3RlcigpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29k
ZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKAotICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpLT5hcmd1bWVudHNSZWdpc3RlcigpICsKLSAgICAgICAgICAgIGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFt
ZSktPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0Owor
ICAgIH0KKyAgICAKKyAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBhcmd1bWVudHNSZWdpc3RlckZv
cihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1Myw3ICsyNDUzLDYgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czogewogICAgICAgICAgICAgbV9ncmFwaC5tX2hh
c0FyZ3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9z
ZUFyZ3VtZW50c0VzY2FwZWQuYWRkKG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSk7CiAg
ICAgICAgICAgICBOb2RlSW5kZXggY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVB
cmd1bWVudHMsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY3JlYXRlQXJndW1lbnRz
KTsKICAgICAgICAgICAgIHNldCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGNyZWF0ZUFyZ3VtZW50cyk7CkBAIC0yNDczLDcgKzI0
NzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDogewogICAgICAgICAg
ICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBzZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChHZXRNeUFyZ3VtZW50c0xlbmd0
aCkpOworICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFk
ZFRvR3JhcGgoR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKSk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMjQ4MSw3ICsyNDgwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7CiAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKAotICAgICAgICAgICAgICAgICAgICBHZXRNeUFyZ3VtZW50QnlWYWwsIE9w
SW5mbygwKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgIEdl
dE15QXJndW1lbnRCeVZhbFNhZmUsIE9wSW5mbygwKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSks
CiAgICAgICAgICAgICAgICAgICAgIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9u
IDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAyLDEyICszMDIsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm1f
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEubGFzdCgpOwogICAgIH0KICAgICAKLSAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAg
IEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lKQogICAgIHsKLSAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkK
KyAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOworICAgICAgICByZXR1cm4g
aW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOworICAgIH0KKyAgICAKKyAgICBFeGVj
dXRhYmxlQmFzZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGVGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpOwogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9y
KGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkBAIC0zMTUsNiArMzIwLDE2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVD
b2RlQmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAgCisgICAg
aW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisg
ICAgeworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKAorICAgICAg
ICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5hcmd1bWVudHNSZWdpc3RlcigpICsK
KyAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAg
ICB9CisgICAgCiAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3IoTm9kZUluZGV4IG5v
ZGVJbmRleCkKICAgICB7CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQpAQCAtNDEw
LDkgKzQyNSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiAhaXNQcmVkaWN0ZWROdW1l
cmljYWwobm9kZSk7CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICByZXR1cm4g
IWJ5VmFsSXNQdXJlKG5vZGUpOwotICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKLSAg
ICAgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRh
aW5zKAotICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKSk7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOyAvLyBJZiBieSBzb21lIG9kZGl0eSB3ZSBoaXQgdGhpcyBjYXNl
IGluIHJlbGVhc2UgYnVpbGQgaXQncyBzYWZlciB0byBoYXZlIENTRSBhc3N1bWUgdGhlIHdvcnN0
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDExNzAxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MjgsNiArNTI4LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEdldEJ5SWRGbHVz
aDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlW
YWw6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZToKICAgICAgICAgY2FzZSBD
YWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEx
NzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgLyogYXMgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBsb2NhbCBhY2Nlc3MsIGFuZCB0aHVz
IGhhZCB0aGVpciBvd24gcHJvZmlsaW5nLiAqL1wKICAgICBtYWNybyhHZXRMb2NhbFVubGlua2Vk
LCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCi0gICAgLyogTWFya2VyIGZvciBhcmd1bWVudHMgYmVp
bmcgc2V0LiAqL1wKKyAgICAvKiBNYXJrZXIgZm9yIGFuIGFyZ3VtZW50IGJlaW5nIHNldCBhdCB0
aGUgcHJvbG9ndWUgb2YgYSBmdW5jdGlvbi4gKi9cCiAgICAgbWFjcm8oU2V0QXJndW1lbnQsIDAp
IFwKICAgICBcCiAgICAgLyogSGludCB0aGF0IGlubGluaW5nIGJlZ2lucyBoZXJlLiBObyBjb2Rl
IGlzIGdlbmVyYXRlZCBmb3IgdGhpcyBub2RlLiBJdCdzIG9ubHkgKi9cCkBAIC0xOTgsOCArMTk4
LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBzZW5zZS4gKi9c
CiAgICAgbWFjcm8oQ3JlYXRlQXJndW1lbnRzLCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhU
ZWFyT2ZmQXJndW1lbnRzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oR2V0TXlBcmd1
bWVudHNMZW5ndGgsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAotICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIpIFwKKyAgICBtYWNybyhHZXRNeUFy
Z3VtZW50c0xlbmd0aCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1h
Y3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIG1hY3JvKEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oR2V0TXlBcmd1
bWVudEJ5VmFsU2FmZSwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBjcmVhdGluZyBmdW5jdGlvbnMu
ICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiAr
MTI3LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIGJv
b2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNl
OwogICAgIGJvb2wgaGF2ZVVJbnQzMnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVBcmd1bWVudHMg
PSBmYWxzZTsKICAgICAKICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CkBAIC0xODQsNiArMTg1LDEw
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAg
ICAgICBoYXZlVW5kZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICAg
ICAgaGF2ZUFyZ3VtZW50cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUw
NSw3ICs1MTAsNDggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIDEzKSBBZGp1c3QgdGhlIG9sZCBKSVQncyBl
eGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdworICAgIC8v
IDEzKSBDcmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQgcGxhY2UgdGhlbSBpbnRvIHRo
ZSBhcHByb3ByaWF0ZSBhbGlhc2VkCisgICAgLy8gICAgIHJlZ2lzdGVycy4KKyAgICAKKyAgICBp
ZiAoaGF2ZUFyZ3VtZW50cykgeworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
ZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGludCBvcGVy
YW5kID0gZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICAgICAgLy8gRmluZCB0
aGUgcmlnaHQgaW5saW5lIGNhbGwgZnJhbWUuCisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IDA7CisgICAgICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSog
Y3VycmVudCA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICBj
dXJyZW50OworICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlubGlu
ZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5zdGFja09mZnNldCA8
PSBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGN1cnJl
bnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1faml0LmFyZ3Vt
ZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGFyZ3VtZW50c1Jl
Z2lzdGVyKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpK
dW1wIGhhdmVBcmd1bWVudHMgPSBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6Tm9uWmVybywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZy
YW1lKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlv
bkNyZWF0ZUlubGluZWRBcmd1bWVudHMpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7
CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKG9wZXJhdGlvbkNyZWF0
ZUFyZ3VtZW50cyksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1faml0LmNhbGwoR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdp
c3RlcikpOworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0Zvcih1bm1vZGlmZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVu
dHNSZWdpc3RlcikpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGF2ZUFyZ3VtZW50cy5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwg
QXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICAvLyAxNCkgQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBjb3VudGVyLiBT
aW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKICAgICAvLyAgICAgdGhhdCBhbGwgbmV3
IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNvIHRoZSBleGVj
dXRlCiAgICAgLy8gICAgIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVzIHRoYXQgcGVy
Zm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwogICAgIC8vICAgICB0aGF0IHdlcmUgc3Rp
bGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIgY2FsbCBmcmFt
ZSdzCkBAIC01NDMsMTIgKzU4OSwxMiBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyhleGl0KTsKICAgICAKLSAgICAv
LyAxNCkgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRv
IHJlZ1QwLgorICAgIC8vIDE1KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUg
b3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCiAgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFu
ZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICBtX2ppdC5sb2Fk
UHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9s
YXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAKLSAg
ICAvLyAxNSkgRml4IGNhbGwgZnJhbWUocykuCisgICAgLy8gMTYpIEZpeCBjYWxsIGZyYW1lKHMp
LgogICAgIAogICAgIEFTU0VSVChtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5nZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2Rl
QmxvY2spKTsKQEAgLTU4NCw3ICs2MzAsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkK
ICAgICAgICAgbV9qaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXQu
bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAotICAgIC8vIDE2
KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCisgICAgLy8g
MTcpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KICAgICAK
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxv
Y2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5l
Q29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICNlbmRpZgogCiAg
ICAgewotICAgICAgICBBc3NlbWJseUhlbHBlcnMgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7
CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKICAgICAg
ICAgT1NSRXhpdENvbXBpbGVyIGV4aXRDb21waWxlcihqaXQpOwogICAgICAgICAKICAgICAgICAg
ZXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQsIHJlY292ZXJ5KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2aXNpb24gMTE3
MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIK
IApAQCAtNDIsNyArNDMsNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgT1NSRXhpdENvbXBp
bGVyIHsKIHB1YmxpYzoKLSAgICBPU1JFeGl0Q29tcGlsZXIoQXNzZW1ibHlIZWxwZXJzJiBqaXQp
CisgICAgT1NSRXhpdENvbXBpbGVyKENDYWxsSGVscGVycyYgaml0KQogICAgICAgICA6IG1faml0
KGppdCkKICAgICB7CiAgICAgfQpAQCAtNzIsNyArNzMsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgaGFuZGxlRXhpdENvdW50cyhjb25zdCBPU1JFeGl0Jik7CiAgICAgCi0gICAgQXNzZW1i
bHlIZWxwZXJzJiBtX2ppdDsKKyAgICBDQ2FsbEhlbHBlcnMmIG1faml0OwogICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9wb2lzb25TY3JhdGNoSW5kaWNlczsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAyNCwxMyArMTAyNCwyMSBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlQWN0CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBcmd1bWVu
dHMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBBcmd1bWVudHM6OmNyZWF0ZShleGVj
LT5nbG9iYWxEYXRhKCksIGV4ZWMpOworICAgIC8vIE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2Vl
ZGluZ2x5IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2luY2UgaXQKKyAg
ICAvLyBtYXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUg
Y2FsbCBzdGFjayBpcyBiaXphcnJlLgorICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRz
OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjKTsKKyAgICBBU1NFUlQoIWV4ZWMtPmds
b2JhbERhdGEoKS5leGNlcHRpb24pOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEpTQ2VsbCog
REZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAogICAgIEV4ZWNT
dGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7Ci0gICAgcmV0
dXJuIEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYywgaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmdseSBjYXJlZnVs
IHdpdGggdG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CisgICAgLy8gbWF5IGJlIGNh
bGxlZCBmcm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwgc3RhY2sgaXMg
Yml6YXJyZS4KKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBBU1NFUlQoIWV4ZWMt
Pmdsb2JhbERhdGEoKS5leGNlcHRpb24pOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQg
REZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogYWN0aXZhdGlvbkNlbGwsIGludDMyX3QgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MzcsMTMgKzQzNywxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDogeworICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rp
b24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ubWVy
Z2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc0ludCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dHNMZW5ndGg6IHsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6IHsKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0SW50MzIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTYxNiw3ICs2MTYsOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBHZXRTdHJpbmdM
ZW5ndGg6CiAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgY2FzZSBHZXRMb2Nh
bFVubGlua2VkOiB7CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0
aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQg
YnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4OTAsMjEgKzM4OTAsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2ppdC5n
cmFwaCgpLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAg
ICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikp
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEFyZ3Vt
ZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVy
bywKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmln
aW4pKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0gICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAg
ICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAg
ICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5v
blplcm8sCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAg
ICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikp
KSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoUmVn
aXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOiB7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQu
YnJhbmNoVGVzdFB0cigKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLApAQCAtMzk0
Myw0NiArMzk0NSw1MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2ppdC5n
cmFwaCgpLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAg
ICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikp
KSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBBcmd1bWVudHNFc2Nh
cGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
UHRyKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOworCisgICAgICAgIG1faml0
LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGlm
IChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dEdQUiwKKyAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAotICAgICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7Ci0KLSAg
ICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3Zl
T3JFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIEltbTMyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCkpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAg
ICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRH
UFIsCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVy
RmlsZTo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVu
ZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5uZWczMihyZXN1
bHRHUFIpOworICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3Vs
dEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICgobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZQotICAgICAgICAgICAgICAgICAgICAgID8gbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICA6IDApICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAg
ICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCisgICAg
ICAgICAgICAgICAgKChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAg
ICAgICAgICA/IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0Cisg
ICAgICAgICAgICAgICAgICA6IDApICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGlu
Z1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAgICByZXN1bHRHUFIpOwog
Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAK
KyAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAg
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODYsNiArOTg2
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICAg
ICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAg
ICAgICAgZWxzZSBpZiAoYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291
cmNlKERvdWJsZUluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgZWxzZSBpZiAoYXQobm9kZUluZGV4
KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+aXNBcmd1bWVudHNBbGlhcygpKQorICAgICAgICAgICAg
bV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShBcmd1bWVudHNTb3VyY2UpOwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0
aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CiAg
ICAgfQpAQCAtMTM0NSwxMyArMTM0NywxOCBAQCBWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklU
Ojpjb21wdXRlVmFsCiAgICAgICAgIAogICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6CiAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGVBc1VuYm94
ZWREb3VibGUoKTsKKyAgICAgICAgCisgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6CisgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5Ojphcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQoKTsKIAog
ICAgIGNhc2UgSGF2ZU5vZGU6IHsKICAgICAgICAgaWYgKGlzQ29uc3RhbnQodmFsdWVTb3VyY2Uu
bm9kZUluZGV4KCkpKQogICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7Ci0gICAgCisgICAg
ICAgIAogICAgICAgICBOb2RlKiBub2RlUHRyID0gJmF0KHZhbHVlU291cmNlLm5vZGVJbmRleCgp
KTsKICAgICAgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAg
ICBpZiAobm9kZVB0ci0+b3AoKSA9PSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCgpOwogICAg
ICAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2
ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKICAgICAgICAgICAgIC8vIGV2ZXIuIFNldCBp
dCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBlbnVtIFZhbHVlU291cmNl
S2luZCB7CiAgICAgQ2VsbEluUmVnaXN0ZXJGaWxlLAogICAgIEJvb2xlYW5JblJlZ2lzdGVyRmls
ZSwKICAgICBEb3VibGVJblJlZ2lzdGVyRmlsZSwKKyAgICBBcmd1bWVudHNTb3VyY2UsCiAgICAg
SGF2ZU5vZGUKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNiArNDcsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9hcmd1bWVudEF3YXJlUHJlZGljdGlv
bihQcmVkaWN0Tm9uZSkKICAgICAgICAgLCBtX2ZsYWdzKDApCiAgICAgICAgICwgbV9kb3VibGVG
b3JtYXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0YXRlKQorICAgICAgICAsIG1faXNDYXB0dXJl
ZChmYWxzZSkKKyAgICAgICAgLCBtX2lzQXJndW1lbnRzQWxpYXMoZmFsc2UpCiAgICAgewogICAg
ICAgICBjbGVhclZvdGVzKCk7CiAgICAgfQpAQCAtNTgsNiArNjAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9mbGFncygwKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3Vi
bGVGb3JtYXRTdGF0ZSkKICAgICAgICAgLCBtX2lzQ2FwdHVyZWQoaXNDYXB0dXJlZCkKKyAgICAg
ICAgLCBtX2lzQXJndW1lbnRzQWxpYXMoZmFsc2UpCiAgICAgewogICAgICAgICBjbGVhclZvdGVz
KCk7CiAgICAgfQpAQCAtODcsNiArOTAsMjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9p
c0NhcHR1cmVkOwogICAgIH0KICAgICAKKyAgICBib29sIG1lcmdlSXNBcmd1bWVudHNBbGlhcyhi
b29sIGlzQXJndW1lbnRzQWxpYXMpCisgICAgeworICAgICAgICBib29sIG5ld0lzQXJndW1lbnRz
QWxpYXMgPSBtX2lzQXJndW1lbnRzQWxpYXMgfCBpc0FyZ3VtZW50c0FsaWFzOworICAgICAgICBp
ZiAobmV3SXNBcmd1bWVudHNBbGlhcyA9PSBtX2lzQXJndW1lbnRzQWxpYXMpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1faXNBcmd1bWVudHNBbGlhcyA9IG5ld0lzQXJndW1l
bnRzQWxpYXM7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGlz
QXJndW1lbnRzQWxpYXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNBcmd1bWVudHNBbGlh
czsKKyAgICB9CisgICAgCiAgICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bikKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogc2VsZiA9IGZpbmQoKTsKQEAg
LTIzNyw2ICsyNTQsNyBAQCBwcml2YXRlOgogICAgIERvdWJsZUZvcm1hdFN0YXRlIG1fZG91Ymxl
Rm9ybWF0U3RhdGU7CiAgICAgCiAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CisgICAgYm9vbCBtX2lz
QXJndW1lbnRzQWxpYXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142115</attachid>
            <date>2012-05-15 18:29:32 -0700</date>
            <delta_ts>2012-05-15 23:04:06 -0700</delta_ts>
            <desc>fixed some issues</desc>
            <filename>aliased_arguments_patch_3.diff</filename>
            <type>text/plain</type>
            <size>54483</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MTk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDEyLTA1LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhbGlhc2VkIHVzZXMgb2YgdGhlIEFyZ3VtZW50cyBvYmplY3Qg
b2YgdGhlIGN1cnJlbnQgY2FsbCBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODY1NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBi
eXRlY29kZS9WYWx1ZVJlY292ZXJ5Lmg6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OmFy
Z3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCk6CisgICAgICAgIChWYWx1ZVJlY292ZXJ5KToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0
aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlKToK
KyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpvYnNlcnZl
QmFkQXJndW1lbnRzVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlOjpvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6aXNPS1Rv
T3B0aW1pemUpOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1JlZ2lzdGVyRm9yKToKKyAgICAg
ICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmV4ZWN1dGFi
bGVGb3IpOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphcmd1
bWVudHNSZWdpc3RlckZvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNsb2JiZXJzV29y
bGQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENv
bXBpbGVyOjpPU1JFeGl0Q29tcGlsZXIpOgorICAgICAgICAoT1NSRXhpdENvbXBpbGVyKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdh
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVB
Y2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlh
YmxlQWNjZXNzRGF0YTo6bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKToKKyAgICAgICAgKFZhcmlhYmxl
QWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjppc0Fy
Z3VtZW50c0FsaWFzKToKKwogMjAxMi0wNS0xNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIERGRyBzaG91bGQgb3B0aW1pemUgaW5saW5lZCB1c2VzIG9mIGFyZ3Vt
ZW50cy5sZW5ndGggYW5kIGFyZ3VtZW50c1tpXQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSw4IEBAIGVudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CiAgICAgRG91
YmxlRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUsCiAgICAgQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlLAogICAgIEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGFu
IEFyZ3VtZW50cyBvYmplY3QuCisgICAgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkLAogICAg
IC8vIEl0J3MgYSBjb25zdGFudC4KICAgICBDb25zdGFudCwKICAgICAvLyBEb24ndCBrbm93IGhv
dyB0byByZWNvdmVyIGl0LgpAQCAtMTkwLDYgKzE5MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFyZ3Vt
ZW50c1RoYXRXZXJlTm90Q3JlYXRlZCgpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBWYWx1ZVJl
Y292ZXJ5VGVjaG5pcXVlIHRlY2huaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlOyB9
CiAgICAgCiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWUg
PT0gQ29uc3RhbnQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3OSwxOSAr
MTA3OSwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgotICAg
ICAgICBpZiAoIW1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250
YWlucygKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3Jp
Z2luKSkpIHsKLSAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9l
cyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQotICAgICAgICAg
ICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2ll
bnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwotICAgICAgICAgICAgLy8gb2YgR2V0TXlBcmd1
bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVyaW5n
IG9wZXJhdGlvbi4KLSAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRp
b25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
anNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSAtIDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgLy8gV2Ug
a25vdyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywg
c28gd2UgY2FuIG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUg
dGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKKyAg
ICAgICAgLy8gb2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGggaXMgYSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KKyAgICAgICAgLy8gV2UgcGVyZm9ybSBm
dXJ0aGVyIG9wdGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KKyAgICAgICAgaWYgKG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOgogICAgICAgICAvLyBU
aGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBhcmd1bWVudHMg
b2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQgb24gdGhlIGxlbmd0aCBw
cm9wZXJ0eS4KICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKQEAgLTEx
MDEsMTUgKzExMDAsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVk
LmNvbnRhaW5zKAotICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihub2RlLmNv
ZGVPcmlnaW4pKSkgewotICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhlY3V0YWJs
ZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGltaXplCi0gICAg
ICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJl
aW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQotICAgICAgICAgICAgLy8gQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgLy8gV2Uga25vdyB0
aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2Ug
Y2FuIG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0
aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCisgICAgICAgIC8vIEFy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEdldE15QXJndW1lbnRC
eVZhbFNhZmU6CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVj
dHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMKICAgICAgICAgLy8gYSBn
ZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCiAgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDg0
IEBACiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIK
ICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE51bGxhYmxlSGFz
aFRyYWl0czxUPiA6IHB1YmxpYyBIYXNoVHJhaXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4oMSk7IH0KK307CisKK3N0cnVjdCBBcmd1bWVudHNB
bGlhc2luZ0RhdGEgeworICAgIElubGluZUNhbGxGcmFtZSogY2FsbENvbnRleHQ7CisgICAgYm9v
bCBjYWxsQ29udGV4dFNldDsKKyAgICBib29sIG11bHRpcGxlQ2FsbENvbnRleHRzOworICAgIAor
ICAgIGJvb2wgYXNzaWduZWRGcm9tQXJndW1lbnRzOworICAgIGJvb2wgYXNzaWduZWRGcm9tTWFu
eVRoaW5nczsKKyAgICAKKyAgICBib29sIGVzY2FwZXM7CisgICAgCisgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhKCkKKyAgICAgICAgOiBjYWxsQ29udGV4dCgwKQorICAgICAgICAsIGNhbGxDb250
ZXh0U2V0KGZhbHNlKQorICAgICAgICAsIG11bHRpcGxlQ2FsbENvbnRleHRzKGZhbHNlKQorICAg
ICAgICAsIGFzc2lnbmVkRnJvbUFyZ3VtZW50cyhmYWxzZSkKKyAgICAgICAgLCBhc3NpZ25lZEZy
b21NYW55VGhpbmdzKGZhbHNlKQorICAgICAgICAsIGVzY2FwZXMoZmFsc2UpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIG1lcmdlQ2FsbENvbnRleHQoSW5saW5lQ2FsbEZyYW1lKiBuZXdD
YWxsQ29udGV4dCkKKyAgICB7CisgICAgICAgIGlmIChtdWx0aXBsZUNhbGxDb250ZXh0cykKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghY2FsbENvbnRleHRTZXQp
IHsKKyAgICAgICAgICAgIGNhbGxDb250ZXh0ID0gbmV3Q2FsbENvbnRleHQ7CisgICAgICAgICAg
ICBjYWxsQ29udGV4dFNldCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChjYWxsQ29udGV4dCA9PSBuZXdDYWxsQ29udGV4dCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG11bHRpcGxlQ2FsbENvbnRleHRz
ID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYWxsQ29udGV4dElzVmFsaWQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNhbGxDb250ZXh0U2V0ICYmICFtdWx0aXBsZUNhbGxDb250ZXh0
czsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZUFyZ3VtZW50c0Fzc2lnbm1lbnQoKQorICAg
IHsKKyAgICAgICAgYXNzaWduZWRGcm9tQXJndW1lbnRzID0gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBtZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKQorICAgIHsKKyAgICAgICAgYXNz
aWduZWRGcm9tTWFueVRoaW5ncyA9IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgYXJndW1l
bnRzQXNzaWdubWVudElzVmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc2lnbmVkRnJv
bUFyZ3VtZW50cyAmJiAhYXNzaWduZWRGcm9tTWFueVRoaW5nczsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1ZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsQ29udGV4dElzVmFsaWQo
KSAmJiBhcmd1bWVudHNBc3NpZ25tZW50SXNWYWxpZCgpICYmICFlc2NhcGVzOworICAgIH0KK307
CisKK30gLy8gZW5kIGFub255bW91cyBuYW1lc3BhY2UKKwogY2xhc3MgQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCkBAIC01MSw2ICsxMjYsMTk2IEBAIHB1Ymxp
YzoKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKKyAg
ICAgICAgLy8gUmVjb3JkIHdoaWNoIGFyZ3VtZW50cyBhcmUga25vd24gdG8gZXNjYXBlIG5vIG1h
dHRlciB3aGF0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+aW5saW5l
Q2FsbEZyYW1lcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSAmY29kZUJsb2NrKCktPmlubGluZUNhbGxGcmFtZXMoKVtpXTsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2Fw
ZWQuY29udGFpbnMoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihp
bmxpbmVDYWxsRnJhbWUpKSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENyZWF0
ZSBkYXRhIGZvciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMgdGhhdCB3ZSB3aWxsIHdhbnQgdG8gYW5h
bHl6ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNz
RGF0YS5sZW5ndGgoKTsgaS0tOykgeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsKKyAg
ICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc1Jvb3QoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuYWRkKHZhcmlhYmxlQWNjZXNzRGF0YSwgQXJndW1lbnRzQWxpYXNpbmdEYXRh
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZh
cmlhYmxlcyBhbGlhcyB0aGUgYXJndW1lbnRzIGFuZCBub3RoaW5nIGVsc2UsIGFuZCBhcmUKKyAg
ICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQgR2V0QXJndW1lbnRzTGVuZ3RoIGFj
Y2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAorICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9mIENy
ZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVudHMK
KyAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlzZnkg
dGhlc2UgY29uc3RyYWludHMuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0lu
ZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdub3Jl
IHRoaXMgb3AuIElmIHdlIHNlZSBhIGxvbmUgQ3JlYXRlQXJndW1lbnRzIHRoZW4gd2Ugd2FudCB0
bworICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZWx5IGlnbm9yZSBpdCBiZWNhdXNlOgor
ICAgICAgICAgICAgICAgICAgICAvLyAxKSBUaGUgZGVmYXVsdCB3b3VsZCBiZSB0byBzZWUgdGhh
dCB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCBjb25jbHVkZSB0aGF0IHdlIGhhdmUgYW4gYXJndW1l
bnRzIGVzY2FwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gMikgVGhlIGZhY3QgdGhhdCBhIENy
ZWF0ZUFyZ3VtZW50cyBleGlzdHMgZG9lcyBub3QgbWVhbiB0aGF0IGl0CisgICAgICAgICAgICAg
ICAgICAgIC8vICAgIHdpbGwgY29udGludWUgdG8gZXhpc3QgYWZ0ZXIgd2UncmUgZG9uZSB3aXRo
IHRoaXMgcGhhc2UuIEFzIGZhcgorICAgICAgICAgICAgICAgICAgICAvLyAgICBhcyB0aGlzIHBo
YXNlIGlzIGNvbmNlcm5lZCwgYSBDcmVhdGVBcmd1bWVudHMgb25seSAiZXhpc3RzIiBpZiBpdAor
ICAgICAgICAgICAgICAgICAgICAvLyAgICBpcyB1c2VkIGluIGEgbWFubmVyIHRoYXQgbmVjZXNz
aXRhdGVzIGl0cyBleGlzdGFuY2UuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNldExv
Y2FsIGtub3dzIHRoYXQgaWYgaXQncworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB2YXJp
YWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywgdGhlbiBpdAor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBvaW50LiBJbiBm
dXR1cmUsIHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGFsaWFzaW5nLiBCdXQgbm90IHlldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2Vy
dmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
aWYgaXQncyBhIHZhcmlhYmxlIHRoYXQgd2UgdGhpbmsgaXMgYWxpYXNlZCB0bworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cywgdGhhdCB3ZSBrbm93IHRoYXQgaXQgbWln
aHQgYWN0dWFsbHkgbm90IGJlLgorICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkK
KyAgICAgICAgICAgICAgICAgICAgICAgID09IG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS5jb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgPT0gc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXND
YXB0dXJlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMu
YWRkKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmdldCh2
YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQXJndW1l
bnRzQXNzaWdubWVudCgpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhh
dCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUgc2FtZSBjb250ZXh0IGFzCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQgaXMgYWxpYXNpbmcuCisgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KHNvdXJj
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAg
ICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAgICAgICAg
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vz
c0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50
c0FsaWFzaW5nLmdldCh2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxl
IGlzIHVzZWQgaW4gYSBmbHVzaCB0aGVuIGJ5IGRlZmluaXRpb24gaXQgZXNjYXBlcy4KKyAgICAg
ICAgICAgICAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIFNldEFyZ3VtZW50czogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRh
KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVy
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmdldCh2
YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlTm9uQXJn
dW1lbnRzQXNzaWdubWVudCgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENv
bnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24obV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB8
fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJZiBhcmd1bWVudHMgaXMgdXNlZCBhcyBhbiBpbmRleCwgdGhlbiBpdCdzIGFuIGVz
Y2FwaW5nIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoYXQncyBzbyBhd2Z1bCBh
bmQgcHJldHR5IG11Y2ggaW1wb3NzaWJsZSBzaW5jZSBpdCB3b3VsZAorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGljdGVkIGludGVn
ZXIsIGJ1dCBpdCdzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBnb29kIHRvIGJlIGRlZmVu
c2l2ZSBhbmQgdGhvcm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhub2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50c0xlbmd0aDogewor
ICAgICAgICAgICAgICAgICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUu
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudFVzZXMobm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGtub3cgd2hpY2ggdmFyaWFibGVzIGFyZSBh
bGlhc2VkIHRvIGFyZ3VtZW50cy4gQnV0IGlmIGFueSBvZiB0aGVtIGFyZQorICAgICAgICAvLyBm
b3VuZCB0byBoYXZlIGVzY2FwZWQsIG9yIHdlcmUgb3RoZXJ3aXNlIGludmFsaWRhdGVkLCB0aGVu
IHdlIG5lZWQgdG8gbWFyaworICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGFzIHJlcXVpcmluZyBj
cmVhdGlvbi4gVGhpcyBpcyBhIHByb3BlcnR5IG9mIFNldExvY2FscyB0bworICAgICAgICAvLyB2
YXJpYWJsZXMgdGhhdCBhcmUgbmVpdGhlciB0aGUgY29ycmVjdCBhcmd1bWVudHMgcmVnaXN0ZXIg
bm9yIGFyZSBtYXJrZWQgYXMKKyAgICAgICAgLy8gYmVpbmcgYXJndW1lbnRzLWFsaWFzZWQuCisg
ICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3Jh
cGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXpl
KCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmIChub2RlLm9wKCkgIT0gU2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07
CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5vcCgpICE9IENyZWF0ZUFyZ3VtZW50cykKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBUaGUgYWNwdHVyZWQgY2FzZSB3b3VsZCBoYXZlIGFscmVh
ZHkgYmVlbiB0YWtlbiBjYXJlIG9mIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBwcmV2
aW91cyBwYXNzLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRh
JiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5nZXQodmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAg
ICAgICAgICAgICAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgSW5zZXJ0aW9uU2V0PE5vZGVJbmRleD4gaW5zZXJ0aW9uU2V0OwogICAgICAg
ICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpAQCAtNjAsMTEgKzMyNSwx
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAw
OyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewogICAgICAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsK
ICAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAg
ICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUub3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6IHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJndW1l
bnRzRXNjYXBlZC5jb250YWlucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKSkpCisgICAgICAgICAgICAgICAgY2FzZSBT
ZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgIT0gQ3Jl
YXRlQXJndW1lbnRzKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3RvcmUgaW50byB0
aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUqCisgICAgICAgICAg
ICAgICAgICAgIC8vIHRoYXQgZG9lcyBub3QgY3JlYXRlIGFyZ3VtZW50cywgdGhlbiBraWxsIGl0
LgorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLmNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVz
QXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIEZsdXNoLiBJdCBzaG91bGQgYmUg
dGhlIG5leHQgaW5zdHJ1Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBmbHVz
aCA9IG1fZ3JhcGhbYmxvY2stPmF0KGluZGV4SW5CbG9jayArIDEpXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChmbHVzaC5vcCgpID09IEZsdXNoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChmbHVzaC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vz
c0RhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLmNoaWxkMSgpID09
IG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCZSBkZWZlbnNpdmUgaW4g
cmVsZWFzZSBtb2RlLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoLm9wKCkgIT0g
Rmx1c2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmbHVzaC52YXJpYWJsZUFjY2Vz
c0RhdGEoKSAhPSB2YXJpYWJsZUFjY2Vzc0RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBmbHVzaC5jaGlsZDEoKSAhPSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaC5zZXRPcEFuZERlZmF1
bHRGbGFncyhOb3ApOworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERl
cmVmQ2hpbGQxKGZsdXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291
bnQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5p
c0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdG9yZSBpbnRv
IGEgVmFyaWFibGVBY2Nlc3NEYXRhKiB0aGF0IGlzIG1hcmtlZCBhcworICAgICAgICAgICAgICAg
ICAgICAvLyBhcmd1bWVudHMgYWxpYXNpbmcgZm9yIGFuIElubGluZUNhbGxGcmFtZSogdGhhdCBk
b2VzIG5vdCBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzLCB0aGVuIGZs
YWcgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YSBhcyBiZWluZyBhbgorICAgICAgICAgICAgICAgICAg
ICAvLyBhcmd1bWVudHMtYWxpYXNlZC4gVGhpcydsbCBsZXQgdGhlIE9TUiBleGl0IG1hY2hpbmVy
eSBkbyB0aGUgcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmdzLiBOb3RlIGFsc28g
dGhhdCB0aGUgU2V0TG9jYWwgc2hvdWxkIGJlY29tZSBkZWFkIGFzIHNvb24gYXMKKyAgICAgICAg
ICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBhbGwgdXNlcyBvZiB0aGlzIHZhcmlhYmxlIHdpdGgg
R2V0TXlBcmd1bWVudHNMZW5ndGggYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIEdldE15QXJn
dW1lbnRCeVZhbC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXJndW1lbnRzQWxpYXNpbmcu
Z2V0KHZhcmlhYmxlQWNjZXNzRGF0YSkuaXNWYWxpZCgpCisgICAgICAgICAgICAgICAgICAgICAg
ICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5tZXJnZUlzQXJndW1lbnRzQWxpYXModHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFu
b2RlLnByZWRpY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byBHZXRNeUFyZ3VtZW50
QnlWYWwgaWYgd2Uga25vdyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBzYXRp
c2ZpZXMgZWl0aGVyIGNvbmRpdGlvbiAoMSkgb3IgKDIpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gMSkgSXRzIGZpcnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRzQWxpYXNpbmdEYXRh
IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIElubGluZUNhbGxGcmFtZSog
aXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1lbnRzIGFuZCBpdHMgSW5s
aW5lQ2FsbEZyYW1lKgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgaXMgbm90IG1hcmtl
ZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxk
MSgpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgp
ID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC0taW5k
ZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub3cgdGhhdCBp
dCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IEdldEFyZ3VtZW50c0xlbmd0aDogeworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09w
dGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVu
LmNoaWxkMSgpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVm
YXVsdEZsYWdzKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3Jj
ZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1l
bnRzTGVuZ3RoLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dHNMZW5ndGg6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wKEdldE15QXJndW1lbnRzTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICAKQEAgLTgyLDEwICs0NDcsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9yKG5vZGUuY29k
ZU9yaWdpbikpKQorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAg
ICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICAgICAg
ICAgICAgICBpZiAoY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3Ao
KSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
Lm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2Rl
LmNoaWxkMSgpXS5oYXNDb25zdGFudCgpKQpAQCAtMTQwLDYgKzUxMSwxMDQgQEAgcHVibGljOgog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBIYXNoU2V0PElubGluZUNhbGxGcmFtZSosCisgICAgICAgICAgICBEZWZhdWx0SGFzaDxJ
bmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwKKyAgICAgICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxJ
bmxpbmVDYWxsRnJhbWUqPiA+IG1fY3JlYXRlc0FyZ3VtZW50czsKKyAgICBIYXNoTWFwPFZhcmlh
YmxlQWNjZXNzRGF0YSosIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSwKKyAgICAgICAgICAgIERlZmF1
bHRIYXNoPFZhcmlhYmxlQWNjZXNzRGF0YSo+OjpIYXNoLAorICAgICAgICAgICAgTnVsbGFibGVI
YXNoVHJhaXRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+ID4gbV9hcmd1bWVudHNBbGlhc2luZzsKKwor
ICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBpZiAoIWVkZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBOb2Rl
JiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07CisgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExv
Y2FsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKGNoaWxkLmxv
Y2FsKCkgPT0gbV9ncmFwaC5hcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKSkg
eworICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY2hpbGQu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q3B0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQXJndW1l
bnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5nZXQodmFyaWFibGVB
Y2Nlc3NEYXRhKTsKKyAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhOb2RlJiBub2RlKQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykKKyAg
ICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBpKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShOb2RlJiBu
b2RlLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRn
ZV07CisgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKSB7CisgICAgICAgICAgICAv
LyBXaGVuIGNhbiB0aGlzIGhhcHBlbj8gQXQgbGVhc3QgdHdvIGNhc2VzIHRoYXQgSSBjYW4gdGhp
bmsKKyAgICAgICAgICAgIC8vIG9mOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEp
IEFsaWFzZWQgdXNlIG9mIGFyZ3VtZW50cyBpbiB0aGUgc2FtZSBiYXNpYyBibG9jaywKKyAgICAg
ICAgICAgIC8vICAgIGxpa2U6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgdmFy
IGEgPSBhcmd1bWVudHM7CisgICAgICAgICAgICAvLyAgICB2YXIgeCA9IGFyZ3VtZW50c1tpXTsK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAyKSBJZiB3ZSdyZSBhY2Nlc3NpbmcgYXJn
dW1lbnRzIHdlIGdvdCBmcm9tIHRoZSBoZWFwIQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkgPT0gQ3JlYXRlQXJndW1lbnRzCisgICAgICAg
ICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAg
ICAgICAgICE9IGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAg
ICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpZiAodmFy
aWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRh
ID0gbV9hcmd1bWVudHNBbGlhc2luZy5nZXQodmFyaWFibGVBY2Nlc3NEYXRhKTsKKyAgICAgICAg
ZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzT0tUb09wdGltaXplKE5vZGUmIHNvdXJjZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc291cmNlLm9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDog
eworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBz
b3VyY2UudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nl
c3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQorICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuZ2V0KHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICBpZiAoIWRh
dGEuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1f
Y3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKKyAgICAgICAgICAg
IGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH07CiAK
IGJvb2wgcGVyZm9ybUFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uKEdyYXBoJiBncmFwaCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2
aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhl
bHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzExLDE0ICszMTEsMTggQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9iYXNlbGluZUNvZGVCbG9jazsKICAgICB9CiAgICAgCi0gICAgaW50IGFy
Z3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgaW50
IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQog
ICAgIHsKLSAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAg
aWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrKCktPmFy
Z3VtZW50c1JlZ2lzdGVyKCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoCi0gICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSktPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKwotICAgICAgICAgICAgY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
KS0+YXJndW1lbnRzUmVnaXN0ZXIoKSArIGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7Cisg
ICAgfQorICAgIAorICAgIGludCBhcmd1bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyRm9y
KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCiAgICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwRm9yKENvZGVCbG9jayopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUzLDcgKzI0NTMsNiBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOiB7CiAgICAgICAgICAgICBtX2dyYXBoLm1faGFz
QXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3Nl
QXJndW1lbnRzRXNjYXBlZC5hZGQobV9pbmxpbmVTdGFja1RvcC0+ZXhlY3V0YWJsZSgpKTsKICAg
ICAgICAgICAgIE5vZGVJbmRleCBjcmVhdGVBcmd1bWVudHMgPSBhZGRUb0dyYXBoKENyZWF0ZUFy
Z3VtZW50cywgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjcmVhdGVBcmd1bWVudHMp
OwogICAgICAgICAgICAgc2V0KHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgY3JlYXRlQXJndW1lbnRzKTsKQEAgLTI0NzMsNyArMjQ3
Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIG9wX2dldF9hcmd1bWVudHNfbGVuZ3RoOiB7CiAgICAgICAgICAg
ICBtX2dyYXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKLSAgICAgICAgICAgIHNldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKEdldE15QXJndW1lbnRzTGVuZ3Ro
KSk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRk
VG9HcmFwaChHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2dldF9hcmd1bWVudHNfbGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC0yNDgxLDcgKzI0ODAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBtX2dyYXBoLm1faGFzQXJndW1lbnRzID0gdHJ1ZTsKICAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAogICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgICAgIEdldE15QXJndW1lbnRCeVZhbCwgT3BJ
bmZvKDApLCBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwKKyAgICAgICAgICAgICAgICAgICAgR2V0
TXlBcmd1bWVudEJ5VmFsU2FmZSwgT3BJbmZvKDApLCBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwK
ICAgICAgICAgICAgICAgICAgICAgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
KSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDIsMTIgKzMwMiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmbV9z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YS5sYXN0KCk7CiAgICAgfQogICAgIAotICAgIEV4ZWN1dGFi
bGVCYXNlKiBleGVjdXRhYmxlRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAg
RXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGVGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUpCiAgICAgewotICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCk7CiAgICAgICAgIAotICAgICAgICByZXR1cm4gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CisgICAgICAgIHJldHVybiBp
bmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CisgICAgfQorICAgIAorICAgIEV4ZWN1
dGFibGVCYXNlKiBleGVjdXRhYmxlRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisg
ICAgeworICAgICAgICByZXR1cm4gZXhlY3V0YWJsZUZvcihjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3Io
Y29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKQEAgLTMxNSw2ICszMjAsMTYgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhjb2RlT3JpZ2luLCBtX3Byb2ZpbGVkQmxvY2spOwogICAgIH0KICAgICAKKyAgICBp
bnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAg
ICB7CisgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAg
ICByZXR1cm4gY29kZUJsb2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoCisgICAgICAg
ICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSktPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKwor
ICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAg
IH0KKyAgICAKICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9k
ZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCkBAIC00MTAs
OSArNDI1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVy
aWNhbChub2RlKTsKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgIHJldHVybiAh
YnlWYWxJc1B1cmUobm9kZSk7Ci0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAg
ICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFp
bnMoCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7IC8vIElmIGJ5IHNvbWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNhc2Ug
aW4gcmVsZWFzZSBidWlsZCBpdCdzIHNhZmVyIHRvIGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29yc3Qu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTE3MDE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUyOCw2ICs1MjgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNo
OgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICBjYXNlIENh
bGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTE3
MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
ICAgICAvKiBhcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGxvY2FsIGFjY2VzcywgYW5kIHRodXMg
aGFkIHRoZWlyIG93biBwcm9maWxpbmcuICovXAogICAgIG1hY3JvKEdldExvY2FsVW5saW5rZWQs
IE5vZGVSZXN1bHRKUykgXAogICAgIFwKLSAgICAvKiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWlu
ZyBzZXQuICovXAorICAgIC8qIE1hcmtlciBmb3IgYW4gYXJndW1lbnQgYmVpbmcgc2V0IGF0IHRo
ZSBwcm9sb2d1ZSBvZiBhIGZ1bmN0aW9uLiAqL1wKICAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkg
XAogICAgIFwKICAgICAvKiBIaW50IHRoYXQgaW5saW5pbmcgYmVnaW5zIGhlcmUuIE5vIGNvZGUg
aXMgZ2VuZXJhdGVkIGZvciB0aGlzIG5vZGUuIEl0J3Mgb25seSAqL1wKQEAgLTE5OCw4ICsxOTgs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIHNlbnNlLiAqL1wK
ICAgICBtYWNybyhDcmVhdGVBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFRl
YXJPZmZBcmd1bWVudHMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhHZXRNeUFyZ3Vt
ZW50c0xlbmd0aCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCi0gICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKEdldE15QXJn
dW1lbnRzTGVuZ3RoLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFj
cm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CisgICAgbWFjcm8oR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlLCBOb2RlUmVzdWx0SlMgfCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGNyZWF0aW5nIGZ1bmN0aW9ucy4g
Ki9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjY0LmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsx
MjcsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgYm9v
bCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7
CiAgICAgYm9vbCBoYXZlVUludDMycyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUFyZ3VtZW50cyA9
IGZhbHNlOwogICAgIAogICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKQEAgLTE4NCw2ICsxODUsMTAg
QEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAg
ICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAg
ICBoYXZlQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTA1
LDcgKzUxMCw0OCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gMTMpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4
ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8g
MTMpIENyZWF0ZSBhcmd1bWVudHMgaWYgbmVjZXNzYXJ5IGFuZCBwbGFjZSB0aGVtIGludG8gdGhl
IGFwcHJvcHJpYXRlIGFsaWFzZWQKKyAgICAvLyAgICAgcmVnaXN0ZXJzLgorICAgIAorICAgIGlm
IChoYXZlQXJndW1lbnRzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW50IG9wZXJh
bmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgICAgICAvLyBGaW5kIHRo
ZSByaWdodCBpbmxpbmUgY2FsbCBmcmFtZS4KKyAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lID0gMDsKKyAgICAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBj
dXJyZW50ID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAgICAgIGN1
cnJlbnQ7CisgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5l
Q2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPnN0YWNrT2Zmc2V0IDw9
IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gY3VycmVu
dDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9qaXQuYXJndW1l
bnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJndW1lbnRzUmVn
aXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6Okp1
bXAgaGF2ZUFyZ3VtZW50cyA9IG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9u
Q3JlYXRlSW5saW5lZEFyZ3VtZW50cyksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIob3BlcmF0aW9uQ3JlYXRl
QXJndW1lbnRzKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9qaXQuY2FsbChHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihH
UFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGFyZ3VtZW50c1JlZ2lz
dGVyKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKHVubW9kaWZlZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50
c1JlZ2lzdGVyKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIDE0KSBBZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNp
bmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdwogICAgIC8vICAgICB0aGF0IGFsbCBuZXcg
Y2FsbHMgaW50byB0aGlzIGNvZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1
dGUKICAgICAvLyAgICAgY291bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJm
b3JtZWQgT1NSIGV4aXQgYW5kIGNhbGwgZnJhbWVzCiAgICAgLy8gICAgIHRoYXQgd2VyZSBzdGls
bCBleGVjdXRpbmcgdGhlIG9sZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1l
J3MKQEAgLTU0MywxMiArNTg5LDEyIEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAKICAgICBoYW5kbGVFeGl0Q291bnRzKGV4aXQpOwogICAgIAotICAgIC8v
IDE0KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8g
cmVnVDAuCisgICAgLy8gMTUpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBv
cGVyYXRpb24gaW50byByZWdUMC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5k
ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIG1faml0LmxvYWRQ
dHIoQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xh
c3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIAotICAg
IC8vIDE1KSBGaXggY2FsbCBmcmFtZShzKS4KKyAgICAvLyAxNikgRml4IGNhbGwgZnJhbWUocyku
CiAgICAgCiAgICAgQVNTRVJUKG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmdldEpJVFR5cGUo
KSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVC
bG9jaykpOwpAQCAtNTg0LDcgKzYzMCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdChjb25zdCAKICAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQog
ICAgICAgICBtX2ppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdC5t
X2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8gMTYp
IEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAvLyAx
NykgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgogICAgIAog
ICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4mIGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVD
b2RlQmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3
Miw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogI2VuZGlmCiAKICAg
ICB7Ci0gICAgICAgIEFzc2VtYmx5SGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsK
KyAgICAgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOwogICAgICAg
ICBPU1JFeGl0Q29tcGlsZXIgZXhpdENvbXBpbGVyKGppdCk7CiAgICAgICAgIAogICAgICAgICBl
eGl0Q29tcGlsZXIuY29tcGlsZUV4aXQoZXhpdCwgcmVjb3ZlcnkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAxMTcw
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMu
aCIKICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgog
CkBAIC00Miw3ICs0Myw3IEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBPU1JFeGl0Q29tcGls
ZXIgewogcHVibGljOgotICAgIE9TUkV4aXRDb21waWxlcihBc3NlbWJseUhlbHBlcnMmIGppdCkK
KyAgICBPU1JFeGl0Q29tcGlsZXIoQ0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgICAgIDogbV9qaXQo
aml0KQogICAgIHsKICAgICB9CkBAIC03Miw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBoYW5kbGVFeGl0Q291bnRzKGNvbnN0IE9TUkV4aXQmKTsKICAgICAKLSAgICBBc3NlbWJs
eUhlbHBlcnMmIG1faml0OworICAgIENDYWxsSGVscGVycyYgbV9qaXQ7CiAgICAgVmVjdG9yPHVu
c2lnbmVkPiBtX3BvaXNvblNjcmF0Y2hJbmRpY2VzOwogfTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDI0LDEzICsxMDI0LDIxIEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25D
cmVhdGVBY3QKIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50
cyhFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMt
Pmdsb2JhbERhdGEoKSwgZXhlYyk7CisgICAgLy8gTkI6IFRoaXMgbmVlZHMgdG8gYmUgZXhjZWVk
aW5nbHkgY2FyZWZ1bCB3aXRoIHRvcCBjYWxsIGZyYW1lIHRyYWNraW5nLCBzaW5jZSBpdAorICAg
IC8vIG1heSBiZSBjYWxsZWQgZnJvbSBPU1IgZXhpdCwgd2hpbGUgdGhlIHN0YXRlIG9mIHRoZSBj
YWxsIHN0YWNrIGlzIGJpemFycmUuCisgICAgQXJndW1lbnRzKiByZXN1bHQgPSBBcmd1bWVudHM6
OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMpOworICAgIEFTU0VSVCghZXhlYy0+Z2xv
YmFsRGF0YSgpLmV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNDZWxsKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMoCiAgICAgRXhlY1N0
YXRlKiBleGVjLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKLSAgICByZXR1
cm4gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLCBpbmxpbmVDYWxs
RnJhbWUpOworICAgIC8vIE5COiBUaGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwg
d2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2luY2UgaXQKKyAgICAvLyBtYXkgYmUgY2Fs
bGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBi
aXphcnJlLgorICAgIEFyZ3VtZW50cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOworICAgIEFTU0VSVCghZXhlYy0+
Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvblRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBhY3RpdmF0aW9uQ2VsbCwgaW50MzJfdCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0
ZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzNywxMyArNDM3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0TXlBcmd1
bWVudEJ5VmFsOiB7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlv
bigpKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJn
ZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFzSW50KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
c0xlbmd0aDogeworICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogewogICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RJbnQzMik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjE2LDcgKzYxNiw5IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgR2V0RmxvYXQ2NEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFN0cmluZ0xl
bmd0aDoKICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgotICAgICAgICBjYXNlIEdldExvY2Fs
VW5saW5rZWQ6IHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgorICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRzTGVuZ3RoOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDog
ewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRo
aXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBi
eSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Mzg5MCwyMSArMzg5MCwyMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIW1faml0Lmdy
YXBoKCkubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlucygKLSAgICAg
ICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKSkp
IHsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQXJndW1l
bnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaFRlc3RQdHIoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJv
LAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdp
bikpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFTU0VSVCghbm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnBheWxvYWRGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKLSAg
ICAgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0R1BSKTsKLSAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9u
WmVybywKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkp
KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihSZWdp
c3RlckZpbGU6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5zdWIz
MihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6IHsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGNyZWF0ZWQgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKAogICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCkBAIC0zOTQz
LDQ2ICszOTQ1LDUwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIW1faml0Lmdy
YXBoKCkubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlucygKLSAgICAg
ICAgICAgICAgICBtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKSkp
IHsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEFyZ3VtZW50c0VzY2Fw
ZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQ
dHIoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCisgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAgICAgICAgICAgICAgIG1faml0LmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7CisKKyAgICAgICAgbV9qaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgaWYg
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLAorICAgICAgICAgICAgICAgICAgICBJbW0zMihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0
cigKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCi0gICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKLQotICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUiwgcmVzdWx0R1BS
KTsKLSAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVP
ckVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLAotICAgICAgICAgICAg
ICAgICAgICAgICAgSW1tMzIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSkpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLAotICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSkpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQ
UiwKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1faml0Lm5lZzMyKHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5k
MzJUb1B0cihyZXN1bHRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0Lm5lZzMyKHJlc3Vs
dEdQUik7CisgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc3VsdEdQUiwgcmVzdWx0
R1BSKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKLSAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdo
dCwKLSAgICAgICAgICAgICAgICAgICAgKChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
Ci0gICAgICAgICAgICAgICAgICAgICAgPyBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldAotICAgICAgICAgICAgICAgICAgICAgIDogMCkgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKLSAgICAg
ICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKAorICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgcmVzdWx0R1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwKKyAgICAg
ICAgICAgICAgICAoKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAg
ICAgICAgID8gbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQKKyAg
ICAgICAgICAgICAgICAgIDogMCkgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5n
VGhpcygwKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgICAgIHJlc3VsdEdQUik7CiAK
LSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogeworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4Lmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAK
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwogICAgICAgICBzbG93UGF0
aC5hcHBlbmQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4Niw2ICs5ODYs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgICAg
ICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAg
ICAgICBlbHNlIGlmIChhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRV
c2VEb3VibGVGb3JtYXQoKSkKICAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3Vy
Y2UoRG91YmxlSW5SZWdpc3RlckZpbGUpOworICAgICAgICBlbHNlIGlmIChhdChub2RlSW5kZXgp
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0FyZ3VtZW50c0FsaWFzKCkpCisgICAgICAgICAgICBt
X3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rp
b24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKICAg
ICB9CkBAIC0xMzQ1LDEzICsxMzQ3LDE4IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWwKICAgICAgICAgCiAgICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZERvdWJsZSgpOworICAgICAgICAKKyAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCgpOwogCiAg
ICAgY2FzZSBIYXZlTm9kZTogewogICAgICAgICBpZiAoaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5u
b2RlSW5kZXgoKSkpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQo
dmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKLSAgICAKKyAgICAg
ICAgCiAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmYXQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkp
OwogICAgICAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAg
IGlmIChub2RlUHRyLT5vcCgpID09IENyZWF0ZUFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6YXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKCk7CiAgICAg
ICAgICAgICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZl
ciB1c2UgdGhpcyBub2RlLCBvciBvcGVyYW5kLAogICAgICAgICAgICAgLy8gZXZlci4gU2V0IGl0
IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgogICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gVmFsdWVTb3VyY2VL
aW5kIHsKICAgICBDZWxsSW5SZWdpc3RlckZpbGUsCiAgICAgQm9vbGVhbkluUmVnaXN0ZXJGaWxl
LAogICAgIERvdWJsZUluUmVnaXN0ZXJGaWxlLAorICAgIEFyZ3VtZW50c1NvdXJjZSwKICAgICBI
YXZlTm9kZQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9u
KFByZWRpY3ROb25lKQogICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgLCBtX2RvdWJsZUZv
cm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisgICAgICAgICwgbV9pc0NhcHR1cmVk
KGZhbHNlKQorICAgICAgICAsIG1faXNBcmd1bWVudHNBbGlhcyhmYWxzZSkKICAgICB7CiAgICAg
ICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC01OCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2ZsYWdzKDApCiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0eURvdWJs
ZUZvcm1hdFN0YXRlKQogICAgICAgICAsIG1faXNDYXB0dXJlZChpc0NhcHR1cmVkKQorICAgICAg
ICAsIG1faXNBcmd1bWVudHNBbGlhcyhmYWxzZSkKICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMo
KTsKICAgICB9CkBAIC04Nyw2ICs5MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lz
Q2FwdHVyZWQ7CiAgICAgfQogICAgIAorICAgIGJvb2wgbWVyZ2VJc0FyZ3VtZW50c0FsaWFzKGJv
b2wgaXNBcmd1bWVudHNBbGlhcykKKyAgICB7CisgICAgICAgIGJvb2wgbmV3SXNBcmd1bWVudHNB
bGlhcyA9IG1faXNBcmd1bWVudHNBbGlhcyB8IGlzQXJndW1lbnRzQWxpYXM7CisgICAgICAgIGlm
IChuZXdJc0FyZ3VtZW50c0FsaWFzID09IG1faXNBcmd1bWVudHNBbGlhcykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9pc0FyZ3VtZW50c0FsaWFzID0gbmV3SXNBcmd1bWVu
dHNBbGlhczsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNB
cmd1bWVudHNBbGlhcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9pc0FyZ3VtZW50c0FsaWFz
OworICAgIH0KKyAgICAKICAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBzZWxmID0gZmluZCgpOwpAQCAt
MjM3LDYgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgRG91YmxlRm9ybWF0U3RhdGUgbV9kb3VibGVG
b3JtYXRTdGF0ZTsKICAgICAKICAgICBib29sIG1faXNDYXB0dXJlZDsKKyAgICBib29sIG1faXNB
cmd1bWVudHNBbGlhczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142158</attachid>
            <date>2012-05-15 23:04:06 -0700</date>
            <delta_ts>2012-05-17 15:06:08 -0700</delta_ts>
            <desc>it&apos;s starting to do things</desc>
            <filename>aliased_arguments_patch_4.diff</filename>
            <type>text/plain</type>
            <size>67423</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3MjIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBA
CisyMDEyLTA1LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhbGlhc2VkIHVzZXMgb2YgdGhlIEFyZ3VtZW50cyBvYmplY3Qg
b2YgdGhlIGN1cnJlbnQgY2FsbCBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODY1NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuIEl0J3Mgc3RhcnRpbmcg
dG8gZG8gdGhpbmdzLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaDoKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6
YXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKToKKyAgICAgICAgKFZhbHVlUmVjb3ZlcnkpOgor
ICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR0FkamFjZW5jeUxpc3QuaDoKKyAgICAgICAgKEFkamFjZW5j
eUxpc3QpOgorICAgICAgICAoSlNDOjpERkc6OkFkamFjZW5jeUxpc3Q6OnJlbW92ZUVkZ2VGcm9t
QmFnKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToK
KyAgICAgICAgKEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2VydmVCYWRBcmd1bWVudHNVc2Up
OgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9ic2Vy
dmVCYWRBcmd1bWVudHNVc2VzKToKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlOjpvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjppc09LVG9PcHRpbWl6ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cmVtb3ZlQXJndW1l
bnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQpOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKToKKyAgICAgICAgKEFzc2VtYmx5SGVscGVycyk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJlbW92ZVBvdGVu
dGlhbGx5RGVhZFBoaVJlZmVyZW5jZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNvbGxl
Y3RHYXJiYWdlKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChHcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmV4ZWN1dGFibGVGb3Ip
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphcmd1bWVudHNSZWdpc3RlckZvcik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y2xvYmJlcnNXb3JsZCk6CisgICAgICAgICogZGZnL0RG
R05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJlZGljdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6Ok9TUkV4aXRDb21waWxl
cik6CisgICAgICAgIChPU1JFeGl0Q29tcGlsZXIpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcik6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg6CisgICAgICAgIChK
U0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAg
ICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKToK
KyAgICAgICAgKFZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFi
bGVBY2Nlc3NEYXRhOjppc0FyZ3VtZW50c0FsaWFzKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rl
cy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
bCk6CisKIDIwMTItMDUtMTQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBERkcgc2hvdWxkIG9wdGltaXplIGlubGluZWQgdXNlcyBvZiBhcmd1bWVudHMubGVuZ3Ro
IGFuZCBhcmd1bWVudHNbaV0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDYgKzQ0NywxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCh1c2VzQXJndW1lbnRzKCkpOwogICAg
ICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzUmVnaXN0ZXI7CiAgICAgICAgIH0KKyAgICAgICAg
aW50IHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCF1c2VzQXJndW1lbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXI7CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAg
ICAgICAgfQogICAgICAgICB2b2lkIHNldEFjdGl2YXRpb25SZWdpc3RlcihpbnQgYWN0aXZhdGlv
blJlZ2lzdGVyKQogICAgICAgICB7CiAgICAgICAgICAgICBtX2FjdGl2YXRpb25SZWdpc3RlciA9
IGFjdGl2YXRpb25SZWdpc3RlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNjEs
NiArNjEsOCBAQCBlbnVtIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgewogICAgIERvdWJsZURpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlLAogICAgIENlbGxEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKICAg
ICBCb29sZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBhbiBBcmd1bWVu
dHMgb2JqZWN0LgorICAgIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCwKICAgICAvLyBJdCdz
IGEgY29uc3RhbnQuCiAgICAgQ29uc3RhbnQsCiAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVj
b3ZlciBpdC4KQEAgLTE5MCw2ICsxOTIsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KICAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhcmd1bWVudHNUaGF0
V2VyZU5vdENyZWF0ZWQoKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgVmFsdWVSZWNvdmVyeVRl
Y2huaXF1ZSB0ZWNobmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQogICAgIAog
ICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlID09IENvbnN0
YW50OyB9CkBAIC0zMTUsNiArMzI0LDkgQEAgcHVibGljOgogICAgICAgICBjYXNlIEJvb2xlYW5E
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKICAgICAgICAgICAgIGZwcmludGYob3V0LCAiKmJvb2wo
JWQpIiwgdmlydHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICAgICAgZnByaW50ZihvdXQs
ICJhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbnN0YW50
OgogICAgICAgICAgICAgZnByaW50ZihvdXQsICJbJXNdIiwgY29uc3RhbnQoKS5kZXNjcmlwdGlv
bigpKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDc5LDE5ICsxMDc5LDE4IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25l
ZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlBcmd1bWVudHNM
ZW5ndGg6Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNF
c2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihu
b2RlLmNvZGVPcmlnaW4pKSkgewotICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhl
Y3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGltaXpl
Ci0gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBu
b3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFudCBmb2xkaW5nCi0gICAgICAgICAgICAvLyBv
ZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBh
IGNsb2JiZXJpbmcgb3BlcmF0aW9uLgotICAgICAgICAgICAgLy8gV2UgcGVyZm9ybSBmdXJ0aGVy
IG9wdGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KLSAgICAgICAgICAgIGlmIChub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChqc051bWJlcihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1
bWVudHMuc2l6ZSgpIC0gMSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAg
ICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMg
YXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBh
IGJpdC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQg
Zm9sZGluZworICAgICAgICAvLyBvZiBHZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRN
eUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNsb2JiZXJpbmcgb3BlcmF0aW9uLgorICAgICAgICAvLyBX
ZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgorICAgICAg
ICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChqc051bWJlcihub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CiAg
ICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xvYmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhl
IGFyZ3VtZW50cyBvYmplY3QgaGFkIGEgZ2V0dGVyCiAgICAgICAgIC8vIGluc3RhbGxlZCBvbiB0
aGUgbGVuZ3RoIHByb3BlcnR5LgogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxv
Y2spOwpAQCAtMTEwMSwxNSArMTEwMCwxNCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUo
dW5zaWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDoKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3Vt
ZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxl
Rm9yKG5vZGUuY29kZU9yaWdpbikpKSB7Ci0gICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhp
cyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0
aW1pemUKLSAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlz
IGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhlCi0gICAgICAgICAgICAvLyBB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLgotICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICAv
LyBXZSBrbm93IHRoYXQgdGhpcyBleGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMgYXJndW1l
bnRzLCBzbyB3ZSBjYW4gb3B0aW1pemUKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4g
Tm90ZSB0aGF0IHRoaXMgZW5kcyB1cCBiZWluZyBmdXJ0aGVyIG9wdGltaXplZCBieSB0aGUKKyAg
ICAgICAgLy8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS4KKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgR2V0
TXlBcmd1bWVudEJ5VmFsU2FmZToKICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVy
cyBhbGwgc3RydWN0dXJlcyBpZiB0aGUgcHJvcGVydHkgd2UncmUgYWNjZXNzaW5nIGhhcwogICAg
ICAgICAvLyBhIGdldHRlci4gV2UgZG9uJ3Qgc3BlY3VsYXRlIGFnYWluc3QgdGhpcy4KICAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCShyZXZpc2lvbiAxMTcwMTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTI4LDYgKzEyOCwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgaW5pdGlhbGl6
ZSgpOwogICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgaWYgeW91IHdpc2ggdG8gcmVtb3Zl
IGFuIGVkZ2UgYW5kIHRoZSBub2RlIHRyZWF0cyB0aGUgbGlzdCBvZiBjaGlsZHJlbgorICAgIC8v
IGFzIGEgImJhZyIgLSBhbiB1bm9yZGVyZWQgc2V0IHdoZXJlIHRoZSBpbmRleCBvZiB0aGUgZWRn
ZSBkb2VzIG5vdCBtYXR0ZXIuCisgICAgdm9pZCByZW1vdmVFZGdlRnJvbUJhZyh1bnNpZ25lZCBl
ZGdlSW5kZXgpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlZGdlSW5kZXg7IGkg
PCBTaXplIC0gMTsgKytpKQorICAgICAgICAgICAgc2V0Q2hpbGQoaSwgY2hpbGQoaSArIDEpKTsK
KyAgICAgICAgc2V0Q2hpbGQoU2l6ZSAtIDEsIEVkZ2UoKSk7CisgICAgfQogCiAgICAgdW5zaWdu
ZWQgZmlyc3RDaGlsZCgpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
Z3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICsz
NCw4NCBAQAogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAorbmFtZXNwYWNlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBOdWxsYWJs
ZUhhc2hUcmFpdHMgOiBwdWJsaWMgSGFzaFRyYWl0czxUPiB7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworICAgIHN0YXRpYyBUIGVtcHR5VmFsdWUoKSB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFQ+KDEpOyB9Cit9OworCitzdHJ1Y3QgQXJndW1lbnRz
QWxpYXNpbmdEYXRhIHsKKyAgICBJbmxpbmVDYWxsRnJhbWUqIGNhbGxDb250ZXh0OworICAgIGJv
b2wgY2FsbENvbnRleHRTZXQ7CisgICAgYm9vbCBtdWx0aXBsZUNhbGxDb250ZXh0czsKKyAgICAK
KyAgICBib29sIGFzc2lnbmVkRnJvbUFyZ3VtZW50czsKKyAgICBib29sIGFzc2lnbmVkRnJvbU1h
bnlUaGluZ3M7CisgICAgCisgICAgYm9vbCBlc2NhcGVzOworICAgIAorICAgIEFyZ3VtZW50c0Fs
aWFzaW5nRGF0YSgpCisgICAgICAgIDogY2FsbENvbnRleHQoMCkKKyAgICAgICAgLCBjYWxsQ29u
dGV4dFNldChmYWxzZSkKKyAgICAgICAgLCBtdWx0aXBsZUNhbGxDb250ZXh0cyhmYWxzZSkKKyAg
ICAgICAgLCBhc3NpZ25lZEZyb21Bcmd1bWVudHMoZmFsc2UpCisgICAgICAgICwgYXNzaWduZWRG
cm9tTWFueVRoaW5ncyhmYWxzZSkKKyAgICAgICAgLCBlc2NhcGVzKGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBtZXJnZUNhbGxDb250ZXh0KElubGluZUNhbGxGcmFtZSogbmV3
Q2FsbENvbnRleHQpCisgICAgeworICAgICAgICBpZiAobXVsdGlwbGVDYWxsQ29udGV4dHMpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoIWNhbGxDb250ZXh0U2V0
KSB7CisgICAgICAgICAgICBjYWxsQ29udGV4dCA9IG5ld0NhbGxDb250ZXh0OworICAgICAgICAg
ICAgY2FsbENvbnRleHRTZXQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbENvbnRleHQgPT0gbmV3Q2FsbENvbnRleHQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtdWx0aXBsZUNhbGxDb250ZXh0
cyA9IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY2FsbENvbnRleHRJc1ZhbGlkKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjYWxsQ29udGV4dFNldCAmJiAhbXVsdGlwbGVDYWxsQ29udGV4
dHM7CisgICAgfQorICAgIAorICAgIHZvaWQgbWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCkKKyAg
ICB7CisgICAgICAgIGFzc2lnbmVkRnJvbUFyZ3VtZW50cyA9IHRydWU7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCkKKyAgICB7CisgICAgICAgIGFz
c2lnbmVkRnJvbU1hbnlUaGluZ3MgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGFyZ3Vt
ZW50c0Fzc2lnbm1lbnRJc1ZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhc3NpZ25lZEZy
b21Bcmd1bWVudHMgJiYgIWFzc2lnbmVkRnJvbU1hbnlUaGluZ3M7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNWYWxpZCgpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbENvbnRleHRJc1ZhbGlk
KCkgJiYgYXJndW1lbnRzQXNzaWdubWVudElzVmFsaWQoKSAmJiAhZXNjYXBlczsKKyAgICB9Cit9
OworCit9IC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIGNsYXNzIEFyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgogICAgIEFyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQpAQCAtNTEsNiArMTI2LDIwNCBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCisg
ICAgICAgIC8vIFJlY29yZCB3aGljaCBhcmd1bWVudHMgYXJlIGtub3duIHRvIGVzY2FwZSBubyBt
YXR0ZXIgd2hhdC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPmlubGlu
ZUNhbGxGcmFtZXMoKS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gJmNvZGVCbG9jaygpLT5pbmxpbmVDYWxsRnJhbWVzKClbaV07
CisgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2Nh
cGVkLmNvbnRhaW5zKAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFibGVGb3Io
aW5saW5lQ2FsbEZyYW1lKSkpCisgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFk
ZChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBDcmVh
dGUgZGF0YSBmb3IgdmFyaWFibGUgYWNjZXNzIGRhdGFzIHRoYXQgd2Ugd2lsbCB3YW50IHRvIGFu
YWx5emUuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vz
c0RhdGEuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOworICAg
ICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzUm9vdCgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbV9hcmd1bWVu
dHNBbGlhc2luZy5hZGQodmFyaWFibGVBY2Nlc3NEYXRhLCBBcmd1bWVudHNBbGlhc2luZ0RhdGEo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggdmFy
aWFibGVzIGFsaWFzIHRoZSBhcmd1bWVudHMgYW5kIG5vdGhpbmcgZWxzZSwgYW5kIGFyZQorICAg
ICAgICAvLyB1c2VkIG9ubHkgZm9yIEdldEJ5VmFsIGFuZCBHZXRBcmd1bWVudHNMZW5ndGggYWNj
ZXNzZXMuIEF0IHRoZSBzYW1lIHRpbWUsCisgICAgICAgIC8vIGlkZW50aWZ5IHVzZXMgb2YgQ3Jl
YXRlQXJndW1lbnRzIHRoYXQgYXJlIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIGFyZ3VtZW50cwor
ICAgICAgICAvLyBiZWluZyBhbGlhc2VkIG9ubHkgdG8gdmFyaWFibGVzIHRoYXQgc2F0aXNmeSB0
aGVzZSBjb25zdHJhaW50cy4KKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5k
ZXhdLmdldCgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJ
bkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIENyZWF0ZUFyZ3VtZW50czogeworICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUg
dGhpcyBvcC4gSWYgd2Ugc2VlIGEgbG9uZSBDcmVhdGVBcmd1bWVudHMgdGhlbiB3ZSB3YW50IHRv
CisgICAgICAgICAgICAgICAgICAgIC8vIGNvbXBsZXRlbHkgaWdub3JlIGl0IGJlY2F1c2U6Cisg
ICAgICAgICAgICAgICAgICAgIC8vIDEpIFRoZSBkZWZhdWx0IHdvdWxkIGJlIHRvIHNlZSB0aGF0
IHRoZSBjaGlsZCBpcyBhIEdldExvY2FsIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyAg
ICBhcmd1bWVudHMgcmVnaXN0ZXIgYW5kIGNvbmNsdWRlIHRoYXQgd2UgaGF2ZSBhbiBhcmd1bWVu
dHMgZXNjYXBlLgorICAgICAgICAgICAgICAgICAgICAvLyAyKSBUaGUgZmFjdCB0aGF0IGEgQ3Jl
YXRlQXJndW1lbnRzIGV4aXN0cyBkb2VzIG5vdCBtZWFuIHRoYXQgaXQKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICAgd2lsbCBjb250aW51ZSB0byBleGlzdCBhZnRlciB3ZSdyZSBkb25lIHdpdGgg
dGhpcyBwaGFzZS4gQXMgZmFyCisgICAgICAgICAgICAgICAgICAgIC8vICAgIGFzIHRoaXMgcGhh
c2UgaXMgY29uY2VybmVkLCBhIENyZWF0ZUFyZ3VtZW50cyBvbmx5ICJleGlzdHMiIGlmIGl0Cisg
ICAgICAgICAgICAgICAgICAgIC8vICAgIGlzIHVzZWQgaW4gYSBtYW5uZXIgdGhhdCBuZWNlc3Np
dGF0ZXMgaXRzIGV4aXN0YW5jZS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNl
dExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZS5vcCgpICE9IENyZWF0ZUFyZ3VtZW50cykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHNvdXJjZSBvZiB0aGUgU2V0TG9j
YWwga25vd3MgdGhhdCBpZiBpdCdzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHZhcmlh
YmxlIHRoYXQgd2UgdGhpbmsgaXMgYWxpYXNlZCB0byB0aGUgYXJndW1lbnRzLCB0aGVuIGl0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXkgZXNjYXBlIGF0IHRoaXMgcG9pbnQuIEluIGZ1
dHVyZSwgd2UgY291bGQgdHJhY2sgdHJhbnNpdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYWxpYXNpbmcuIEJ1dCBub3QgeWV0LgorICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2
ZUJhZEFyZ3VtZW50c1VzZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBp
ZiBpdCdzIGEgdmFyaWFibGUgdGhhdCB3ZSB0aGluayBpcyBhbGlhc2VkIHRvCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzLCB0aGF0IHdlIGtub3cgdGhhdCBpdCBtaWdo
dCBhY3R1YWxseSBub3QgYmUuCisgICAgICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlh
c2luZ0RhdGEmIGRhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRz
QWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhLm1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
QWNjZXNzRGF0YS0+bG9jYWwoKSA9PSBhcmd1bWVudHNSZWdpc3RlcgorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lz
dGVyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUgPT0gc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgbV9j
cmVhdGVzQXJndW1lbnRzLmFkZChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKHNvdXJjZS5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNB
bGlhc2luZ0RhdGEmIGRhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNB
bGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YS5tZXJnZUFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZhcmlhYmxlJ3MgdXNlcyBhcmUgaW4gdGhlIHNh
bWUgY29udGV4dCBhcworICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGl0IGlz
IGFsaWFzaW5nLgorICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVyZ2VDYWxsQ29udGV4dChzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgICAgICAgICAg
Y2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNp
bmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNp
bmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAg
IGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEZsdXNoOiB7CisgICAgICAgICAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNz
RGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRh
KS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBmbHVzaCB0aGVu
IGJ5IGRlZmluaXRpb24gaXQgZXNjYXBlcy4KKyAgICAgICAgICAgICAgICAgICAgZGF0YS5lc2Nh
cGVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFNldEFyZ3VtZW50
OiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nl
c3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYg
ZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQo
dmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpOworICAgICAgICAgICAgICAgICAgICBkYXRhLm1l
cmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rp
b24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5v
ZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJZiBhcmd1bWVudHMgaXMgdXNlZCBhcyBhbiBpbmRleCwgdGhlbiBp
dCdzIGFuIGVzY2FwaW5nIHVzZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoYXQncyBz
byBhd2Z1bCBhbmQgcHJldHR5IG11Y2ggaW1wb3NzaWJsZSBzaW5jZSBpdCB3b3VsZAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaW1wbHkgdGhhdCB0aGUgYXJndW1lbnRzIHdlcmUgcHJlZGlj
dGVkIGludGVnZXIsIGJ1dCBpdCdzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBnb29kIHRv
IGJlIGRlZmVuc2l2ZSBhbmQgdGhvcm91Z2guCisgICAgICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNl
cyhub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEFyZ3VtZW50c0xl
bmd0aDogeworICAgICAgICAgICAgICAgICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5v
ZGUsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5vdyB3ZSBrbm93IHdoaWNoIHZhcmlh
YmxlcyBhcmUgYWxpYXNlZCB0byBhcmd1bWVudHMuIEJ1dCBpZiBhbnkgb2YgdGhlbSBhcmUKKyAg
ICAgICAgLy8gZm91bmQgdG8gaGF2ZSBlc2NhcGVkLCBvciB3ZXJlIG90aGVyd2lzZSBpbnZhbGlk
YXRlZCwgdGhlbiB3ZSBuZWVkIHRvIG1hcmsKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhcyBy
ZXF1aXJpbmcgY3JlYXRpb24uIFRoaXMgaXMgYSBwcm9wZXJ0eSBvZiBTZXRMb2NhbHMgdG8KKyAg
ICAgICAgLy8gdmFyaWFibGVzIHRoYXQgYXJlIG5laXRoZXIgdGhlIGNvcnJlY3QgYXJndW1lbnRz
IHJlZ2lzdGVyIG5vciBhcmUgbWFya2VkIGFzCisgICAgICAgIC8vIGJlaW5nIGFyZ3VtZW50cy1h
bGlhc2VkLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBi
bG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1
bWVudHMpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFjcHR1cmVkIGNhc2Ugd291bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gcHJldmlvdXMgcGFzcy4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFyZ3VtZW50c0Fs
aWFzaW5nRGF0YSYgZGF0YSA9CisgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNp
bmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgaWYg
KGRhdGEuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIEluc2Vy
dGlvblNldDxOb2RlSW5kZXg+IGluc2VydGlvblNldDsKICAgICAgICAgCiAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Mu
c2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKQEAgLTYwLDExICszMzMsMTI5IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFp
bnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9yKG5v
ZGUuY29kZU9yaWdpbikpKQorICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5vcCgpICE9IENyZWF0ZUFyZ3VtZW50cykKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0b3JlIGludG8gdGhlIGFyZ3VtZW50cyByZWdp
c3RlciBmb3IgYW4gSW5saW5lQ2FsbEZyYW1lKgorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0
IGRvZXMgbm90IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4ga2lsbCBpdC4KKyAgICAgICAgICAgICAg
ICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gYXJn
dW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vz
c0RhdGEtPmxvY2FsKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmll
ZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUg
Rmx1c2guIEl0IHNob3VsZCBiZSB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGUmIGZsdXNoID0gbV9ncmFwaFtibG9jay0+YXQoaW5kZXhJbkJsb2NrICsg
MSldOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLm9wKCkgPT0gRmx1c2gp
OworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLnZhcmlhYmxlQWNjZXNzRGF0
YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoZmx1c2guY2hpbGQxKCkgPT0gbm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEJlIGRlZmVuc2l2ZSBpbiByZWxlYXNlIG1vZGUuCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZmx1c2gub3AoKSAhPSBGbHVzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IGZsdXNoLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGZsdXNoLmNoaWxkMSgpICE9IG5vZGVJbmRleCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZsdXNoLnNldE9wQW5kRGVmYXVsdEZsYWdzKE5vcCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEoZmx1c2gpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZmx1c2guc2V0UmVmQ291bnQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgaXMgYSBzdG9yZSBpbnRvIGEgVmFyaWFibGVBY2Nlc3NEYXRhKiB0aGF0IGlzIG1hcmtl
ZCBhcworICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgYWxpYXNpbmcgZm9yIGFuIElu
bGluZUNhbGxGcmFtZSogdGhhdCBkb2VzIG5vdCBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gYXJndW1lbnRzLCB0aGVuIGZsYWcgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YSBhcyBiZWluZyBh
bgorICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMtYWxpYXNlZC4gVGhpcydsbCBsZXQg
dGhlIE9TUiBleGl0IG1hY2hpbmVyeSBkbyB0aGUgcmlnaHQKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpbmdzLiBOb3RlIGFsc28gdGhhdCB0aGUgU2V0TG9jYWwgc2hvdWxkIGJlY29tZSBkZWFk
IGFzIHNvb24gYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgcmVwbGFjZSBhbGwgdXNlcyBv
ZiB0aGlzIHZhcmlhYmxlIHdpdGggR2V0TXlBcmd1bWVudHNMZW5ndGggYW5kCisgICAgICAgICAg
ICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbC4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQuaXNW
YWxpZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNv
bnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUlzQXJndW1l
bnRzQWxpYXModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbTog
eworICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCB3ZSB3aWxs
IGhhdmUgYSBQaGFudG9tIHJlZmVyZW5jaW5nIGVpdGhlcgorICAgICAgICAgICAgICAgICAgICAv
LyBDcmVhdGVBcmd1bWVudHMsIG9yIGEgbG9jYWwgb3AgZm9yIHRoZSBhcmd1bWVudHMgcmVnaXN0
ZXIsIG9yIGEKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgb3AgZm9yIGFuIGFyZ3VtZW50
cy1hbGlhc2VkIHZhcmlhYmxlLiBJbiBhbnkgb2YgdGhvc2UgY2FzZXMsCisgICAgICAgICAgICAg
ICAgICAgIC8vIHdlIHNob3VsZCByZW1vdGUgdGhlIHBoYW50b20gcmVmZXJlbmNlLCBzaW5jZToK
KyAgICAgICAgICAgICAgICAgICAgLy8gMSkgUGhhbnRvbXMgb25seSBleGlzdCB0byBhaWQgT1NS
IGV4aXQuIEJ1dCBhcmd1bWVudHMgc2ltcGxpZmljYXRpb24KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgaGFzIGl0cyBvd24gT1NSIGV4aXQgc3RvcnksIHdoaWNoIGlzIHRvIGluZm9ybSBPU1Ig
ZXhpdCB0byByZWlmeQorICAgICAgICAgICAgICAgICAgICAvLyAgICB0aGUgYXJndW1lbnRzIGFz
IG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAgLy8gMikgVGhlIFBoYW50b20gbWF5IGtl
ZXAgdGhlIENyZWF0ZUFyZ3VtZW50cyBub2RlIGFsaXZlLCB3aGljaCBpcworICAgICAgICAgICAg
ICAgICAgICAvLyAgICBwcmVjaXNlbHkgd2hhdCB3ZSBkb24ndCB3YW50LgorICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFu
dG9tQ2hpbGQobm9kZSwgaSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRC
eVZhbDogeworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpCisgICAg
ICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnBy
ZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FjdGlvbmFibGVBcnJheVByZWRp
Y3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGNhbiBiZSBzaW1wbGlmaWVkIHRvIEdldE15QXJndW1lbnRCeVZhbCBpZiB3ZSBrbm93IHRoYXQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNhdGlzZmllcyBlaXRoZXIgY29uZGl0aW9u
ICgxKSBvciAoMik6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAxKSBJdHMgZmlyc3QgY2hp
bGQgaXMgYSB2YWxpZCBBcmd1bWVudHNBbGlhc2luZ0RhdGEgYW5kIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gICAgSW5saW5lQ2FsbEZyYW1lKiBpcyBub3QgbWFya2VkIGFzIGNyZWF0
aW5nIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIpIEl0cyBmaXJzdCBj
aGlsZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJbmxpbmVDYWxsRnJhbWUqCisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyAgICBpcyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hpbGQxKCldKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLmNoaWxkcmVuLmNoaWxk
MigpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVk
Z2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3Mo
R2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJl
Y29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0IGl0J3MgYSBHZXRNeUFyZ3VtZW50QnlW
YWwuCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnRzTGVuZ3RoOiB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNo
aWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5jaGlsZDEoKSk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVu
dHNMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0
aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudHNMZW5ndGguCisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogeworICAgICAgICAgICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5vcCgpID09
IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5v
cCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0aCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCkBAIC04MiwxMCArNDcz
LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDogewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2V4ZWN1dGFi
bGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkKKyAgICAgICAg
ICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50
QnlWYWxTYWZlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm9wKCkgPT0gR2V0TXlBcmd1
bWVudEJ5VmFsU2FmZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRN
eUFyZ3VtZW50QnlWYWwpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5oYXNDb25z
dGFudCgpKQpAQCAtMTM4LDggKzUzNSwxNTEgQEAgcHVibGljOgogICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYg
KGNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7CisgICAgICAg
IAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CisgICAgCitwcml2YXRlOgorICAgIEhh
c2hTZXQ8SW5saW5lQ2FsbEZyYW1lKiwKKyAgICAgICAgICAgIERlZmF1bHRIYXNoPElubGluZUNh
bGxGcmFtZSo+OjpIYXNoLAorICAgICAgICAgICAgTnVsbGFibGVIYXNoVHJhaXRzPElubGluZUNh
bGxGcmFtZSo+ID4gbV9jcmVhdGVzQXJndW1lbnRzOworICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nl
c3NEYXRhKiwgQXJndW1lbnRzQWxpYXNpbmdEYXRhLAorICAgICAgICAgICAgRGVmYXVsdEhhc2g8
VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCisgICAgICAgICAgICBOdWxsYWJsZUhhc2hUcmFp
dHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3VtZW50c0FsaWFzaW5nOworCisgICAgdm9p
ZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICgh
ZWRnZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIE5vZGUmIGNoaWxk
ID0gbV9ncmFwaFtlZGdlXTsKKyAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoY2hpbGQubG9jYWwoKSA9
PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4p
KSB7CisgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGls
ZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+
aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgQXJn
dW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlh
YmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhOb2RlJiBub2RlKQor
ICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5udW1DaGlsZHJlbihub2Rl
KTsgaS0tOykKKyAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2UobV9ncmFwaC5jaGls
ZChub2RlLCBpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZVByb3BlckFyZ3VtZW50
c1VzZShOb2RlJiBub2RlLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBOb2RlJiBjaGlsZCA9
IG1fZ3JhcGhbZWRnZV07CisgICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKSB7Cisg
ICAgICAgICAgICAvLyBXaGVuIGNhbiB0aGlzIGhhcHBlbj8gQXQgbGVhc3QgdHdvIGNhc2VzIHRo
YXQgSSBjYW4gdGhpbmsKKyAgICAgICAgICAgIC8vIG9mOgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIDEpIEFsaWFzZWQgdXNlIG9mIGFyZ3VtZW50cyBpbiB0aGUgc2FtZSBiYXNpYyBi
bG9jaywKKyAgICAgICAgICAgIC8vICAgIGxpa2U6CisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gICAgdmFyIGEgPSBhcmd1bWVudHM7CisgICAgICAgICAgICAvLyAgICB2YXIgeCA9IGFy
Z3VtZW50c1tpXTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAyKSBJZiB3ZSdyZSBh
Y2Nlc3NpbmcgYXJndW1lbnRzIHdlIGdvdCBmcm9tIHRoZSBoZWFwIQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGNoaWxkLm9wKCkgPT0gQ3JlYXRlQXJndW1l
bnRzCisgICAgICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQor
ICAgICAgICAgICAgICAgICAgICE9IGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgQXJndW1lbnRzQWxpYXNp
bmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnNlY29uZDsKKyAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzT0tUb09wdGltaXpl
KE5vZGUmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc291cmNlLm9wKCkpIHsKKyAg
ICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBzb3VyY2UudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQorICAg
ICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEp
LT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoIWRhdGEuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhz
b3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBD
cmVhdGVBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZUFyZ3VtZW50c1Jl
ZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUmIG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAg
ICB7CisgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUuY2hpbGRyZW4uY2hpbGQoZWRnZUluZGV4KTsK
KyAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOworICAgICAgICBzd2l0Y2ggKGNoaWxkLm9w
KCkpIHsKKyAgICAgICAgY2FzZSBQaGk6IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGEgR2V0
TG9jYWwgb2YgdGhlIGFyZ3VtZW50cyByZWdpc3Rlci4KKyAgICAgICAgY2FzZSBHZXRMb2NhbDog
Ly8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYW4gYXJndW1lbnRzIGFjY2VzcyB0byBhIHZhcmlh
YmxlIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cy4KKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeyAv
LyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVn
aXN0ZXIuCisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0
YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgYm9vbCBpc0RlYWRB
cmd1bWVudHNSZWdpc3RlciA9CisgICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpID09CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRz
UmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbikKKyAgICAgICAgICAgICAgICAmJiAhbV9jcmVh
dGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgIGJvb2wgaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQorICAgICAgICAg
ICAgICAgICF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQorICAgICAgICAgICAgICAg
ICYmIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQu
aXNWYWxpZCgpCisgICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlu
cyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBpZiAoIWlz
RGVhZEFyZ3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFzZWRBcmd1bWVudHNSZWdpc3RlcikKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRhdGFMb2coIlJlbW92aW5nIGVkZ2Ug
dG8gQCV1IGF0IGluZGV4ICV1LlxuIiwgZWRnZS5pbmRleCgpLCBlZGdlSW5kZXgpOworICAgICAg
ICAgICAgZGF0YUxvZygiICAgQ3VycmVudCByZWYgY291bnQ6ICV1LlxuIiwgbV9ncmFwaFtlZGdl
XS5yZWZDb3VudCgpKTsKKyAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYoZWRnZSk7CisgICAgICAg
ICAgICBub2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3ZSBDU0UgdHdvIEdldExvY2FscyB0byB0aGUgYXJn
dW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENTRSB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgR2V0TG9j
YWwgdG8gdGhlIGZpcnN0LgorICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250
YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBtX2dyYXBoLmRlcmVmKGVkZ2UpOworICAgICAgICAgICAgbm9k
ZS5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJhZyhlZGdlSW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CiB9OwogCiBib29sIHBlcmZvcm1Bcmd1bWVudHNT
aW1wbGlmaWNhdGlvbihHcmFwaCYgZ3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxMSwxNCArMzExLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYmFzZWxpbmVD
b2RlQmxvY2s7CiAgICAgfQogICAgIAotICAgIGludCBhcmd1bWVudHNSZWdpc3RlckZvcihjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIGludCBhcmd1bWVudHNSZWdpc3RlckZvcihJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7Ci0gICAgICAgIGlmICghY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQog
ICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpOwogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1l
KAotICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5hcmd1bWVudHNSZWdp
c3RlcigpICsKLSAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldDsKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSktPmFyZ3VtZW50c1JlZ2lzdGVyKCkg
KyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIH0KKyAgICAKKyAgICBpbnQgYXJn
dW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhcmd1bWVudHNSZWdpc3RlckZvcihjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgfQogICAgIAogICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxvY2sqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMTcwMTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ1Myw3ICsyNDUzLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3Vt
ZW50czogewogICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0gICAg
ICAgICAgICBtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuYWRkKG1f
aW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUoKSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggY3Jl
YXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChDcmVhdGVBcmd1bWVudHMsIGdldChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgY3JlYXRlQXJndW1lbnRzKTsKICAgICAgICAgICAgIHNldCh1bm1v
ZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
IGNyZWF0ZUFyZ3VtZW50cyk7CkBAIC0yNDczLDcgKzI0NzIsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9n
ZXRfYXJndW1lbnRzX2xlbmd0aDogewogICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50
cyA9IHRydWU7Ci0gICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgYWRkVG9HcmFwaChHZXRNeUFyZ3VtZW50c0xlbmd0aCkpOworICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0TXlBcmd1bWVudHNM
ZW5ndGhTYWZlKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRzX2xl
bmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjQ4MSw3ICsyNDgwLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgbV9ncmFw
aC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKAotICAgICAgICAg
ICAgICAgICAgICBHZXRNeUFyZ3VtZW50QnlWYWwsIE9wSW5mbygwKSwgT3BJbmZvKGdldFByZWRp
Y3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgIEdldE15QXJndW1lbnRCeVZhbFNhZmUsIE9w
SW5mbygwKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCiAgICAgICAgICAgICAgICAgICAgIGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
RkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDkgKzM4Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGFMb2coIiBSZW1vdmluZyByZWZlcmVuY2UgYXQgY2hp
bGQgJXUuIiwgZWRnZUluZGV4KTsKICNlbmRpZgogICAgICAgICBtX2dyYXBoLmRlcmVmKG15Tm9k
ZUluZGV4KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4OyBpIDwgQWRqYWNl
bmN5TGlzdDo6U2l6ZSAtIDE7ICsraSkKLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4uc2V0
Q2hpbGQoaSwgcGhpTm9kZS5jaGlsZHJlbi5jaGlsZChpICsgMSkpOwotICAgICAgICBwaGlOb2Rl
LmNoaWxkcmVuLnNldENoaWxkKEFkamFjZW5jeUxpc3Q6OlNpemUgLSAxLCBFZGdlKCkpOworICAg
ICAgICBwaGlOb2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7CiAgICAg
fQogICAgIAogICAgIHN0cnVjdCBPcGVyYW5kU3Vic3RpdHV0aW9uIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTE3MDE3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsOSArMzcs
OSBAQAogI2RlZmluZSBERkdfRU5BQkxFKERGR19GRUFUVVJFKSAoZGVmaW5lZCBERkdfRU5BQkxF
XyMjREZHX0ZFQVRVUkUgJiYgREZHX0VOQUJMRV8jI0RGR19GRUFUVVJFKQogCiAvLyBFbWl0IHZh
cmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGlu
ZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgotI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1ZFUkJPU0Ug
MAorI2RlZmluZSBERkdfRU5BQkxFX0RFQlVHX1ZFUkJPU0UgMQogLy8gRW1pdCBkdW1wcyBkdXJp
bmcgcHJvcGFnYXRpb24sIGluIGFkZGl0aW9uIHRvIGp1c3QgYWZ0ZXIuCi0jZGVmaW5lIERGR19F
TkFCTEVfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSAwCisjZGVmaW5lIERGR19FTkFCTEVfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSAxCiAvLyBFbWl0IGxvZ2dpbmcgZm9yIE9TUiBleGl0IHZh
bHVlIHJlY292ZXJpZXMgYXQgZXZlcnkgbm9kZSwgbm90IGp1c3Qgbm9kZXMgdGhhdAogLy8gYWN0
dWFsbHkgaGFzIHNwZWN1bGF0aW9uIGNoZWNrcy4KICNkZWZpbmUgREZHX0VOQUJMRV9WRVJCT1NF
X1ZBTFVFX1JFQ09WRVJJRVMgMApAQCAtNjgsNyArNjgsNyBAQAogLy8gRW1pdCBhIGJyZWFrcG9p
bnQgaW50byB0aGUgc3BlY3VsYXRpb24gZmFpbHVyZSBjb2RlLgogI2RlZmluZSBERkdfRU5BQkxF
X0pJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFIDAKIC8vIExvZyBldmVyeSBzcGVjdWxh
dGlvbiBmYWlsdXJlLgotI2RlZmluZSBERkdfRU5BQkxFX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJ
TFVSRSAwCisjZGVmaW5lIERGR19FTkFCTEVfVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFIDEK
IC8vIERpc2FibGUgdGhlIERGRyBKSVQgd2l0aG91dCBoYXZpbmcgdG8gdG91Y2ggUGxhdGZvcm0u
aAogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBFbmFibGUgT1NSIGVudHJ5
IGZyb20gYmFzZWxpbmUgSklULgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNiArNDAyLDU4IEBAIHZvaWQgR3JhcGg6
OmhhbmRsZVN1Y2Nlc3NvcihWZWN0b3I8QmxvY2sKICAgICBzdWNjZXNzb3ItPm1fcHJlZGVjZXNz
b3JzLmFwcGVuZChibG9ja0luZGV4KTsKIH0KIAordm9pZCBHcmFwaDo6Y29sbGVjdEdhcmJhZ2Uo
KQoreworICAgIC8vIEZpcnN0IHJlc2V0IHRoZSBjb3VudHMgdG8gMCBmb3IgYWxsIG5vZGVzLgor
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKKyAgICAgICAgYXQoaSkuc2V0UmVm
Q291bnQoMCk7CisgICAgCisgICAgLy8gTm93IGZpbmQgdGhlIHJvb3RzOiB0aGUgbm9kZXMgdGhh
dCBhcmUgbXVzdC1nZW5lcmF0ZS4gU2V0IHRoZWlyIHJlZiBjb3VudHMgdG8KKyAgICAvLyAxIGFu
ZCBwdXQgdGhlbSBvbiB0aGUgd29ya2xpc3QuCisgICAgVmVjdG9yPE5vZGVJbmRleCwgMTI4PiB3
b3JrbGlzdDsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXgg
PCBtX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2Nr
ID0gYmxvY2stPnNpemUoKTsgaW5kZXhJbkJsb2NrLS07KSB7CisgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBOb2Rl
JiBub2RlID0gYXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIGlmICghKG5vZGUuZmxhZ3MoKSAm
IE5vZGVNdXN0R2VuZXJhdGUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgbm9kZS5zZXRSZWZDb3VudCgxKTsKKyAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2Rl
SW5kZXgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHdoaWxlICghd29ya2xpc3QuaXNF
bXB0eSgpKSB7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSB3b3JrbGlzdC5sYXN0KCk7
CisgICAgICAgIHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKKyAgICAgICAgTm9kZSYgbm9kZSA9IGF0
KG5vZGVJbmRleCk7CisgICAgICAgIEFTU0VSVChub2RlLnNob3VsZEdlbmVyYXRlKCkpOyAvLyBJ
dCBzaG91bGQgbm90IGJlIG9uIHRoZSB3b3JrbGlzdCB1bmxlc3MgaXQncyByZWYnZWQuCisgICAg
ICAgIGlmIChub2RlLmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBjaGlsZElkeCA9IG5vZGUuZmlyc3RDaGlsZCgpOworICAgICAgICAgICAgICAg
ICBjaGlsZElkeCA8IG5vZGUuZmlyc3RDaGlsZCgpICsgbm9kZS5udW1DaGlsZHJlbigpOworICAg
ICAgICAgICAgICAgICArK2NoaWxkSWR4KSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IGNo
aWxkTm9kZUluZGV4ID0gbV92YXJBcmdDaGlsZHJlbltjaGlsZElkeF0uaW5kZXgoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWF0KGNoaWxkTm9kZUluZGV4KS5yZWYoKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKGNoaWxkTm9k
ZUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChub2RlLmNoaWxkMSgp
KSB7CisgICAgICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkucmVmKCkpCisgICAgICAgICAg
ICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSk7CisgICAgICAgICAg
ICBpZiAobm9kZS5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgIGlmIChhdChub2RlLmNoaWxk
MigpKS5yZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hp
bGQyKCkuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQzKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQzKCkpLnJlZigpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgd29ya2xpc3QuYXBwZW5kKG5vZGUuY2hpbGQzKCkuaW5kZXgoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCiB2
b2lkIEdyYXBoOjpkZXRlcm1pbmVSZWFjaGFiaWxpdHkoKQogewogICAgIFZlY3RvcjxCbG9ja0lu
ZGV4LCAxNj4gd29ya2xpc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OSw2ICsxNTksMTIgQEAgcHVibGljOgogICAgICAgICBu
b2RlLmNoaWxkcmVuLmNoaWxkMygpID0gRWRnZSgpOwogICAgIH0KICAgICAKKyAgICAvLyBDYWxs
IHRoaXMgaWYgeW91J3ZlIG1vZGlmaWVkIHRoZSByZWZlcmVuY2UgY291bnRzIG9mIG5vZGVzIHRo
YXQgZGVhbCB3aXRoCisgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGlzIGlzIG5lY2Vzc2FyeSBi
ZWNhdXNlIGxvY2FsIHZhcmlhYmxlIHJlZmVyZW5jZXMgY2FuIGZvcm0KKyAgICAvLyBjeWNsZXMs
IGFuZCBoZW5jZSByZWZlcmVuY2UgY291bnRpbmcgaXMgbm90IGVub3VnaC4gVGhpcyB3aWxsIHJl
c2V0IHRoZQorICAgIC8vIHJlZmVyZW5jZSBjb3VudHMgYWNjb3JkaW5nIHRvIHJlYWNoYWJpbGl0
eS4KKyAgICB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9D
b25zdGFudChOb2RlSW5kZXggbm9kZUluZGV4LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKICAg
ICB7CiAgICAgICAgIGF0KG5vZGVJbmRleCkuY29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1i
ZXIpOwpAQCAtMzAyLDEyICszMDgsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm1fc3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEubGFzdCgpOwogICAgIH0KICAgICAKLSAgICBFeGVjdXRhYmxl
QmFzZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQogICAgIHsKLSAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICByZXR1cm4gbV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpOwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOworICAgICAgICByZXR1cm4gaW5s
aW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOworICAgIH0KKyAgICAKKyAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZUZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGV4ZWN1dGFibGVGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpOwogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNv
bnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCkBAIC0zMTUsNiArMzI2LDMwIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2Rl
QmxvY2soY29kZU9yaWdpbiwgbV9wcm9maWxlZEJsb2NrKTsKICAgICB9CiAgICAgCisgICAgaW50
IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAg
eworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuIG1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKAorICAgICAgICAg
ICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLT5hcmd1bWVudHNSZWdpc3RlcigpICsKKyAg
ICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICB9
CisgICAgCisgICAgaW50IHVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT51bmNoZWNrZWRBcmd1
bWVudHNSZWdpc3RlcigpOworICAgICAgICAKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgKKyAgICAgICAgICAgIGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2stPnVzZXNBcmd1
bWVudHMoKSkKKyAgICAgICAgICAgIHJldHVybiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSArCisg
ICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAg
fQorICAgIAogICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yKE5vZGVJbmRleCBub2Rl
SW5kZXgpCiAgICAgewogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKQEAgLTQxMCw5
ICs0NDUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJp
Y2FsKG5vZGUpOwogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgcmV0dXJuICFi
eVZhbElzUHVyZShub2RlKTsKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAg
ICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlu
cygKLSAgICAgICAgICAgICAgICBleGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikpOwogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gSWYgYnkgc29tZSBvZGRpdHkgd2UgaGl0IHRoaXMgY2FzZSBp
biByZWxlYXNlIGJ1aWxkIGl0J3Mgc2FmZXIgdG8gaGF2ZSBDU0UgYXNzdW1lIHRoZSB3b3JzdC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxMTcwMTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTI4LDYgKzUyOCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6
CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
OgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIGNhc2UgQ2Fs
bDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMTcw
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
ICAgIC8qIGFzIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbG9jYWwgYWNjZXNzLCBhbmQgdGh1cyBo
YWQgdGhlaXIgb3duIHByb2ZpbGluZy4gKi9cCiAgICAgbWFjcm8oR2V0TG9jYWxVbmxpbmtlZCwg
Tm9kZVJlc3VsdEpTKSBcCiAgICAgXAotICAgIC8qIE1hcmtlciBmb3IgYXJndW1lbnRzIGJlaW5n
IHNldC4gKi9cCisgICAgLyogTWFya2VyIGZvciBhbiBhcmd1bWVudCBiZWluZyBzZXQgYXQgdGhl
IHByb2xvZ3VlIG9mIGEgZnVuY3Rpb24uICovXAogICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwKSBc
CiAgICAgXAogICAgIC8qIEhpbnQgdGhhdCBpbmxpbmluZyBiZWdpbnMgaGVyZS4gTm8gY29kZSBp
cyBnZW5lcmF0ZWQgZm9yIHRoaXMgbm9kZS4gSXQncyBvbmx5ICovXApAQCAtMTk4LDggKzE5OCwx
MCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogc2Vuc2UuICovXAog
ICAgIG1hY3JvKENyZWF0ZUFyZ3VtZW50cywgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oVGVh
ck9mZkFyZ3VtZW50cywgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEdldE15QXJndW1l
bnRzTGVuZ3RoLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJz
V29ybGQpIFwKLSAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCisgICAgbWFjcm8oR2V0TXlBcmd1
bWVudHNMZW5ndGgsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhHZXRNeUFyZ3VtZW50QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
KyAgICBtYWNybyhHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKEdldE15QXJndW1l
bnRCeVZhbFNhZmUsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAogICAgIG1hY3JvKENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgY3JlYXRpbmcgZnVuY3Rpb25zLiAq
L1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEy
Nyw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBib29s
IGhhdmVDb25zdGFudHMgPSBmYWxzZTsKICAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsK
ICAgICBib29sIGhhdmVVSW50MzJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQXJndW1lbnRzID0g
ZmFsc2U7CiAgICAgCiAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwpAQCAtMTg0LDYgKzE4NSwxMCBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICAg
ICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgICAg
IGhhdmVBcmd1bWVudHMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01MDUs
NyArNTEwLDU3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICAvLyAxMykgQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhl
Y3V0ZSBjb3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKKyAgICAvLyAx
MykgQ3JlYXRlIGFyZ3VtZW50cyBpZiBuZWNlc3NhcnkgYW5kIHBsYWNlIHRoZW0gaW50byB0aGUg
YXBwcm9wcmlhdGUgYWxpYXNlZAorICAgIC8vICAgICByZWdpc3RlcnMuCisgICAgCisgICAgaWYg
KGhhdmVBcmd1bWVudHMpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4
aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAg
ICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBBcmd1bWVudHNUaGF0V2VyZU5vdENy
ZWF0ZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpbnQgb3BlcmFu
ZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsKKyAgICAgICAgICAgIC8vIEZpbmQgdGhl
IHJpZ2h0IGlubGluZSBjYWxsIGZyYW1lLgorICAgICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUgPSAwOworICAgICAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1
cnJlbnQgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICAg
ICAgIGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIu
aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPnN0YWNrT2Zm
c2V0IDw9IG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0g
Y3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0gbV9qaXQu
YXJndW1lbnRzUmVnaXN0ZXJGb3IoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJndW1l
bnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgaGF2ZUFyZ3VtZW50cyA9IG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAg
ICAgICAgQXNzZW1ibHlIZWxwZXJzOjpOb25aZXJvLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZUlubGluZWRBcmd1bWVudHMpKSwKKyAgICAgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoCisgICAgICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0
aW9uQ3JlYXRlQXJndW1lbnRzKSksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faml0LmNhbGwoR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0Zvcihhcmd1bWVudHNSZWdpc3RlcikpOworICAgICAgICAgICAgbV9qaXQu
c3RvcmVQdHIoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDAsCisgICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rl
cihhcmd1bWVudHNSZWdpc3RlcikpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGF2ZUFy
Z3VtZW50cy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZv
OjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyAxNCkgQWRqdXN0IHRoZSBvbGQgSklUJ3MgZXhlY3V0ZSBj
b3VudGVyLiBTaW5jZSB3ZSBhcmUgZXhpdGluZyBPU1IsIHdlIGtub3cKICAgICAvLyAgICAgdGhh
dCBhbGwgbmV3IGNhbGxzIGludG8gdGhpcyBjb2RlIHdpbGwgZ28gdG8gdGhlIG5ldyBKSVQsIHNv
IHRoZSBleGVjdXRlCiAgICAgLy8gICAgIGNvdW50ZXIgb25seSBhZmZlY3RzIGNhbGwgZnJhbWVz
IHRoYXQgcGVyZm9ybWVkIE9TUiBleGl0IGFuZCBjYWxsIGZyYW1lcwogICAgIC8vICAgICB0aGF0
IHdlcmUgc3RpbGwgZXhlY3V0aW5nIHRoZSBvbGQgSklUIGF0IHRoZSB0aW1lIG9mIGFub3RoZXIg
Y2FsbCBmcmFtZSdzCkBAIC01NDMsMTIgKzU5OCwxMiBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgCiAgICAgaGFuZGxlRXhpdENvdW50cyhleGl0KTsKICAg
ICAKLSAgICAvLyAxNCkgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJh
dGlvbiBpbnRvIHJlZ1QwLgorICAgIC8vIDE1KSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3Qg
Ynl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCiAgICAgCiAgICAgaWYgKGV4aXQubV9sYXN0
U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICAgICBt
X2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsK
ICAgICAKLSAgICAvLyAxNSkgRml4IGNhbGwgZnJhbWUocykuCisgICAgLy8gMTYpIEZpeCBjYWxs
IGZyYW1lKHMpLgogICAgIAogICAgIEFTU0VSVChtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5n
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIG1faml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygp
KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJG
aWxlOjpDb2RlQmxvY2spKTsKQEAgLTU4NCw3ICs2MzksNyBAQCB2b2lkIE9TUkV4aXRDb21waWxl
cjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgbV9qaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAot
ICAgIC8vIDE2KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUu
CisgICAgLy8gMTcpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29k
ZS4KICAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFzZWxp
bmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIFZlY3RvcjxCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IG1faml0LmRlY29kZWRDb2RlTWFwRm9y
KGJhc2VsaW5lQ29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICNl
bmRpZgogCiAgICAgewotICAgICAgICBBc3NlbWJseUhlbHBlcnMgaml0KGdsb2JhbERhdGEsIGNv
ZGVCbG9jayk7CisgICAgICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
KTsKICAgICAgICAgT1NSRXhpdENvbXBpbGVyIGV4aXRDb21waWxlcihqaXQpOwogICAgICAgICAK
ICAgICAgICAgZXhpdENvbXBpbGVyLmNvbXBpbGVFeGl0KGV4aXQsIHJlY292ZXJ5KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuaAkocmV2
aXNpb24gMTE3MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShERkdf
SklUKQogCiAjaW5jbHVkZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCisjaW5jbHVkZSAiREZHQ0Nh
bGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkRGR09wZXJh
dGlvbnMuaCIKIApAQCAtNDIsNyArNDMsNyBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgT1NS
RXhpdENvbXBpbGVyIHsKIHB1YmxpYzoKLSAgICBPU1JFeGl0Q29tcGlsZXIoQXNzZW1ibHlIZWxw
ZXJzJiBqaXQpCisgICAgT1NSRXhpdENvbXBpbGVyKENDYWxsSGVscGVycyYgaml0KQogICAgICAg
ICA6IG1faml0KGppdCkKICAgICB7CiAgICAgfQpAQCAtNzIsNyArNzMsNyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgaGFuZGxlRXhpdENvdW50cyhjb25zdCBPU1JFeGl0Jik7CiAgICAgCi0g
ICAgQXNzZW1ibHlIZWxwZXJzJiBtX2ppdDsKKyAgICBDQ2FsbEhlbHBlcnMmIG1faml0OwogICAg
IFZlY3Rvcjx1bnNpZ25lZD4gbV9wb2lzb25TY3JhdGNoSW5kaWNlczsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTE3
MDE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyNCwxMyArMTAyNCwyMSBAQCBKU0NlbGwqIERGR19PUEVSQVRJT04g
b3BlcmF0aW9uQ3JlYXRlQWN0CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVh
dGVBcmd1bWVudHMoRXhlY1N0YXRlKiBleGVjKQogewotICAgIHJldHVybiBBcmd1bWVudHM6OmNy
ZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMpOworICAgIC8vIE5COiBUaGlzIG5lZWRzIHRv
IGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBmcmFtZSB0cmFja2luZywgc2lu
Y2UgaXQKKyAgICAvLyBtYXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4aXQsIHdoaWxlIHRoZSBzdGF0
ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXphcnJlLgorICAgIEFyZ3VtZW50cyogcmVzdWx0ID0g
QXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjKTsKKyAgICBBU1NFUlQo
IWV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVJbmxpbmVkQXJndW1lbnRzKAog
ICAgIEV4ZWNTdGF0ZSogZXhlYywgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiB7
Ci0gICAgcmV0dXJuIEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYywg
aW5saW5lQ2FsbEZyYW1lKTsKKyAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmds
eSBjYXJlZnVsIHdpdGggdG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CisgICAgLy8g
bWF5IGJlIGNhbGxlZCBmcm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwg
c3RhY2sgaXMgYml6YXJyZS4KKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYywgaW5saW5lQ2FsbEZyYW1lKTsKKyAgICBBU1NF
UlQoIWV4ZWMtPmdsb2JhbERhdGEoKS5leGNlcHRpb24pOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25UZWFyT2ZmQWN0aXZhdGlvbihFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYWN0aXZhdGlvbkNlbGwsIGludDMyX3QgdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNzAx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzcsMTMgKzQzNywxMyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbDogeworICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNh
ZmU6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUuZ2V0SGVh
cFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ubWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc0ludCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0
TXlBcmd1bWVudHNMZW5ndGg6IHsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNh
ZmU6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihQcmVkaWN0SW50MzIp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTYxNiw3ICs2MTYsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEdldEZsb2F0NjRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBH
ZXRTdHJpbmdMZW5ndGg6CiAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKLSAgICAgICAgY2Fz
ZSBHZXRMb2NhbFVubGlua2VkOiB7CisgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKKyAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWw6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlz
aWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8g
aW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4OTAsMjEgKzM4OTAsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFtX2ppdC5ncmFwaCgpLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFp
bnMoCi0gICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUuY29k
ZU9yaWdpbikpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2Rl
LmNvZGVPcmlnaW4pKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCksIHJlc3Vs
dEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgSklUQ29t
cGlsZXI6Ok5vblplcm8sCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
CisgICAgICAgICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29k
ZU9yaWdpbikpKSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxv
YWRGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
bV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOiB7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVk
ID0gbV9qaXQuYnJhbmNoVGVzdFB0cigKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJv
LApAQCAtMzk0Myw0NiArMzk0NSw1MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwogICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFtX2ppdC5ncmFwaCgpLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFp
bnMoCi0gICAgICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUuY29k
ZU9yaWdpbikpKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBBcmd1
bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5i
cmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOworCisgICAg
ICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdEdQUik7Cisg
ICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCisgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdEdQUiwKKyAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKTsKKyAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQXJndW1lbnRz
RXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3RQdHIoCi0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAot
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikp
KSk7Ci0KLSAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIs
IHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAg
ICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkFib3ZlT3JFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEltbTMyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQu
c2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5u
ZWczMihyZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRH
UFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
Ci0gICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAg
ICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6
OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICgobm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZQotICAgICAgICAgICAgICAgICAgICAgID8gbm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQKLSAgICAgICAgICAgICAgICAgICAgICA6IDApICsgQ2Fs
bEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVy
KSksCi0gICAgICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWln
aHQsCisgICAgICAgICAgICAgICAgKChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCisg
ICAgICAgICAgICAgICAgICA/IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0CisgICAgICAgICAgICAgICAgICA6IDApICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAgICByZXN1
bHRHUFIpOwogCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAKKyAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MDEsNiArODAxLDkgQEAgdm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiAg
ICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKICAgICAgICAgZnByaW50ZihvdXQsICJEb3Vi
bGUiKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6CisgICAgICAg
IGZwcmludGYob3V0LCAiQXJndW1lbnRzIik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSGF2
ZU5vZGU6CiAgICAgICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7CiAg
ICAgICAgIGJyZWFrOwpAQCAtOTg2LDYgKzk4OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3Vy
Y2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCku
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAgICAg
ICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7Cisg
ICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQXJn
dW1lbnRzQWxpYXMoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2Uo
QXJndW1lbnRzU291cmNlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV92YXJpYWJsZXNb
aV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwogICAgIH0KQEAgLTEzNDUsMTMgKzEzNTAsMTggQEAg
VmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAgICAgICAKICAgICBj
YXNlIERvdWJsZUluUmVnaXN0ZXJGaWxlOgogICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
YWxyZWFkeUluUmVnaXN0ZXJGaWxlQXNVbmJveGVkRG91YmxlKCk7CisgICAgICAgIAorICAgIGNh
c2UgQXJndW1lbnRzU291cmNlOgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YXJndW1l
bnRzVGhhdFdlcmVOb3RDcmVhdGVkKCk7CiAKICAgICBjYXNlIEhhdmVOb2RlOiB7CiAgICAgICAg
IGlmIChpc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKICAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCh2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJj
ZS5ub2RlSW5kZXgoKSkpOwotICAgIAorICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9
ICZhdCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSk7CiAgICAgICAgIGlmICghbm9kZVB0ci0+c2hv
dWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgPT0gQ3JlYXRl
QXJndW1lbnRzKQorICAgICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojphcmd1bWVu
dHNUaGF0V2VyZU5vdENyZWF0ZWQoKTsKICAgICAgICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5
IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQs
CiAgICAgICAgICAgICAvLyBldmVyLiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhlIEdD
IGhhcHB5IGFmdGVyIHRoZSBPU1IuCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDYgKzU2LDcgQEAgZW51bSBWYWx1ZVNvdXJjZUtpbmQgewogICAgIENlbGxJblJlZ2lzdGVyRmls
ZSwKICAgICBCb29sZWFuSW5SZWdpc3RlckZpbGUsCiAgICAgRG91YmxlSW5SZWdpc3RlckZpbGUs
CisgICAgQXJndW1lbnRzU291cmNlLAogICAgIEhhdmVOb2RlCiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlz
aW9uIDExNzAxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgICAg
ICAsIG1fYXJndW1lbnRBd2FyZVByZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgICAgICwgbV9m
bGFncygwKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRT
dGF0ZSkKKyAgICAgICAgLCBtX2lzQ2FwdHVyZWQoZmFsc2UpCisgICAgICAgICwgbV9pc0FyZ3Vt
ZW50c0FsaWFzKGZhbHNlKQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAg
LTU4LDYgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgLCBt
X2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCiAgICAgICAgICwgbV9p
c0NhcHR1cmVkKGlzQ2FwdHVyZWQpCisgICAgICAgICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNl
KQogICAgIHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTg3LDYgKzkwLDIwIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1faXNDYXB0dXJlZDsKICAgICB9CiAgICAgCisgICAg
Ym9vbCBtZXJnZUlzQXJndW1lbnRzQWxpYXMoYm9vbCBpc0FyZ3VtZW50c0FsaWFzKQorICAgIHsK
KyAgICAgICAgYm9vbCBuZXdJc0FyZ3VtZW50c0FsaWFzID0gbV9pc0FyZ3VtZW50c0FsaWFzIHwg
aXNBcmd1bWVudHNBbGlhczsKKyAgICAgICAgaWYgKG5ld0lzQXJndW1lbnRzQWxpYXMgPT0gbV9p
c0FyZ3VtZW50c0FsaWFzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2lz
QXJndW1lbnRzQWxpYXMgPSBuZXdJc0FyZ3VtZW50c0FsaWFzOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0FyZ3VtZW50c0FsaWFzKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2lzQXJndW1lbnRzQWxpYXM7CisgICAgfQorICAgIAogICAgIGJvb2wgcHJl
ZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewogICAgICAgICBWYXJpYWJsZUFj
Y2Vzc0RhdGEqIHNlbGYgPSBmaW5kKCk7CkBAIC0yMzcsNiArMjU0LDcgQEAgcHJpdmF0ZToKICAg
ICBEb3VibGVGb3JtYXRTdGF0ZSBtX2RvdWJsZUZvcm1hdFN0YXRlOwogICAgIAogICAgIGJvb2wg
bV9pc0NhcHR1cmVkOworICAgIGJvb2wgbV9pc0FyZ3VtZW50c0FsaWFzOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCShyZXZpc2lvbiAxMTcwMTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTY2LDcgKzE1NjYsNyBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2FyZ3VtZW50X2J5X3ZhCiAgICAgSklUU3R1YkNhbGwgc3R1
YkNhbGwodGhpcywgY3RpX29wX2dldF9ieV92YWwpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KGFyZ3VtZW50cywgcmVnVDIpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCBy
ZWdUMik7Ci0gICAgc3R1YkNhbGwuY2FsbChkc3QpOworICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFs
dWVQcm9maWxpbmcoZHN0KTsKIH0KIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142563</attachid>
            <date>2012-05-17 15:06:08 -0700</date>
            <delta_ts>2012-05-17 18:45:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>aliased_arguments_patch_5.diff</filename>
            <type>text/plain</type>
            <size>68306</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NTAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTA1LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhbGlhc2VkIHVzZXMgb2YgdGhlIEFyZ3VtZW50cyBvYmplY3Qg
b2YgdGhlIGN1cnJlbnQgY2FsbCBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODY1NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFBlcmZvcm1zIG11c3QtYWxpYXMgYW5kIGVzY2FwZSBh
bmFseXNpcyBvbiB1c2VzIG9mIENyZWF0ZUFyZ3VtZW50cywgYW5kIGlmCisgICAgICAgIGEgdmFy
aWFibGUgaXMgbXVzdC1hbGlhc2VkIHRvIENyZWF0ZUFyZ3VtZW50cyBhbmQgZG9lcyBub3QgZXNj
YXBlLCB0aGVuIHdlCisgICAgICAgIHR1cm4gYWxsIHVzZXMgb2YgdGhhdCB2YXJpYWJsZSBpbnRv
IGRpcmVjdCBhcmd1bWVudHMgYWNjZXNzZXMuCisgICAgICAgIAorICAgICAgICAzNiUgc3BlZWQt
dXAgb24gVjgvZWFybGV5IGxlYWRpbmcgdG8gYSAyLjMlIHNwZWVkLXVwIG92ZXJhbGwgaW4gVjgu
CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvVmFs
dWVSZWNvdmVyeS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojphcmd1bWVudHNUaGF0
V2VyZU5vdENyZWF0ZWQpOgorICAgICAgICAoVmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6
OlZhbHVlUmVjb3Zlcnk6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAg
KiBkZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoQWRqYWNlbmN5TGlzdCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6cmVtb3ZlRWRnZUZyb21CYWcpOgorICAgICAg
ICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAoQXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZSk6CisgICAgICAgIChK
U0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJhZEFyZ3VtZW50
c1VzZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6
Om9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVBcmd1bWVudHNSZWZlcmVuY2lu
Z1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6YXJndW1lbnRzUmVnaXN0ZXJGb3IpOgor
ICAgICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhp
UmVmZXJlbmNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpjb2xsZWN0R2FyYmFnZSk6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRm
Zy9ERkdHcmFwaC5oOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpleGVjdXRhYmxlRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YXJndW1lbnRzUmVn
aXN0ZXJGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp1bmNoZWNrZWRBcmd1bWVudHNS
ZWdpc3RlckZvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmNsb2JiZXJzV29ybGQpOgor
ICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVh
cFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVy
OjpPU1JFeGl0Q29tcGlsZXIpOgorICAgICAgICAoT1NSRXhpdENvbXBpbGVyKToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3IpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nl
c3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om1lcmdlSXNB
cmd1bWVudHNBbGlhcyk6CisgICAgICAgIChWYXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6aXNBcmd1bWVudHNBbGlhcyk6CisgICAgICAg
ICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dl
dF9hcmd1bWVudF9ieV92YWwpOgorCiAyMDEyLTA1LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBoYXZlIHNwYXJzZSBjb25kaXRpb25hbCBj
b25zdGFudCBwcm9wYWdhdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNiArNDQ3LDEyIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKHVzZXNBcmd1bWVudHMoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNSZWdpc3RlcjsKICAgICAgICAgfQorICAgICAg
ICBpbnQgdW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIXVzZXNBcmd1bWVudHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSW52YWxpZFZp
cnR1YWxSZWdpc3RlcjsKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHNSZWdpc3RlcigpOwor
ICAgICAgICB9CiAgICAgICAgIHZvaWQgc2V0QWN0aXZhdGlvblJlZ2lzdGVyKGludCBhY3RpdmF0
aW9uUmVnaXN0ZXIpCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fYWN0aXZhdGlvblJlZ2lzdGVy
ID0gYWN0aXZhdGlvblJlZ2lzdGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUmVjb3ZlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw4IEBAIGVudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CiAgICAgRG91YmxlRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUsCiAgICAgQ2VsbERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAog
ICAgIEJvb2xlYW5EaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGFuIEFyZ3Vt
ZW50cyBvYmplY3QuCisgICAgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkLAogICAgIC8vIEl0
J3MgYSBjb25zdGFudC4KICAgICBDb25zdGFudCwKICAgICAvLyBEb24ndCBrbm93IGhvdyB0byBy
ZWNvdmVyIGl0LgpAQCAtMTkwLDYgKzE5MiwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFyZ3VtZW50c1Ro
YXRXZXJlTm90Q3JlYXRlZCgpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBWYWx1ZVJlY292ZXJ5
VGVjaG5pcXVlIHRlY2huaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlOyB9CiAgICAg
CiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWUgPT0gQ29u
c3RhbnQ7IH0KQEAgLTMxNSw2ICszMjQsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQm9vbGVh
bkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgogICAgICAgICAgICAgZnByaW50ZihvdXQsICIqYm9v
bCglZCkiLCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAgICBmcHJpbnRmKG91
dCwgImFyZ3VtZW50cyIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29uc3Rh
bnQ6CiAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIlslc10iLCBjb25zdGFudCgpLmRlc2NyaXB0
aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwOTUsMTkgKzEwOTUsMTggQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
c0xlbmd0aDoKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50
c0VzY2FwZWQuY29udGFpbnMoCi0gICAgICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxlRm9y
KG5vZGUuY29kZU9yaWdpbikpKSB7Ci0gICAgICAgICAgICAvLyBXZSBrbm93IHRoYXQgdGhpcyBl
eGVjdXRhYmxlIGRvZXMgbm90IGVzY2FwZSBpdHMgYXJndW1lbnRzLCBzbyB3ZSBjYW4gb3B0aW1p
emUKLSAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlz
IG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0YW50IGZvbGRpbmcKLSAgICAgICAgICAgIC8v
IG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlz
IGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCi0gICAgICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRo
ZXIgb3B0aW1pemF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgotICAgICAgICAgICAgaWYgKG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7Cisg
ICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0
cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQorICAgICAgICAvLyB0aGUgYXJndW1lbnRz
IGEgYml0LiBOb3RlIHRoYXQgdGhpcyBpcyBub3Qgc3VmZmljaWVudCB0byBmb3JjZSBjb25zdGFu
dCBmb2xkaW5nCisgICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBiZWNhdXNlIEdl
dE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCisgICAgICAgIC8v
IFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCisgICAg
ICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KGpzTnVtYmVyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZToK
ICAgICAgICAgLy8gVGhpcyBwb3RlbnRpYWxseSBjbG9iYmVycyBhbGwgc3RydWN0dXJlcyBpZiB0
aGUgYXJndW1lbnRzIG9iamVjdCBoYWQgYSBnZXR0ZXIKICAgICAgICAgLy8gaW5zdGFsbGVkIG9u
IHRoZSBsZW5ndGggcHJvcGVydHkuCiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5C
bG9jayk7CkBAIC0xMTE3LDE1ICsxMTE2LDE0IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0
ZSh1bnNpZ25lZCBpbmQKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOgotICAgICAgICBpZiAoIW1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJn
dW1lbnRzRXNjYXBlZC5jb250YWlucygKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFi
bGVGb3Iobm9kZS5jb2RlT3JpZ2luKSkpIHsKLSAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0
aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBv
cHRpbWl6ZQotICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRo
aXMgZW5kcyB1cCBiZWluZyBmdXJ0aGVyIG9wdGltaXplZCBieSB0aGUKLSAgICAgICAgICAgIC8v
IEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCi0gICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwotICAgICAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IC8vIFdlIGtub3cgdGhhdCB0aGlzIGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1
bWVudHMsIHNvIHdlIGNhbiBvcHRpbWl6ZQorICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0
LiBOb3RlIHRoYXQgdGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQor
ICAgICAgICAvLyBBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLgorICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2Ji
ZXJzIGFsbCBzdHJ1Y3R1cmVzIGlmIHRoZSBwcm9wZXJ0eSB3ZSdyZSBhY2Nlc3NpbmcgaGFzCiAg
ICAgICAgIC8vIGEgZ2V0dGVyLiBXZSBkb24ndCBzcGVjdWxhdGUgYWdhaW5zdCB0aGlzLgogICAg
ICAgICBjbG9iYmVyU3RydWN0dXJlcyhpbmRleEluQmxvY2spOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHJldmlzaW9uIDExNzM3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWRqYWNlbmN5TGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjgsNiArMTI4LDE1IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICBpbml0aWFs
aXplKCk7CiAgICAgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBpZiB5b3Ugd2lzaCB0byByZW1v
dmUgYW4gZWRnZSBhbmQgdGhlIG5vZGUgdHJlYXRzIHRoZSBsaXN0IG9mIGNoaWxkcmVuCisgICAg
Ly8gYXMgYSAiYmFnIiAtIGFuIHVub3JkZXJlZCBzZXQgd2hlcmUgdGhlIGluZGV4IG9mIHRoZSBl
ZGdlIGRvZXMgbm90IG1hdHRlci4KKyAgICB2b2lkIHJlbW92ZUVkZ2VGcm9tQmFnKHVuc2lnbmVk
IGVkZ2VJbmRleCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVkZ2VJbmRleDsg
aSA8IFNpemUgLSAxOyArK2kpCisgICAgICAgICAgICBzZXRDaGlsZChpLCBjaGlsZChpICsgMSkp
OworICAgICAgICBzZXRDaGlsZChTaXplIC0gMSwgRWRnZSgpKTsKKyAgICB9CiAKICAgICB1bnNp
Z25lZCBmaXJzdENoaWxkKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkg
KzM0LDg0IEBACiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhh
c2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCituYW1lc3BhY2UgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE51bGxh
YmxlSGFzaFRyYWl0cyA6IHB1YmxpYyBIYXNoVHJhaXRzPFQ+IHsKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7CisgICAgc3RhdGljIFQgZW1wdHlWYWx1ZSgp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VD4oMSk7IH0KK307CisKK3N0cnVjdCBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEgeworICAgIElubGluZUNhbGxGcmFtZSogY2FsbENvbnRleHQ7CisgICAg
Ym9vbCBjYWxsQ29udGV4dFNldDsKKyAgICBib29sIG11bHRpcGxlQ2FsbENvbnRleHRzOworICAg
IAorICAgIGJvb2wgYXNzaWduZWRGcm9tQXJndW1lbnRzOworICAgIGJvb2wgYXNzaWduZWRGcm9t
TWFueVRoaW5nczsKKyAgICAKKyAgICBib29sIGVzY2FwZXM7CisgICAgCisgICAgQXJndW1lbnRz
QWxpYXNpbmdEYXRhKCkKKyAgICAgICAgOiBjYWxsQ29udGV4dCgwKQorICAgICAgICAsIGNhbGxD
b250ZXh0U2V0KGZhbHNlKQorICAgICAgICAsIG11bHRpcGxlQ2FsbENvbnRleHRzKGZhbHNlKQor
ICAgICAgICAsIGFzc2lnbmVkRnJvbUFyZ3VtZW50cyhmYWxzZSkKKyAgICAgICAgLCBhc3NpZ25l
ZEZyb21NYW55VGhpbmdzKGZhbHNlKQorICAgICAgICAsIGVzY2FwZXMoZmFsc2UpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICB2b2lkIG1lcmdlQ2FsbENvbnRleHQoSW5saW5lQ2FsbEZyYW1lKiBu
ZXdDYWxsQ29udGV4dCkKKyAgICB7CisgICAgICAgIGlmIChtdWx0aXBsZUNhbGxDb250ZXh0cykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghY2FsbENvbnRleHRT
ZXQpIHsKKyAgICAgICAgICAgIGNhbGxDb250ZXh0ID0gbmV3Q2FsbENvbnRleHQ7CisgICAgICAg
ICAgICBjYWxsQ29udGV4dFNldCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGlmIChjYWxsQ29udGV4dCA9PSBuZXdDYWxsQ29udGV4dCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG11bHRpcGxlQ2FsbENvbnRl
eHRzID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjYWxsQ29udGV4dElzVmFsaWQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxDb250ZXh0U2V0ICYmICFtdWx0aXBsZUNhbGxDb250
ZXh0czsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZUFyZ3VtZW50c0Fzc2lnbm1lbnQoKQor
ICAgIHsKKyAgICAgICAgYXNzaWduZWRGcm9tQXJndW1lbnRzID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBtZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKQorICAgIHsKKyAgICAgICAg
YXNzaWduZWRGcm9tTWFueVRoaW5ncyA9IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgYXJn
dW1lbnRzQXNzaWdubWVudElzVmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzc2lnbmVk
RnJvbUFyZ3VtZW50cyAmJiAhYXNzaWduZWRGcm9tTWFueVRoaW5nczsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc1ZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsQ29udGV4dElzVmFs
aWQoKSAmJiBhcmd1bWVudHNBc3NpZ25tZW50SXNWYWxpZCgpICYmICFlc2NhcGVzOworICAgIH0K
K307CisKK30gLy8gZW5kIGFub255bW91cyBuYW1lc3BhY2UKKwogY2xhc3MgQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6CiAgICAgQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZShHcmFwaCYgZ3JhcGgpCkBAIC01MSw2ICsxMjYsMjUyIEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAK
KyAgICAgICAgLy8gUmVjb3JkIHdoaWNoIGFyZ3VtZW50cyBhcmUga25vd24gdG8gZXNjYXBlIG5v
IG1hdHRlciB3aGF0LgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+aW5s
aW5lQ2FsbEZyYW1lcygpLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSAmY29kZUJsb2NrKCktPmlubGluZUNhbGxGcmFtZXMoKVtp
XTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0Vz
Y2FwZWQuY29udGFpbnMoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZv
cihpbmxpbmVDYWxsRnJhbWUpKSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMu
YWRkKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIENy
ZWF0ZSBkYXRhIGZvciB2YXJpYWJsZSBhY2Nlc3MgZGF0YXMgdGhhdCB3ZSB3aWxsIHdhbnQgdG8g
YW5hbHl6ZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3ZhcmlhYmxlQWNj
ZXNzRGF0YS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07Cisg
ICAgICAgICAgICBpZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNSb290KCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmFkZCh2YXJpYWJsZUFjY2Vzc0RhdGEsIEFyZ3VtZW50c0FsaWFzaW5nRGF0
YSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmlndXJlIG91dCB3aGljaCB2
YXJpYWJsZXMgYWxpYXMgdGhlIGFyZ3VtZW50cyBhbmQgbm90aGluZyBlbHNlLCBhbmQgYXJlCisg
ICAgICAgIC8vIHVzZWQgb25seSBmb3IgR2V0QnlWYWwgYW5kIEdldEFyZ3VtZW50c0xlbmd0aCBh
Y2Nlc3Nlcy4gQXQgdGhlIHNhbWUgdGltZSwKKyAgICAgICAgLy8gaWRlbnRpZnkgdXNlcyBvZiBD
cmVhdGVBcmd1bWVudHMgdGhhdCBhcmUgbm90IGNvbnNpc3RlbnQgd2l0aCB0aGUgYXJndW1lbnRz
CisgICAgICAgIC8vIGJlaW5nIGFsaWFzZWQgb25seSB0byB2YXJpYWJsZXMgdGhhdCBzYXRpc2Z5
IHRoZXNlIGNvbnN0cmFpbnRzLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9
IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7
CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAg
ICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9y
ZSB0aGlzIG9wLiBJZiB3ZSBzZWUgYSBsb25lIENyZWF0ZUFyZ3VtZW50cyB0aGVuIHdlIHdhbnQg
dG8KKyAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxldGVseSBpZ25vcmUgaXQgYmVjYXVzZToK
KyAgICAgICAgICAgICAgICAgICAgLy8gMSkgVGhlIGRlZmF1bHQgd291bGQgYmUgdG8gc2VlIHRo
YXQgdGhlIGNoaWxkIGlzIGEgR2V0TG9jYWwgb24gdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgIGFyZ3VtZW50cyByZWdpc3RlciBhbmQgY29uY2x1ZGUgdGhhdCB3ZSBoYXZlIGFuIGFyZ3Vt
ZW50cyBlc2NhcGUuCisgICAgICAgICAgICAgICAgICAgIC8vIDIpIFRoZSBmYWN0IHRoYXQgYSBD
cmVhdGVBcmd1bWVudHMgZXhpc3RzIGRvZXMgbm90IG1lYW4gdGhhdCBpdAorICAgICAgICAgICAg
ICAgICAgICAvLyAgICB3aWxsIGNvbnRpbnVlIHRvIGV4aXN0IGFmdGVyIHdlJ3JlIGRvbmUgd2l0
aCB0aGlzIHBoYXNlLiBBcyBmYXIKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgYXMgdGhpcyBw
aGFzZSBpcyBjb25jZXJuZWQsIGEgQ3JlYXRlQXJndW1lbnRzIG9ubHkgImV4aXN0cyIgaWYgaXQK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgaXMgdXNlZCBpbiBhIG1hbm5lciB0aGF0IG5lY2Vz
c2l0YXRlcyBpdHMgZXhpc3RhbmNlLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0gbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBTZXRM
b2NhbCBrbm93cyB0aGF0IGlmIGl0J3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdmFy
aWFibGUgdGhhdCB3ZSB0aGluayBpcyBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMsIHRoZW4gaXQK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heSBlc2NhcGUgYXQgdGhpcyBwb2ludC4gSW4g
ZnV0dXJlLCB3ZSBjb3VsZCB0cmFjayB0cmFuc2l0aXZlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbGlhc2luZy4gQnV0IG5vdCB5ZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0
IGlmIGl0J3MgYSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8KKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMsIHRoYXQgd2Uga25vdyB0aGF0IGl0IG1p
Z2h0IGFjdHVhbGx5IG5vdCBiZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0Fs
aWFzaW5nRGF0YSYgZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVu
dHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEubWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIg
PQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLmNvZGVPcmlnaW4pOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVn
aXN0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSA9PSBzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2NyZWF0ZXNBcmd1bWVudHMuYWRkKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNl
LmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50
c0FsaWFzaW5nRGF0YSYgZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAg
ICAgICAgICBkYXRhLm1lcmdlQXJndW1lbnRzQXNzaWdubWVudCgpOworICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdmFyaWFibGUncyB1c2VzIGFyZSBpbiB0aGUg
c2FtZSBjb250ZXh0IGFzCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgaXQg
aXMgYWxpYXNpbmcuCisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlh
c2luZ0RhdGEmIGRhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlh
c2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nl
c3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGZsdXNoIHRo
ZW4gYnkgZGVmaW5pdGlvbiBpdCBlc2NhcGVzLgorICAgICAgICAgICAgICAgICAgICBkYXRhLmVz
Y2FwZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1l
bnQ6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFj
Y2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRh
JiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcuZmlu
ZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVyZ2VOb25Bcmd1bWVudHNBc3NpZ25tZW50KCk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEu
bWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFt
X2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAg
ICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhub2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aW9uYWJsZUFycmF5UHJlZGlj
dGlvbihtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8ICFtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMo
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlQXJndW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIElmIGFyZ3VtZW50cyBpcyB1c2VkIGFzIGFuIGluZGV4LCB0aGVu
IGl0J3MgYW4gZXNjYXBpbmcgdXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhhdCdz
IHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHNpbmNlIGl0IHdvdWxkCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpbXBseSB0aGF0IHRoZSBhcmd1bWVudHMgd2VyZSBwcmVk
aWN0ZWQgaW50ZWdlciwgYnV0IGl0J3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdvb2Qg
dG8gYmUgZGVmZW5zaXZlIGFuZCB0aG9yb3VnaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9i
c2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNV
c2VzKG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0QXJndW1lbnRz
TGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uo
bm9kZSwgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMobm9kZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyB3ZSBrbm93IHdoaWNoIHZhcmlhYmxlcyBh
cmUgYWxpYXNlZCB0byBhcmd1bWVudHMuIEJ1dCBpZiBhbnkgb2YgdGhlbSBhcmUKKyAgICAgICAg
Ly8gZm91bmQgdG8gaGF2ZSBlc2NhcGVkLCBvciB3ZXJlIG90aGVyd2lzZSBpbnZhbGlkYXRlZCwg
dGhlbiB3ZSBuZWVkIHRvIG1hcmsKKyAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhcyByZXF1aXJp
bmcgY3JlYXRpb24uIFRoaXMgaXMgYSBwcm9wZXJ0eSBvZiBTZXRMb2NhbHMgdG8KKyAgICAgICAg
Ly8gdmFyaWFibGVzIHRoYXQgYXJlIG5laXRoZXIgdGhlIGNvcnJlY3QgYXJndW1lbnRzIHJlZ2lz
dGVyIG5vciBhcmUgbWFya2VkIGFzCisgICAgICAgIC8vIGJlaW5nIGFyZ3VtZW50cy1hbGlhc2Vk
LgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+
c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZS5vcCgpICE9IFNldExvY2FsKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldOworICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEo
KTsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNhcHR1cmVkIGNhc2Ugd291bGQgaGF2ZSBh
bHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8g
cHJldmlvdXMgcGFzcy4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFyZ3VtZW50c0FsaWFz
aW5nRGF0YSYgZGF0YSA9CisgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgaWYgKGRh
dGEuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKHNvdXJjZS5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgCisjaWYgREZHX0VOQUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBk
YXRhTG9nKCJBcmd1bWVudHMgYWxpYXNpbmcgc3RhdGVzOlxuIik7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9
ICZtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhW2ldOworICAgICAgICAgICAgaWYgKCF2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzUm9vdCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgZGF0YUxvZygiICAgciVkKCVzKTogIiwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2Nh
bCgpLCBtX2dyYXBoLm5hbWVPZlZhcmlhYmxlQWNjZXNzRGF0YSh2YXJpYWJsZUFjY2Vzc0RhdGEp
KTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJDYXB0dXJlZCIpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAg
ICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNl
Y29uZDsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoZGF0YS5jYWxsQ29udGV4dElzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZpcnN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiSGF2ZSBDYWxsIENvbnRleHQ6ICVwIiwgZGF0YS5jYWxs
Q29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGRhdGEuY2FsbENvbnRl
eHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiIChEb2VzIE5vdCBDcmVhdGUg
QXJndW1lbnRzKSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZGF0
YS5hcmd1bWVudHNBc3NpZ25tZW50SXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghZmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJBcmd1bWVudHMgQXNzaWdubWVudCBJcyBWYWxpZCIpOwor
ICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIWRhdGEuZXNjYXBlcykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWZpcnN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRG9lcyBOb3QgRXNjYXBlIik7CisgICAgICAgICAgICAg
ICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmICghZmlyc3QpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiwgIik7CisgICAgICAg
ICAgICAgICAgaWYgKGRhdGEuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICht
X2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoZGF0YS5jYWxsQ29udGV4dCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJWQUxJRCIpOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJTlZBTElEIChkdWUgdG8gYXJndW1l
bnQgY3JlYXRpb24pIik7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIklOVkFMSUQgKGR1ZSB0byBiYWQgdmFyaWFibGUgdXNlKSIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICAgICAgfQorI2VuZGlmCisg
ICAgICAgIAogICAgICAgICBJbnNlcnRpb25TZXQ8Tm9kZUluZGV4PiBpbnNlcnRpb25TZXQ7CiAg
ICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5k
ZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CkBAIC02MCwxMSAr
MzgxLDEyOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAg
ICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOwogICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Cisg
ICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0
aDogewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VB
cmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkKKyAgICAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAh
PSBDcmVhdGVBcmd1bWVudHMpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdG9yZSBp
bnRvIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIgZm9yIGFuIElubGluZUNhbGxGcmFtZSoKKyAgICAg
ICAgICAgICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBjcmVhdGUgYXJndW1lbnRzLCB0aGVuIGtp
bGwgaXQuCisgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGlmICgodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCisgICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cikpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpbmQgdGhlIEZsdXNoLiBJdCBzaG91bGQgYmUgdGhlIG5leHQgaW5zdHJ1
Y3Rpb24uCisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaCA9IG1fZ3JhcGhbYmxv
Y2stPmF0KGluZGV4SW5CbG9jayArIDEpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChmbHVzaC5vcCgpID09IEZsdXNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChm
bHVzaC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLmNoaWxkMSgpID09IG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBCZSBkZWZlbnNpdmUgaW4gcmVsZWFzZSBtb2RlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoLm9wKCkgIT0gRmx1c2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBmbHVzaC52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJp
YWJsZUFjY2Vzc0RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmbHVzaC5jaGls
ZDEoKSAhPSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmbHVzaC5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKGZsdXNo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoLnNldFJlZkNvdW50KDApOworICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3RvcmUgaW50byBhIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdGhhdCBpcyBtYXJrZWQgYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1l
bnRzIGFsaWFzaW5nIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUqIHRoYXQgZG9lcyBub3QgY3JlYXRl
CisgICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cywgdGhlbiBmbGFnIHRoZSBWYXJpYWJs
ZUFjY2Vzc0RhdGEgYXMgYmVpbmcgYW4KKyAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRz
LWFsaWFzZWQuIFRoaXMnbGwgbGV0IHRoZSBPU1IgZXhpdCBtYWNoaW5lcnkgZG8gdGhlIHJpZ2h0
CisgICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90ZSBhbHNvIHRoYXQgdGhlIFNldExv
Y2FsIHNob3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCisgICAgICAgICAgICAgICAgICAgIC8v
IHdlIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJsZSB3aXRoIEdldE15QXJndW1lbnRz
TGVuZ3RoIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBHZXRNeUFyZ3VtZW50QnlWYWwuCisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVB
Y2Nlc3NEYXRhKS0+c2Vjb25kLmlzVmFsaWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYg
IW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bWVyZ2VJc0FyZ3VtZW50c0FsaWFzKHRydWUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b206IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyBoaWdo
bHkgbGlrZWx5IHRoYXQgd2Ugd2lsbCBoYXZlIGEgUGhhbnRvbSByZWZlcmVuY2luZyBlaXRoZXIK
KyAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlQXJndW1lbnRzLCBvciBhIGxvY2FsIG9wIGZv
ciB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLCBvciBhCisgICAgICAgICAgICAgICAgICAgIC8vIGxv
Y2FsIG9wIGZvciBhbiBhcmd1bWVudHMtYWxpYXNlZCB2YXJpYWJsZS4gSW4gYW55IG9mIHRob3Nl
IGNhc2VzLAorICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgcmVtb3RlIHRoZSBwaGFu
dG9tIHJlZmVyZW5jZSwgc2luY2U6CisgICAgICAgICAgICAgICAgICAgIC8vIDEpIFBoYW50b21z
IG9ubHkgZXhpc3QgdG8gYWlkIE9TUiBleGl0LiBCdXQgYXJndW1lbnRzIHNpbXBsaWZpY2F0aW9u
CisgICAgICAgICAgICAgICAgICAgIC8vICAgIGhhcyBpdHMgb3duIE9TUiBleGl0IHN0b3J5LCB3
aGljaCBpcyB0byBpbmZvcm0gT1NSIGV4aXQgdG8gcmVpZnkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgdGhlIGFyZ3VtZW50cyBhcyBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgICAgIC8v
IDIpIFRoZSBQaGFudG9tIG1heSBrZWVwIHRoZSBDcmVhdGVBcmd1bWVudHMgbm9kZSBhbGl2ZSwg
d2hpY2ggaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgcHJlY2lzZWx5IHdoYXQgd2UgZG9u
J3Qgd2FudC4KKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEFk
amFjZW5jeUxpc3Q6OlNpemU7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUFy
Z3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFu
b2RlLnByZWRpY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9n
cmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICgh
aXNBY3Rpb25hYmxlQXJyYXlQcmVkaWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGlj
dGlvbigpKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gYmUgc2ltcGxpZmllZCB0byBHZXRNeUFyZ3VtZW50
QnlWYWwgaWYgd2Uga25vdyB0aGF0CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBzYXRp
c2ZpZXMgZWl0aGVyIGNvbmRpdGlvbiAoMSkgb3IgKDIpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gMSkgSXRzIGZpcnN0IGNoaWxkIGlzIGEgdmFsaWQgQXJndW1lbnRzQWxpYXNpbmdEYXRh
IGFuZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIElubGluZUNhbGxGcmFtZSog
aXMgbm90IG1hcmtlZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAyKSBJdHMgZmlyc3QgY2hpbGQgaXMgQ3JlYXRlQXJndW1lbnRzIGFuZCBpdHMgSW5s
aW5lQ2FsbEZyYW1lKgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgaXMgbm90IG1hcmtl
ZCBhcyBjcmVhdGluZyBhcmd1bWVudHMuCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxk
MSgpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZGVyZWYobm9kZS5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmNoaWxkMSgp
ID0gbm9kZS5jaGlsZHJlbi5jaGlsZDIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUu
Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC0taW5k
ZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub3cgdGhhdCBp
dCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IEdldEFyZ3VtZW50c0xlbmd0aDogeworICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09w
dGltaXplKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0pKQorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKG5vZGUuY2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVu
LmNoaWxkMSgpID0gRWRnZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVm
YXVsdEZsYWdzKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3Jj
ZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1l
bnRzTGVuZ3RoLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVu
dHNMZW5ndGg6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3AoR2V0TXlBcmd1bWVudHNMZW5ndGgp
OworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIApAQCAtODIsMTAgKzUyMSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6IHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlucygK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFibGVGb3Iobm9kZS5j
b2RlT3JpZ2luKSkpCisgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Cisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
Lm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5vcCgpID09IEdldE15QXJndW1lbnRCeVZhbFNhZmUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUuc2V0T3AoR2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0uaGFzQ29uc3RhbnQoKSkKQEAgLTEzOCw4ICs1ODMsMTQ5IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCpibG9jayk7CiAgICAgICAgIH0K
ICAgICAgICAgCisgICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAgbV9ncmFwaC5jb2xs
ZWN0R2FyYmFnZSgpOworICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CiAgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBIYXNoU2V0PElubGluZUNhbGxGcmFtZSosCisgICAgICAgICAg
ICBEZWZhdWx0SGFzaDxJbmxpbmVDYWxsRnJhbWUqPjo6SGFzaCwKKyAgICAgICAgICAgIE51bGxh
YmxlSGFzaFRyYWl0czxJbmxpbmVDYWxsRnJhbWUqPiA+IG1fY3JlYXRlc0FyZ3VtZW50czsKKyAg
ICBIYXNoTWFwPFZhcmlhYmxlQWNjZXNzRGF0YSosIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSwKKyAg
ICAgICAgICAgIERlZmF1bHRIYXNoPFZhcmlhYmxlQWNjZXNzRGF0YSo+OjpIYXNoLAorICAgICAg
ICAgICAgTnVsbGFibGVIYXNoVHJhaXRzPFZhcmlhYmxlQWNjZXNzRGF0YSo+ID4gbV9hcmd1bWVu
dHNBbGlhc2luZzsKKworICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBpZiAoIWVkZ2UpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07CisgICAgICAgIGlmIChjaGls
ZC5vcCgpICE9IEdldExvY2FsKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgaWYgKGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rl
ckZvcihjaGlsZC5jb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRz
LmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGlm
ICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgIGRh
dGEuZXNjYXBlcyA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3Vt
ZW50c1VzZXMoTm9kZSYgbm9kZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1f
Z3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCisgICAgICAgICAgICBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9kZSwgaSkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2UoTm9kZSYgbm9kZSwgRWRnZSBlZGdlKQorICAgIHsK
KyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOworICAgICAgICBpZiAoY2hpbGQu
b3AoKSAhPSBHZXRMb2NhbCkgeworICAgICAgICAgICAgLy8gV2hlbiBjYW4gdGhpcyBoYXBwZW4/
IEF0IGxlYXN0IHR3byBjYXNlcyB0aGF0IEkgY2FuIHRoaW5rCisgICAgICAgICAgICAvLyBvZjoK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxKSBBbGlhc2VkIHVzZSBvZiBhcmd1bWVu
dHMgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2ssCisgICAgICAgICAgICAvLyAgICBsaWtlOgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIHZhciBhID0gYXJndW1lbnRzOworICAgICAg
ICAgICAgLy8gICAgdmFyIHggPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gMikgSWYgd2UncmUgYWNjZXNzaW5nIGFyZ3VtZW50cyB3ZSBnb3QgZnJvbSB0aGUg
aGVhcCEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjaGls
ZC5vcCgpID09IENyZWF0ZUFyZ3VtZW50cworICAgICAgICAgICAgICAgICYmIG5vZGUuY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUKKyAgICAgICAgICAgICAgICAgICAhPSBjaGlsZC5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMu
YWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgIEFyZ3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgIGRhdGEubWVyZ2VDYWxs
Q29udGV4dChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc09LVG9PcHRpbWl6ZShOb2RlJiBzb3VyY2UpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHNvdXJjZS5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gc291cmNlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0
dXJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZp
bmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgaWYgKCFkYXRhLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChtX2NyZWF0
ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CisgICAgICAgICAgICBpZiAo
bV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCByZW1vdmVBcmd1bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZChOb2RlJiBub2RlLCB1
bnNpZ25lZCBlZGdlSW5kZXgpCisgICAgeworICAgICAgICBFZGdlIGVkZ2UgPSBub2RlLmNoaWxk
cmVuLmNoaWxkKGVkZ2VJbmRleCk7CisgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKKyAg
ICAgICAgc3dpdGNoIChjaGlsZC5vcCgpKSB7CisgICAgICAgIGNhc2UgUGhpOiAvLyBBcmlzZXMg
aWYgd2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCisg
ICAgICAgIGNhc2UgR2V0TG9jYWw6IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFyZ3Vt
ZW50cyBhY2Nlc3MgdG8gYSB2YXJpYWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCisgICAg
ICAgIGNhc2UgU2V0TG9jYWw6IHsgLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2Nh
bCBvZiB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLgorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAg
ICAgICAgICAgIGJvb2wgaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQorICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pCisgICAg
ICAgICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50
c1JlZ2lzdGVyID0KKyAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1
cmVkKCkKKyAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFi
bGVBY2Nlc3NEYXRhKS0+c2Vjb25kLmlzVmFsaWQoKQorICAgICAgICAgICAgICAgICYmICFtX2Ny
ZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OworICAgICAgICAgICAgaWYgKCFpc0RlYWRBcmd1bWVudHNSZWdpc3RlciAmJiAhaXNBbGlhc2Vk
QXJndW1lbnRzUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBt
X2dyYXBoLmRlcmVmKGVkZ2UpOworICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdl
RnJvbUJhZyhlZGdlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogeyAvLyBBcmlzZXMgaWYgd2Ug
Q1NFIHR3byBHZXRMb2NhbHMgdG8gdGhlIGFyZ3VtZW50cyByZWdpc3RlciBhbmQgdGhlbiBDU0Ug
dGhlIHNlY29uZCB1c2Ugb2YgdGhlIEdldExvY2FsIHRvIHRoZSBmaXJzdC4KKyAgICAgICAgICAg
IGlmIChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbV9ncmFwaC5k
ZXJlZihlZGdlKTsKKyAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWco
ZWRnZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQog
fTsKIAogYm9vbCBwZXJmb3JtQXJndW1lbnRzU2ltcGxpZmljYXRpb24oR3JhcGgmIGdyYXBoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsMTQgKzMxMSwxOCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2Jhc2VsaW5lQ29kZUJsb2NrOwogICAgIH0KICAgICAKLSAgICBp
bnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAg
ICBpbnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpCiAgICAgewotICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2so
KS0+YXJndW1lbnRzUmVnaXN0ZXIoKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgKLSAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSArCi0gICAgICAgICAgICBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgICAgICAgICBpbmxpbmVDYWxs
RnJhbWUpLT5hcmd1bWVudHNSZWdpc3RlcigpICsgaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNl
dDsKKyAgICB9CisgICAgCisgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNvbnN0IENvZGVP
cmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gYXJndW1lbnRzUmVnaXN0
ZXJGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAgIH0KICAgICAKICAgICBWZWN0
b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXBGb3IoQ29kZUJsb2Nr
Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NTMsNyArMjQ1Myw2IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6IHsKICAgICAgICAgICAgIG1fZ3JhcGgu
bV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAgbV9ncmFwaC5tX2V4ZWN1dGFibGVz
V2hvc2VBcmd1bWVudHNFc2NhcGVkLmFkZChtX2lubGluZVN0YWNrVG9wLT5leGVjdXRhYmxlKCkp
OwogICAgICAgICAgICAgTm9kZUluZGV4IGNyZWF0ZUFyZ3VtZW50cyA9IGFkZFRvR3JhcGgoQ3Jl
YXRlQXJndW1lbnRzLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNyZWF0ZUFyZ3Vt
ZW50cyk7CiAgICAgICAgICAgICBzZXQodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBjcmVhdGVBcmd1bWVudHMpOwpAQCAtMjQ3Myw3
ICsyNDcyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6IHsKICAgICAg
ICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwotICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoR2V0TXlBcmd1bWVudHNM
ZW5ndGgpKTsKKyAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCBhZGRUb0dyYXBoKEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfZ2V0X2FyZ3VtZW50c19sZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTI0ODEsNyArMjQ4MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIG1fZ3JhcGgubV9oYXNBcmd1bWVudHMgPSB0cnVlOwogICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCiAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICAgICAgR2V0TXlBcmd1bWVudEJ5VmFs
LCBPcEluZm8oMCksIE9wSW5mbyhnZXRQcmVkaWN0aW9uKCkpLAorICAgICAgICAgICAgICAgICAg
ICBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlLCBPcEluZm8oMCksIE9wSW5mbyhnZXRQcmVkaWN0aW9u
KCkpLAogICAgICAgICAgICAgICAgICAgICBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1bWVudF9ieV92YWwp
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNzM3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5NSw5ICszOTUsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgICAg
IGlmIChwaGlOb2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBtX2dyYXBoLmRlcmVm
KG15Tm9kZUluZGV4KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4OyBpIDwg
QWRqYWNlbmN5TGlzdDo6U2l6ZSAtIDE7ICsraSkKLSAgICAgICAgICAgIHBoaU5vZGUuY2hpbGRy
ZW4uc2V0Q2hpbGQoaSwgcGhpTm9kZS5jaGlsZHJlbi5jaGlsZChpICsgMSkpOwotICAgICAgICBw
aGlOb2RlLmNoaWxkcmVuLnNldENoaWxkKEFkamFjZW5jeUxpc3Q6OlNpemUgLSAxLCBFZGdlKCkp
OworICAgICAgICBwaGlOb2RlLmNoaWxkcmVuLnJlbW92ZUVkZ2VGcm9tQmFnKGVkZ2VJbmRleCk7
CiAgICAgfQogICAgIAogICAgIHN0cnVjdCBPcGVyYW5kU3Vic3RpdHV0aW9uIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxMTczNzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAyLDYgKzQwMiw1OCBAQCB2b2lkIEdyYXBoOjpoYW5kbGVTdWNjZXNzb3IoVmVjdG9yPEJsb2Nr
CiAgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoYmxvY2tJbmRleCk7CiB9CiAK
K3ZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKK3sKKyAgICAvLyBGaXJzdCByZXNldCB0aGUg
Y291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7
IGktLTspCisgICAgICAgIGF0KGkpLnNldFJlZkNvdW50KDApOworICAgIAorICAgIC8vIE5vdyBm
aW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJlIG11c3QtZ2VuZXJhdGUuIFNldCB0aGVp
ciByZWYgY291bnRzIHRvCisgICAgLy8gMSBhbmQgcHV0IHRoZW0gb24gdGhlIHdvcmtsaXN0Lgor
ICAgIFZlY3RvcjxOb2RlSW5kZXgsIDEyOD4gd29ya2xpc3Q7CisgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5k
ZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5n
ZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJsb2NrLT5zaXplKCk7IGluZGV4SW5CbG9j
ay0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRl
eEluQmxvY2spOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG5vZGVJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2RlTXVzdEdlbmVyYXRlKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG5vZGUuc2V0UmVmQ291bnQoMSk7CisgICAg
ICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gd29ya2xpc3QubGFzdCgpOworICAgICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0
KCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2RlSW5kZXgpOworICAgICAgICBBU1NFUlQo
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hvdWxkIG5vdCBiZSBvbiB0aGUgd29ya2xp
c3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgorICAgICAgICBpZiAobm9kZS5mbGFncygpICYgTm9kZUhh
c1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgY2hpbGRJZHggPSBub2RlLmZp
cnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hpbGRJZHggPCBub2RlLmZpcnN0Q2hpbGQo
KSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICAgKytjaGlsZElkeCkgewor
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZE5vZGVJbmRleCA9IG1fdmFyQXJnQ2hpbGRy
ZW5bY2hpbGRJZHhdLmluZGV4KCk7CisgICAgICAgICAgICAgICAgaWYgKCFhdChjaGlsZE5vZGVJ
bmRleCkucmVmKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChjaGlsZE5vZGVJbmRleCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZDEoKSkgeworICAgICAgICAgICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnJlZigpKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNo
aWxkMSgpLmluZGV4KCkpOworICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQyKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDIoKSkucmVmKCkpCisgICAgICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMigpLmluZGV4KCkpOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdChub2Rl
LmNoaWxkMygpKS5yZWYoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVu
ZChub2RlLmNoaWxkMygpLmluZGV4KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBHcmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmls
aXR5KCkKIHsKICAgICBWZWN0b3I8QmxvY2tJbmRleCwgMTY+IHdvcmtsaXN0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsNiAr
MTYxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgbm9kZS5jaGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2Uo
KTsKICAgICB9CiAgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSd2ZSBtb2RpZmllZCB0aGUg
cmVmZXJlbmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRlYWwgd2l0aAorICAgIC8vIGxvY2FsIHZh
cmlhYmxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBsb2NhbCB2YXJpYWJsZSByZWZlcmVu
Y2VzIGNhbiBmb3JtCisgICAgLy8gY3ljbGVzLCBhbmQgaGVuY2UgcmVmZXJlbmNlIGNvdW50aW5n
IGlzIG5vdCBlbm91Z2guIFRoaXMgd2lsbCByZXNldCB0aGUKKyAgICAvLyByZWZlcmVuY2UgY291
bnRzIGFjY29yZGluZyB0byByZWFjaGFiaWxpdHkuCisgICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgp
OworICAgIAogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZUluZGV4IG5vZGVJbmRleCwg
dW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewogICAgICAgICBhdChub2RlSW5kZXgpLmNv
bnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKQEAgLTMwNCwxMiArMzEwLDE3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsK
ICAgICB9CiAgICAgCi0gICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGVGb3IoY29uc3QgQ29k
ZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZUZvcihJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7Ci0gICAgICAgIGlmICghY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQog
ICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKICAgICAg
ICAgCi0gICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJs
ZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQo
KTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGVGb3IoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBleGVjdXRhYmxl
Rm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICB9CiAgICAgCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpA
QCAtMzE3LDYgKzMyOCwzMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVC
bG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRC
bG9jayk7CiAgICAgfQogICAgIAorICAgIGludCBhcmd1bWVudHNSZWdpc3RlckZvcihjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+YXJndW1lbnRz
UmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zv
cklubGluZUNhbGxGcmFtZSgKKyAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KS0+YXJndW1lbnRzUmVnaXN0ZXIoKSArCisgICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgfQorICAgIAorICAgIGludCB1bmNoZWNrZWRBcmd1
bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biBtX2NvZGVCbG9jay0+dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAgICAgICAgCisg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVD
YWxsRnJhbWUoCisgICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAg
ICAgIGlmICghY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkpCisgICAgICAgICAgICByZXR1cm4g
SW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjb2RlQmxv
Y2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKworICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIH0KKyAgICAKICAgICBWYWx1ZVByb2ZpbGUqIHZh
bHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKG5v
ZGVJbmRleCA9PSBOb05vZGUpCkBAIC00MTIsOSArNDQ3LDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChub2RlKTsKICAgICAgICAgY2FzZSBHZXRC
eVZhbDoKICAgICAgICAgICAgIHJldHVybiAhYnlWYWxJc1B1cmUobm9kZSk7Ci0gICAgICAgIGNh
c2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAgICAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZXNX
aG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAgICAgICAgICAgICAgZXhlY3V0YWJs
ZUZvcihub2RlLmNvZGVPcmlnaW4pKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIElmIGJ5IHNv
bWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNhc2UgaW4gcmVsZWFzZSBidWlsZCBpdCdzIHNhZmVyIHRv
IGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29yc3QuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw2ICs1MjgsNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAg
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWxTYWZlOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Ogog
ICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBhcyBzb21ldGhpbmcgb3RoZXIgdGhh
biBhIGxvY2FsIGFjY2VzcywgYW5kIHRodXMgaGFkIHRoZWlyIG93biBwcm9maWxpbmcuICovXAog
ICAgIG1hY3JvKEdldExvY2FsVW5saW5rZWQsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKLSAgICAv
KiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWluZyBzZXQuICovXAorICAgIC8qIE1hcmtlciBmb3Ig
YW4gYXJndW1lbnQgYmVpbmcgc2V0IGF0IHRoZSBwcm9sb2d1ZSBvZiBhIGZ1bmN0aW9uLiAqL1wK
ICAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXAogICAgIFwKICAgICAvKiBIaW50IHRoYXQgaW5s
aW5pbmcgYmVnaW5zIGhlcmUuIE5vIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGlzIG5vZGUuIEl0
J3Mgb25seSAqL1wKQEAgLTE5OCw4ICsxOTgsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIC8qIHNlbnNlLiAqL1wKICAgICBtYWNybyhDcmVhdGVBcmd1bWVudHMsIE5v
ZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFRlYXJPZmZBcmd1bWVudHMsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKLSAgICBtYWNybyhHZXRNeUFyZ3VtZW50c0xlbmd0aCwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCi0gICAgbWFjcm8oR2V0TXlBcmd1
bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xv
YmJlcikgXAorICAgIG1hY3JvKEdldE15QXJndW1lbnRzTGVuZ3RoLCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVz
dWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oR2V0TXlBcmd1bWVudHNMZW5n
dGhTYWZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKKyAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlWYWxTYWZlLCBOb2RlUmVzdWx0SlMgfCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja0Fy
Z3VtZW50c05vdENyZWF0ZWQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBcCiAgICAgLyogTm9k
ZXMgZm9yIGNyZWF0aW5nIGZ1bmN0aW9ucy4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTE3Mzcx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgYm9vbCBoYXZlQ29uc3RhbnRzID0gZmFsc2U7CiAgICAg
Ym9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CiAgICAgYm9vbCBoYXZlVUludDMycyA9IGZhbHNl
OworICAgIGJvb2wgaGF2ZUFyZ3VtZW50cyA9IGZhbHNlOwogICAgIAogICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CiAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKQEAgLTE4NCw2ICsxODUsMTAgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBp
bGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcmd1bWVudHNUaGF0
V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAgICBoYXZlQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNTA1LDcgKzUxMCw1NyBAQCB2b2lkIE9TUkV4aXRDb21w
aWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8g
MTMpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4
aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8gMTMpIENyZWF0ZSBhcmd1bWVudHMgaWYgbmVjZXNz
YXJ5IGFuZCBwbGFjZSB0aGVtIGludG8gdGhlIGFwcHJvcHJpYXRlIGFsaWFzZWQKKyAgICAvLyAg
ICAgcmVnaXN0ZXJzLgorICAgIAorICAgIGlmIChoYXZlQXJndW1lbnRzKSB7CisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRl
eCk7CisgICAgICAgICAgICAvLyBGaW5kIHRoZSByaWdodCBpbmxpbmUgY2FsbCBmcmFtZS4KKyAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gMDsKKyAgICAgICAg
ICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lOworICAgICAgICAgICAgICAgICBjdXJyZW50OworICAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50LT5zdGFja09mZnNldCA8PSBvcGVyYW5kKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlu
dCBhcmd1bWVudHNSZWdpc3RlciA9IG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNh
bGxGcmFtZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yKGFyZ3VtZW50c1JlZ2lzdGVyKSwgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpKdW1wIGhhdmVBcmd1bWVudHMgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6Tm9uWmVy
bywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKAorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaW5saW5lQ2FsbEZyYW1lKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSgKKyAgICAg
ICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25DcmVhdGVJbmxpbmVk
QXJndW1lbnRzKSksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVj
U3RhdGUoKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgICAg
ICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoCisgICAgICAgICAgICAgICAgICAgICAg
ICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cykpLAorICAgICAg
ICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX2ppdC5jYWxsKEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoYXJndW1lbnRzUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgIEdQ
UkluZm86OnJlZ1QwLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cih1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGhhdmVBcmd1bWVudHMubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvcihvcGVyYW5kKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gMTQpIEFk
anVzdCB0aGUgb2xkIEpJVCdzIGV4ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcg
T1NSLCB3ZSBrbm93CiAgICAgLy8gICAgIHRoYXQgYWxsIG5ldyBjYWxscyBpbnRvIHRoaXMgY29k
ZSB3aWxsIGdvIHRvIHRoZSBuZXcgSklULCBzbyB0aGUgZXhlY3V0ZQogICAgIC8vICAgICBjb3Vu
dGVyIG9ubHkgYWZmZWN0cyBjYWxsIGZyYW1lcyB0aGF0IHBlcmZvcm1lZCBPU1IgZXhpdCBhbmQg
Y2FsbCBmcmFtZXMKICAgICAvLyAgICAgdGhhdCB3ZXJlIHN0aWxsIGV4ZWN1dGluZyB0aGUgb2xk
IEpJVCBhdCB0aGUgdGltZSBvZiBhbm90aGVyIGNhbGwgZnJhbWUncwpAQCAtNTQzLDEyICs1OTgs
MTIgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIAogICAg
IGhhbmRsZUV4aXRDb3VudHMoZXhpdCk7CiAgICAgCi0gICAgLy8gMTQpIExvYWQgdGhlIHJlc3Vs
dCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAvLyAxNSkg
TG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1Qw
LgogICAgIAogICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkKICAgICAgICAgbV9qaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6
OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJ
bmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8gMTUpIEZpeCBjYWxsIGZy
YW1lKHMpLgorICAgIC8vIDE2KSBGaXggY2FsbCBmcmFtZShzKS4KICAgICAKICAgICBBU1NFUlQo
bV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKICAgICBtX2ppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7CkBAIC01ODQsNyAr
NjM5LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIGlm
IChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIG1faml0LmFkZFB0
cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAKLSAgICAvLyAxNikgSnVtcCBpbnRvIHRoZSBjb3Jy
ZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIC8vIDE3KSBKdW1wIGludG8gdGhlIGNv
cnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCiAgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGV4aXQubV9jb2RlT3Jp
Z2luKTsKICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVN
YXAgPSBtX2ppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShy
ZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBjb21waWxl
T1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAjZW5kaWYKIAogICAgIHsKLSAgICAgICAgQXNzZW1i
bHlIZWxwZXJzIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgICAgICBDQ2FsbEhlbHBl
cnMgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CiAgICAgICAgIE9TUkV4aXRDb21waWxlciBl
eGl0Q29tcGlsZXIoaml0KTsKICAgICAgICAgCiAgICAgICAgIGV4aXRDb21waWxlci5jb21waWxl
RXhpdChleGl0LCByZWNvdmVyeSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkRGR0Fzc2VtYmx5
SGVscGVycy5oIgorI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkRGR09T
UkV4aXQuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAKQEAgLTQyLDcgKzQzLDcgQEAg
bmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIE9TUkV4aXRDb21waWxlciB7CiBwdWJsaWM6Ci0gICAg
T1NSRXhpdENvbXBpbGVyKEFzc2VtYmx5SGVscGVycyYgaml0KQorICAgIE9TUkV4aXRDb21waWxl
cihDQ2FsbEhlbHBlcnMmIGppdCkKICAgICAgICAgOiBtX2ppdChqaXQpCiAgICAgewogICAgIH0K
QEAgLTcyLDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGhhbmRsZUV4aXRDb3Vu
dHMoY29uc3QgT1NSRXhpdCYpOwogICAgIAotICAgIEFzc2VtYmx5SGVscGVycyYgbV9qaXQ7Cisg
ICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcG9pc29uU2Ny
YXRjaEluZGljZXM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMjQsMTMgKzEwMjQs
MjEgQEAgSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFjdAogCiBKU0NlbGwq
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICByZXR1cm4gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVj
KTsKKyAgICAvLyBOQjogVGhpcyBuZWVkcyB0byBiZSBleGNlZWRpbmdseSBjYXJlZnVsIHdpdGgg
dG9wIGNhbGwgZnJhbWUgdHJhY2tpbmcsIHNpbmNlIGl0CisgICAgLy8gbWF5IGJlIGNhbGxlZCBm
cm9tIE9TUiBleGl0LCB3aGlsZSB0aGUgc3RhdGUgb2YgdGhlIGNhbGwgc3RhY2sgaXMgYml6YXJy
ZS4KKyAgICBBcmd1bWVudHMqIHJlc3VsdCA9IEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmdsb2Jh
bERhdGEoKSwgZXhlYyk7CisgICAgQVNTRVJUKCFleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0aW9u
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cygKICAgICBFeGVjU3RhdGUqIGV4ZWMsIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewotICAgIHJldHVybiBBcmd1bWVudHM6OmNyZWF0
ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMsIGlubGluZUNhbGxGcmFtZSk7CisgICAgLy8gTkI6
IFRoaXMgbmVlZHMgdG8gYmUgZXhjZWVkaW5nbHkgY2FyZWZ1bCB3aXRoIHRvcCBjYWxsIGZyYW1l
IHRyYWNraW5nLCBzaW5jZSBpdAorICAgIC8vIG1heSBiZSBjYWxsZWQgZnJvbSBPU1IgZXhpdCwg
d2hpbGUgdGhlIHN0YXRlIG9mIHRoZSBjYWxsIHN0YWNrIGlzIGJpemFycmUuCisgICAgQXJndW1l
bnRzKiByZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0ZShleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMs
IGlubGluZUNhbGxGcmFtZSk7CisgICAgQVNTRVJUKCFleGVjLT5nbG9iYWxEYXRhKCkuZXhjZXB0
aW9uKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uVGVhck9mZkFjdGl2YXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGFjdGl2YXRpb25D
ZWxsLCBpbnQzMl90IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDM3LDEzICs0MzcsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6IHsKKyAgICAg
ICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlUHJlZGljdGlvbihub2RlLmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldLm1lcmdlRmxhZ3MoTm9kZVVzZWRBc051
bWJlciB8IE5vZGVVc2VkQXNJbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9
IHNldFByZWRpY3Rpb24oUHJlZGljdEludDMyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC02MTYsNyArNjE2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRGbG9hdDY0
QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgogICAgICAgICBjYXNl
IEludDMyVG9Eb3VibGU6Ci0gICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogeworICAgICAg
ICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5n
dGg6CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOiB7CiAgICAgICAgICAgICAvLyBU
aGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxh
dGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZv
bGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODkwLDIxICszODkwLDIzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9qaXQuZ3JhcGgoKS5tX2V4ZWN1dGFibGVz
V2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAgICAgIG1faml0Lmdy
YXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkgewotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKLSAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9q
aXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSkpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
LSAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihSZWdpc3Rl
ckZpbGU6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQuc3Vi
MzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBBcmd1bWVudHNFc2Nh
cGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
UHRyKAorICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5h
cmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRD
b3VudCksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdldE15QXJn
dW1lbnRzTGVuZ3RoU2FmZTogeworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgY3JlYXRlZCA9IG1faml0LmJyYW5jaFRlc3RQdHIoCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKQEAgLTM5NDMsNDYgKzM5NDUsNTAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgaW5k
ZXhHUFIgPSBpbmRleC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghbV9qaXQuZ3JhcGgoKS5tX2V4ZWN1dGFibGVz
V2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAgICAgIG1faml0Lmdy
YXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkgeworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAgICAgICAg
ICBKSVRDb21waWxlcjo6Tm9uWmVybywKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6YWRk
cmVzc0ZvcigKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJGb3Io
bm9kZS5jb2RlT3JpZ2luKSkpKTsKKworICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIGluZGV4R1BSLCByZXN1bHRHUFIpOworICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QWJv
dmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsCisgICAgICAgICAgICAg
ICAgICAgIEltbTMyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkpKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KAotICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAotICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNS
ZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIGluZGV4R1BSLCByZXN1bHRHUFIpOwotICAgICAgICAgICAgaWYg
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICBJbW0zMihu
b2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAg
ICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpBYm92ZU9yRXF1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihS
ZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3Zl
T3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLAorICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQp
KSk7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubmVnMzIocmVz
dWx0R1BSKTsKLSAgICAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHJlc3VsdEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubmVnMzIocmVzdWx0R1BSKTsKKyAgICAgICAgbV9q
aXQuc2lnbkV4dGVuZDMyVG9QdHIocmVzdWx0R1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVy
OjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCByZXN1bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAoKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAg
ICAgICA/IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0Ci0gICAg
ICAgICAgICAgICAgICAgICAgOiAwKSArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRp
bmdUaGlzKDApKSAqIHNpemVvZihSZWdpc3RlcikpLAotICAgICAgICAgICAgICAgIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFz
ZUluZGV4KAorICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCByZXN1
bHRHUFIsIEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LAorICAgICAgICAgICAgICAgICgobm9kZS5j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAgPyBub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldAorICAgICAgICAgICAgICAgICAgOiAw
KSArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApKSAqIHNpemVvZihS
ZWdpc3RlcikpLAorICAgICAgICAgICAgcmVzdWx0R1BSKTsKIAotICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxTYWZlOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRl
eCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZCgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAxLDYgKzgwMSw5IEBAIHZvaWQgVmFsdWVTb3Vy
Y2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAogICAgIGNhc2UgRG91YmxlSW5SZWdpc3RlckZpbGU6
CiAgICAgICAgIGZwcmludGYob3V0LCAiRG91YmxlIik7CiAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJndW1lbnRzU291cmNlOgorICAgICAgICBmcHJpbnRmKG91dCwgIkFyZ3VtZW50cyIpOwor
ICAgICAgICBicmVhazsKICAgICBjYXNlIEhhdmVOb2RlOgogICAgICAgICBmcHJpbnRmKG91dCwg
Ik5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTk4Niw2ICs5ODks
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgICAg
ICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAg
ICAgICBlbHNlIGlmIChhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5zaG91bGRV
c2VEb3VibGVGb3JtYXQoKSkKICAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3Vy
Y2UoRG91YmxlSW5SZWdpc3RlckZpbGUpOworICAgICAgICBlbHNlIGlmIChhdChub2RlSW5kZXgp
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5pc0FyZ3VtZW50c0FsaWFzKCkpCisgICAgICAgICAgICBt
X3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rp
b24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKICAg
ICB9CkBAIC0xMzQ1LDEzICsxMzUwLDE4IEBAIFZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6
OmNvbXB1dGVWYWwKICAgICAgICAgCiAgICAgY2FzZSBEb3VibGVJblJlZ2lzdGVyRmlsZToKICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lzdGVyRmlsZUFzVW5ib3hl
ZERvdWJsZSgpOworICAgICAgICAKKyAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZCgpOwogCiAg
ICAgY2FzZSBIYXZlTm9kZTogewogICAgICAgICBpZiAoaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5u
b2RlSW5kZXgoKSkpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQo
dmFsdWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKLSAgICAKKyAgICAg
ICAgCiAgICAgICAgIE5vZGUqIG5vZGVQdHIgPSAmYXQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkp
OwogICAgICAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgICAg
IGlmIChub2RlUHRyLT5vcCgpID09IENyZWF0ZUFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6YXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKCk7CiAgICAg
ICAgICAgICAvLyBJdCdzIGxlZ2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZl
ciB1c2UgdGhpcyBub2RlLCBvciBvcGVyYW5kLAogICAgICAgICAgICAgLy8gZXZlci4gU2V0IGl0
IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgogICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1Niw3IEBAIGVudW0gVmFsdWVTb3VyY2VL
aW5kIHsKICAgICBDZWxsSW5SZWdpc3RlckZpbGUsCiAgICAgQm9vbGVhbkluUmVnaXN0ZXJGaWxl
LAogICAgIERvdWJsZUluUmVnaXN0ZXJGaWxlLAorICAgIEFyZ3VtZW50c1NvdXJjZSwKICAgICBI
YXZlTm9kZQogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw2ICs0Nyw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2FyZ3VtZW50QXdhcmVQcmVkaWN0aW9u
KFByZWRpY3ROb25lKQogICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgLCBtX2RvdWJsZUZv
cm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCisgICAgICAgICwgbV9pc0NhcHR1cmVk
KGZhbHNlKQorICAgICAgICAsIG1faXNBcmd1bWVudHNBbGlhcyhmYWxzZSkKICAgICB7CiAgICAg
ICAgIGNsZWFyVm90ZXMoKTsKICAgICB9CkBAIC01OCw2ICs2MCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2ZsYWdzKDApCiAgICAgICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0eURvdWJs
ZUZvcm1hdFN0YXRlKQogICAgICAgICAsIG1faXNDYXB0dXJlZChpc0NhcHR1cmVkKQorICAgICAg
ICAsIG1faXNBcmd1bWVudHNBbGlhcyhmYWxzZSkKICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMo
KTsKICAgICB9CkBAIC04Nyw2ICs5MCwyMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2lz
Q2FwdHVyZWQ7CiAgICAgfQogICAgIAorICAgIGJvb2wgbWVyZ2VJc0FyZ3VtZW50c0FsaWFzKGJv
b2wgaXNBcmd1bWVudHNBbGlhcykKKyAgICB7CisgICAgICAgIGJvb2wgbmV3SXNBcmd1bWVudHNB
bGlhcyA9IG1faXNBcmd1bWVudHNBbGlhcyB8IGlzQXJndW1lbnRzQWxpYXM7CisgICAgICAgIGlm
IChuZXdJc0FyZ3VtZW50c0FsaWFzID09IG1faXNBcmd1bWVudHNBbGlhcykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9pc0FyZ3VtZW50c0FsaWFzID0gbmV3SXNBcmd1bWVu
dHNBbGlhczsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNB
cmd1bWVudHNBbGlhcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9pc0FyZ3VtZW50c0FsaWFz
OworICAgIH0KKyAgICAKICAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KQogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBzZWxmID0gZmluZCgpOwpAQCAt
MjM3LDYgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgRG91YmxlRm9ybWF0U3RhdGUgbV9kb3VibGVG
b3JtYXRTdGF0ZTsKICAgICAKICAgICBib29sIG1faXNDYXB0dXJlZDsKKyAgICBib29sIG1faXNB
cmd1bWVudHNBbGlhczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTE3MzcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU2Niw3ICsxNTY2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9hcmd1bWVu
dF9ieV92YQogICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9nZXRfYnlfdmFs
KTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChhcmd1bWVudHMsIHJlZ1QyKTsKICAgICBzdHVi
Q2FsbC5hZGRBcmd1bWVudChwcm9wZXJ0eSwgcmVnVDIpOwotICAgIHN0dWJDYWxsLmNhbGwoZHN0
KTsKKyAgICBzdHViQ2FsbC5jYWxsV2l0aFZhbHVlUHJvZmlsaW5nKGRzdCk7CiB9CiAKICNlbmRp
ZiAvLyBVU0UoSlNWQUxVRTY0KQo=
</data>
<flag name="review"
          id="148926"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142606</attachid>
            <date>2012-05-17 18:45:55 -0700</date>
            <delta_ts>2012-05-17 18:45:55 -0700</delta_ts>
            <desc>almost ready</desc>
            <filename>aliased_arguments_patch_6.diff</filename>
            <type>text/plain</type>
            <size>83476</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE3NTI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEyLTA1LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBvcHRpbWl6ZSBhbGlhc2VkIHVzZXMgb2YgdGhlIEFyZ3VtZW50cyBvYmplY3Qg
b2YgdGhlIGN1cnJlbnQgY2FsbCBmcmFtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODY1NTIKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJl
bi4KKyAgICAgICAgCisgICAgICAgIFBlcmZvcm1zIG11c3QtYWxpYXMgYW5kIGVzY2FwZSBhbmFs
eXNpcyBvbiB1c2VzIG9mIENyZWF0ZUFyZ3VtZW50cywgYW5kIGlmCisgICAgICAgIGEgdmFyaWFi
bGUgaXMgbXVzdC1hbGlhc2VkIHRvIENyZWF0ZUFyZ3VtZW50cyBhbmQgZG9lcyBub3QgZXNjYXBl
LCB0aGVuIHdlCisgICAgICAgIHR1cm4gYWxsIHVzZXMgb2YgdGhhdCB2YXJpYWJsZSBpbnRvIGRp
cmVjdCBhcmd1bWVudHMgYWNjZXNzZXMuCisgICAgICAgIAorICAgICAgICAzNiUgc3BlZWQtdXAg
b24gVjgvZWFybGV5IGxlYWRpbmcgdG8gYSAyLjMlIHNwZWVkLXVwIG92ZXJhbGwgaW4gVjguCisK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojp1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVS
ZWNvdmVyeS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojphcmd1bWVudHNUaGF0V2Vy
ZU5vdENyZWF0ZWQpOgorICAgICAgICAoVmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OlZh
bHVlUmVjb3Zlcnk6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHQWRqYWNlbmN5TGlzdC5oOgorICAgICAgICAoQWRqYWNlbmN5TGlzdCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWRqYWNlbmN5TGlzdDo6cmVtb3ZlRWRnZUZyb21CYWcpOgorICAgICAgICAq
IGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAoQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6Om9i
c2VydmVQcm9wZXJBcmd1bWVudHNVc2UpOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2U6OmlzT0tUb09wdGltaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpyZW1vdmVBcmd1bWVudHNSZWZlcmVuY2luZ1Bo
YW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6YXJndW1lbnRzUmVnaXN0ZXJGb3IpOgorICAg
ICAgICAoQXNzZW1ibHlIZWxwZXJzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAg
ICAgICAgKiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cmVtb3ZlUG90ZW50aWFsbHlEZWFkUGhpUmVm
ZXJlbmNlKToKKyAgICAgICAgKiBkZmcvREZHR1BSSW5mby5oOgorICAgICAgICAoR1BSSW5mbyk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
Y29sbGVjdEdhcmJhZ2UpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKEdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZXhlY3V0YWJs
ZUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFyZ3VtZW50c1JlZ2lzdGVyRm9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Ip
OgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbG9iYmVyc1dvcmxkKToKKyAgICAgICAgKiBk
ZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9u
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6T1NSRXhpdENv
bXBpbGVyKToKKyAgICAgICAgKE9TUkV4aXRDb21waWxlcik6CisgICAgICAgICogZGZnL0RGR09T
UkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGls
ZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFj
Y2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bWVyZ2VJ
c0FyZ3VtZW50c0FsaWFzKToKKyAgICAgICAgKFZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjppc0FyZ3VtZW50c0FsaWFzKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2FyZ3VtZW50X2J5X3ZhbCk6CisKIDIwMTItMDUtMTYgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc2hvdWxkIGhhdmUgc3BhcnNlIGNvbmRpdGlvbmFs
IGNvbnN0YW50IHByb3BhZ2F0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw2ICs0NDcsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQodXNlc0FyZ3VtZW50cygpKTsK
ICAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyOwogICAgICAgICB9CisgICAg
ICAgIGludCB1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghdXNlc0FyZ3VtZW50cygpKQorICAgICAgICAgICAgICAgIHJldHVybiBJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyOworICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1JlZ2lzdGVyKCk7
CisgICAgICAgIH0KICAgICAgICAgdm9pZCBzZXRBY3RpdmF0aW9uUmVnaXN0ZXIoaW50IGFjdGl2
YXRpb25SZWdpc3RlcikKICAgICAgICAgewogICAgICAgICAgICAgbV9hY3RpdmF0aW9uUmVnaXN0
ZXIgPSBhY3RpdmF0aW9uUmVnaXN0ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDYgKzYxLDggQEAgZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKICAgICBEb3VibGVE
aXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKICAgICBDZWxsRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUs
CiAgICAgQm9vbGVhbkRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYW4gQXJn
dW1lbnRzIG9iamVjdC4KKyAgICBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQsCiAgICAgLy8g
SXQncyBhIGNvbnN0YW50LgogICAgIENvbnN0YW50LAogICAgIC8vIERvbid0IGtub3cgaG93IHRv
IHJlY292ZXIgaXQuCkBAIC0xOTAsNiArMTkyLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgYXJndW1lbnRz
VGhhdFdlcmVOb3RDcmVhdGVkKCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0
OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0
ZWQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIFZhbHVlUmVjb3Zl
cnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7IH0KICAg
ICAKICAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZSA9PSBD
b25zdGFudDsgfQpAQCAtMzE1LDYgKzMyNCw5IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBCb29s
ZWFuRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CiAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIipi
b29sKCVkKSIsIHZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFyZ3VtZW50c1RoYXRXZXJlTm90Q3JlYXRlZDoKKyAgICAgICAgICAgIGZwcmludGYo
b3V0LCAiYXJndW1lbnRzIik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb25z
dGFudDoKICAgICAgICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3Jp
cHRpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTE3MzcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA5NSwxOSArMTA5NSwxOCBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1l
bnRzTGVuZ3RoOgotICAgICAgICBpZiAoIW1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJndW1l
bnRzRXNjYXBlZC5jb250YWlucygKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmV4ZWN1dGFibGVG
b3Iobm9kZS5jb2RlT3JpZ2luKSkpIHsKLSAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCB0aGlz
IGV4ZWN1dGFibGUgZG9lcyBub3QgZXNjYXBlIGl0cyBhcmd1bWVudHMsIHNvIHdlIGNhbiBvcHRp
bWl6ZQotICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBhIGJpdC4gTm90ZSB0aGF0IHRoaXMg
aXMgbm90IHN1ZmZpY2llbnQgdG8gZm9yY2UgY29uc3RhbnQgZm9sZGluZwotICAgICAgICAgICAg
Ly8gb2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2UgR2V0TXlBcmd1bWVudHNMZW5ndGgg
aXMgYSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KLSAgICAgICAgICAgIC8vIFdlIHBlcmZvcm0gZnVy
dGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIgb24uCi0gICAgICAgICAgICBpZiAobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsK
KyAgICAgICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUg
aXRzIGFyZ3VtZW50cywgc28gd2UgY2FuIG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVu
dHMgYSBiaXQuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCBzdWZmaWNpZW50IHRvIGZvcmNlIGNvbnN0
YW50IGZvbGRpbmcKKyAgICAgICAgLy8gb2YgR2V0TXlBcmd1bWVudHNMZW5ndGgsIGJlY2F1c2Ug
R2V0TXlBcmd1bWVudHNMZW5ndGggaXMgYSBjbG9iYmVyaW5nIG9wZXJhdGlvbi4KKyAgICAgICAg
Ly8gV2UgcGVyZm9ybSBmdXJ0aGVyIG9wdGltaXphdGlvbnMgb24gdGhpcyBsYXRlciBvbi4KKyAg
ICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoanNOdW1iZXIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZl
OgogICAgICAgICAvLyBUaGlzIHBvdGVudGlhbGx5IGNsb2JiZXJzIGFsbCBzdHJ1Y3R1cmVzIGlm
IHRoZSBhcmd1bWVudHMgb2JqZWN0IGhhZCBhIGdldHRlcgogICAgICAgICAvLyBpbnN0YWxsZWQg
b24gdGhlIGxlbmd0aCBwcm9wZXJ0eS4KICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJ
bkJsb2NrKTsKQEAgLTExMTcsMTUgKzExMTYsMTQgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVj
dXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRN
eUFyZ3VtZW50QnlWYWw6Ci0gICAgICAgIGlmICghbV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VB
cmd1bWVudHNFc2NhcGVkLmNvbnRhaW5zKAotICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0
YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKSkgewotICAgICAgICAgICAgLy8gV2Uga25vdyB0aGF0
IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFyZ3VtZW50cywgc28gd2UgY2Fu
IG9wdGltaXplCi0gICAgICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGEgYml0LiBOb3RlIHRoYXQg
dGhpcyBlbmRzIHVwIGJlaW5nIGZ1cnRoZXIgb3B0aW1pemVkIGJ5IHRoZQotICAgICAgICAgICAg
Ly8gQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS4KLSAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Ci0gICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAg
ICAgLy8gV2Uga25vdyB0aGF0IHRoaXMgZXhlY3V0YWJsZSBkb2VzIG5vdCBlc2NhcGUgaXRzIGFy
Z3VtZW50cywgc28gd2UgY2FuIG9wdGltaXplCisgICAgICAgIC8vIHRoZSBhcmd1bWVudHMgYSBi
aXQuIE5vdGUgdGhhdCB0aGlzIGVuZHMgdXAgYmVpbmcgZnVydGhlciBvcHRpbWl6ZWQgYnkgdGhl
CisgICAgICAgIC8vIEFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuCisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IEdldE15QXJndW1lbnRCeVZhbFNhZmU6CiAgICAgICAgIC8vIFRoaXMgcG90ZW50aWFsbHkgY2xv
YmJlcnMgYWxsIHN0cnVjdHVyZXMgaWYgdGhlIHByb3BlcnR5IHdlJ3JlIGFjY2Vzc2luZyBoYXMK
ICAgICAgICAgLy8gYSBnZXR0ZXIuIFdlIGRvbid0IHNwZWN1bGF0ZSBhZ2FpbnN0IHRoaXMuCiAg
ICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FkamFjZW5jeUxpc3QuaAkocmV2aXNpb24gMTE3MzcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBZGphY2VuY3lMaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyOCw2ICsxMjgsMTUgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIGluaXRp
YWxpemUoKTsKICAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSB3aXNoIHRvIHJl
bW92ZSBhbiBlZGdlIGFuZCB0aGUgbm9kZSB0cmVhdHMgdGhlIGxpc3Qgb2YgY2hpbGRyZW4KKyAg
ICAvLyBhcyBhICJiYWciIC0gYW4gdW5vcmRlcmVkIHNldCB3aGVyZSB0aGUgaW5kZXggb2YgdGhl
IGVkZ2UgZG9lcyBub3QgbWF0dGVyLgorICAgIHZvaWQgcmVtb3ZlRWRnZUZyb21CYWcodW5zaWdu
ZWQgZWRnZUluZGV4KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZWRnZUluZGV4
OyBpIDwgU2l6ZSAtIDE7ICsraSkKKyAgICAgICAgICAgIHNldENoaWxkKGksIGNoaWxkKGkgKyAx
KSk7CisgICAgICAgIHNldENoaWxkKFNpemUgLSAxLCBFZGdlKCkpOworICAgIH0KIAogICAgIHVu
c2lnbmVkIGZpcnN0Q2hpbGQoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
OSArMzQsODQgQEAKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQ
aGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKK25hbWVzcGFjZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgTnVs
bGFibGVIYXNoVHJhaXRzIDogcHVibGljIEhhc2hUcmFpdHM8VD4geworICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKKyAgICBzdGF0aWMgVCBlbXB0eVZhbHVl
KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUPigxKTsgfQorfTsKKworc3RydWN0IEFyZ3Vt
ZW50c0FsaWFzaW5nRGF0YSB7CisgICAgSW5saW5lQ2FsbEZyYW1lKiBjYWxsQ29udGV4dDsKKyAg
ICBib29sIGNhbGxDb250ZXh0U2V0OworICAgIGJvb2wgbXVsdGlwbGVDYWxsQ29udGV4dHM7Cisg
ICAgCisgICAgYm9vbCBhc3NpZ25lZEZyb21Bcmd1bWVudHM7CisgICAgYm9vbCBhc3NpZ25lZEZy
b21NYW55VGhpbmdzOworICAgIAorICAgIGJvb2wgZXNjYXBlczsKKyAgICAKKyAgICBBcmd1bWVu
dHNBbGlhc2luZ0RhdGEoKQorICAgICAgICA6IGNhbGxDb250ZXh0KDApCisgICAgICAgICwgY2Fs
bENvbnRleHRTZXQoZmFsc2UpCisgICAgICAgICwgbXVsdGlwbGVDYWxsQ29udGV4dHMoZmFsc2Up
CisgICAgICAgICwgYXNzaWduZWRGcm9tQXJndW1lbnRzKGZhbHNlKQorICAgICAgICAsIGFzc2ln
bmVkRnJvbU1hbnlUaGluZ3MoZmFsc2UpCisgICAgICAgICwgZXNjYXBlcyhmYWxzZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgbWVyZ2VDYWxsQ29udGV4dChJbmxpbmVDYWxsRnJhbWUq
IG5ld0NhbGxDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKG11bHRpcGxlQ2FsbENvbnRleHRz
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFjYWxsQ29udGV4
dFNldCkgeworICAgICAgICAgICAgY2FsbENvbnRleHQgPSBuZXdDYWxsQ29udGV4dDsKKyAgICAg
ICAgICAgIGNhbGxDb250ZXh0U2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxDb250ZXh0ID09IG5ld0NhbGxDb250ZXh0
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbXVsdGlwbGVDYWxsQ29u
dGV4dHMgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGNhbGxDb250ZXh0SXNWYWxpZCgp
CisgICAgeworICAgICAgICByZXR1cm4gY2FsbENvbnRleHRTZXQgJiYgIW11bHRpcGxlQ2FsbENv
bnRleHRzOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1lcmdlQXJndW1lbnRzQXNzaWdubWVudCgp
CisgICAgeworICAgICAgICBhc3NpZ25lZEZyb21Bcmd1bWVudHMgPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG1lcmdlTm9uQXJndW1lbnRzQXNzaWdubWVudCgpCisgICAgeworICAgICAg
ICBhc3NpZ25lZEZyb21NYW55VGhpbmdzID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBh
cmd1bWVudHNBc3NpZ25tZW50SXNWYWxpZCgpCisgICAgeworICAgICAgICByZXR1cm4gYXNzaWdu
ZWRGcm9tQXJndW1lbnRzICYmICFhc3NpZ25lZEZyb21NYW55VGhpbmdzOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzVmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNhbGxDb250ZXh0SXNW
YWxpZCgpICYmIGFyZ3VtZW50c0Fzc2lnbm1lbnRJc1ZhbGlkKCkgJiYgIWVzY2FwZXM7CisgICAg
fQorfTsKKworfSAvLyBlbmQgYW5vbnltb3VzIG5hbWVzcGFjZQorCiBjbGFzcyBBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKICAgICBBcmd1bWVu
dHNTaW1wbGlmaWNhdGlvblBoYXNlKEdyYXBoJiBncmFwaCkKQEAgLTUxLDYgKzEyNiwyNTIgQEAg
cHVibGljOgogICAgICAgICAKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAg
IAorICAgICAgICAvLyBSZWNvcmQgd2hpY2ggYXJndW1lbnRzIGFyZSBrbm93biB0byBlc2NhcGUg
bm8gbWF0dGVyIHdoYXQuCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5p
bmxpbmVDYWxsRnJhbWVzKCkuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9ICZjb2RlQmxvY2soKS0+aW5saW5lQ2FsbEZyYW1lcygp
W2ldOworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRz
RXNjYXBlZC5jb250YWlucygKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5leGVjdXRhYmxl
Rm9yKGlubGluZUNhbGxGcmFtZSkpKQorICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50
cy5hZGQoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Q3JlYXRlIGRhdGEgZm9yIHZhcmlhYmxlIGFjY2VzcyBkYXRhcyB0aGF0IHdlIHdpbGwgd2FudCB0
byBhbmFseXplLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2dyYXBoLm1fdmFyaWFibGVB
Y2Nlc3NEYXRhLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSAmbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXTsK
KyAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc1Jvb3QoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fYXJn
dW1lbnRzQWxpYXNpbmcuYWRkKHZhcmlhYmxlQWNjZXNzRGF0YSwgQXJndW1lbnRzQWxpYXNpbmdE
YXRhKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNo
IHZhcmlhYmxlcyBhbGlhcyB0aGUgYXJndW1lbnRzIGFuZCBub3RoaW5nIGVsc2UsIGFuZCBhcmUK
KyAgICAgICAgLy8gdXNlZCBvbmx5IGZvciBHZXRCeVZhbCBhbmQgR2V0QXJndW1lbnRzTGVuZ3Ro
IGFjY2Vzc2VzLiBBdCB0aGUgc2FtZSB0aW1lLAorICAgICAgICAvLyBpZGVudGlmeSB1c2VzIG9m
IENyZWF0ZUFyZ3VtZW50cyB0aGF0IGFyZSBub3QgY29uc2lzdGVudCB3aXRoIHRoZSBhcmd1bWVu
dHMKKyAgICAgICAgLy8gYmVpbmcgYWxpYXNlZCBvbmx5IHRvIHZhcmlhYmxlcyB0aGF0IHNhdGlz
ZnkgdGhlc2UgY29uc3RyYWludHMuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgp
IHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGlu
ZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWdu
b3JlIHRoaXMgb3AuIElmIHdlIHNlZSBhIGxvbmUgQ3JlYXRlQXJndW1lbnRzIHRoZW4gd2Ugd2Fu
dCB0bworICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV0ZWx5IGlnbm9yZSBpdCBiZWNhdXNl
OgorICAgICAgICAgICAgICAgICAgICAvLyAxKSBUaGUgZGVmYXVsdCB3b3VsZCBiZSB0byBzZWUg
dGhhdCB0aGUgY2hpbGQgaXMgYSBHZXRMb2NhbCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCBjb25jbHVkZSB0aGF0IHdlIGhhdmUgYW4gYXJn
dW1lbnRzIGVzY2FwZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gMikgVGhlIGZhY3QgdGhhdCBh
IENyZWF0ZUFyZ3VtZW50cyBleGlzdHMgZG9lcyBub3QgbWVhbiB0aGF0IGl0CisgICAgICAgICAg
ICAgICAgICAgIC8vICAgIHdpbGwgY29udGludWUgdG8gZXhpc3QgYWZ0ZXIgd2UncmUgZG9uZSB3
aXRoIHRoaXMgcGhhc2UuIEFzIGZhcgorICAgICAgICAgICAgICAgICAgICAvLyAgICBhcyB0aGlz
IHBoYXNlIGlzIGNvbmNlcm5lZCwgYSBDcmVhdGVBcmd1bWVudHMgb25seSAiZXhpc3RzIiBpZiBp
dAorICAgICAgICAgICAgICAgICAgICAvLyAgICBpcyB1c2VkIGluIGEgbWFubmVyIHRoYXQgbmVj
ZXNzaXRhdGVzIGl0cyBleGlzdGFuY2UuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBTZXRMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBOb2RlJiBzb3VyY2UgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldOworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2Uub3AoKSAhPSBDcmVhdGVBcmd1bWVudHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIFNl
dExvY2FsIGtub3dzIHRoYXQgaWYgaXQncworICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB2
YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywgdGhlbiBp
dAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBvaW50LiBJ
biBmdXR1cmUsIHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFsaWFzaW5nLiBCdXQgbm90IHlldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG9i
c2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlz
Q2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgaWYgaXQncyBhIHZhcmlhYmxlIHRoYXQgd2UgdGhpbmsgaXMgYWxpYXNlZCB0bworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cywgdGhhdCB3ZSBrbm93IHRoYXQgaXQg
bWlnaHQgYWN0dWFsbHkgbm90IGJlLgorICAgICAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRz
QWxpYXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRhdGEubWVyZ2VDYWxsQ29udGV4dChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3Rl
ciA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1Jl
Z2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbik7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNS
ZWdpc3RlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lID09IHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChzb3Vy
Y2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQXJndW1l
bnRzQWxpYXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1l
bnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGEubWVyZ2VBcmd1bWVudHNBc3NpZ25tZW50KCk7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2YXJpYWJsZSdzIHVzZXMgYXJlIGluIHRo
ZSBzYW1lIGNvbnRleHQgYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50cyBp
dCBpcyBhbGlhc2luZy4KKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICBk
YXRhLm1lcmdlQ2FsbENvbnRleHQoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAg
ICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50c0Fs
aWFzaW5nRGF0YSYgZGF0YSA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50c0Fs
aWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgICAg
ICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBGbHVzaDogeworICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNz
RGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXJnZUNhbGxDb250ZXh0
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgZmx1c2gg
dGhlbiBieSBkZWZpbml0aW9uIGl0IGVzY2FwZXMuCisgICAgICAgICAgICAgICAgICAgIGRhdGEu
ZXNjYXBlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDogeworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
QWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0Rh
dGEmIGRhdGEgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2luZy5m
aW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZU5vbkFyZ3VtZW50c0Fzc2lnbm1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwg
IW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKG5vZGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghaXNBY3Rpb25hYmxlQXJyYXlQcmVk
aWN0aW9uKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgIW1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNl
cyhub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVBcmd1bWVudHMoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSWYgYXJndW1lbnRzIGlzIHVzZWQgYXMgYW4gaW5kZXgsIHRo
ZW4gaXQncyBhbiBlc2NhcGluZyB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGF0
J3Mgc28gYXdmdWwgYW5kIHByZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGltcGx5IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHBy
ZWRpY3RlZCBpbnRlZ2VyLCBidXQgaXQncworICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ29v
ZCB0byBiZSBkZWZlbnNpdmUgYW5kIHRob3JvdWdoLgorICAgICAgICAgICAgICAgICAgICAgICAg
b2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG9ic2VydmVQcm9wZXJBcmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50
c1VzZXMobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRBcmd1bWVu
dHNMZW5ndGg6IHsKKyAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1Vz
ZShub2RlLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyhub2RlKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IHdlIGtub3cgd2hpY2ggdmFyaWFibGVz
IGFyZSBhbGlhc2VkIHRvIGFyZ3VtZW50cy4gQnV0IGlmIGFueSBvZiB0aGVtIGFyZQorICAgICAg
ICAvLyBmb3VuZCB0byBoYXZlIGVzY2FwZWQsIG9yIHdlcmUgb3RoZXJ3aXNlIGludmFsaWRhdGVk
LCB0aGVuIHdlIG5lZWQgdG8gbWFyaworICAgICAgICAvLyB0aGUgYXJndW1lbnRzIGFzIHJlcXVp
cmluZyBjcmVhdGlvbi4gVGhpcyBpcyBhIHByb3BlcnR5IG9mIFNldExvY2FscyB0bworICAgICAg
ICAvLyB2YXJpYWJsZXMgdGhhdCBhcmUgbmVpdGhlciB0aGUgY29ycmVjdCBhcmd1bWVudHMgcmVn
aXN0ZXIgbm9yIGFyZSBtYXJrZWQgYXMKKyAgICAgICAgLy8gYmVpbmcgYXJndW1lbnRzLWFsaWFz
ZWQuCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAg
ICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2Nr
LT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNo
b3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLm9wKCkgIT0gU2V0TG9jYWwpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIE5vZGUmIHNvdXJjZSA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07CisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5vcCgpICE9IENyZWF0ZUFyZ3VtZW50
cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQo
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY2FwdHVyZWQgY2FzZSB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiB0YWtlbiBjYXJlIG9mIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAv
LyBwcmV2aW91cyBwYXNzLgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQXJndW1lbnRzQWxp
YXNpbmdEYXRhJiBkYXRhID0KKyAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVudHNBbGlhc2lu
Zy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgICAgICAgICBpZiAo
ZGF0YS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50cy5hZGQoc291cmNlLmNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAg
IGRhdGFMb2coIkFyZ3VtZW50cyBhbGlhc2luZyBzdGF0ZXM6XG4iKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGEuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRh
ID0gJm1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV07CisgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNSb290KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBkYXRhTG9nKCIgICByJWQoJXMpOiAiLCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCksIG1fZ3JhcGgubmFtZU9mVmFyaWFibGVBY2Nlc3NEYXRhKHZhcmlhYmxlQWNjZXNzRGF0
YSkpOworICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkNhcHR1cmVkIik7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEgPQorICAgICAgICAg
ICAgICAgICAgICBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+
c2Vjb25kOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmIChkYXRhLmNhbGxDb250ZXh0SXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghZmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYXZlIENhbGwgQ29udGV4dDogJXAiLCBkYXRhLmNh
bGxDb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoZGF0YS5jYWxsQ29u
dGV4dCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgKERvZXMgTm90IENyZWF0
ZSBBcmd1bWVudHMpIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChk
YXRhLmFyZ3VtZW50c0Fzc2lnbm1lbnRJc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFmaXJzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiwgIik7CisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkFyZ3VtZW50cyBBc3NpZ25tZW50IElzIFZhbGlkIik7
CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghZGF0YS5lc2NhcGVzKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghZmlyc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIsICIpOworICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEb2VzIE5vdCBFc2NhcGUiKTsKKyAgICAgICAgICAg
ICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdCkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiLCAiKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZGF0YS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhkYXRhLmNhbGxDb250ZXh0KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIlZBTElEIik7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIklOVkFMSUQgKGR1ZSB0byBhcmd1
bWVudCBjcmVhdGlvbikiKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiSU5WQUxJRCAoZHVlIHRvIGJhZCB2YXJpYWJsZSB1c2UpIik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICB9CisjZW5kaWYK
KyAgICAgICAgCiAgICAgICAgIEluc2VydGlvblNldDxOb2RlSW5kZXg+IGluc2VydGlvblNldDsK
ICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKQEAgLTYwLDEx
ICszODEsMTI5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
ICAgICAgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmF0KGluZGV4SW5C
bG9jayk7CiAgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
KyAgICAgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dp
dGNoIChub2RlLm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVu
Z3RoOiB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZXhlY3V0YWJsZXNXaG9z
ZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5leGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikpKQorICAgICAgICAgICAgICAg
IGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSYgc291cmNlID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5vcCgp
ICE9IENyZWF0ZUFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0b3Jl
IGludG8gdGhlIGFyZ3VtZW50cyByZWdpc3RlciBmb3IgYW4gSW5saW5lQ2FsbEZyYW1lKgorICAg
ICAgICAgICAgICAgICAgICAvLyB0aGF0IGRvZXMgbm90IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4g
a2lsbCBpdC4KKyAgICAgICAgICAgICAgICAgICAgaW50IGFyZ3VtZW50c1JlZ2lzdGVyID0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPmxvY2FsKCkgPT0gYXJndW1lbnRzUmVnaXN0ZXIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lz
dGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFtX2NyZWF0ZXNBcmd1bWVudHMuY29u
dGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRmluZCB0aGUgRmx1c2guIEl0IHNob3VsZCBiZSB0aGUgbmV4dCBpbnN0
cnVjdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUmIGZsdXNoID0gbV9ncmFwaFti
bG9jay0+YXQoaW5kZXhJbkJsb2NrICsgMSldOworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGZsdXNoLm9wKCkgPT0gRmx1c2gpOworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGZsdXNoLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZhcmlhYmxlQWNjZXNzRGF0YSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmx1c2guY2hpbGQxKCkgPT0gbm9kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlIGRlZmVuc2l2ZSBpbiByZWxlYXNlIG1vZGUu
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmx1c2gub3AoKSAhPSBGbHVzaAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IGZsdXNoLnZhcmlhYmxlQWNjZXNzRGF0YSgpICE9IHZh
cmlhYmxlQWNjZXNzRGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZsdXNoLmNo
aWxkMSgpICE9IG5vZGVJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoLnNldE9wQW5kRGVmYXVsdEZsYWdzKE5vcCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEoZmx1
c2gpOworICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2guc2V0UmVmQ291bnQoMCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdG9yZSBpbnRvIGEgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB0aGF0IGlzIG1hcmtlZCBhcworICAgICAgICAgICAgICAgICAgICAvLyBhcmd1
bWVudHMgYWxpYXNpbmcgZm9yIGFuIElubGluZUNhbGxGcmFtZSogdGhhdCBkb2VzIG5vdCBjcmVh
dGUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzLCB0aGVuIGZsYWcgdGhlIFZhcmlh
YmxlQWNjZXNzRGF0YSBhcyBiZWluZyBhbgorICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVu
dHMtYWxpYXNlZC4gVGhpcydsbCBsZXQgdGhlIE9TUiBleGl0IG1hY2hpbmVyeSBkbyB0aGUgcmln
aHQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhpbmdzLiBOb3RlIGFsc28gdGhhdCB0aGUgU2V0
TG9jYWwgc2hvdWxkIGJlY29tZSBkZWFkIGFzIHNvb24gYXMKKyAgICAgICAgICAgICAgICAgICAg
Ly8gd2UgcmVwbGFjZSBhbGwgdXNlcyBvZiB0aGlzIHZhcmlhYmxlIHdpdGggR2V0TXlBcmd1bWVu
dHNMZW5ndGggYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIEdldE15QXJndW1lbnRCeVZhbC4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJs
ZUFjY2Vzc0RhdGEpLT5zZWNvbmQuaXNWYWxpZCgpCisgICAgICAgICAgICAgICAgICAgICAgICAm
JiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gdmFyaWFibGVB
Y2Nlc3NEYXRhLT5tZXJnZUlzQXJndW1lbnRzQWxpYXModHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgUGhhbnRvbTogeworICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIGhp
Z2hseSBsaWtlbHkgdGhhdCB3ZSB3aWxsIGhhdmUgYSBQaGFudG9tIHJlZmVyZW5jaW5nIGVpdGhl
cgorICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGVBcmd1bWVudHMsIG9yIGEgbG9jYWwgb3Ag
Zm9yIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIsIG9yIGEKKyAgICAgICAgICAgICAgICAgICAgLy8g
bG9jYWwgb3AgZm9yIGFuIGFyZ3VtZW50cy1hbGlhc2VkIHZhcmlhYmxlLiBJbiBhbnkgb2YgdGhv
c2UgY2FzZXMsCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIHNob3VsZCByZW1vdGUgdGhlIHBo
YW50b20gcmVmZXJlbmNlLCBzaW5jZToKKyAgICAgICAgICAgICAgICAgICAgLy8gMSkgUGhhbnRv
bXMgb25seSBleGlzdCB0byBhaWQgT1NSIGV4aXQuIEJ1dCBhcmd1bWVudHMgc2ltcGxpZmljYXRp
b24KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgaGFzIGl0cyBvd24gT1NSIGV4aXQgc3Rvcnks
IHdoaWNoIGlzIHRvIGluZm9ybSBPU1IgZXhpdCB0byByZWlmeQorICAgICAgICAgICAgICAgICAg
ICAvLyAgICB0aGUgYXJndW1lbnRzIGFzIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gMikgVGhlIFBoYW50b20gbWF5IGtlZXAgdGhlIENyZWF0ZUFyZ3VtZW50cyBub2RlIGFsaXZl
LCB3aGljaCBpcworICAgICAgICAgICAgICAgICAgICAvLyAgICBwcmVjaXNlbHkgd2hhdCB3ZSBk
b24ndCB3YW50LgorICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
QWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3Zl
QXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQobm9kZSwgaSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICAgICAgICAgICAgICBpZiAo
IW5vZGUucHJlZGljdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFt
X2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc0FjdGlvbmFibGVBcnJheVByZWRpY3Rpb24obV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVk
aWN0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUFyZ3VtZW50cygpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBiZSBzaW1wbGlmaWVkIHRvIEdldE15QXJndW1l
bnRCeVZhbCBpZiB3ZSBrbm93IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0IHNh
dGlzZmllcyBlaXRoZXIgY29uZGl0aW9uICgxKSBvciAoMik6CisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyAxKSBJdHMgZmlyc3QgY2hpbGQgaXMgYSB2YWxpZCBBcmd1bWVudHNBbGlhc2luZ0Rh
dGEgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgSW5saW5lQ2FsbEZyYW1l
KiBpcyBub3QgbWFya2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIDIpIEl0cyBmaXJzdCBjaGlsZCBpcyBDcmVhdGVBcmd1bWVudHMgYW5kIGl0cyBJ
bmxpbmVDYWxsRnJhbWUqCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBpcyBub3QgbWFy
a2VkIGFzIGNyZWF0aW5nIGFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShtX2dyYXBoW25vZGUuY2hp
bGQxKCldKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5kZXJlZihub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uY2hpbGQx
KCkgPSBub2RlLmNoaWxkcmVuLmNoaWxkMigpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgLS1p
bmRleEluQmxvY2s7IC8vIEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vdyB0aGF0
IGl0J3MgYSBHZXRNeUFyZ3VtZW50QnlWYWwuCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
c2UgR2V0QXJndW1lbnRzTGVuZ3RoOiB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1Rv
T3B0aW1pemUobV9ncmFwaFtub2RlLmNoaWxkMSgpXSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZGVyZWYobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRy
ZW4uY2hpbGQxKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8vIEZv
cmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlBcmd1
bWVudHNMZW5ndGguCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50c0xlbmd0aDoKKyAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2Fm
ZTogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5z
KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpID09IEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50c0xlbmd0
aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUuY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCkBAIC04MiwxMCArNTIxLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDogewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5z
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguZXhlY3V0YWJsZUZvcihub2Rl
LmNvZGVPcmlnaW4pKSkKKyAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoK
KyAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUub3AoKSA9PSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLm9wKCkgPT0gR2V0TXlBcmd1bWVudEJ5VmFsU2FmZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZS5zZXRPcChHZXRNeUFyZ3VtZW50QnlWYWwpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5oYXNDb25zdGFudCgpKQpAQCAtMTM4LDggKzU4MywxNDkgQEAgcHVi
bGljOgogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKmJsb2NrKTsKICAgICAgICAg
fQogICAgICAgICAKKyAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAgICBtX2dyYXBoLmNv
bGxlY3RHYXJiYWdlKCk7CisgICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9
CisgICAgCitwcml2YXRlOgorICAgIEhhc2hTZXQ8SW5saW5lQ2FsbEZyYW1lKiwKKyAgICAgICAg
ICAgIERlZmF1bHRIYXNoPElubGluZUNhbGxGcmFtZSo+OjpIYXNoLAorICAgICAgICAgICAgTnVs
bGFibGVIYXNoVHJhaXRzPElubGluZUNhbGxGcmFtZSo+ID4gbV9jcmVhdGVzQXJndW1lbnRzOwor
ICAgIEhhc2hNYXA8VmFyaWFibGVBY2Nlc3NEYXRhKiwgQXJndW1lbnRzQWxpYXNpbmdEYXRhLAor
ICAgICAgICAgICAgRGVmYXVsdEhhc2g8VmFyaWFibGVBY2Nlc3NEYXRhKj46Okhhc2gsCisgICAg
ICAgICAgICBOdWxsYWJsZUhhc2hUcmFpdHM8VmFyaWFibGVBY2Nlc3NEYXRhKj4gPiBtX2FyZ3Vt
ZW50c0FsaWFzaW5nOworCisgICAgdm9pZCBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIGlmICghZWRnZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtlZGdlXTsKKyAgICAgICAgaWYgKGNo
aWxkLm9wKCkgIT0gR2V0TG9jYWwpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBpZiAoY2hpbGQubG9jYWwoKSA9PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lz
dGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pKSB7CisgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVu
dHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2
YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
aWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKKyAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1
bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAg
ZGF0YS5lc2NhcGVzID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlcyhOb2RlJiBub2RlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9ncmFwaC5udW1DaGlsZHJlbihub2RlKTsgaS0tOykKKyAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2UobV9ncmFwaC5jaGlsZChub2RlLCBpKSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShOb2RlJiBub2RlLCBFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbZWRnZV07CisgICAgICAgIGlmIChjaGls
ZC5vcCgpICE9IEdldExvY2FsKSB7CisgICAgICAgICAgICAvLyBXaGVuIGNhbiB0aGlzIGhhcHBl
bj8gQXQgbGVhc3QgdHdvIGNhc2VzIHRoYXQgSSBjYW4gdGhpbmsKKyAgICAgICAgICAgIC8vIG9m
OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEpIEFsaWFzZWQgdXNlIG9mIGFyZ3Vt
ZW50cyBpbiB0aGUgc2FtZSBiYXNpYyBibG9jaywKKyAgICAgICAgICAgIC8vICAgIGxpa2U6Cisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gICAgdmFyIGEgPSBhcmd1bWVudHM7CisgICAg
ICAgICAgICAvLyAgICB2YXIgeCA9IGFyZ3VtZW50c1tpXTsKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyAyKSBJZiB3ZSdyZSBhY2Nlc3NpbmcgYXJndW1lbnRzIHdlIGdvdCBmcm9tIHRo
ZSBoZWFwIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGNo
aWxkLm9wKCkgPT0gQ3JlYXRlQXJndW1lbnRzCisgICAgICAgICAgICAgICAgJiYgbm9kZS5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICAgICAgICE9IGNoaWxkLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3VtZW50
cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1bWVudHNBbGlhc2lu
Zy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKKyAgICAgICAgZGF0YS5tZXJnZUNh
bGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzT0tUb09wdGltaXplKE5vZGUmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoc291cmNlLm9wKCkpIHsKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBzb3VyY2UudmFyaWFi
bGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Nh
cHR1cmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBBcmd1bWVudHNB
bGlhc2luZ0RhdGEmIGRhdGEgPQorICAgICAgICAgICAgICAgIG1fYXJndW1lbnRzQWxpYXNpbmcu
ZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICBpZiAoIWRhdGEu
aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG1fY3Jl
YXRlc0FyZ3VtZW50cy5jb250YWlucyhzb3VyY2UuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIGlm
IChtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUmIG5vZGUs
IHVuc2lnbmVkIGVkZ2VJbmRleCkKKyAgICB7CisgICAgICAgIEVkZ2UgZWRnZSA9IG5vZGUuY2hp
bGRyZW4uY2hpbGQoZWRnZUluZGV4KTsKKyAgICAgICAgaWYgKCFlZGdlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW2VkZ2VdOwor
ICAgICAgICBzd2l0Y2ggKGNoaWxkLm9wKCkpIHsKKyAgICAgICAgY2FzZSBQaGk6IC8vIEFyaXNl
cyBpZiB3ZSBoYWQgQ1NFIG9uIGEgR2V0TG9jYWwgb2YgdGhlIGFyZ3VtZW50cyByZWdpc3Rlci4K
KyAgICAgICAgY2FzZSBHZXRMb2NhbDogLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYW4gYXJn
dW1lbnRzIGFjY2VzcyB0byBhIHZhcmlhYmxlIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cy4KKyAg
ICAgICAgY2FzZSBTZXRMb2NhbDogeyAvLyBBcmlzZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdldExv
Y2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIuCisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwor
ICAgICAgICAgICAgYm9vbCBpc0RlYWRBcmd1bWVudHNSZWdpc3RlciA9CisgICAgICAgICAgICAg
ICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpID09CisgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hpbGQuY29kZU9yaWdpbikKKyAg
ICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGNoaWxkLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGJvb2wgaXNBbGlhc2VkQXJndW1l
bnRzUmVnaXN0ZXIgPQorICAgICAgICAgICAgICAgICF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2Fw
dHVyZWQoKQorICAgICAgICAgICAgICAgICYmIG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQuaXNWYWxpZCgpCisgICAgICAgICAgICAgICAgJiYgIW1f
Y3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFz
ZWRBcmd1bWVudHNSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IG1fZ3JhcGguZGVyZWYoZWRnZSk7CisgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnJlbW92ZUVk
Z2VGcm9tQmFnKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3
ZSBDU0UgdHdvIEdldExvY2FscyB0byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENT
RSB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgR2V0TG9jYWwgdG8gdGhlIGZpcnN0LgorICAgICAgICAg
ICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhjaGlsZC5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBtX2dyYXBo
LmRlcmVmKGVkZ2UpOworICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5yZW1vdmVFZGdlRnJvbUJh
ZyhlZGdlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CiB9OwogCiBib29sIHBlcmZvcm1Bcmd1bWVudHNTaW1wbGlmaWNhdGlvbihHcmFwaCYgZ3JhcGgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJz
LmgJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMSwxNCArMzExLDE4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fYmFzZWxpbmVDb2RlQmxvY2s7CiAgICAgfQogICAgIAotICAg
IGludCBhcmd1bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQor
ICAgIGludCBhcmd1bWVudHNSZWdpc3RlckZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSkKICAgICB7Ci0gICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9j
aygpLT5hcmd1bWVudHNSZWdpc3RlcigpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGJhc2Vs
aW5lQ29kZUJsb2NrRm9ySW5saW5lQ2FsbEZyYW1lKAotICAgICAgICAgICAgY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpLT5hcmd1bWVudHNSZWdpc3RlcigpICsKLSAgICAgICAgICAgIGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldDsKKyAgICAgICAgICAgIGlubGluZUNh
bGxGcmFtZSktPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0OworICAgIH0KKyAgICAKKyAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXJGb3IoY29uc3QgQ29k
ZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIHJldHVybiBhcmd1bWVudHNSZWdp
c3RlckZvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgfQogICAgIAogICAgIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcEZvcihDb2RlQmxv
Y2sqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1Myw3ICsyNDUzLDYg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czogewogICAgICAgICAgICAgbV9ncmFw
aC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBtX2dyYXBoLm1fZXhlY3V0YWJs
ZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuYWRkKG1faW5saW5lU3RhY2tUb3AtPmV4ZWN1dGFibGUo
KSk7CiAgICAgICAgICAgICBOb2RlSW5kZXggY3JlYXRlQXJndW1lbnRzID0gYWRkVG9HcmFwaChD
cmVhdGVBcmd1bWVudHMsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY3JlYXRlQXJn
dW1lbnRzKTsKICAgICAgICAgICAgIHNldCh1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGNyZWF0ZUFyZ3VtZW50cyk7CkBAIC0yNDcz
LDcgKzI0NzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDogewogICAg
ICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7Ci0gICAgICAgICAgICBzZXQo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChHZXRNeUFyZ3VtZW50
c0xlbmd0aCkpOworICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIGFkZFRvR3JhcGgoR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRzX2xlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtMjQ4MSw3ICsyNDgwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgbV9ncmFwaC5tX2hhc0FyZ3VtZW50cyA9IHRydWU7CiAg
ICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKAotICAgICAgICAgICAgICAgICAgICBHZXRNeUFyZ3VtZW50QnlW
YWwsIE9wSW5mbygwKSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksCisgICAgICAgICAgICAgICAg
ICAgIEdldE15QXJndW1lbnRCeVZhbFNhZmUsIE9wSW5mbygwKSwgT3BJbmZvKGdldFByZWRpY3Rp
b24oKSksCiAgICAgICAgICAgICAgICAgICAgIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2FyZ3VtZW50X2J5X3Zh
bCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE3MzcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk1LDkgKzM5NSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAg
ICAgaWYgKHBoaU5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIG1fZ3JhcGguZGVy
ZWYobXlOb2RlSW5kZXgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlZGdlSW5kZXg7IGkg
PCBBZGphY2VuY3lMaXN0OjpTaXplIC0gMTsgKytpKQotICAgICAgICAgICAgcGhpTm9kZS5jaGls
ZHJlbi5zZXRDaGlsZChpLCBwaGlOb2RlLmNoaWxkcmVuLmNoaWxkKGkgKyAxKSk7Ci0gICAgICAg
IHBoaU5vZGUuY2hpbGRyZW4uc2V0Q2hpbGQoQWRqYWNlbmN5TGlzdDo6U2l6ZSAtIDEsIEVkZ2Uo
KSk7CisgICAgICAgIHBoaU5vZGUuY2hpbGRyZW4ucmVtb3ZlRWRnZUZyb21CYWcoZWRnZUluZGV4
KTsKICAgICB9CiAgICAgCiAgICAgc3RydWN0IE9wZXJhbmRTdWJzdGl0dXRpb24gewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHJldmlzaW9uIDExNzM3MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzEsNiArMjcxLDggQEAgcHVibGljOgogICAgIC8vIFRoZXNlIGNvbnN0YW50cyBwcm92aWRl
IHRoZSBuYW1lcyBmb3IgdGhlIGdlbmVyYWwgcHVycG9zZSBhcmd1bWVudCAmIHJldHVybiB2YWx1
ZSByZWdpc3RlcnMuCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjAgPSBYODZS
ZWdpc3RlcnM6OmVjeDsgLy8gcmVnVDIKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFyZ3VtZW50
R1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQorICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgbm9uQXJnR1BSMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAorICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgbm9uQXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWJ4OyAvLyByZWdUMwogICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6OmVheDsg
Ly8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9IFg4NlJl
Z2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplY3g7CkBAIC0zNDAsNiArMzQyLDggQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgYXJndW1lbnRHUFIzID0gWDg2UmVnaXN0
ZXJzOjplY3g7IC8vIHJlZ1QyCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjQg
PSBYODZSZWdpc3RlcnM6OnI4OyAgLy8gcmVnVDYKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGFy
Z3VtZW50R1BSNSA9IFg4NlJlZ2lzdGVyczo6cjk7ICAvLyByZWdUNworICAgIHN0YXRpYyBjb25z
dCBHUFJSZWcgbm9uQXJnR1BSMCA9IFg4NlJlZ2lzdGVyczo6ZWF4OyAvLyByZWdUMAorICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJnR1BSMSA9IFg4NlJlZ2lzdGVyczo6ZWJ4OyAvLyByZWdU
MwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmV0dXJuVmFsdWVHUFIgPSBYODZSZWdpc3RlcnM6
OmVheDsgLy8gcmVnVDAKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHJldHVyblZhbHVlR1BSMiA9
IFg4NlJlZ2lzdGVyczo6ZWR4OyAvLyByZWdUMQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9u
UHJlc2VydmVkTm9uUmV0dXJuR1BSID0gWDg2UmVnaXN0ZXJzOjplc2k7CkBAIC00MTAsNiArNDE0
LDggQEAgcHVibGljOgogICAgIC8vIGJldHdlZW4gdGhlIGFyZ3VtZW50cyBiZWluZyBzZXQgdXAs
IGFuZCB0aGUgY2FsbCBiZWluZyBtYWRlLiBUaGF0IHNhaWQsCiAgICAgLy8gYW55IGNoYW5nZSBp
bnRyb2R1Y2luZyBhIHByb2JsZW0gaGVyZSBpcyBsaWtlbHkgdG8gYmUgaW1tZWRpYXRlbHkgYXBw
YXJlbnQhCiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBhcmd1bWVudEdQUjMgPSBBUk1SZWdpc3Rl
cnM6OnIzOyAvLyBGSVhNRSEKKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIG5vbkFyZ0dQUjAgPSBY
ODZSZWdpc3RlcnM6OnI0OyAvLyByZWdUMworICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uQXJn
R1BSMSA9IFg4NlJlZ2lzdGVyczo6cjg7IC8vIHJlZ1Q0CiAgICAgc3RhdGljIGNvbnN0IEdQUlJl
ZyByZXR1cm5WYWx1ZUdQUiA9IEFSTVJlZ2lzdGVyczo6cjA7IC8vIHJlZ1QwCiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyByZXR1cm5WYWx1ZUdQUjIgPSBBUk1SZWdpc3RlcnM6OnIxOyAvLyByZWdU
MQogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgbm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSID0gQVJN
UmVnaXN0ZXJzOjpyMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDYgKzQwMiw1OCBAQCB2b2lkIEdyYXBoOjpoYW5k
bGVTdWNjZXNzb3IoVmVjdG9yPEJsb2NrCiAgICAgc3VjY2Vzc29yLT5tX3ByZWRlY2Vzc29ycy5h
cHBlbmQoYmxvY2tJbmRleCk7CiB9CiAKK3ZvaWQgR3JhcGg6OmNvbGxlY3RHYXJiYWdlKCkKK3sK
KyAgICAvLyBGaXJzdCByZXNldCB0aGUgY291bnRzIHRvIDAgZm9yIGFsbCBub2Rlcy4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCisgICAgICAgIGF0KGkpLnNldFJlZkNvdW50
KDApOworICAgIAorICAgIC8vIE5vdyBmaW5kIHRoZSByb290czogdGhlIG5vZGVzIHRoYXQgYXJl
IG11c3QtZ2VuZXJhdGUuIFNldCB0aGVpciByZWYgY291bnRzIHRvCisgICAgLy8gMSBhbmQgcHV0
IHRoZW0gb24gdGhlIHdvcmtsaXN0LgorICAgIFZlY3RvcjxOb2RlSW5kZXgsIDEyOD4gd29ya2xp
c3Q7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IGJs
b2NrLT5zaXplKCk7IGluZGV4SW5CbG9jay0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IGF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICBpZiAoIShub2RlLmZsYWdzKCkgJiBOb2Rl
TXVzdEdlbmVyYXRlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG5v
ZGUuc2V0UmVmQ291bnQoMSk7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQobm9kZUluZGV4
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHko
KSkgeworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gd29ya2xpc3QubGFzdCgpOworICAg
ICAgICB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CisgICAgICAgIE5vZGUmIG5vZGUgPSBhdChub2Rl
SW5kZXgpOworICAgICAgICBBU1NFUlQobm9kZS5zaG91bGRHZW5lcmF0ZSgpKTsgLy8gSXQgc2hv
dWxkIG5vdCBiZSBvbiB0aGUgd29ya2xpc3QgdW5sZXNzIGl0J3MgcmVmJ2VkLgorICAgICAgICBp
ZiAobm9kZS5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgY2hpbGRJZHggPSBub2RlLmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgY2hp
bGRJZHggPCBub2RlLmZpcnN0Q2hpbGQoKSArIG5vZGUubnVtQ2hpbGRyZW4oKTsKKyAgICAgICAg
ICAgICAgICAgKytjaGlsZElkeCkgeworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBjaGlsZE5v
ZGVJbmRleCA9IG1fdmFyQXJnQ2hpbGRyZW5bY2hpbGRJZHhdLmluZGV4KCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFhdChjaGlsZE5vZGVJbmRleCkucmVmKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChjaGlsZE5vZGVJbmRl
eCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZDEoKSkgewor
ICAgICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnJlZigpKQorICAgICAgICAgICAgICAg
IHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMSgpLmluZGV4KCkpOworICAgICAgICAgICAgaWYg
KG5vZGUuY2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDIoKSku
cmVmKCkpCisgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMigp
LmluZGV4KCkpOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMygpKS5yZWYoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZChub2RlLmNoaWxkMygpLmluZGV4KCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBH
cmFwaDo6ZGV0ZXJtaW5lUmVhY2hhYmlsaXR5KCkKIHsKICAgICBWZWN0b3I8QmxvY2tJbmRleCwg
MTY+IHdvcmtsaXN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2
aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjEsNiArMTYxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgbm9kZS5j
aGlsZHJlbi5jaGlsZDMoKSA9IEVkZ2UoKTsKICAgICB9CiAgICAgCisgICAgLy8gQ2FsbCB0aGlz
IGlmIHlvdSd2ZSBtb2RpZmllZCB0aGUgcmVmZXJlbmNlIGNvdW50cyBvZiBub2RlcyB0aGF0IGRl
YWwgd2l0aAorICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVz
ZSBsb2NhbCB2YXJpYWJsZSByZWZlcmVuY2VzIGNhbiBmb3JtCisgICAgLy8gY3ljbGVzLCBhbmQg
aGVuY2UgcmVmZXJlbmNlIGNvdW50aW5nIGlzIG5vdCBlbm91Z2guIFRoaXMgd2lsbCByZXNldCB0
aGUKKyAgICAvLyByZWZlcmVuY2UgY291bnRzIGFjY29yZGluZyB0byByZWFjaGFiaWxpdHkuCisg
ICAgdm9pZCBjb2xsZWN0R2FyYmFnZSgpOworICAgIAogICAgIHZvaWQgY29udmVydFRvQ29uc3Rh
bnQoTm9kZUluZGV4IG5vZGVJbmRleCwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIpCiAgICAgewog
ICAgICAgICBhdChub2RlSW5kZXgpLmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsK
QEAgLTMwNCwxMiArMzEwLDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZtX3N0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGVGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICBFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZUZvcihJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
ICAgICB7Ci0gICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKTsKICAgICAgICAgCi0gICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUNh
bGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGVGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBleGVjdXRhYmxlRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
ICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQpAQCAtMzE3LDYgKzMyOCwzMCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KGNvZGVPcmlnaW4sIG1fcHJvZmlsZWRCbG9jayk7CiAgICAgfQogICAgIAorICAgIGludCBhcmd1
bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biBtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBiYXNlbGluZUNvZGVCbG9ja0ZvcklubGluZUNhbGxGcmFtZSgKKyAgICAgICAgICAgIGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS0+YXJndW1lbnRzUmVnaXN0ZXIoKSArCisgICAgICAg
ICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQ7CisgICAgfQorICAg
IAorICAgIGludCB1bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+dW5jaGVja2VkQXJndW1lbnRz
UmVnaXN0ZXIoKTsKKyAgICAgICAgCisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFz
ZWxpbmVDb2RlQmxvY2tGb3JJbmxpbmVDYWxsRnJhbWUoCisgICAgICAgICAgICBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIGlmICghY29kZUJsb2NrLT51c2VzQXJndW1lbnRz
KCkpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkgKworICAgICAg
ICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0OworICAgIH0KKyAg
ICAKICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvcihOb2RlSW5kZXggbm9kZUluZGV4
KQogICAgIHsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCkBAIC00MTIsOSArNDQ3
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuICFpc1ByZWRpY3RlZE51bWVyaWNhbChu
b2RlKTsKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgIHJldHVybiAhYnlWYWxJ
c1B1cmUobm9kZSk7Ci0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAgICAgICAg
ICAgcmV0dXJuIG1fZXhlY3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0g
ICAgICAgICAgICAgICAgZXhlY3V0YWJsZUZvcihub2RlLmNvZGVPcmlnaW4pKTsKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7IC8vIElmIGJ5IHNvbWUgb2RkaXR5IHdlIGhpdCB0aGlzIGNhc2UgaW4gcmVs
ZWFzZSBidWlsZCBpdCdzIHNhZmVyIHRvIGhhdmUgQ1NFIGFzc3VtZSB0aGUgd29yc3QuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTE3MzcxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyOCw2
ICs1MjgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAg
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAg
ICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgogICAgICAgICBjYXNlIENhbGw6CiAg
ICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTE3MzcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAv
KiBhcyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGxvY2FsIGFjY2VzcywgYW5kIHRodXMgaGFkIHRo
ZWlyIG93biBwcm9maWxpbmcuICovXAogICAgIG1hY3JvKEdldExvY2FsVW5saW5rZWQsIE5vZGVS
ZXN1bHRKUykgXAogICAgIFwKLSAgICAvKiBNYXJrZXIgZm9yIGFyZ3VtZW50cyBiZWluZyBzZXQu
ICovXAorICAgIC8qIE1hcmtlciBmb3IgYW4gYXJndW1lbnQgYmVpbmcgc2V0IGF0IHRoZSBwcm9s
b2d1ZSBvZiBhIGZ1bmN0aW9uLiAqL1wKICAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXAogICAg
IFwKICAgICAvKiBIaW50IHRoYXQgaW5saW5pbmcgYmVnaW5zIGhlcmUuIE5vIGNvZGUgaXMgZ2Vu
ZXJhdGVkIGZvciB0aGlzIG5vZGUuIEl0J3Mgb25seSAqL1wKQEAgLTE5OCw4ICsxOTgsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIHNlbnNlLiAqL1wKICAgICBt
YWNybyhDcmVhdGVBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFRlYXJPZmZB
cmd1bWVudHMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhHZXRNeUFyZ3VtZW50c0xl
bmd0aCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxk
KSBcCi0gICAgbWFjcm8oR2V0TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKEdldE15QXJndW1lbnRz
TGVuZ3RoLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oR2V0
TXlBcmd1bWVudEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oR2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhHZXRNeUFyZ3VtZW50QnlW
YWxTYWZlLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKICAgICBtYWNybyhDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGNyZWF0aW5nIGZ1bmN0aW9ucy4gKi9cCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2
ICsxMzAsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
Ym9vbCBoYXZlRlBScyA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwog
ICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUFyZ3VtZW50cyA9
IGZhbHNlOwogICAgIAogICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CiAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKQEAgLTE5Myw2ICsxOTQsMTAg
QEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAg
ICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQ6CisgICAgICAgICAg
ICBoYXZlQXJndW1lbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTI2
LDcgKzUzMSw3MSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gMTEpIEFkanVzdCB0aGUgb2xkIEpJVCdzIGV4
ZWN1dGUgY291bnRlci4gU2luY2Ugd2UgYXJlIGV4aXRpbmcgT1NSLCB3ZSBrbm93CisgICAgLy8g
MTEpIENyZWF0ZSBhcmd1bWVudHMgaWYgbmVjZXNzYXJ5IGFuZCBwbGFjZSB0aGVtIGludG8gdGhl
IGFwcHJvcHJpYXRlIGFsaWFzZWQKKyAgICAvLyAgICAgcmVnaXN0ZXJzLgorICAgIAorICAgIGlm
IChoYXZlQXJndW1lbnRzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQXJndW1lbnRzVGhhdFdlcmVOb3RD
cmVhdGVkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaW50IG9wZXJh
bmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgICAgICAvLyBGaW5kIHRo
ZSByaWdodCBpbmxpbmUgY2FsbCBmcmFtZS4KKyAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSog
aW5saW5lQ2FsbEZyYW1lID0gMDsKKyAgICAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBj
dXJyZW50ID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAgICAg
ICAgICBjdXJyZW50OworICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+Y2FsbGVy
LmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5zdGFja09m
ZnNldCA8PSBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9
IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9IG1faml0
LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKGlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoYXJndW1l
bnRzUmVnaXN0ZXIpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBBc3NlbWJseUhlbHBl
cnM6Okp1bXAgaGF2ZUFyZ3VtZW50cyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAg
IEFzc2VtYmx5SGVscGVyczo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxw
ZXJzOjp0YWdGb3IoYXJndW1lbnRzUmVnaXN0ZXIpLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5
SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAgICAg
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDx2
b2lkKj4ob3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cykpLAorICAgICAgICAgICAgICAg
ICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9w
ZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cykpLAorICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpu
b25BcmdHUFIwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faml0LmNhbGwoR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICAgICAg
ICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKGFyZ3VtZW50c1JlZ2lzdGVyKSk7
CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSLAorICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZv
cihhcmd1bWVudHNSZWdpc3RlcikpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigKKyAgICAg
ICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcih1bm1vZGlmaWVkQXJn
dW1lbnRzUmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKAorICAgICAgICAgICAgICAgIEdQUkluZm86OnJldHVyblZhbHVlR1BSLAorICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcih1bm1vZGlmaWVkQXJndW1lbnRz
UmVnaXN0ZXIoYXJndW1lbnRzUmVnaXN0ZXIpKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIG5vLW9wIG1vdmUgb24g
YWxtb3N0IGFsbCBwbGF0Zm9ybXMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhdmVBcmd1
bWVudHMubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMigKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwK
KyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcihvcGVyYW5kKSk7CisgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBh
eWxvYWRGb3Iob3BlcmFuZCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDEyKSBB
ZGp1c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5n
IE9TUiwgd2Uga25vdwogICAgIC8vICAgICB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNv
ZGUgd2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKICAgICAvLyAgICAgY291
bnRlciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5k
IGNhbGwgZnJhbWVzCiAgICAgLy8gICAgIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9s
ZCBKSVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKQEAgLTU2NCwxNCArNjMz
LDE0IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAKICAg
ICBoYW5kbGVFeGl0Q291bnRzKGV4aXQpOwogICAgIAotICAgIC8vIDEyKSBMb2FkIHRoZSByZXN1
bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgLy8gMTMp
IExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdU
MC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpIHsKICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVy
czo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQ
UkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5k
KSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIyKTsKICAgICB9CiAgICAgCi0gICAgLy8g
MTMpIEZpeCBjYWxsIGZyYW1lIChzKS4KKyAgICAvLyAxNCkgRml4IGNhbGwgZnJhbWUgKHMpLgog
ICAgIAogICAgIEFTU0VSVChtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5nZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIG1faml0LnN0b3JlUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihtX2ppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2spKTsKQEAgLTYxMCw3ICs2NzksNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4
aXQoY29uc3QgCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAg
ICAgICAgbV9qaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXQubV9j
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCi0gICAgLy8gMTQpIEp1bXAg
aW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAvLyAxNSkgSnVt
cCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgogICAgIAogICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihl
eGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4m
IGRlY29kZWRDb2RlTWFwID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxv
Y2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiAr
MTI3LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgIGJv
b2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwogICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNl
OwogICAgIGJvb2wgaGF2ZVVJbnQzMnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVBcmd1bWVudHMg
PSBmYWxzZTsKICAgICAKICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewogICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CkBAIC0xODQsNiArMTg1LDEw
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAg
ICAgICBoYXZlVW5kZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkOgorICAgICAgICAg
ICAgaGF2ZUFyZ3VtZW50cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUw
NSw3ICs1MTAsNTggQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIDEzKSBBZGp1c3QgdGhlIG9sZCBKSVQncyBl
eGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9TUiwgd2Uga25vdworICAgIC8v
IDEzKSBDcmVhdGUgYXJndW1lbnRzIGlmIG5lY2Vzc2FyeSBhbmQgcGxhY2UgdGhlbSBpbnRvIHRo
ZSBhcHByb3ByaWF0ZSBhbGlhc2VkCisgICAgLy8gICAgIHJlZ2lzdGVycy4KKyAgICAKKyAgICBp
ZiAoaGF2ZUFyZ3VtZW50cykgeworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
ZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGludCBvcGVy
YW5kID0gZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICAgICAgLy8gRmluZCB0
aGUgcmlnaHQgaW5saW5lIGNhbGwgZnJhbWUuCisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IDA7CisgICAgICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSog
Y3VycmVudCA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAg
ICAgICAgY3VycmVudDsKKyAgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmNhbGxl
ci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+c3RhY2tP
ZmZzZXQgPD0gb3BlcmFuZCkgeworICAgICAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUg
PSBjdXJyZW50OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgYXJndW1lbnRzUmVnaXN0ZXIgPSBtX2pp
dC5hcmd1bWVudHNSZWdpc3RlckZvcihpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcihhcmd1
bWVudHNSZWdpc3RlciksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6SnVtcCBoYXZlQXJndW1lbnRzID0gbV9qaXQuYnJhbmNoVGVzdFB0cigKKyAgICAgICAg
ICAgICAgICBBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sIEdQUkluZm86OnJlZ1QwKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGlubGluZUNhbGxGcmFtZSkpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoCisgICAgICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2Fz
dDx2b2lkKj4ob3BlcmF0aW9uQ3JlYXRlSW5saW5lZEFyZ3VtZW50cykpLAorICAgICAgICAgICAg
ICAgICAgICBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKAorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoCisgICAgICAgICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cykpLAorICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
Ojpub25BcmdHUFIwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faml0LmNhbGwoR1BS
SW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGFyZ3VtZW50c1JlZ2lz
dGVyKSk7CisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwKKyAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IodW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkp
OworICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5m
bzo6cmVnVDApOyAvLyBuby1vcCBtb3ZlIG9uIGFsbW9zdCBhbGwgcGxhdGZvcm1zLgorICAgICAg
ICAgICAgCisgICAgICAgICAgICBoYXZlQXJndW1lbnRzLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3Iob3BlcmFuZCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDE0KSBBZGp1
c3QgdGhlIG9sZCBKSVQncyBleGVjdXRlIGNvdW50ZXIuIFNpbmNlIHdlIGFyZSBleGl0aW5nIE9T
Uiwgd2Uga25vdwogICAgIC8vICAgICB0aGF0IGFsbCBuZXcgY2FsbHMgaW50byB0aGlzIGNvZGUg
d2lsbCBnbyB0byB0aGUgbmV3IEpJVCwgc28gdGhlIGV4ZWN1dGUKICAgICAvLyAgICAgY291bnRl
ciBvbmx5IGFmZmVjdHMgY2FsbCBmcmFtZXMgdGhhdCBwZXJmb3JtZWQgT1NSIGV4aXQgYW5kIGNh
bGwgZnJhbWVzCiAgICAgLy8gICAgIHRoYXQgd2VyZSBzdGlsbCBleGVjdXRpbmcgdGhlIG9sZCBK
SVQgYXQgdGhlIHRpbWUgb2YgYW5vdGhlciBjYWxsIGZyYW1lJ3MKQEAgLTU0MywxMiArNTk5LDEy
IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAKICAgICBo
YW5kbGVFeGl0Q291bnRzKGV4aXQpOwogICAgIAotICAgIC8vIDE0KSBMb2FkIHRoZSByZXN1bHQg
b2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgLy8gMTUpIExv
YWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4K
ICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpCiAgICAgICAgIG1faml0LmxvYWRQdHIoQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5m
bzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIAotICAgIC8vIDE1KSBGaXggY2FsbCBmcmFt
ZShzKS4KKyAgICAvLyAxNikgRml4IGNhbGwgZnJhbWUocykuCiAgICAgCiAgICAgQVNTRVJUKG1f
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVCk7CiAgICAgbV9qaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KG1faml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpOwpAQCAtNTg0LDcgKzY0
MCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICBpZiAo
ZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBtX2ppdC5hZGRQdHIo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCi0gICAgLy8gMTYpIEp1bXAgaW50byB0aGUgY29ycmVz
cG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAvLyAxNykgSnVtcCBpbnRvIHRoZSBjb3Jy
ZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgogICAgIAogICAgIENvZGVCbG9jayogYmFzZWxp
bmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdp
bik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFw
ID0gbV9qaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVDb2RlQmxvY2spOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2
aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgY29tcGlsZU9T
UkV4aXQoRXhlY1N0YXRlKiBleGVjKQogI2VuZGlmCiAKICAgICB7Ci0gICAgICAgIEFzc2VtYmx5
SGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAgICAgQ0NhbGxIZWxwZXJz
IGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOwogICAgICAgICBPU1JFeGl0Q29tcGlsZXIgZXhp
dENvbXBpbGVyKGppdCk7CiAgICAgICAgIAogICAgICAgICBleGl0Q29tcGlsZXIuY29tcGlsZUV4
aXQoZXhpdCwgcmVjb3ZlcnkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdBc3NlbWJseUhl
bHBlcnMuaCIKKyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdPU1JF
eGl0LmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogCkBAIC00Miw3ICs0Myw3IEBAIG5h
bWVzcGFjZSBERkcgewogCiBjbGFzcyBPU1JFeGl0Q29tcGlsZXIgewogcHVibGljOgotICAgIE9T
UkV4aXRDb21waWxlcihBc3NlbWJseUhlbHBlcnMmIGppdCkKKyAgICBPU1JFeGl0Q29tcGlsZXIo
Q0NhbGxIZWxwZXJzJiBqaXQpCiAgICAgICAgIDogbV9qaXQoaml0KQogICAgIHsKICAgICB9CkBA
IC03Miw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVFeGl0Q291bnRz
KGNvbnN0IE9TUkV4aXQmKTsKICAgICAKLSAgICBBc3NlbWJseUhlbHBlcnMmIG1faml0OworICAg
IENDYWxsSGVscGVycyYgbV9qaXQ7CiAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3BvaXNvblNjcmF0
Y2hJbmRpY2VzOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI0LDEzICsxMDI0LDIx
IEBAIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVBY3QKIAogSlNDZWxsKiBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZUFyZ3VtZW50cyhFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgcmV0dXJuIEFyZ3VtZW50czo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYyk7
CisgICAgLy8gTkI6IFRoaXMgbmVlZHMgdG8gYmUgZXhjZWVkaW5nbHkgY2FyZWZ1bCB3aXRoIHRv
cCBjYWxsIGZyYW1lIHRyYWNraW5nLCBzaW5jZSBpdAorICAgIC8vIG1heSBiZSBjYWxsZWQgZnJv
bSBPU1IgZXhpdCwgd2hpbGUgdGhlIHN0YXRlIG9mIHRoZSBjYWxsIHN0YWNrIGlzIGJpemFycmUu
CisgICAgQXJndW1lbnRzKiByZXN1bHQgPSBBcmd1bWVudHM6OmNyZWF0ZShleGVjLT5nbG9iYWxE
YXRhKCksIGV4ZWMpOworICAgIEFTU0VSVCghZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlvbik7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNyZWF0ZUlubGluZWRBcmd1bWVudHMoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSkKIHsKLSAgICByZXR1cm4gQXJndW1lbnRzOjpjcmVhdGUo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLCBpbmxpbmVDYWxsRnJhbWUpOworICAgIC8vIE5COiBU
aGlzIG5lZWRzIHRvIGJlIGV4Y2VlZGluZ2x5IGNhcmVmdWwgd2l0aCB0b3AgY2FsbCBmcmFtZSB0
cmFja2luZywgc2luY2UgaXQKKyAgICAvLyBtYXkgYmUgY2FsbGVkIGZyb20gT1NSIGV4aXQsIHdo
aWxlIHRoZSBzdGF0ZSBvZiB0aGUgY2FsbCBzdGFjayBpcyBiaXphcnJlLgorICAgIEFyZ3VtZW50
cyogcmVzdWx0ID0gQXJndW1lbnRzOjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLCBp
bmxpbmVDYWxsRnJhbWUpOworICAgIEFTU0VSVCghZXhlYy0+Z2xvYmFsRGF0YSgpLmV4Y2VwdGlv
bik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
blRlYXJPZmZBY3RpdmF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBhY3RpdmF0aW9uQ2Vs
bCwgaW50MzJfdCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
NywxMyArNDM3LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOiB7CisgICAgICAg
IGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsU2FmZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24obm9kZS5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGNo
YW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1i
ZXIgfCBOb2RlVXNlZEFzSW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDogeworICAgICAgICBj
YXNlIEdldE15QXJndW1lbnRzTGVuZ3RoU2FmZTogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBz
ZXRQcmVkaWN0aW9uKFByZWRpY3RJbnQzMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtNjE2LDcgKzYxNiw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0RmxvYXQ2NEFy
cmF5TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKICAgICAgICAgY2FzZSBJ
bnQzMlRvRG91YmxlOgotICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKKyAgICAgICAg
Y2FzZSBHZXRMb2NhbFVubGlua2VkOgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3Ro
OgorICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDogewogICAgICAgICAgICAgLy8gVGhp
cyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRp
b24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xs
b3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTE3MzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkwOSwyNSArMzkw
OSwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOiB7Ci0gICAgICAgIGlmICgh
bV9qaXQuZ3JhcGgoKS5tX2V4ZWN1dGFibGVzV2hvc2VBcmd1bWVudHNFc2NhcGVkLmNvbnRhaW5z
KAotICAgICAgICAgICAgICAgIG1faml0LmdyYXBoKCkuZXhlY3V0YWJsZUZvcihub2RlLmNvZGVP
cmlnaW4pKSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQXJndW1lbnRzRXNj
YXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0ZXJG
b3Iobm9kZS5jb2RlT3JpZ2luKSksCi0gICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBBU1NF
UlQoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3Vu
dCksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21w
aWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBB
cmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OnRhZ0ZvcihtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZv
cihub2RlLmNvZGVPcmlnaW4pKSwKKyAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbm9kZS5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7CisgICAgICAg
IGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KICAgICAgICAgCisgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6IHsK
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BS
ID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKQEAgLTM5NzAsNTQgKzM5NjksNTkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0UGF5
bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdH
UFIgPSByZXN1bHRUYWcuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIW1faml0LmdyYXBo
KCkubV9leGVjdXRhYmxlc1dob3NlQXJndW1lbnRzRXNjYXBlZC5jb250YWlucygKLSAgICAgICAg
ICAgICAgICBtX2ppdC5ncmFwaCgpLmV4ZWN1dGFibGVGb3Iobm9kZS5jb2RlT3JpZ2luKSkpIHsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQXJndW1lbnRz
RXNjYXBlZCwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaDMyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAg
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjp0YWdGb3IobV9qaXQuYXJndW1lbnRzUmVnaXN0
ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSksCi0gICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4R1BSLCByZXN1bHRQYXlsb2FkR1BSKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICBKSVRD
b21waWxlcjo6dGFnRm9yKG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdp
bikpLAorICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBh
eWxvYWRHUFIsCi0gICAgICAgICAgICAgICAgICAgICAgICBJbW0zMihub2RlLmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKSkpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAg
ICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpB
Ym92ZU9yRXF1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQYXlsb2FkR1BSLAot
ICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50KSkpOwotICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
ICAgIG1faml0Lm5lZzMyKHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAKLSAgICAgICAgICAg
IHNpemVfdCBiYXNlT2Zmc2V0ID0KLSAgICAgICAgICAgICAgICAoKG5vZGUuY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUKLSAgICAgICAgICAgICAgICAgID8gbm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQKLSAgICAgICAgICAgICAgICAgIDogMCkgKyBDYWxsRnJh
bWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSkgKiBzaXplb2YoUmVnaXN0ZXIpOwot
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpC
YXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LCByZXN1bHRQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgYmFzZU9mZnNldCArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlw
dG9yLCBhc0JpdHMudGFnKSksCi0gICAgICAgICAgICAgICAgcmVzdWx0VGFnR1BSKTsKLSAgICAg
ICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmFzZUlu
ZGV4KAotICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgcmVz
dWx0UGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgIGJhc2VPZmZzZXQgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSwKLSAgICAgICAgICAgICAgICByZXN1bHRQYXlsb2FkR1BSKTsKKyAg
ICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUiwgcmVzdWx0UGF5bG9h
ZEdQUik7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFn
R1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMigKKyAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0UGF5bG9hZEdQUiwKKyAgICAgICAgICAgICAgICAgICAgSW1tMzIobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAg
ICAgVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgICAgICBt
X2ppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JF
cXVhbCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZEdQUiwKKyAgICAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENv
dW50KSkpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRQ
YXlsb2FkR1BSKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBiYXNlT2Zmc2V0ID0KKyAgICAg
ICAgICAgICgobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQorICAgICAgICAgICAgICA/
IG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0CisgICAgICAgICAg
ICAgIDogMCkgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSkgKiBz
aXplb2YoUmVnaXN0ZXIpOworICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICBKSVRD
b21waWxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCByZXN1bHRQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6VGltZXNFaWdodCwKKyAgICAg
ICAgICAgICAgICBiYXNlT2Zmc2V0ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2Ny
aXB0b3IsIGFzQml0cy50YWcpKSwKKyAgICAgICAgICAgIHJlc3VsdFRhZ0dQUik7CisgICAgICAg
IG1faml0LmxvYWQzMigKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpCYXNlSW5kZXgoCisgICAg
ICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWRHUFIs
IEpJVENvbXBpbGVyOjpUaW1lc0VpZ2h0LAorICAgICAgICAgICAgICAgIGJhc2VPZmZzZXQgKyBP
QkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSwK
KyAgICAgICAgICAgIHJlc3VsdFBheWxvYWRHUFIpOworICAgICAgICAgICAgCisgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNh
ZmU6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0g
cmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3Vs
dFRhZy5ncHIoKTsKKyAgICAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
MzIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OTAsMjEgKzM4
OTAsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2ppdC5ncmFwaCgpLm1fZXhl
Y3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikpKSB7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgIEFyZ3VtZW50c0VzY2FwZWQs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0
UHRyKAotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm9uWmVybywKLSAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5hcmd1bWVudHNSZWdpc3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBBU1NFUlQoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9y
KFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBt
X2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KKyAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgIEFyZ3Vt
ZW50c0VzY2FwZWQsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwKKyAgICAgICAgICAgIG1faml0LmJy
YW5jaFRlc3RQdHIoCisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vblplcm8sCisgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IoCisgICAgICAgICAgICAgICAgICAg
IG1faml0LmFyZ3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IoUmVnaXN0ZXJGaWxlOjpB
cmd1bWVudENvdW50KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZElt
bTMyKDEpLCByZXN1bHRHUFIpOworICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
R2V0TXlBcmd1bWVudHNMZW5ndGhTYWZlOiB7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAg
IAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjcmVhdGVkID0gbV9qaXQuYnJhbmNoVGVzdFB0
cigKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLApAQCAtMzk0Myw0NiArMzk0NSw1
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2ppdC5ncmFwaCgpLm1fZXhl
Y3V0YWJsZXNXaG9zZUFyZ3VtZW50c0VzY2FwZWQuY29udGFpbnMoCi0gICAgICAgICAgICAgICAg
bV9qaXQuZ3JhcGgoKS5leGVjdXRhYmxlRm9yKG5vZGUuY29kZU9yaWdpbikpKSB7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICBBcmd1bWVudHNFc2NhcGVkLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2hUZXN0UHRyKAorICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAorICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5hcmd1bWVudHNSZWdp
c3RlckZvcihub2RlLmNvZGVPcmlnaW4pKSkpOworCisgICAgICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGlmIChub2RlLmNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAor
ICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsCisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpBYm92ZU9yRXF1YWwsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKKyAgICAg
ICAgICAgICAgICAgICAgSW1tMzIobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKSkpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgQXJndW1lbnRzRXNjYXBlZCwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3RQdHIoCi0gICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb25aZXJvLAotICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmFy
Z3VtZW50c1JlZ2lzdGVyRm9yKG5vZGUuY29kZU9yaWdpbikpKSk7Ci0KLSAgICAgICAgICAgIG1f
aml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIsIHJlc3VsdEdQUik7Ci0gICAgICAg
ICAgICBpZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAg
IEltbTMyKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkp
KSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCi0gICAgICAgICAgICAgICAgICAgIFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsCi0gICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdEdQUiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCkpKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsCisgICAgICAg
ICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKFJlZ2lzdGVyRmlsZTo6QXJndW1l
bnRDb3VudCkpKTsKKyAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5u
ZWczMihyZXN1bHRHUFIpOwotICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIocmVz
dWx0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5uZWczMihyZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihyZXN1bHRHUFIsIHJlc3VsdEdQUik7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICgobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZQotICAgICAgICAg
ICAgICAgICAgICAgID8gbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZz
ZXQKLSAgICAgICAgICAgICAgICAgICAgICA6IDApICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNl
dEluY2x1ZGluZ1RoaXMoMCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksCi0gICAgICAgICAgICAgICAg
cmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIHJlc3VsdEdQUiwgSklUQ29tcGlsZXI6OlRpbWVzRWlnaHQsCisgICAgICAgICAgICAgICAg
KChub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lCisgICAgICAgICAgICAgICAgICA/IG5v
ZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0CisgICAgICAgICAgICAg
ICAgICA6IDApICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCkpICog
c2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgICAgICByZXN1bHRHUFIpOwogCi0gICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEdl
dE15QXJndW1lbnRCeVZhbFNhZmU6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIGluZGV4KHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDEsNiArODAxLDkgQEAgdm9pZCBW
YWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiAgICAgY2FzZSBEb3VibGVJblJlZ2lz
dGVyRmlsZToKICAgICAgICAgZnByaW50ZihvdXQsICJEb3VibGUiKTsKICAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6CisgICAgICAgIGZwcmludGYob3V0LCAiQXJndW1l
bnRzIik7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSGF2ZU5vZGU6CiAgICAgICAgIGZwcmlu
dGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtOTg2
LDYgKzk4OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAg
ICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSk7CiAgICAgICAgIGVsc2UgaWYgKGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKQogICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBW
YWx1ZVNvdXJjZShEb3VibGVJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIGVsc2UgaWYgKGF0KG5v
ZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPmlzQXJndW1lbnRzQWxpYXMoKSkKKyAgICAg
ICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoQXJndW1lbnRzU291cmNlKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9y
UHJlZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9u
KCkpOwogICAgIH0KQEAgLTEzNDUsMTMgKzEzNTAsMTggQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxh
dGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAgICAgICAKICAgICBjYXNlIERvdWJsZUluUmVnaXN0ZXJG
aWxlOgogICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxl
QXNVbmJveGVkRG91YmxlKCk7CisgICAgICAgIAorICAgIGNhc2UgQXJndW1lbnRzU291cmNlOgor
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVk
KCk7CiAKICAgICBjYXNlIEhhdmVOb2RlOiB7CiAgICAgICAgIGlmIChpc0NvbnN0YW50KHZhbHVl
U291cmNlLm5vZGVJbmRleCgpKSkKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpj
b25zdGFudCh2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOwotICAg
IAorICAgICAgICAKICAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZhdCh2YWx1ZVNvdXJjZS5ub2Rl
SW5kZXgoKSk7CiAgICAgICAgIGlmICghbm9kZVB0ci0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAg
ICAgICAgICAgaWYgKG5vZGVQdHItPm9wKCkgPT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojphcmd1bWVudHNUaGF0V2VyZU5vdENyZWF0ZWQo
KTsKICAgICAgICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkg
d2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQsCiAgICAgICAgICAgICAvLyBldmVy
LiBTZXQgaXQgdG8gVW5kZWZpbmVkIHRvIG1ha2UgdGhlIEdDIGhhcHB5IGFmdGVyIHRoZSBPU1Iu
CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiAxMTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDcgQEAgZW51bSBWYWx1
ZVNvdXJjZUtpbmQgewogICAgIENlbGxJblJlZ2lzdGVyRmlsZSwKICAgICBCb29sZWFuSW5SZWdp
c3RlckZpbGUsCiAgICAgRG91YmxlSW5SZWdpc3RlckZpbGUsCisgICAgQXJndW1lbnRzU291cmNl
LAogICAgIEhhdmVOb2RlCiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDExNzM3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDYgKzQ3LDggQEAgcHVibGljOgogICAgICAgICAsIG1fYXJndW1lbnRBd2FyZVBy
ZWRpY3Rpb24oUHJlZGljdE5vbmUpCiAgICAgICAgICwgbV9mbGFncygwKQogICAgICAgICAsIG1f
ZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkKKyAgICAgICAgLCBtX2lz
Q2FwdHVyZWQoZmFsc2UpCisgICAgICAgICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAg
IHsKICAgICAgICAgY2xlYXJWb3RlcygpOwogICAgIH0KQEAgLTU4LDYgKzYwLDcgQEAgcHVibGlj
OgogICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVt
cHR5RG91YmxlRm9ybWF0U3RhdGUpCiAgICAgICAgICwgbV9pc0NhcHR1cmVkKGlzQ2FwdHVyZWQp
CisgICAgICAgICwgbV9pc0FyZ3VtZW50c0FsaWFzKGZhbHNlKQogICAgIHsKICAgICAgICAgY2xl
YXJWb3RlcygpOwogICAgIH0KQEAgLTg3LDYgKzkwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1faXNDYXB0dXJlZDsKICAgICB9CiAgICAgCisgICAgYm9vbCBtZXJnZUlzQXJndW1lbnRz
QWxpYXMoYm9vbCBpc0FyZ3VtZW50c0FsaWFzKQorICAgIHsKKyAgICAgICAgYm9vbCBuZXdJc0Fy
Z3VtZW50c0FsaWFzID0gbV9pc0FyZ3VtZW50c0FsaWFzIHwgaXNBcmd1bWVudHNBbGlhczsKKyAg
ICAgICAgaWYgKG5ld0lzQXJndW1lbnRzQWxpYXMgPT0gbV9pc0FyZ3VtZW50c0FsaWFzKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2lzQXJndW1lbnRzQWxpYXMgPSBuZXdJ
c0FyZ3VtZW50c0FsaWFzOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0FyZ3VtZW50c0FsaWFzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lzQXJndW1l
bnRzQWxpYXM7CisgICAgfQorICAgIAogICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb24pCiAgICAgewogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHNlbGYgPSBmaW5k
KCk7CkBAIC0yMzcsNiArMjU0LDcgQEAgcHJpdmF0ZToKICAgICBEb3VibGVGb3JtYXRTdGF0ZSBt
X2RvdWJsZUZvcm1hdFN0YXRlOwogICAgIAogICAgIGJvb2wgbV9pc0NhcHR1cmVkOworICAgIGJv
b2wgbV9pc0FyZ3VtZW50c0FsaWFzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAx
MTczNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTY2LDcgKzE1NjYsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2FyZ3VtZW50X2J5X3ZhCiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2dl
dF9ieV92YWwpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGFyZ3VtZW50cywgcmVnVDIpOwog
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHByb3BlcnR5LCByZWdUMik7Ci0gICAgc3R1YkNhbGwu
Y2FsbChkc3QpOworICAgIHN0dWJDYWxsLmNhbGxXaXRoVmFsdWVQcm9maWxpbmcoZHN0KTsKIH0K
IAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>