<?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>147508</bug_id>
          
          <creation_ts>2015-07-31 14:52:59 -0700</creation_ts>
          <short_desc>jsc-tailcall: We should reuse the frame efficiently in the DFG instead of doing a memmove</short_desc>
          <delta_ts>2015-08-25 15:59:58 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>146477</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basile Clement">basile_clement</reporter>
          <assigned_to name="Basile Clement">basile_clement</assigned_to>
          <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1113874</commentid>
    <comment_count>0</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-07-31 14:52:59 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119939</commentid>
    <comment_count>1</comment_count>
      <attachid>259665</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-21 14:52:41 -0700</bug_when>
    <thetext>Created attachment 259665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119968</commentid>
    <comment_count>2</comment_count>
      <attachid>259677</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-21 15:53:53 -0700</bug_when>
    <thetext>Created attachment 259677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120220</commentid>
    <comment_count>3</comment_count>
      <attachid>259677</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-08-23 21:32:04 -0700</bug_when>
    <thetext>Comment on attachment 259677
Patch

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

Add blank lines between function declarations or definitions.
Let&apos;s use = initialization for &quot;for&quot; loops.

r=me with some comment clean up and stylistic changes.

&gt; Source/JavaScriptCore/jit/CallFrameShuffleData.cpp:43
&gt; +    for (size_t i { 0 }; i &lt; registerSaveLocations-&gt;size(); ++i) {

Let&apos;s use = initialization for &quot;for&quot; loops.

&gt; Source/JavaScriptCore/jit/CallFrameShuffleData.cpp:55
&gt; +    for (Reg reg { Reg::first() }; reg &lt;= Reg::last(); reg = reg.next()) {

Let&apos;s use = initialization for &quot;for&quot; loops.

&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:41
&gt; +// A CachedRecovery is a simple wrapper around a ValueRecovery that 

That what?  Complete the comment.

&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:106
&gt; +

Delete one blank line.

&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:451
&gt; +    int m_frameDelta { m_alignedNewFrameSize - m_alignedOldFrameSize };

Initialize this in the constructor.

&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:685
&gt; +    //    pointer, and m_oldFrameOffset is 0. We could 

We could what?  Finish the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120501</commentid>
    <comment_count>4</comment_count>
      <attachid>259677</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-24 19:17:14 -0700</bug_when>
    <thetext>Comment on attachment 259677
Patch

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

Addressed the comments below + added blank lines between method definitions.

&gt;&gt; Source/JavaScriptCore/jit/CallFrameShuffleData.cpp:43
&gt;&gt; +    for (size_t i { 0 }; i &lt; registerSaveLocations-&gt;size(); ++i) {
&gt; 
&gt; Let&apos;s use = initialization for &quot;for&quot; loops.

Changed all of those.

&gt;&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:41
&gt;&gt; +// A CachedRecovery is a simple wrapper around a ValueRecovery that 
&gt; 
&gt; That what?  Complete the comment.

Oh, oops. I should actually reword it since it&apos;s a bit more than a &quot;simple wrapper&quot;. Changed to &quot;A CachedRecovery is a wrapper around a ValueRecovery that records where said value should go on the stack and/or in registers. Whenever we perform an operation changing the ValueRecovery, we update the CachedRecovery&apos;s member in place.&quot;

&gt;&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:106
&gt;&gt; +
&gt; 
&gt; Delete one blank line.

Done.

&gt;&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:451
&gt;&gt; +    int m_frameDelta { m_alignedNewFrameSize - m_alignedOldFrameSize };
&gt; 
&gt; Initialize this in the constructor.

I did this here because I believed it to make it clearer what happens when reading the comment. Moved to the constructor.

&gt;&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:685
&gt;&gt; +    //    pointer, and m_oldFrameOffset is 0. We could 
&gt; 
&gt; We could what?  Finish the comment.

I&apos;ll just remove the &quot;We could&quot; part. I wanted to say that we could use the stack pointer as well, but that&apos;d just be noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120502</commentid>
    <comment_count>5</comment_count>
      <attachid>259806</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-24 19:17:20 -0700</bug_when>
    <thetext>Created attachment 259806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120737</commentid>
    <comment_count>6</comment_count>
      <attachid>259806</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-08-25 15:24:11 -0700</bug_when>
    <thetext>Comment on attachment 259806
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120751</commentid>
    <comment_count>7</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-25 15:59:58 -0700</bug_when>
    <thetext>Committed r188937 &lt;http://trac.webkit.org/changeset/188937&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259665</attachid>
            <date>2015-08-21 14:52:41 -0700</date>
            <delta_ts>2015-08-21 15:53:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147508-20150821145235.patch</filename>
            <type>text/plain</type>
            <size>168109</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NzYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
YjQxMmVlZGE0MTBlN2I5OTc2ZDkyNmU0NGEwZWEwY2FkNThhNWMwLi4xYTcxNDMzYjIxNzBhMDIy
YjVkYjRkNTBhZTM3ZWJkNDlkMDA2MTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwyMDQgQEAKIDIwMTUtMDgtMjEgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tPgogCisgICAgICAgIGpzYy10YWlsY2FsbDogV2Ugc2hvdWxkIHJldXNlIHRoZSBm
cmFtZSBlZmZpY2llbnRseSBpbiB0aGUgREZHIGluc3RlYWQgb2YgZG9pbmcgYSBtZW1tb3ZlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJv
ZHVjZXMgYSBuZXcgY2xhc3MgKENhbGxGcmFtZVNodWZmbGVyKSB3aG9zZSByZXNwb25zaWJpbGl0
eSBpcworICAgICAgICB0byBidWlsZCBhIGNhbGwgZnJhbWUgZm9yIGEgdGFpbCBjYWxsIG92ZXIg
dGhlIHByZXZpb3VzbHkgZXhpc3RpbmcKKyAgICAgICAgZnJhbWUgYnkgdGFraW5nIGludG8gYWNj
b3VudCB0aGF0IHRoZSBzbG90cyB3ZSBhcmUgd3JpdGluZyB0byBjb3VsZAorICAgICAgICBzdGls
bCBob2xkIHZhbHVlcyB3ZSB3aWxsIG5lZWQgbGF0ZXIuIAorCisgICAgICAgIFRoZSByZXN0IG9m
IHRoZSBwYXRjaCBpcyBtb3N0bHkgc21hbGwgcmVmYWN0b3JpbmdzIHRvIG1ha2UgdGhlIGpvYiBv
ZgorICAgICAgICB0aGlzIGNsYXNzIGVhc2llci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpBUk02NFJlZ2lzdGVyczo6aXNTcCk6CisgICAgICAgIChKU0M6OkFSTTY0UmVnaXN0ZXJz
Ojppc1pyKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpBUk02NEFzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6QVJNNjRBc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFSTTY0
QXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkFSTTY0QXNzZW1ibGVy
Ojppc1NwKToKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmlzWnIpOgorICAgICAgICAq
IGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpm
aXJzdFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rlcik6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIpOgorICAgICAgICAqIGFzc2VtYmxl
ci9BYm9ydFJlYXNvbi5oOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0
ZXIpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rlcik6
CisgICAgICAgICogYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TUlQ
U0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6
Omxhc3RSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6OmZpcnN0RlBSZWdp
c3Rlcik6CisgICAgICAgIChKU0M6Ok1JUFNBc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKToKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXI6Om5leHRSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpu
ZXh0RlBSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpudW1iZXJPZlJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXI6Om51bWJlck9mRlBSZWdpc3RlcnMpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlcjo6ZnBSZWdpc3RlckluZGV4KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OnRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMpOgorICAgICAgICAqIGFz
c2VtYmxlci9TSDRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6U0g0QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIpOgor
ICAgICAgICAoSlNDOjpTSDRBc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rlcik6CisgICAgICAgIChK
U0M6OlNINEFzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIpOgorICAgICAgICAqIGFzc2VtYmxlci9Y
ODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVy
KToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIpOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Olg4NkFz
c2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rSW5m
by5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OnNldEZyYW1lU2h1ZmZsZURhdGEpOgor
ICAgICAgICAoSlNDOjpDYWxsTGlua0luZm86OmZyYW1lU2h1ZmZsZURhdGEpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5
OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVJlY292ZXJ5Lmg6Cisg
ICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpWYWx1ZVJlY292ZXJ5OjppbkZQUik6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6Omlz
SW5HUFIpOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5Ojppc0luRlBSKToKKyAgICAgICAg
KEpTQzo6VmFsdWVSZWNvdmVyeTo6aXNJblJlZ2lzdGVycyk6CisgICAgICAgIChKU0M6OlZhbHVl
UmVjb3Zlcnk6OmlzSW5KU1N0YWNrKToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6ZGF0
YUZvcm1hdCk6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6Omdwcik6CisgICAgICAgIChK
U0M6OlZhbHVlUmVjb3Zlcnk6OmlzSW5KU1ZhbHVlUmVncyk6CisgICAgICAgIChKU0M6OlZhbHVl
UmVjb3Zlcnk6OmpzVmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6ZnBy
KToKKyAgICAgICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6dmlydHVhbFJlZ2lzdGVyKToKKyAgICAg
ICAgKEpTQzo6VmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQpOgorICAgICAgICAqIGRmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjpyZWNvdmVyeSk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXRDb21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgor
ICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6CisgICAgICAgICogaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIGppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFt
ZVNodWZmbGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmR1bXApOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVkUmVjb3ZlcnkpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FjaGVkUmVjb3ZlcnkpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c3BpbGwpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6ZW1pdERlbHRhQ2hlY2spOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6cHJlcGFyZUZvclNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnByZXBhcmVGb3JUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjp0
cnlXcml0ZXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cGVyZm9ybVNhZmVX
cml0ZXMpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUFueSk6Cisg
ICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpD
YWNoZWRSZWNvdmVyeTo6Q2FjaGVkUmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNv
dmVyeTo6dGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjphZGRUYXJnZXQp
OgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6cmVtb3ZlVGFyZ2V0KToKKyAgICAgICAg
KEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmNsZWFyVGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkNhY2hl
ZFJlY292ZXJ5OjpzZXRXYW50ZWRKU1ZhbHVlUmVncyk6CisgICAgICAgIChKU0M6OkNhY2hlZFJl
Y292ZXJ5Ojpib3hpbmdSZXF1aXJlc0dQUik6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5
Ojpib3hpbmdSZXF1aXJlc0ZQUik6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpyZWNv
dmVyeSk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpzZXRSZWNvdmVyeSk6CisgICAg
ICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp3YW50ZWRKU1ZhbHVlUmVncyk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjpsb2NrR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OmFjcXVpcmVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
cmVsZWFzZUdQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzbmFwc2hvdCk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWxsZWVKU1ZhbHVlUmVncyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphc3N1bWVDYWxsZWVJc0NlbGwpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Y2FuQm94KToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OmVuc3VyZUJveCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjplbnN1cmVMb2FkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmNh
bkxvYWRBbmRCb3gpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6dXBkYXRlUmVj
b3ZlcnkpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Y2xlYXJDYWNoZWRSZWNv
dmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphZGRDYWNoZWRSZWNvdmVy
eSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpudW1Mb2NhbHMpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0T2xkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZXI6OnNldE9sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpm
aXJzdE9sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpsYXN0T2xkKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzVmFsaWRPbGQpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6YXJnQ291bnQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6Z2V0TmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnNldE5l
dyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphZGROZXcpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Zmlyc3ROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6bGFzdE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpp
c1ZhbGlkTmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6Om5ld0FzT2xkKToK
KyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldEZyZWVSZWdpc3Rlcik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlR1BSKToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldEZyZWVGUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6aGFzRnJlZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OmVuc3VyZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVu
c3VyZUdQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbnN1cmVGUFIpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkcmVzc0Zvck9sZCk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjppc1VuZGVjaWRlZCk6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjppc1Nsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmFkZHJlc3NGb3JOZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
ZGFuZ2VyRnJvbnRpZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNEYW5n
ZXJOZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6dXBkYXRlRGFuZ2VyRnJv
bnRpZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aGFzT25seVNhZmVXcml0
ZXMpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjplbWl0TG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpjYW5M
b2FkKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUik6CisgICAg
ICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9HUFIpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3BsYWNlKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
ZW1pdFN0b3JlKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3gpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdExvYWQpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6Y2FuTG9hZCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292
ZXJ5Ojpsb2Fkc0ludG9GUFIpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6bG9hZHNJ
bnRvR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREaXNwbGFjZSk6
CisgICAgICAgICogaml0L0dQUkluZm8uaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZVJlZ3M6Om9w
ZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlUmVnczo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6SlNW
YWx1ZVNvdXJjZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkpTVmFsdWVSZWdzOjpv
cGVyYXRvciEpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlU291cmNlOjpvcGVyYXRvciEpOgorICAg
ICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxs
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAq
IGppdC9SZWcuaDoKKyAgICAgICAgKEpTQzo6UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAg
KiBqaXQvUmVnaXN0ZXJNYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlJlZ2lzdGVyTWFwOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6R1BSTWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAg
KEpTQzo6RlBSTWFwOjpvcGVyYXRvcltdKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6Cisg
ICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorCisyMDE1LTA4LTIxICBCYXNpbGUg
Q2xlbWVudCAgPGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKwogICAgICAgICBVbnJldmlld2Vk
LCBmaXhlcyB0aGUgYnVpbGQuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDgzMTYKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDI1YzE3OGJiODUwOWFlYTA5MzZlM2NiYWIzNzAyMjAzMzhiNWJmOTUuLmUyYzY4YWM4YWE2ZGMy
OGEwM2ZiMmI2MDU3ZGFlMzUwN2Q0Y2I5MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTM0Myw2ICszNDMsMTAgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAg
ICBqaXQvQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwCiAgICAgaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAKICAgICBqaXQvQmluYXJ5U3dpdGNoLmNwcAorICAgIGppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCisgICAgaml0L0NhbGxG
cmFtZVNodWZmbGVyMzJfNjQuY3BwCisgICAgaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCiAg
ICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAKICAgICBqaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggYWM1ODVkZTkyNTQxYjU2
YThkZTFkN2QwN2M3YjY2ZGM0YjI1MTdiYS4uMjA3NGU0NzFmZDE0ZDA0OGY1Nzk4MjE3MTAyYzg0
NDRmYWE2YjMwYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC02
MDYsNiArNjA2LDEwIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JD
YWxsSklUU3R1YlJvdXRpbmUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XEFzc2VtYmx5SGVscGVycy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
QmluYXJ5U3dpdGNoLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
Q2FsbEZyYW1lU2h1ZmZsZXIuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCIg
Lz4KQEAgLTEzNzAsNiArMTM3NCw4IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
QWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxCaW5hcnlTd2l0Y2guaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxD
YWxsRnJhbWVTaHVmZmxlRGF0YS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XENhbGxGcmFtZVNodWZmbGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
Q0NhbGxIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFj
dEpJVENvZGVNYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enouaCIgLz4KQEAgLTE0MDAsNiArMTQwNiw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcUmVnaXN0ZXJBdE9mZnNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XFJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcUmVnaXN0ZXJNYXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxS
ZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XFJlcGF0Y2guaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA1YTMwZDg0NDQ1N2VjNzMwMTBiOGFlZGI4NDRiZTVh
ZmEzNWZhMDg0Li45OGUyNzUwM2FiOTVhY2M1MjJlNTZlNzJmYmEwMjAwODQ5MjgwNjU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0z
NzgsNiArMzc4LDE4IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSG9zdENhbGxS
ZXR1cm5WYWx1ZS5jcHAiPgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsQ29t
cGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlRGF0
YS5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlci5jcHAiPgorICAg
ICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCI+CisgICAgICA8Rmls
dGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
SklULmNwcCI+CiAgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpA
QCAtMzc4NCw2ICszNzk2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZXBh
dGNoLmgiPgogICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3Rlck1hcC5oIj4KKyAgICAgIDxGaWx0
ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxqaXRcUmVnaXN0ZXJTZXQuaCI+CiAgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3YjUzYWQ3ZTc3
NzBhZmYyY2RlODAyNjU5Y2MwMzVmNzIyYTljY2I1Li41MzVlNDZmNmEyZTljMDc2ZGMzNGY2MTM5
NDFkYTU3NmE4M2U3N2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTYwLDEw
ICs5NjAsMTcgQEAKIAkJNURCQjE1MUIxMzFEMEIzMTAwNTZBRDM2IC8qIHRlc3RhcGkuanMgaW4g
Q29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLzsgfTsKIAkJNURCQjE1MjUx
MzFEMEJENzAwNTZBRDM2IC8qIG1pbmlkb20uanMgaW4gQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUg
LyogbWluaWRvbS5qcyAqLzsgfTsKIAkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0
ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CisJCTYyM0EzN0VDMUI4N0E3QzAwMDc1NDIw
OSAvKiBSZWdpc3Rlck1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi87IH07
CiAJCTYyNzY3MzIzMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMyMTFCNjgwQzFFMDBGRDlG
MkUgLyogQ2FsbE1vZGUuY3BwICovOyB9OwogCQk2Mjc2NzMyNDFCNjgwQzFFMDBGRDlGMkUgLyog
Q2FsbE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZD
MSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVE
YXRhLmNwcCAqLzsgfTsKIAkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
RDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjJENzU1RDQxQjg0RkIzRDAw
MTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxG
cmFtZVNodWZmbGVyNjQuY3BwICovOyB9OworCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyog
Q2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MkQ3NTVEMjFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1
ZmZsZXIzMl82NC5jcHAgKi87IH07CisJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxs
RnJhbWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2MkQ3NTVEMDFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
ICovOyB9OworCQk2MkQ3NTVENzFCODRGQjRBMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQx
MUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oICovOyB9OworCQk2MkVDOUJC
NjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJFQzlCQjQxQjdFQjA3QzAwMzAz
QUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCAqLzsgfTsKKwkJNjJFQzlCQjcxQjdFQjA3
QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkVDOUJCNTFCN0VCMDdDMDAzMDNBRDEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk2MkYyQUEzNzFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJBOUEyOUUx
QjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmNwcCAqLzsgfTsKIAkJNjJGMkFBMzgxQjBC
RURFMzAwNjEwQzdBIC8qIERGR0xhenlOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2MkE5QTI5RjFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2
NTA3RDI5RTBFODcxRTVFMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUwN0QyOTcwRTg3MUU0QTAwRDdEODk2IC8q
IEpTVHlwZUluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMjY3NiwxMiArMjY4MywxOSBAQAogCQk1REFGRDZDQjE0NkI2ODYzMDBGQkVGQjQg
LyogSlNDLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IEpTQy54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNUREREY0NDYxNEZFRTcyMjAwQjRGQjREIC8qIExMSW50RGVzaXJl
ZE9mZnNldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnREZXNpcmVk
T2Zmc2V0cy5oOyBwYXRoID0gTExJbnRPZmZzZXRzL0xMSW50RGVzaXJlZE9mZnNldHMuaDsgc291
cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNURFM0QwRjQwREQ4RERGQjAwNDY4
NzE0IC8qIFdlYktpdEF2YWlsYWJpbGl0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJLaXRBdmFpbGFiaWxpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTYyNzY3MzIxMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTW9kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk2MkE5QTI5RTFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eU5vZGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0xhenlOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlOb2RlLmg7IHBhdGggPSBkZmcvREZHTGF6eU5v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQzOEQxQURGMTAzRjAwMDIw
NkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJENzU1RDAxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFt
ZVNodWZmbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxG
cmFtZVNodWZmbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJENzU1RDEx
Qjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTYyRDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMy
XzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFtZVNo
dWZmbGVyMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkQ3NTVEMzFC
ODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJF
QzlCQjUxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVEYXRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZUluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxMTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8qIHRl
c3RSZWdFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdGVzdFJl
Z0V4cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMzA1MTQwNDZBNEMw
MDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IHBhdGggPSB0ZXN0UmVnRXhwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElS
OyB9OwpAQCAtMzkwMSwxNiArMzkxNSwyMiBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkg
Lyogaml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkw
RkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAq
LywKLQkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6LmggKi8sCiAJCQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJ
VFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNj
ZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjI0RTUzQjE3RUE5RjU5MDBBQkIy
MTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRjI0RTUzQzE3RUE5RjU5MDBBQkIy
MTcgLyogQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJCQkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2
IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8q
IEJpbmFyeVN3aXRjaC5oICovLAorCQkJCTYyRUM5QkI0MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxs
RnJhbWVTaHVmZmxlRGF0YS5jcHAgKi8sCisJCQkJNjJFQzlCQjUxQjdFQjA3QzAwMzAzQUQxIC8q
IENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi8sCisJCQkJNjJENzU1RDAxQjg0RkIzOTAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCAqLywKKwkJCQk2MkQ3NTVEMTFCODRGQjM5MDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCAqLywKKwkJCQk2MkQ3NTVEMjFCODRGQjM5MDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgKi8sCisJCQkJNjJENzU1RDMxQjg0RkIz
OTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwICovLAogCQkJCTBGMjRFNTNEMTdF
QTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkQ4MkUzNzE0MUFCMTQy
MDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKKwkJCQkwRkYwNTRGNzFBQzM1QjQ0
MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKKwkJCQkwRkYwNTRG
ODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8sCiAJCQkJ
QTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAog
CQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8s
CiAJCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAgKi8sCkBAIC0zOTY1LDYgKzM5ODUsNyBAQAogCQkJCTY1NDBDNzlGMUI4MkQ5
Q0UwMDBGNkI3OSAvKiBSZWdpc3RlckF0T2Zmc2V0LmggKi8sCiAJCQkJNjU0MEM3OUMxQjgyRDk5
RDAwMEY2Qjc5IC8qIFJlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcCAqLywKIAkJCQk2NTQwQzc5RDFC
ODJEOTlEMDAwRjZCNzkgLyogUmVnaXN0ZXJBdE9mZnNldExpc3QuaCAqLywKKwkJCQk2MjNBMzdF
QjFCODdBN0JEMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLywKIAkJCQkwRjZCMUNCQjE4NjEy
NDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25XcmFwcGVyR2VuZXJhdG9yLmNwcCAq
LywKIAkJCQkwRjZCMUNCQzE4NjEyNDZBMDA4NDVEOTcgLyogUmVnaXN0ZXJQcmVzZXJ2YXRpb25X
cmFwcGVyR2VuZXJhdG9yLmggKi8sCiAJCQkJMEZDMzE0MTQxODE0NkQ3MDAwMDMzMjMyIC8qIFJl
Z2lzdGVyU2V0LmNwcCAqLywKQEAgLTU2NTQsNiArNTY3NSw3IEBACiAJCQkJQzRGNEI2RjQxQTA1
Qzk0NDAwNUNBQjc2IC8qIGNwcF9nZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTMy
NDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24u
cHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCisJCQkJNjJENzU1RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENhbGxG
cmFtZVNodWZmbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzEwNDE5RjZERTcyMDA5OEY1
RUMgLyogZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTA1MTlGNkRFNzQwMDk4RjVF
QyAvKiBnZW5lcmF0ZV9vYmpjX2NvbmZpZ3VyYXRpb25faGVhZGVyLnB5IGluIEhlYWRlcnMgKi8s
CkBAIC01ODA5LDYgKzU4MzEsNyBAQAogCQkJCTBGM0IzQTI4MTU0NEM5OTcwMDNFRDBGRiAvKiBE
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdBNDI0MDE3
QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3
QTQyNDIxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMzIxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1v
bkRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzhCMDE4MTdDRkU3NTUwMEIxNDREMyAvKiBE
RkdDb21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTEzLDYgKzYxMzYsNyBAQAog
CQkJCUZFRjY4MzYxMTc0MzQzQ0MwMEEzMkUyNSAvKiBKSVRTdHVic1g4Ni5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVGNjgzNjAxNzQzNDNDQzAwQTMyRTI1IC8qIEpJVFN0dWJzWDg2XzY0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNl
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjIzQTM3RUMxQjg3QTdDMDAwNzU0MjA5IC8qIFJlZ2lz
dGVyTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E0QUUxMDE3OTczQjREMDA1NjEyQjEgLyog
SklUU3R1YnNYODZDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0Qw
MDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3
OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhl
YWRlcnMgKi8sCkBAIC03MTA0LDYgKzcxMjgsNyBAQAogCQkJCTBGRjBGMTlEMTZCNzJBMDgwMDVE
Rjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMzExNzBENDBC
RjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIw
MTcxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTYyRUM5QkI2MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxOTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25Nb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTFBMTUzRTY4RjIwMDNF
RDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkJFMEY3MjE2QzFEQjAzMDA4MkM1RTggLyogREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTcxNTMsNiArNzE3OCw3IEBACiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAw
NURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUy
QzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURD
RjEzMjhERjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk2MkQ3NTVENjFCODRGQjQ2MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdEODlDRkQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFNTYxNDFEQUYw
ODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI1
MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTcyNzUsNiArNzMwMSw3IEBACiAJCQkJMTQ3RjM5Q0IxMDdFQzM3NjAw
NDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
MEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTJCMzEwRkQxOTc0QUU4NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDQzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2NEIyNzExQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0
dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzM5Niw2ICs3NDIzLDcgQEAKIAkJCQlB
NzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTYyRDc1NUQ0MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJhbWVT
aHVmZmxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZENzMyNTEwMEEwQjJE
MCAvKiBKU09OT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkI2QzM4MUFGNDhEREMw
MERCMUJGNyAvKiBUeXBlb2ZUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZFNjk1MEU1
QjVGOTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAppbmRl
eCA2OGYzZWQwMzQyZGJjYmU1YThkNzU1NDZmODNmY2Y1MDVhMTZiOTg4Li44MmRlMGRmODUwNTM3
YTdhODA4NzQ3ZTAxOGI3YmVjOTA2N2E1ODYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0FSTTY0QXNzZW1ibGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCkBAIC00NjksOCArNDY5LDggQEAgbmFtZXNw
YWNlIEFSTTY0UmVnaXN0ZXJzIHsKICAgICAgICAgcTMxLAogICAgIH0gRlBSZWdpc3RlcklEOwog
Ci0gICAgc3RhdGljIGJvb2wgaXNTcChSZWdpc3RlcklEIHJlZykgeyByZXR1cm4gcmVnID09IHNw
OyB9Ci0gICAgc3RhdGljIGJvb2wgaXNacihSZWdpc3RlcklEIHJlZykgeyByZXR1cm4gcmVnID09
IHpyOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGlzU3AoUmVnaXN0ZXJJRCByZWcpIHsg
cmV0dXJuIHJlZyA9PSBzcDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBpc1pyKFJlZ2lz
dGVySUQgcmVnKSB7IHJldHVybiByZWcgPT0genI7IH0KIH0KIAogY2xhc3MgQVJNNjRBc3NlbWJs
ZXIgewpAQCAtNDc4LDE1ICs0NzgsMTUgQEAgcHVibGljOgogICAgIHR5cGVkZWYgQVJNNjRSZWdp
c3RlcnM6OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsKICAgICB0eXBlZGVmIEFSTTY0UmVnaXN0ZXJz
OjpGUFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOwogICAgIAotICAgIHN0YXRpYyBSZWdpc3RlcklE
IGZpcnN0UmVnaXN0ZXIoKSB7IHJldHVybiBBUk02NFJlZ2lzdGVyczo6eDA7IH0KLSAgICBzdGF0
aWMgUmVnaXN0ZXJJRCBsYXN0UmVnaXN0ZXIoKSB7IHJldHVybiBBUk02NFJlZ2lzdGVyczo6c3A7
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0
dXJuIEFSTTY0UmVnaXN0ZXJzOjp4MDsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJ
RCBsYXN0UmVnaXN0ZXIoKSB7IHJldHVybiBBUk02NFJlZ2lzdGVyczo6c3A7IH0KICAgICAKLSAg
ICBzdGF0aWMgRlBSZWdpc3RlcklEIGZpcnN0RlBSZWdpc3RlcigpIHsgcmV0dXJuIEFSTTY0UmVn
aXN0ZXJzOjpxMDsgfQotICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgbGFzdEZQUmVnaXN0ZXIoKSB7
IHJldHVybiBBUk02NFJlZ2lzdGVyczo6cTMxOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBGUFJl
Z2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNNjRSZWdpc3RlcnM6OnEwOyB9
CisgICAgc3RhdGljIGNvbnN0ZXhwciBGUFJlZ2lzdGVySUQgbGFzdEZQUmVnaXN0ZXIoKSB7IHJl
dHVybiBBUk02NFJlZ2lzdGVyczo6cTMxOyB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGJvb2wg
aXNTcChSZWdpc3RlcklEIHJlZykgeyByZXR1cm4gQVJNNjRSZWdpc3RlcnM6OmlzU3AocmVnKTsg
fQotICAgIHN0YXRpYyBib29sIGlzWnIoUmVnaXN0ZXJJRCByZWcpIHsgcmV0dXJuIEFSTTY0UmVn
aXN0ZXJzOjppc1pyKHJlZyk7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaXNTcChSZWdp
c3RlcklEIHJlZykgeyByZXR1cm4gQVJNNjRSZWdpc3RlcnM6OmlzU3AocmVnKTsgfQorICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCBpc1pyKFJlZ2lzdGVySUQgcmVnKSB7IHJldHVybiBBUk02NFJl
Z2lzdGVyczo6aXNacihyZWcpOyB9CiAKIHB1YmxpYzoKICAgICBBUk02NEFzc2VtYmxlcigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAppbmRleCBm
MThmMGZlMDgyOTQ4M2JlM2EyM2UxODgwNzdlMmQ0NTU2YTllYjRmLi4zNDM5YmMwMTRmYTNkMjdj
ODQ5MjBhNTNhOWY2Njg1ZjcwYzI2YTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKQEAgLTEzOCwxMSArMTM4LDExIEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIEFSTUJ1ZmZlciYgYnVmZmVyKCkgeyByZXR1cm4gbV9idWZmZXI7IH0K
IAotICAgICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJN
UmVnaXN0ZXJzOjpyMDsgfQotICAgICAgICBzdGF0aWMgUmVnaXN0ZXJJRCBsYXN0UmVnaXN0ZXIo
KSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OnIxNTsgfQorICAgICAgICBzdGF0aWMgY29uc3RleHBy
IFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIEFSTVJlZ2lzdGVyczo6cjA7IH0K
KyAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxhc3RSZWdpc3RlcigpIHsgcmV0
dXJuIEFSTVJlZ2lzdGVyczo6cjE1OyB9CiAKLSAgICAgICAgc3RhdGljIEZQUmVnaXN0ZXJJRCBm
aXJzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OmQwOyB9Ci0gICAgICAgIHN0
YXRpYyBGUFJlZ2lzdGVySUQgbGFzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6
OmQzMTsgfQorICAgICAgICBzdGF0aWMgY29uc3RleHByIEZQUmVnaXN0ZXJJRCBmaXJzdEZQUmVn
aXN0ZXIoKSB7IHJldHVybiBBUk1SZWdpc3RlcnM6OmQwOyB9CisgICAgICAgIHN0YXRpYyBjb25z
dGV4cHIgRlBSZWdpc3RlcklEIGxhc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gQVJNUmVnaXN0ZXJz
OjpkMzE7IH0KIAogICAgICAgICAvLyBBUk0gY29uZGl0aW9uYWwgY29uc3RhbnRzCiAgICAgICAg
IHR5cGVkZWYgZW51bSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fib3J0UmVhc29uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0
UmVhc29uLmgKaW5kZXggZTk0NDQ5YWQ0YzQ5NTUzYWU2NzBiYTZmNzU3NmY5MWFkYzkxNDVlZC4u
ZWFlNTQwZjgzNjEyOTY1MTBkMzM0OTBkZTY4MGY0MDRhYzI5N2RkMSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJlYXNvbi5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJvcnRSZWFzb24uaApAQCAtNjMsNiArNjMsNyBAQCBl
bnVtIEFib3J0UmVhc29uIHsKICAgICBKSVRHZXRCeVZhbFJlc3VsdElzTm90RW1wdHkgICAgICAg
ICAgICAgICAgICAgICAgID0gMjUwLAogICAgIEpJVE5vdFN1cHBvcnRlZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAyNjAsCiAgICAgSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDI3MCwKKyAgICBKSVRVbmV4cGVjdGVkQ2FsbEZy
YW1lU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0gMjc1LAogICAgIEpJVFVucmVhc29uYWJs
ZUxvb3BIaW50SnVtcFRhcmdldCAgICAgICAgICAgICAgICAgPSAyODAsCiAgICAgUlBXVW5yZWFz
b25hYmxlSnVtcFRhcmdldCAgICAgICAgICAgICAgICAgICAgICAgICA9IDI5MCwKICAgICBSZXBh
dGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50ICAgICAgICAgICAgICAgICAgICAgID0gMzAwLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9B
c3NlbWJsZXIuaAppbmRleCA2OTAxNDM0ZWIyY2EzNDFjMGZkNTM4YzkwZTdkYjcyNWYzY2ZmMjYz
Li4zYzQxMGFjZjMxZDBiYjA0YTJiMjcxMTZiYmQ2NTNkYmY3NzkyZDY2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaApAQCAtMTAzLDExICsxMDMsMTEgQEAgcHVibGljOgogICAgIHR5cGVkZWYgdHlwZW5hbWUg
QXNzZW1ibGVyVHlwZTo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOwogICAgIHR5cGVkZWYgdHlwZW5h
bWUgQXNzZW1ibGVyVHlwZTo6RlBSZWdpc3RlcklEIEZQUmVnaXN0ZXJJRDsKICAgICAKLSAgICBz
dGF0aWMgUmVnaXN0ZXJJRCBmaXJzdFJlZ2lzdGVyKCkgeyByZXR1cm4gQXNzZW1ibGVyVHlwZTo6
Zmlyc3RSZWdpc3RlcigpOyB9Ci0gICAgc3RhdGljIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkg
eyByZXR1cm4gQXNzZW1ibGVyVHlwZTo6bGFzdFJlZ2lzdGVyKCk7IH0KKyAgICBzdGF0aWMgY29u
c3RleHByIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIEFzc2VtYmxlclR5cGU6
OmZpcnN0UmVnaXN0ZXIoKTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgUmVnaXN0ZXJJRCBsYXN0
UmVnaXN0ZXIoKSB7IHJldHVybiBBc3NlbWJsZXJUeXBlOjpsYXN0UmVnaXN0ZXIoKTsgfQogCi0g
ICAgc3RhdGljIEZQUmVnaXN0ZXJJRCBmaXJzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBBc3NlbWJs
ZXJUeXBlOjpmaXJzdEZQUmVnaXN0ZXIoKTsgfQotICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgbGFz
dEZQUmVnaXN0ZXIoKSB7IHJldHVybiBBc3NlbWJsZXJUeXBlOjpsYXN0RlBSZWdpc3RlcigpOyB9
CisgICAgc3RhdGljIGNvbnN0ZXhwciBGUFJlZ2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyBy
ZXR1cm4gQXNzZW1ibGVyVHlwZTo6Zmlyc3RGUFJlZ2lzdGVyKCk7IH0KKyAgICBzdGF0aWMgY29u
c3RleHByIEZQUmVnaXN0ZXJJRCBsYXN0RlBSZWdpc3RlcigpIHsgcmV0dXJuIEFzc2VtYmxlclR5
cGU6Omxhc3RGUFJlZ2lzdGVyKCk7IH0KIAogICAgIC8vIFNlY3Rpb24gMTogTWFjcm9Bc3NlbWJs
ZXIgb3BlcmFuZCB0eXBlcwogICAgIC8vCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01JUFNBc3NlbWJsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTUlQU0Fzc2VtYmxlci5oCmluZGV4IGNhYWQxNTI0ZDg2NWU5MWE2ZjA5YWM2MTFmN2Qy
MTEzM2QxODY3YzguLmQyYTU3MmI5MGYwMjU2ZWI2NDhmYzM0YjM5Zjc1MmQ2OWI5MTk0NTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTUlQU0Fzc2VtYmxlci5oCkBA
IC0xNTEsMTEgKzE1MSwxMSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBNSVBTUmVnaXN0ZXJzOjpG
UFJlZ2lzdGVySUQgRlBSZWdpc3RlcklEOwogICAgIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPEFz
c2VtYmxlckxhYmVsLCA2ND4gSnVtcHM7CiAKLSAgICBzdGF0aWMgUmVnaXN0ZXJJRCBmaXJzdFJl
Z2lzdGVyKCkgeyByZXR1cm4gTUlQU1JlZ2lzdGVyczo6cjA7IH0KLSAgICBzdGF0aWMgUmVnaXN0
ZXJJRCBsYXN0UmVnaXN0ZXIoKSB7IHJldHVybiBNSVBTUmVnaXN0ZXJzOjpyMzE7IH0KKyAgICBz
dGF0aWMgY29uc3RleHByIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIE1JUFNS
ZWdpc3RlcnM6OnIwOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxhc3RSZWdp
c3RlcigpIHsgcmV0dXJuIE1JUFNSZWdpc3RlcnM6OnIzMTsgfQogCi0gICAgc3RhdGljIEZQUmVn
aXN0ZXJJRCBmaXJzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBNSVBTUmVnaXN0ZXJzOjpmMDsgfQot
ICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgbGFzdEZQUmVnaXN0ZXIoKSB7IHJldHVybiBNSVBTUmVn
aXN0ZXJzOjpmMzE7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIEZQUmVnaXN0ZXJJRCBmaXJzdEZQ
UmVnaXN0ZXIoKSB7IHJldHVybiBNSVBTUmVnaXN0ZXJzOjpmMDsgfQorICAgIHN0YXRpYyBjb25z
dGV4cHIgRlBSZWdpc3RlcklEIGxhc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gTUlQU1JlZ2lzdGVy
czo6ZjMxOyB9CiAKICAgICBNSVBTQXNzZW1ibGVyKCkKICAgICAgICAgOiBtX2luZGV4T2ZMYXN0
V2F0Y2hwb2ludChJTlRfTUlOKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCmluZGV4IGZkNGM1YmJmNWU0OTM4ZTdmZjk2ZjE0MjlkOGZiNTY1
OWVhMmE1NTUuLmQ4YTI4MDU3MjRhZDc0MWY4YzljYjcyNzE3MzI3NzMzMjczMDA1ZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAg
LTY5LDQyICs2OSw0MiBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyIDog
cHVibGljIE1hY3JvQXNzZW1ibGVyQmFzZSB7CiBwdWJsaWM6CiAKLSAgICBzdGF0aWMgUmVnaXN0
ZXJJRCBuZXh0UmVnaXN0ZXIoUmVnaXN0ZXJJRCByZWcpCisgICAgc3RhdGljIGNvbnN0ZXhwciBS
ZWdpc3RlcklEIG5leHRSZWdpc3RlcihSZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxSZWdpc3RlcklEPihyZWcgKyAxKTsKICAgICB9CiAgICAgCi0gICAg
c3RhdGljIEZQUmVnaXN0ZXJJRCBuZXh0RlBSZWdpc3RlcihGUFJlZ2lzdGVySUQgcmVnKQorICAg
IHN0YXRpYyBjb25zdGV4cHIgRlBSZWdpc3RlcklEIG5leHRGUFJlZ2lzdGVyKEZQUmVnaXN0ZXJJ
RCByZWcpCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSZWdpc3RlcklEPihy
ZWcgKyAxKTsKICAgICB9CiAgICAgCi0gICAgc3RhdGljIHVuc2lnbmVkIG51bWJlck9mUmVnaXN0
ZXJzKCkKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBsYXN0UmVnaXN0ZXIoKSAtIGZpcnN0UmVnaXN0ZXIoKSAr
IDE7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB1bnNpZ25lZCByZWdpc3RlckluZGV4KFJlZ2lz
dGVySUQgcmVnKQorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgcmVnaXN0ZXJJbmRleChS
ZWdpc3RlcklEIHJlZykKICAgICB7CiAgICAgICAgIHJldHVybiByZWcgLSBmaXJzdFJlZ2lzdGVy
KCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB1bnNpZ25lZCBudW1iZXJPZkZQUmVnaXN0ZXJz
KCkKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mRlBSZWdpc3RlcnMoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGxhc3RGUFJlZ2lzdGVyKCkgLSBmaXJzdEZQUmVnaXN0ZXIo
KSArIDE7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyB1bnNpZ25lZCBmcFJlZ2lzdGVySW5kZXgo
RlBSZWdpc3RlcklEIHJlZykKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGZwUmVnaXN0
ZXJJbmRleChGUFJlZ2lzdGVySUQgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIHJlZyAtIGZp
cnN0RlBSZWdpc3RlcigpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgdW5zaWduZWQgcmVnaXN0
ZXJJbmRleChGUFJlZ2lzdGVySUQgcmVnKQorICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
cmVnaXN0ZXJJbmRleChGUFJlZ2lzdGVySUQgcmVnKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZw
UmVnaXN0ZXJJbmRleChyZWcpICsgbnVtYmVyT2ZSZWdpc3RlcnMoKTsKICAgICB9CiAgICAgCi0g
ICAgc3RhdGljIHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZSZWdpc3RlcnMoKQorICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgdG90YWxOdW1iZXJPZlJlZ2lzdGVycygpCiAgICAgewogICAgICAg
ICByZXR1cm4gbnVtYmVyT2ZSZWdpc3RlcnMoKSArIG51bWJlck9mRlBSZWdpc3RlcnMoKTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2Vt
Ymxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9TSDRBc3NlbWJsZXIuaApp
bmRleCBkMzI2Mjc5YzUxZGEzNWE3ZTU4MDM4N2UwMGEwYTVkMmI0NTM2MWEzLi4zZjEwMjE3OGU5
M2JlMjQ2YjI1ZjZlMzY2NzM4ZDQxZmRjZmNlMmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvU0g0QXNzZW1ibGVyLmgKQEAgLTMyNywxMSArMzI3LDExIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnMiA9IFNINFJlZ2lzdGVy
czo6cjExOwogICAgIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtYXhJbnN0cnVjdGlvblNpemUgPSAx
NjsKIAotICAgIHN0YXRpYyBSZWdpc3RlcklEIGZpcnN0UmVnaXN0ZXIoKSB7IHJldHVybiBTSDRS
ZWdpc3RlcnM6OnIwOyB9Ci0gICAgc3RhdGljIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkgeyBy
ZXR1cm4gU0g0UmVnaXN0ZXJzOjpyMTU7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIFJlZ2lzdGVy
SUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIFNINFJlZ2lzdGVyczo6cjA7IH0KKyAgICBzdGF0
aWMgY29uc3RleHByIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkgeyByZXR1cm4gU0g0UmVnaXN0
ZXJzOjpyMTU7IH0KIAotICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkg
eyByZXR1cm4gU0g0UmVnaXN0ZXJzOjpkcjA7IH0KLSAgICBzdGF0aWMgRlBSZWdpc3RlcklEIGxh
c3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gU0g0UmVnaXN0ZXJzOjpkcjE0OyB9CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBGUFJlZ2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkgeyByZXR1cm4gU0g0UmVn
aXN0ZXJzOjpkcjA7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIEZQUmVnaXN0ZXJJRCBsYXN0RlBS
ZWdpc3RlcigpIHsgcmV0dXJuIFNINFJlZ2lzdGVyczo6ZHIxNDsgfQogCiAgICAgZW51bSB7CiAg
ICAgICAgIHBhZEZvckFsaWduOCA9IDB4MDAsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9YODZBc3NlbWJsZXIuaAppbmRleCBkYTMxODFlNTg1NGRlZDJiNjMyMzc3ODgzZmJj
NGQ4YWYwNmIxMzI4Li5jNGViNWJlNTRlMzY3NDJjMGVlYzgyMGJjYmY1ZDczNmIxZDYyY2MwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKQEAg
LTEyMyw4ICsxMjMsOCBAQCBjbGFzcyBYODZBc3NlbWJsZXIgewogcHVibGljOgogICAgIHR5cGVk
ZWYgWDg2UmVnaXN0ZXJzOjpSZWdpc3RlcklEIFJlZ2lzdGVySUQ7CiAgICAgCi0gICAgc3RhdGlj
IFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWF4OyB9
Ci0gICAgc3RhdGljIFJlZ2lzdGVySUQgbGFzdFJlZ2lzdGVyKCkKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFJlZ2lzdGVySUQgZmlyc3RSZWdpc3RlcigpIHsgcmV0dXJuIFg4NlJlZ2lzdGVyczo6ZWF4
OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBSZWdpc3RlcklEIGxhc3RSZWdpc3RlcigpCiAgICAg
ewogI2lmIENQVShYODZfNjQpCiAgICAgICAgIHJldHVybiBYODZSZWdpc3RlcnM6OnIxNTsKQEAg
LTEzNiw4ICsxMzYsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBYODZSZWdpc3RlcnM6OlhNTVJl
Z2lzdGVySUQgWE1NUmVnaXN0ZXJJRDsKICAgICB0eXBlZGVmIFhNTVJlZ2lzdGVySUQgRlBSZWdp
c3RlcklEOwogICAgIAotICAgIHN0YXRpYyBGUFJlZ2lzdGVySUQgZmlyc3RGUFJlZ2lzdGVyKCkg
eyByZXR1cm4gWDg2UmVnaXN0ZXJzOjp4bW0wOyB9Ci0gICAgc3RhdGljIEZQUmVnaXN0ZXJJRCBs
YXN0RlBSZWdpc3RlcigpCisgICAgc3RhdGljIGNvbnN0ZXhwciBGUFJlZ2lzdGVySUQgZmlyc3RG
UFJlZ2lzdGVyKCkgeyByZXR1cm4gWDg2UmVnaXN0ZXJzOjp4bW0wOyB9CisgICAgc3RhdGljIGNv
bnN0ZXhwciBGUFJlZ2lzdGVySUQgbGFzdEZQUmVnaXN0ZXIoKQogICAgIHsKICNpZiBDUFUoWDg2
XzY0KQogICAgICAgICByZXR1cm4gWDg2UmVnaXN0ZXJzOjp4bW0xNTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAppbmRleCA2MjEyNDI1ZTE2OWU4YTgx
MDI5ZDMwYjliNTlhZjhlZjRmM2Q0MmQ2Li5lM2U3Mzk1ZmIxZmEzZDQwYjg2NGVmM2FhMTU4OGZl
NmViNjBhMjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtJbmZvLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5r
SW5mby5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIENhbGxMaW5rSW5mb19oCiAjZGVmaW5l
IENhbGxMaW5rSW5mb19oCiAKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgogI2lu
Y2x1ZGUgIkNhbGxNb2RlLmgiCiAjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAi
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgpAQCAtMzI5LDYgKzMzMCwxNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHZpc2l0V2VhayhSZXBhdGNoQnVmZmVyJik7CiAKKyAgICB2b2lkIHNldEZyYW1l
U2h1ZmZsZURhdGEoY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEmIHNodWZmbGVEYXRhKQorICAg
IHsKKyAgICAgICAgbV9mcmFtZVNodWZmbGVEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsRnJh
bWVTaHVmZmxlRGF0YT4oc2h1ZmZsZURhdGEpOworICAgIH0KKworICAgIGNvbnN0IENhbGxGcmFt
ZVNodWZmbGVEYXRhKiBmcmFtZVNodWZmbGVEYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2ZyYW1lU2h1ZmZsZURhdGEuZ2V0KCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIENvZGVMb2Nh
dGlvbk5lYXJDYWxsIG1fY2FsbFJldHVybkxvY2F0aW9uOwogICAgIENvZGVMb2NhdGlvbkRhdGFM
YWJlbFB0ciBtX2hvdFBhdGhCZWdpbjsKQEAgLTMzNyw2ICszNDgsNyBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2xhc3RTZWVuQ2FsbGVlOwogICAgIFJlZlB0cjxQ
b2x5bW9ycGhpY0NhbGxTdHViUm91dGluZT4gbV9zdHViOwogICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gbV9zbG93U3R1YjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZURh
dGE+IG1fZnJhbWVTaHVmZmxlRGF0YTsKICAgICB1bnNpZ25lZCBtX3JlZ2lzdGVyUHJlc2VydmF0
aW9uTW9kZSA6IDE7IC8vIFJlYWwgdHlwZSBpcyBSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUKICAg
ICBib29sIG1faGFzU2VlblNob3VsZFJlcGF0Y2ggOiAxOwogICAgIGJvb2wgbV9oYXNTZWVuQ2xv
c3VyZSA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVSZWNvdmVyeS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNv
dmVyeS5jcHAKaW5kZXggOTk2ZmQzYmZlNjQzMzRhNTgzMGJjOTI4ZTM2NGEzNTIzMGFkMmU3OC4u
OWMwODNiMDRhN2RjMWI0M2IyMmFlYjcyOTk1Y2Y5ZmJjNmY3YWNmNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcApAQCAtODYsNiArODYs
OSBAQCB2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiAgICAgY2FzZSBJbkZQUjoKICAgICAgICAgb3V0
LnByaW50KGZwcigpKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVW5ib3hlZERvdWJsZUlu
RlBSOgorICAgICAgICBvdXQucHJpbnQoImRvdWJsZSgiLCBmcHIoKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgY2FzZSBJblBhaXI6CiAgICAgICAg
IG91dC5wcmludCgicGFpcigiLCB0YWdHUFIoKSwgIiwgIiwgcGF5bG9hZEdQUigpLCAiKSIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3Zlcnku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXgg
NDI2NTFlMmM3ZWUzOTAxYmMzZWNhMDFlMzMxMmVlY2UxMjJkZDhkMi4uZTM2MmU4MzJiNzI2NjUz
ZWJkMjc2NGZiYjUwY2IwNWYxNzM2NDQyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC01NSw2ICs1NSw3IEBAIGVudW0gVmFsdWVSZWNv
dmVyeVRlY2huaXF1ZSB7CiAgICAgSW5QYWlyLAogI2VuZGlmCiAgICAgSW5GUFIsCisgICAgVW5i
b3hlZERvdWJsZUluRlBSLAogICAgIC8vIEl0J3MgaW4gdGhlIHN0YWNrLCBidXQgYXQgYSBkaWZm
ZXJlbnQgbG9jYXRpb24uCiAgICAgRGlzcGxhY2VkSW5KU1N0YWNrLAogICAgIC8vIEl0J3MgaW4g
dGhlIHN0YWNrLCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbiwgYW5kIGl0J3MgdW5ib3hlZC4KQEAg
LTgyLDYgKzgzLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiBtX3RlY2huaXF1ZSAhPSBEb250S25vdzsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIAogICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGlu
R1BSKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0
KQogICAgIHsKQEAgLTExNywxMCArMTE5LDE0IEBAIHB1YmxpYzoKICAgICB9CiAjZW5kaWYKIAot
ICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluRlBSKE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVy
SUQgZnByKQorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluRlBSKE1hY3JvQXNzZW1ibGVyOjpG
UFJlZ2lzdGVySUQgZnByLCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCiAgICAgeworICAgICAgICBB
U1NFUlQoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlIHx8IGRhdGFGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpOwogICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKLSAgICAgICAgcmVzdWx0
Lm1fdGVjaG5pcXVlID0gSW5GUFI7CisgICAgICAgIGlmIChkYXRhRm9ybWF0ID09IERhdGFGb3Jt
YXREb3VibGUpCisgICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBVbmJveGVkRG91Ymxl
SW5GUFI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IElu
RlBSOwogICAgICAgICByZXN1bHQubV9zb3VyY2UuZnByID0gZnByOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KQEAgLTE4NSwxMiArMTkxLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmVz
dWx0Lm1fc291cmNlLm5vZGVJRCA9IGlkLmJpdHMoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9Ci0gICAgCisKICAgICBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHRlY2huaXF1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlOyB9CiAgICAgCiAgICAgYm9vbCBpc0NvbnN0YW50KCkg
Y29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWUgPT0gQ29uc3RhbnQ7IH0KLSAgICAKLSAgICBib29s
IGlzSW5SZWdpc3RlcnMoKSBjb25zdAorCisgICAgYm9vbCBpc0luR1BSKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHN3aXRjaCAobV90ZWNobmlxdWUpIHsKICAgICAgICAgY2FzZSBJbkdQUjoKQEAg
LTE5OSwxOSArMjA1LDgxIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BS
OgogICAgICAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgogICAgICAgICBjYXNlIFVuYm94ZWRT
dHJpY3RJbnQ1MkluR1BSOgotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGNhc2UgSW5Q
YWlyOgotI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wg
aXNJbkZQUigpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKG1fdGVjaG5pcXVlKSB7CiAg
ICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCBpc0luUmVnaXN0ZXJz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0luSlNWYWx1ZVJlZ3MoKSB8fCBpc0lu
R1BSKCkgfHwgaXNJbkZQUigpOworICAgIH0KKworICAgIGJvb2wgaXNJbkpTU3RhY2soKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX3RlY2huaXF1ZSkgeworICAgICAgICBjYXNlIERp
c3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgY2FzZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBTdHJp
Y3RJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJ
bkpTU3RhY2s6CisgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAg
Y2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChtX3RlY2huaXF1ZSkgeworICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICBj
YXNlIEluRlBSOgorICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2Fz
ZSBDb25zdGFudDoKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBjYXNlIEluUGFpcjoK
KyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICAgICAgY2FzZSBV
bmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SW50MzI7CisgICAgICAgIGNhc2UgVW5ib3hl
ZEludDUySW5HUFI6CisgICAgICAgIGNhc2UgSW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAg
ICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEludDUyOworICAgICAgICBjYXNlIFVuYm94ZWRTdHJp
Y3RJbnQ1MkluR1BSOgorICAgICAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2VkSW5KU1N0YWNr
OgorICAgICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjsKKyAgICAgICAgY2Fz
ZSBVbmJveGVkQm9vbGVhbkluR1BSOgorICAgICAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpT
U3RhY2s6CisgICAgICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEJvb2xlYW47CisgICAgICAgIGNh
c2UgVW5ib3hlZENlbGxJbkdQUjoKKyAgICAgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNr
OgorICAgICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOworICAgICAgICBjYXNlIFVuYm94
ZWREb3VibGVJbkZQUjoKKyAgICAgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Cisg
ICAgICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Tm9uZTsKKyAgICAgICAgfQorICAgIH0KICAgICAK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBncHIoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJ
bnQzMkluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRCb29sZWFuSW5HUFIgfHwgbV90ZWNo
bmlxdWUgPT0gVW5ib3hlZEludDUySW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZFN0cmlj
dEludDUySW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZENlbGxJbkdQUik7CisgICAgICAg
IEFTU0VSVChpc0luR1BSKCkpOwogICAgICAgICByZXR1cm4gbV9zb3VyY2UuZ3ByOwogICAgIH0K
ICAgICAKQEAgLTIyNywxNyArMjk1LDM5IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fdGVj
aG5pcXVlID09IEluUGFpcik7CiAgICAgICAgIHJldHVybiBtX3NvdXJjZS5wYWlyLnBheWxvYWRH
UFI7CiAgICAgfQorCisgICAgYm9vbCBpc0luSlNWYWx1ZVJlZ3MoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdGVjaG5pcXVlID09IEluUGFpcjsKKyAgICB9CisKKyAgICBKU1ZhbHVl
UmVncyBqc1ZhbHVlUmVncygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbkpTVmFs
dWVSZWdzKCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRH
UFIoKSk7CisgICAgfQorI2Vsc2UKKyAgICBib29sIGlzSW5KU1ZhbHVlUmVncygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNJbkdQUigpOworICAgIH0KKworICAgIEpTVmFsdWVSZWdz
IGpzVmFsdWVSZWdzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luR1BSKCkpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MoZ3ByKCkpOworICAgIH0KICNlbmRpZgogICAgIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpGUFJlZ2lzdGVySUQgZnByKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkZQUik7CisgICAgICAgIEFTU0VSVChpc0luRlBS
KCkpOwogICAgICAgICByZXR1cm4gbV9zb3VyY2UuZnByOwogICAgIH0KICAgICAKICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3RlY2huaXF1ZSA9PSBEaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0gSW50
MzJEaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNobmlxdWUgPT0gRG91YmxlRGlzcGxhY2VkSW5K
U1N0YWNrIHx8IG1fdGVjaG5pcXVlID09IENlbGxEaXNwbGFjZWRJbkpTU3RhY2sgfHwgbV90ZWNo
bmlxdWUgPT0gQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBJbnQ1
MkRpc3BsYWNlZEluSlNTdGFjayB8fCBtX3RlY2huaXF1ZSA9PSBTdHJpY3RJbnQ1MkRpc3BsYWNl
ZEluSlNTdGFjayk7CisgICAgICAgIEFTU0VSVChpc0luSlNTdGFjaygpKTsKICAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlcihtX3NvdXJjZS52aXJ0dWFsUmVnKTsKICAgICB9CiAgICAgCkBA
IC0yNjQsNyArMzU0LDcgQEAgcHVibGljOgogICAgIAogICAgIEpTVmFsdWUgY29uc3RhbnQoKSBj
b25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IENvbnN0YW50KTsKKyAg
ICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUobV9zb3VyY2UuY29uc3RhbnQpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggMWFkODE4MjcxMTQzODcwOWY3
NDZlZTZmNDJlMjUzMzk2YTQ0ZTI1NC4uNTZmOTI2OTEyYjcwZmY5NDYzMDhkY2JlNTdlN2ZjODhl
ZTcwOTc1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKQEAgLTMyNjQsNyArMzI2NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgYmUgdGhl
IGR1bW15IGp1bXAgdG8gYSByZXR1cm4gYWZ0ZXIgYSBub24taW5saW5lZCwgbm9uLWVtdWxhdGVk
IHRhaWwgY2FsbCBpbiBhIHRlcm5hcnkgb3BlcmF0b3IKICAgICAgICAgICAgICAgICBOb2RlKiB0
ZXJtaW5hbCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpOwogICAgICAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQodGVybWluYWwsIHRlcm1pbmFsLT5vcCgpID09IFRhaWxDYWxsIHx8IHRlcm1p
bmFsLT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyk7Ci0gICAgICAgICAgICAgICAgTEFTVF9PUENP
REUob3BfcmV0KTsKKyAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbXApOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1f
Y3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAppbmRleCBiMzBmMzUwOGQ3MmRlYTdhZTQ5ZTdiOWE4
MmEyNTRiMjMyZDgyMGFkLi44MDBmOTdiODAzYTczNDU4YzI0NjkwODRiOGNiNDk1ZWQzNDAwMDll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZv
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCkBA
IC0zNzgsNiArMzc4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAg
ICAgfQogCisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeShWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxT
bG90KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb25zdGFudCkKKyAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX25vZGUtPmNvbnN0YW50KCktPnZhbHVl
KCkpOworCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUp
CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIodS5mcHIsIERhdGFGb3Jt
YXREb3VibGUpOworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVnaXN0
ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9y
bWF0ID09IERhdGFGb3JtYXRKUykKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6aW5QYWlyKHUudi50YWdHUFIsIHUudi5wYXlsb2FkR1BSKTsKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjppbkdQUih1LnYucGF5bG9hZEdQUiwgc3RhdGljX2Nhc3Q8RGF0YUZv
cm1hdD4obV9yZWdpc3RlckZvcm1hdCAmIH5EYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0KQorICAgICAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmluR1BSKHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0KTsKKworICAgICAgICBB
U1NFUlQobV9zcGlsbEZvcm1hdCk7CisKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjayhzcGlsbFNsb3QsIG1fc3BpbGxGb3JtYXQpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICB2b2lkIGFwcGVuZEJpcnRoKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSkK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwCmluZGV4IGM0MDc3ZGZlNzg4YjliMTdmZjUzZjFjNWNkNWJjZDNkMGNh
OTBiNDcuLjM0ODY4ODMyNzMxOWMyMmZmZjQyZDY2NmJjODQzZTc5ODRlM2JjNjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQu
Y3BwCkBAIC0xOTEsNiArMTkxLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3YKICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBvcGVyYW5kc1tpbmRleF07CiAgICAgICAg
IAogICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2Ug
VW5ib3hlZERvdWJsZUluRlBSOgogICAgICAgICBjYXNlIEluRlBSOgogICAgICAgICAgICAgbV9q
aXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwg
R1BSSW5mbzo6cmVnVDApOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUocmVjb3Zlcnku
ZnByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OnJlZ1QwKSk7CkBAIC0yNjEs
NiArMjYyLDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4
aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVjb3YKICAgICAgICAgc3dpdGNoIChyZWNv
dmVyeS50ZWNobmlxdWUoKSkgewogICAgICAgICBjYXNlIEluUGFpcjoKICAgICAgICAgY2FzZSBE
aXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgSW5GUFI6CiAgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoCiAgICAgICAgICAgICAgICAgJmJpdHdpc2VfY2FzdDxFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yKj4oc2NyYXRjaCArIGluZGV4KS0+YXNCaXRzLnRhZywKICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpyZWdUMCk7CkBAIC0yNzUsNyArMjc3LDcgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6
OmNvbXBpbGVFeGl0KGNvbnN0IE9TUkV4aXQmIGV4aXQsIGNvbnN0IE9wZXJhbmRzPFZhbHVlUmVj
b3YKICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Iob3BlcmFuZCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbkZQUjoK
KyAgICAgICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6CiAgICAgICAgIGNhc2UgRG91YmxlRGlz
cGxhY2VkSW5KU1N0YWNrOgogICAgICAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc2NyYXRjaCArIGluZGV4KSwgR1BSSW5mbzo6cmVnVDApOwogICAgICAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpy
ZWdUMCksIEZQUkluZm86OmZwUmVnVDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAppbmRleCA1NWIxZjVhMjBlODU5ZDdkZjU2YTJh
OGIyZGI3NzFiZmY2ZWM3ZDRmLi5iMjI1ODc5MGFiNjNlZjdlMDZjNDYyYjg0NDYxMzdhMGU3YjJj
ZWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjY0LmNwcApAQCAtMjA5LDYgKzIwOSw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292CiAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gb3BlcmFuZHNbaW5kZXhdOwog
ICAgICAgICAKICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAg
ICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKICAgICAgICAgY2FzZSBJbkZQUjoKICAgICAgICAg
ICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2ggKyBp
bmRleCksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlRG91YmxlKHJl
Y292ZXJ5LmZwcigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCkpOwpA
QCAtMjc3LDYgKzI3OCw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCBPU1JFeGl0JiBleGl0LCBjb25zdCBPcGVyYW5kczxWYWx1ZVJlY292CiAgICAgICAgIGNhc2Ug
RGlzcGxhY2VkSW5KU1N0YWNrOgogICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6
CiAgICAgICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgY2FzZSBJ
bkZQUjoKICAgICAgICAgICAgIG1faml0LmxvYWQ2NChzY3JhdGNoICsgaW5kZXgsIEdQUkluZm86
OnJlZ1QwKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTMwNSw3ICszMDcsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
T1NSRXhpdCYgZXhpdCwgY29uc3QgT3BlcmFuZHM8VmFsdWVSZWNvdgogICAgICAgICAgICAgbV9q
aXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9w
ZXJhbmQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
SW5GUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgogICAgICAgICBjYXNlIERv
dWJsZURpc3BsYWNlZEluSlNTdGFjazoKICAgICAgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2ggKyBpbmRleCksIEdQUkluZm86OnJlZ1QwKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BS
SW5mbzo6cmVnVDApLCBGUFJJbmZvOjpmcFJlZ1QwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDNjMTJlMzJhZjQ4
NzQwZjc5MTUwNjZkZWZkMDQxOGY0OTk3MzUyMjEuLjdjZGMxYTNlMTg4YmJiZmYzZTIzMzA4MzIz
ZmNlNTJkYjkxNjFkM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJMRShE
RkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJDYWxsRnJh
bWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC03MDMsNiArNzA0LDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBFZGdlIGNhbGxlZUVk
Z2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgIEdQUlJlZyBjYWxsZWVUYWdH
UFI7CisgICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFI7CisgICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc2h1ZmZsZURhdGE7CiAgICAgCiAgICAgLy8gR290dGEgbG9hZCB0aGUgYXJndW1lbnRzIHNv
bWVob3cuIFZhcmFyZ3MgaXMgdHJpY2tpZXIuCiAgICAgaWYgKGlzVmFyYXJncyB8fCBpc0Zvcndh
cmRWYXJhcmdzKSB7CkBAIC03OTQsMzUgKzc5OCw0OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICAvLyByZWNlaXZlciAobWV0aG9kIGNhbGwpLiBz
dWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0aGUgYXJndW1lbnRzLgogICAgICAgICBpbnQgbnVtUGFz
c2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogCi0gICAgICAgIG1faml0LnN0b3Jl
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgbV9qaXQuY2Fs
bGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIGlm
IChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBj
YWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CisgICAgICAgICAgICBjYWxsZWVUYWdHUFIgPSBjYWxs
ZWUudGFnR1BSKCk7CisgICAgICAgICAgICBjYWxsZWVQYXlsb2FkR1BSID0gY2FsbGVlLnBheWxv
YWRHUFIoKTsKKyAgICAgICAgICAgIHVzZShjYWxsZWVFZGdlKTsKKworICAgICAgICAgICAgc2h1
ZmZsZURhdGEubnVtTG9jYWxzID0gbV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsK
KyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihj
YWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEu
YXJncy5yZXNpemUobnVtUGFzc2VkQXJncyk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdl
ID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CisgICAgICAgICAgICAg
ICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mbyhhcmdFZGdlLm5vZGUoKSk7
CisgICAgICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICAgICAgICAgIHNodWZmbGVE
YXRhLmFyZ3NbaV0gPSBpbmZvLnJlY292ZXJ5KGFyZ0VkZ2UtPnZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0LnN0b3Jl
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgbV9qaXQuY2Fs
bGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIAot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAg
ICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUt
PmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0
aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BS
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7
Ci0gICAgICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9
IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsg
aV07CisgICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwor
ICAgICAgICAgICAgICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CisgICAgICAg
ICAgICAgICAgR1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOworICAgICAg
ICAgICAgICAgIHVzZShhcmdFZGdlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihhcmdUYWdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50VGFnU2xvdChpKSk7Ci0gICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50
UGF5bG9hZFNsb3QoaSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BS
LCBtX2ppdC5jYWxsZWVBcmd1bWVudFRhZ1Nsb3QoaSkpOworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoYXJnUGF5bG9hZEdQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChp
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFu
ZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7Ci0gICAgR1BSUmVnIGNhbGxlZVRhZ0dQUiA9IGNh
bGxlZS50YWdHUFIoKTsKLSAgICBHUFJSZWcgY2FsbGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXls
b2FkR1BSKCk7Ci0gICAgdXNlKGNhbGxlZUVkZ2UpOwotICAgIG1faml0LnN0b3JlMzIoY2FsbGVl
UGF5bG9hZEdQUiwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpDYWxsZWUp
KTsKLSAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVRhZ0dQUiwgbV9qaXQuY2FsbGVlRnJhbWVUYWdT
bG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIGlmIChub2RlLT5vcCgpICE9IFRhaWxDYWxsKSB7
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAg
ICAgY2FsbGVlVGFnR1BSID0gY2FsbGVlLnRhZ0dQUigpOworICAgICAgICBjYWxsZWVQYXlsb2Fk
R1BSID0gY2FsbGVlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgdXNlKGNhbGxlZUVkZ2UpOworICAg
ICAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVBheWxvYWRHUFIsIG1faml0LmNhbGxlZUZyYW1lUGF5
bG9hZFNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoY2FsbGVl
VGFnR1BSLCBtX2ppdC5jYWxsZWVGcmFtZVRhZ1Nsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAKLSAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGFuIGVmZmljaWVudCBtb3ZlIG9mIHRoZSBhcmd1bWVu
dHMgaW50bwotICAgIC8vIHRoZWlyIHRhcmdldCBzdGFjayBwb3NpdGlvbiBpbnN0ZWFkIG9mIGJ1
aWxkaW5nIHRoZW4gbWVtbW92aW5nCi0gICAgLy8gdGhlIGNhbGxlZSBmcmFtZS4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTA4Ci0gICAgaWYgKGlz
VGFpbCkKLSAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKLSAgICBlbHNlCiAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgfQogCiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdDIgcmVzdWx0VGFnKHRoaXMp
OwpAQCAtODQyLDE2ICs4NTksMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZSkKICAgICAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2ppdC5jb2RlQmxvY2so
KS0+YWRkQ2FsbExpbmtJbmZvKCk7CiAKLSAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RDZWxsKGNhbGxlZS5qc1ZhbHVlUmVncygpKSk7CisgICAgaWYgKGlzVGFpbCAmJiBub2Rl
LT5vcCgpICE9IFRhaWxDYWxsKQorICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVz
KCk7CisKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVS
ZWdzKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUikpKTsKICAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2Fs
bGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogCiAgICAgaWYgKGlzVGFpbCkgewotICAg
ICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgZG8gYW4gZWZmaWNpZW50IG1vdmUgb2YgdGhlIGFyZ3VtZW50cyBpbnRvCi0gICAg
ICAgIC8vIHRoZWlyIHRhcmdldCBzdGFjayBwb3NpdGlvbiBpbnN0ZWFkIG9mIGJ1aWxkaW5nIHRo
ZW4gbWVtbW92aW5nCi0gICAgICAgIC8vIHRoZSBjYWxsZWUgZnJhbWUuCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MDgKLSAgICAgICAgbV9q
aXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBU
YWlsQ2FsbCkgeworICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxl
RGF0YSk7CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICB9CiAKICAgICBKSVRDb21waWxlcjo6Q2Fs
bCBmYXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNh
bGwoKTsKQEAgLTg2MCwxNyArODc5LDI0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUpCiAKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAKLSAgICAvLyBDYWxs
ZWUgcGF5bG9hZCBuZWVkcyB0byBiZSBpbiByZWdUMCwgdGFnIGluIHJlZ1QxCi0gICAgaWYgKGNh
bGxlZVRhZ0dQUiA9PSBHUFJJbmZvOjpyZWdUMCkgewotICAgICAgICBpZiAoY2FsbGVlUGF5bG9h
ZEdQUiA9PSBHUFJJbmZvOjpyZWdUMSkKLSAgICAgICAgICAgIG1faml0LnN3YXAoR1BSSW5mbzo6
cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKGNhbGxlZVRhZ0dQUiwgR1BSSW5mbzo6cmVnVDEpOworICAgIGlmIChub2RlLT5vcCgp
ID09IFRhaWxDYWxsKSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIGNhbGxGcmFtZVNodWZm
bGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CisgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnNldENh
bGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnByZXBhcmVGb3JT
bG93UGF0aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhbGxlZSBwYXlsb2FkIG5lZWRz
IHRvIGJlIGluIHJlZ1QwLCB0YWcgaW4gcmVnVDEKKyAgICAgICAgaWYgKGNhbGxlZVRhZ0dQUiA9
PSBHUFJJbmZvOjpyZWdUMCkgeworICAgICAgICAgICAgaWYgKGNhbGxlZVBheWxvYWRHUFIgPT0g
R1BSSW5mbzo6cmVnVDEpCisgICAgICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjpyZWdU
MSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKGNhbGxlZVBheWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlUGF5
bG9hZEdQUiwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVU
YWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1faml0Lm1vdmUoY2FsbGVlUGF5bG9hZEdQUiwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBt
X2ppdC5tb3ZlKGNhbGxlZVRhZ0dQUiwgR1BSSW5mbzo6cmVnVDEpOwogICAgIH0KICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
aW5kZXggNDEzZTZjOTQ3YmI3ZDQzMzQxNGVlNzVhMzAzOTA1YmEyMjMwYzY4Mi4uNDU4MTczNDBk
ZmFmMTEwZWZmNjJjOTBjZGUxODViODRmZjkyNzMyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaCIKICNpbmNsdWRlICJERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKQEAgLTY4OCw3ICs2ODksOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUs
IDApOworICAgIEdQUlJlZyBjYWxsZWVHUFI7CisgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1
ZmZsZURhdGE7CiAgICAgCiAgICAgLy8gR290dGEgbG9hZCB0aGUgYXJndW1lbnRzIHNvbWVob3cu
IFZhcmFyZ3MgaXMgdHJpY2tpZXIuCiAgICAgaWYgKGlzVmFyYXJncyB8fCBpc0ZvcndhcmRWYXJh
cmdzKSB7CkBAIC03NzUsMzQgKzc3Nyw0NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2Fs
bChOb2RlKiBub2RlKQogICAgICAgICAvLyBhcmd1bWVudHMuCiAgICAgICAgIGludCBudW1QYXNz
ZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CiAKLSAgICAgICAgbV9qaXQuc3RvcmUz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3NlZEFyZ3MpLCBKSVRDb21waWxl
cjo6Y2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7Ci0gICAg
Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7Ci0gICAg
ICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9k
ZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
KHRoaXMsIGFyZ0VkZ2UpOwotICAgICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsK
LSAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKLSAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5z
dG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdChpKSk7CisgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAgICAgICAgICBFZGdlIGNhbGxl
ZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOworICAgICAgICAgICAgY2FsbGVlR1BS
ID0gY2FsbGVlLmdwcigpOworICAgICAgICAgICAgY2FsbGVlLnVzZSgpOworCisgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgpLmZyYW1lUmVnaXN0ZXJDb3Vu
dCgpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5H
UFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5yZXNpemUobnVtUGFzc2VkQXJncyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CisgICAgICAgICAgICAgICAgRWRn
ZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CisgICAg
ICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mbyhhcmdFZGdl
Lm5vZGUoKSk7CisgICAgICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3NbaV0gPSBpbmZvLnJlY292ZXJ5KGFyZ0VkZ2UtPnZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBD
YWxsZWVTYXZlUmVnaXN0ZXJzKG1faml0LmNvZGVCbG9jaygpKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihu
dW1QYXNzZWRBcmdzKSwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bVBhc3NlZEFyZ3M7IGkrKykgeworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICAgICAgdXNl
KGFyZ0VkZ2UpOworCisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIEpJVENv
bXBpbGVyOjpjYWxsZWVBcmd1bWVudFNsb3QoaSkpOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwot
ICAgIEdQUlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAgY2FsbGVlLnVzZSgpOwot
ICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90
KEpTU3RhY2s6OkNhbGxlZSkpOworICAgIGlmIChub2RlLT5vcCgpICE9IFRhaWxDYWxsKSB7Cisg
ICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAg
Y2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOworICAgICAgICBjYWxsZWUudXNlKCk7CisgICAgICAg
IG1faml0LnN0b3JlNjQoY2FsbGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpT
U3RhY2s6OkNhbGxlZSkpOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBhbiBlZmZpY2ll
bnQgbW92ZSBvZiB0aGUgYXJndW1lbnRzIGludG8KLSAgICAvLyB0aGVpciB0YXJnZXQgc3RhY2sg
cG9zaXRpb24gaW5zdGVhZCBvZiBidWlsZGluZyB0aGVuIG1lbW1vdmluZwotICAgIC8vIHRoZSBj
YWxsZWUgZnJhbWUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NzUwOAotICAgIGlmIChpc1RhaWwpCi0gICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7
Ci0gICAgZWxzZQogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgR1BSRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgfQogCiAgICAgQ29kZU9yaWdpbiBzdGF0aWNPcmlnaW4gPSBub2RlLT5vcmlnaW4u
c2VtYW50aWM7CiAgICAgQVNTRVJUKCFpc1RhaWwgfHwgIXN0YXRpY09yaWdpbi5pbmxpbmVDYWxs
RnJhbWUgfHwgIXN0YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5n
RGVhZEZyYW1lcygpKTsKQEAgLTgxNCwxNiArODI5LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0lu
Zm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CiAKKyAgICBpZiAoaXNU
YWlsICYmIG5vZGUtPm9wKCkgIT0gVGFpbENhbGwpCisgICAgICAgIG1faml0LmVtaXRSZXN0b3Jl
Q2FsbGVlU2F2ZXMoKTsKKwogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9D
aGVjazsKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldp
dGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVj
aywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkpOwogCiAgICAgaWYgKGlzVGFpbCkg
ewotICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgZG8gYW4gZWZmaWNpZW50IG1vdmUgb2YgdGhlIGFyZ3VtZW50cyBpbnRv
Ci0gICAgICAgIC8vIHRoZWlyIHRhcmdldCBzdGFjayBwb3NpdGlvbiBpbnN0ZWFkIG9mIGJ1aWxk
aW5nIHRoZW4gbWVtbW92aW5nCi0gICAgICAgIC8vIHRoZSBjYWxsZWUgZnJhbWUuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MDgKLSAgICAg
ICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbCkgeworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZm
bGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0
LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgIH0KIAogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxDYWxsKCkg
OiBtX2ppdC5uZWFyQ2FsbCgpOwpAQCAtODMxLDExICs4NDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAKLSAg
ICBpZiAoaXNUYWlsKQotICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAK
LSAgICBtX2ppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVl
ZHMgdG8gYmUgaW4gcmVnVDAKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAg
ICAgICBDYWxsRnJhbWVTaHVmZmxlciBjYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURh
dGEpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1Zh
bHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5wcmVw
YXJlRm9yU2xvd1BhdGgoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9qaXQubW92ZShjYWxsZWVH
UFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCisKICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyks
IEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5lZWRzIHRvIGJlIGluIHJlZ1QyCiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwogCkBAIC04NDQs
NiArODY0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAg
ICBpZiAoaXNUYWlsKQogICAgICAgICBtX2ppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJu
RnJvbVRhaWxDYWxsKTsKICAgICBlbHNlIHsKKyAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQg
cmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
ICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwog
CiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9y
bWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAppbmRleCBlM2Y0MTNj
M2I4ZmYyZmY2YTEwMjUwMzMzZWE0MGNhMjg4NzlmYWY4Li41ZTZmZWEyMDNkMjNhNGI5ZTk3YzM4
Mjc3MTJiNmIzOTMyODgxNGNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKQEAgLTIwOCw3ICsyMDgsNyBAQCB2b2lkIFZh
cmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAKICAgICAgICAgaWYgKGlu
Zm8uZmlsbGVkKSB7CiAgICAgICAgICAgICBpZiAoaW5mby5mb3JtYXQgPT0gRGF0YUZvcm1hdERv
dWJsZSkgewotICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tpXSA9IFZhbHVlUmVjb3Zl
cnk6OmluRlBSKGluZm8udS5mcHIpOworICAgICAgICAgICAgICAgIHZhbHVlUmVjb3Zlcmllc1tp
XSA9IFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm8udS5mcHIsIERhdGFGb3JtYXREb3VibGUpOwog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjYzA3OTU2NWQ0NjFmYzYxNGZkNjc5MjAyYmYwZjc0NmJm
ZTg3ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxG
cmFtZVNodWZmbGVEYXRhLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIgorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlND
IHsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNl
dHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlUmVnaXN0ZXJzIHsgUmVnaXN0ZXJTZXQ6OmFsbFZNQ2FsbGVlU2F2
ZVJlZ2lzdGVycygpIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QqIHJlZ2lzdGVyU2F2ZUxv
Y2F0aW9ucyA9IGNvZGVCbG9jay0+Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworCisgICAgZm9yIChz
aXplX3QgaSB7IDAgfTsgaSA8IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgUmVnaXN0ZXJBdE9mZnNldCBlbnRyeSB7IHJlZ2lzdGVyU2F2ZUxvY2F0aW9ucy0+
YXQoaSkgfTsKKyAgICAgICAgaWYgKCFjYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChlbnRyeS5yZWco
KSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBBU1NFUlQoZW50cnkucmVnKCku
aXNHUFIoKSk7CisKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNhdmVTbG90IHsgZW50cnkub2Zm
c2V0QXNJbmRleCgpIH07CisgICAgICAgIHJlZ2lzdGVyc1tlbnRyeS5yZWcoKV0KKyAgICAgICAg
ICAgID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNhdmVTbG90LCBEYXRhRm9y
bWF0SlMpOworICAgIH0KKworICAgIGZvciAoUmVnIHJlZyB7IFJlZzo6Zmlyc3QoKSB9OyByZWcg
PD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFjYWxsZWVT
YXZlUmVnaXN0ZXJzLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKHJlZ2lzdGVyc1tyZWddKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQVNT
RVJUKHJlZy5pc0dQUigpKTsKKworICAgICAgICByZWdpc3RlcnNbcmVnXQorICAgICAgICAgICAg
PSBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZWcuZ3ByKCksIERhdGFGb3JtYXRKUyk7CisgICAgfQor
fQorCisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0ODAyZTg2ZDE0YWU5OWFkMzA5YjRhY2Zm
MzIwZTEzNjQyMzUwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbGxGcmFtZVNodWZm
bGVEYXRhX2gKKyNkZWZpbmUgQ2FsbEZyYW1lU2h1ZmZsZURhdGFfaAorCisjaWYgRU5BQkxFKEpJ
VCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyTWFwLmgiCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhIHsKKyAg
ICB1bnNpZ25lZCBudW1Mb2NhbHM7CisgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CisgICAgVmVj
dG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3M7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3Rl
ck1hcDxWYWx1ZVJlY292ZXJ5PiByZWdpc3RlcnM7CisKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhDb2RlQmxvY2sqKTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gQ2FsbEZyYW1lU2h1ZmZsZURh
dGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hMDljNmQ3YTU0OGVhODQ4MTVlYzJmMjFiMzJhYWM5MGVkYmIyMTY5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
Zmxlci5jcHAKQEAgLTAsMCArMSw3MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFt
ZVNodWZmbGVyLmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitDYWxsRnJh
bWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENh
bGxGcmFtZVNodWZmbGVEYXRhJiBkYXRhKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vbGRG
cmFtZShkYXRhLm51bUxvY2FscyArIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplLCBudWxs
cHRyKQorICAgICwgbV9uZXdGcmFtZShkYXRhLmFyZ3Muc2l6ZSgpICsgSlNTdGFjazo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZSwgbnVsbHB0cikKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplCisgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9B
bGlnbkZyYW1lKGppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxp
Z25lZE5ld0ZyYW1lU2l6ZShKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplCisgICAgICAgICsg
cm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQorICAgICwg
bV9sb2NrZWRSZWdpc3RlcnMoUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpKQoreworICAgIC8v
IFdlIGFyZSBhbGxvd2VkIGFsbCB0aGUgdXN1YWwgcmVnaXN0ZXJzLi4uCisgICAgZm9yICh1bnNp
Z25lZCBpIHsgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgfTsgaS0tOyApCisgICAgICAgIG1f
bG9ja2VkUmVnaXN0ZXJzLmNsZWFyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworICAgIGZvciAo
dW5zaWduZWQgaSB7IEZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzIH07IGktLTsgKQorICAgICAg
ICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAv
LyAuLi4gYXMgd2VsbCBhcyB0aGUgcnVudGltZSByZWdpc3RlcnMuCisgICAgbV9sb2NrZWRSZWdp
c3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6cnVudGltZVJlZ2lzdGVycygpKTsKKworICAgIEFT
U0VSVCghZGF0YS5jYWxsZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRhLmNhbGxlZS52aXJ0dWFsUmVn
aXN0ZXIoKS5pc0xvY2FsKCkpOworICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
Q2FsbGVlKSwgZGF0YS5jYWxsZWUpOworCisgICAgZm9yIChzaXplX3QgaSB7IDAgfTsgaSA8IGRh
dGEuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlQoIWRhdGEuYXJnc1tpXS5pc0lu
SlNTdGFjaygpIHx8IGRhdGEuYXJnc1tpXS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2FsKCkpOwor
ICAgICAgICBhZGROZXcodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIGRhdGEuYXJnc1tp
XSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBmb3IgKFJlZyByZWcgeyBSZWc6
OmZpcnN0KCkgfTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAg
ICAgIGlmICghZGF0YS5yZWdpc3RlcnNbcmVnXS5pc1NldCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVnLmlzR1BSKCkpOworCisgICAgICAgIGFk
ZE5ldyhKU1ZhbHVlUmVncyhyZWcuZ3ByKCkpLAorICAgICAgICAgICAgZGF0YS5yZWdpc3RlcnNb
cmVnXSk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGVsaW1p
dGVyICAgICAgICAgICAgID0gIiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIjsK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZGFuZ2VyRGVsaW1pdGVyICAgICAgID0gIiBYLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVggIjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZGFu
Z2VyQm91bmRzRGVsaW1pdGVyID0gIiBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgg
IjsKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZW1wdHlTcGFjZSAgICAgICAgICAgID0gIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKKyAgICBBU1NFUlQobV9hbGlnbmVkTmV3
RnJhbWVTaXplIDw9IG51bUxvY2FscygpKTsKKyAgICBvdXQucHJpbnQoIiAgICAgICAgICAiKTsK
KyAgICBvdXQucHJpbnQoIiAgICAgICAgICAgT2xkIGZyYW1lICAgICAgICAgICAgICAgIik7Cisg
ICAgb3V0LnByaW50KCIgICAgICAgICAgIE5ldyBmcmFtZSAgICAgICAgICAgICAgICIpOworICAg
IG91dC5wcmludCgiXG4iKTsKKyAgICBmb3IgKGludCBpIHsgMCB9OyBpIDwgbV9hbGlnbmVkT2xk
RnJhbWVTaXplICsgbnVtTG9jYWxzKCkgKyAzOyArK2kpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9sZCB7IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSAtIGkgLSAxIH07CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBuZXdSZWcgeyBvbGQgKyBtX2ZyYW1lRGVsdGEgfTsKKworICAgICAgICBpZiAo
IWlzVmFsaWRPbGQob2xkKSAmJiBvbGQgIT0gZmlyc3RPbGQoKSAtIDEKKyAgICAgICAgICAgICYm
ICFpc1ZhbGlkTmV3KG5ld1JlZykgJiYgbmV3UmVnICE9IGZpcnN0TmV3KCkgLSAxKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgb3V0LnByaW50KCIgICAgICAgICIpOworICAgICAg
ICBpZiAoZGFuZ2VyRnJvbnRpZXIoKSA+PSBmaXJzdE5ldygpCisgICAgICAgICAgICAmJiAobmV3
UmVnID09IGRhbmdlckZyb250aWVyKCkgfHwgbmV3UmVnID09IGZpcnN0TmV3KCkgLSAxKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChkYW5nZXJCb3VuZHNEZWxpbWl0ZXIpOworICAgICAgICBlbHNl
IGlmIChpc1ZhbGlkT2xkKG9sZCkpCisgICAgICAgICAgICBvdXQucHJpbnQoaXNWYWxpZE5ldyhu
ZXdSZWcpICYmIGlzRGFuZ2VyTmV3KG5ld1JlZykgPyBkYW5nZXJEZWxpbWl0ZXIgOiBkZWxpbWl0
ZXIpOworICAgICAgICBlbHNlIGlmIChvbGQgPT0gZmlyc3RPbGQoKSAtIDEpCisgICAgICAgICAg
ICBvdXQucHJpbnQoZGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnBy
aW50KGVtcHR5U3BhY2UpOworICAgICAgICBpZiAoZGFuZ2VyRnJvbnRpZXIoKSA+PSBmaXJzdE5l
dygpCisgICAgICAgICAgICAmJiAobmV3UmVnID09IGRhbmdlckZyb250aWVyKCkgfHwgbmV3UmVn
ID09IGZpcnN0TmV3KCkgLSAxKSkKKyAgICAgICAgICAgIG91dC5wcmludChkYW5nZXJCb3VuZHNE
ZWxpbWl0ZXIpOworICAgICAgICBlbHNlIGlmIChpc1ZhbGlkTmV3KG5ld1JlZykgfHwgbmV3UmVn
ID09IGZpcnN0TmV3KCkgLSAxKQorICAgICAgICAgICAgb3V0LnByaW50KGlzRGFuZ2VyTmV3KG5l
d1JlZykgPyBkYW5nZXJEZWxpbWl0ZXIgOiBkZWxpbWl0ZXIpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsK
KyAgICAgICAgaWYgKG9sZCA9PSBmaXJzdE9sZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIg
c3AgLS0+ICIpOworICAgICAgICBlbHNlIGlmICghb2xkLm9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KCIgZnAgLS0+ICIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICAgICAgIik7CisgICAgICAgIGlmIChpc1ZhbGlkT2xkKG9sZCkpIHsKKyAgICAgICAg
ICAgIGlmIChnZXRPbGQob2xkKSkgeworICAgICAgICAgICAgICAgIGF1dG8gc3RyID0gdG9DU3Ry
aW5nKG9sZCk7CisgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rh
bmdlck5ldyhuZXdSZWcpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgWCAgICAg
ICUxOHMgICAgICAgWCAiLCBzdHIuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiB8ICAgICAgJTE4cyAgICAgICB8ICIsIHN0ci5k
YXRhKCkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1ZhbGlkTmV3KG5ld1JlZykgJiYgaXNE
YW5nZXJOZXcobmV3UmVnKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgWCUzMHMgWCAi
LCAiIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIHwl
MzBzIHwgIiwgIiIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0
eVNwYWNlKTsKKyAgICAgICAgaWYgKGlzVmFsaWROZXcobmV3UmVnKSkgeworICAgICAgICAgICAg
Y29uc3QgY2hhciBkID0gaXNEYW5nZXJOZXcobmV3UmVnKSA/ICdYJyA6ICd8JzsKKyAgICAgICAg
ICAgIGF1dG8gc3RyID0gdG9DU3RyaW5nKG5ld1JlZyk7CisgICAgICAgICAgICBpZiAoZ2V0TmV3
KG5ld1JlZykpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0TmV3KG5ld1JlZyktPnJlY292ZXJ5
KCkuaXNDb25zdGFudCgpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMlOHMg
PC0gICAgICAgICAgIGNvbnN0YW50ICVjICIsIGQsIHN0ci5kYXRhKCksIGQpOworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHJlY292ZXJ5U3RyID0gdG9D
U3RyaW5nKGdldE5ldyhuZXdSZWcpLT5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
b3V0LnByaW50ZigiICVjJThzIDwtICUxOHMgJWMgIiwgZCwgc3RyLmRhdGEoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY292ZXJ5U3RyLmRhdGEoKSwgZCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdSZWcgPT0gVmlydHVhbFJlZ2lzdGVyIHsgSlNT
dGFjazo6QXJndW1lbnRDb3VudCB9KQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4
cyA8LSAlMTh6dSAlYyAiLCBkLCBzdHIuZGF0YSgpLCBhcmdDb3VudCgpLCBkKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMlMzBzICVjICIsIGQsICIi
LCBkKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7
CisgICAgICAgIGlmIChuZXdSZWcgPT0gZmlyc3ROZXcoKSAtIG1fbmV3RnJhbWVPZmZzZXQgJiYg
IWlzU2xvd1BhdGgoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIDwtLSBuZXcgc3AgYmVmb3Jl
IGp1bXAgKGN1cnJlbnQgIiwgbV9uZXdGcmFtZUJhc2UsICIpICIpOworICAgICAgICBpZiAobmV3
UmVnID09IGZpcnN0TmV3KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiA8LS0gbmV3IGZwIGFm
dGVyIHByb2xvZ3VlIik7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICB9CisgICAgb3V0
LnByaW50KCIgICAgICAgICAgIik7CisgICAgb3V0LnByaW50KCIgICAgICAgIExpdmUgcmVnaXN0
ZXJzICAgICAgICAgICAgICIpOworICAgIG91dC5wcmludCgiICAgICAgICBXYW50ZWQgcmVnaXN0
ZXJzICAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIlxuIik7CisgICAgZm9yIChSZWcgcmVn
IHsgUmVnOjpmaXJzdCgpIH07IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkg
eworICAgICAgICBpZiAoIXJlZy5pc0dQUigpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgQ2FjaGVkUmVjb3ZlcnkqIG9sZENhY2hlZFJlY292ZXJ5IHsgbV9yZWdpc3RlcnNbcmVn
LmdwcigpXSB9OworICAgICAgICBDYWNoZWRSZWNvdmVyeSogbmV3Q2FjaGVkUmVjb3ZlcnkgeyBt
X25ld1JlZ2lzdGVyc1tyZWcuZ3ByKCldIH07CisgICAgICAgIGlmICghb2xkQ2FjaGVkUmVjb3Zl
cnkgJiYgIW5ld0NhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IG91dC5wcmludCgiICAgICAgICAgICIpOworICAgICAgICBpZiAob2xkQ2FjaGVkUmVjb3Zlcnkp
IHsKKyAgICAgICAgICAgIGF1dG8gc3RyID0gdG9DU3RyaW5nKHJlZy5ncHIoKSk7CisgICAgICAg
ICAgICBvdXQucHJpbnRmKCIgICAgICAgICAlOHMgICAgICAgICAgICAgICAgICAiLCBzdHIuZGF0
YSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7
CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG5ld0NhY2hlZFJlY292ZXJ5KSB7
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncyB7IG5ld0NhY2hlZFJl
Y292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpIH07CisgICAgICAgICAgICBpZiAocmVnLmdwcigp
ID09IHdhbnRlZEpTVmFsdWVSZWdzLnRhZ0dQUigpKQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dChyZWcuZ3ByKCksICIgPC0gdGFnKCIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAi
KSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludChyZWcuZ3By
KCksICIgPC0gcGF5bG9hZCgiLCBuZXdDYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIikiKTsK
KyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaWYgKG5ld0NhY2hlZFJlY292ZXJ5KQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgICAgICAiLCByZWcuZ3ByKCksICIgPC0gIiwgbmV3Q2FjaGVk
UmVjb3ZlcnktPnJlY292ZXJ5KCkpOworI2VuZGlmCisgICAgICAgIG91dC5wcmludCgiXG4iKTsK
KyAgICB9CisgICAgb3V0LnByaW50KCIgIExvY2tlZCByZWdpc3RlcnM6ICIpOworICAgIGJvb2wg
Zmlyc3RMb2NrZWQgeyB0cnVlIH07CisgICAgZm9yIChSZWcgcmVnIHsgUmVnOjpmaXJzdCgpIH07
IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBpZiAoIXJl
Zy5pc0dQUigpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKG1fbG9ja2Vk
UmVnaXN0ZXJzLmdldChyZWcuZ3ByKCkpKSB7CisgICAgICAgICAgICBvdXQucHJpbnQoZmlyc3RM
b2NrZWQgPyAiIiA6ICIsICIsIHJlZy5ncHIoKSk7CisgICAgICAgICAgICBmaXJzdExvY2tlZCA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIG91dC5wcmludCgiXG4iKTsKKworICAgIGlm
IChpc1Nsb3dQYXRoKCkpCisgICAgICAgIG91dC5wcmludCgiICBVc2luZyBmcC1yZWxhdGl2ZSBh
ZGRyZXNzaW5nIGZvciBzbG93IHBhdGggY2FsbFxuIik7CisgICAgZWxzZQorICAgICAgICBvdXQu
cHJpbnQoIiAgVXNpbmcgc3AtcmVsYXRpdmUgYWRkcmVzc2luZyBmb3IganVtcCAodXNpbmcgIiwg
bV9uZXdGcmFtZUJhc2UsICIgYXMgbmV3IHNwKVxuIik7CisgICAgaWYgKG1fb2xkRnJhbWVPZmZz
ZXQpCisgICAgICAgIG91dC5wcmludCgiICAgT2xkIGZyYW1lIG9mZnNldCBpcyAiLCBtX29sZEZy
YW1lT2Zmc2V0LCAiXG4iKTsKKyAgICBpZiAobV9uZXdGcmFtZU9mZnNldCkKKyAgICAgICAgb3V0
LnByaW50KCIgICBOZXcgZnJhbWUgb2Zmc2V0IGlzICIsIG1fbmV3RnJhbWVPZmZzZXQsICJcbiIp
OworfQorCitDYWNoZWRSZWNvdmVyeSogQ2FsbEZyYW1lU2h1ZmZsZXI6OmdldENhY2hlZFJlY292
ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKCFyZWNvdmVyeS5pc0Nv
bnN0YW50KCkpOworICAgIGlmIChyZWNvdmVyeS5pc0luR1BSKCkpCisgICAgICAgIHJldHVybiBt
X3JlZ2lzdGVyc1tyZWNvdmVyeS5ncHIoKV07CisgICAgaWYgKHJlY292ZXJ5LmlzSW5GUFIoKSkK
KyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LmZwcigpXTsKKyNpZiBVU0UoSlNW
QUxVRTMyXzY0KQorICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSA9PSBJblBhaXIpIHsKKyAg
ICAgICAgQVNTRVJUKG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnRhZ0dQUigpXSA9PSBtX3JlZ2lzdGVy
c1tyZWNvdmVyeS5wYXlsb2FkR1BSKCldKTsKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3Jl
Y292ZXJ5LnBheWxvYWRHUFIoKV07CisgICAgfQorI2VuZGlmCisgICAgQVNTRVJUKHJlY292ZXJ5
LmlzSW5KU1N0YWNrKCkpOworICAgIHJldHVybiBnZXRPbGQocmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkpOworfQorCitDYWNoZWRSZWNvdmVyeSogQ2FsbEZyYW1lU2h1ZmZsZXI6OnNldENhY2hl
ZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnksIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRS
ZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoIXJlY292ZXJ5LmlzQ29uc3RhbnQoKSk7CisgICAgaWYg
KHJlY292ZXJ5LmlzSW5HUFIoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5
LmdwcigpXSA9IGNhY2hlZFJlY292ZXJ5OworICAgIGlmIChyZWNvdmVyeS5pc0luRlBSKCkpCisg
ICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5mcHIoKV0gPSBjYWNoZWRSZWNvdmVy
eTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSA9
PSBJblBhaXIpIHsKKyAgICAgICAgbV9yZWdpc3RlcnNbcmVjb3ZlcnkudGFnR1BSKCldID0gY2Fj
aGVkUmVjb3Zlcnk7CisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5wYXlsb2Fk
R1BSKCldID0gY2FjaGVkUmVjb3Zlcnk7CisgICAgfQorI2VuZGlmCisgICAgQVNTRVJUKHJlY292
ZXJ5LmlzSW5KU1N0YWNrKCkpOworICAgIHNldE9sZChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIo
KSwgY2FjaGVkUmVjb3ZlcnkpOworICAgIHJldHVybiBjYWNoZWRSZWNvdmVyeTsKK30KKwordm9p
ZCBDYWxsRnJhbWVTaHVmZmxlcjo6c3BpbGwoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5
KQoreworICAgIEFTU0VSVCghaXNTbG93UGF0aCgpKTsKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5pc0luUmVnaXN0ZXJzKCkpOworCisgICAgVmlydHVhbFJlZ2lzdGVyIHNw
aWxsU2xvdCB7IDAgfTsKKyAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBzbG90IHsgZmlyc3RPbGQo
KSB9OyBzbG90IDw9IGxhc3RPbGQoKTsgc2xvdCAtPSAxKSB7CisgICAgICAgIEFTU0VSVChzbG90
IDwgbmV3QXNPbGQoZmlyc3ROZXcoKSkpOworICAgICAgICBpZiAoZ2V0T2xkKHNsb3QpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3BpbGxTbG90ID0gc2xvdDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIC8vIFdlIG11c3QgaGF2ZSBlbm91Z2ggc2xvdHMgdG8gYmUgYWJs
ZSB0byBmaXQgdGhlIHdob2xlCisgICAgLy8gY2FsbGVlJ3MgZnJhbWUgZm9yIHRoZSBzbG93IHBh
dGguCisgICAgUkVMRUFTRV9BU1NFUlQoc3BpbGxTbG90LmlzTG9jYWwoKSk7CisKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBTcGlsbGluZyAiLCBjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLCAiIGludG8gIiwgc3BpbGxTbG90LCAiXG4iKTsKKyAgICBhdXRvIGZvcm1h
dCA9IGVtaXRTdG9yZShjYWNoZWRSZWNvdmVyeSwgYWRkcmVzc0Zvck9sZChzcGlsbFNsb3QpKTsK
KyAgICBBU1NFUlQoZm9ybWF0ICE9IERhdGFGb3JtYXROb25lKTsKKyAgICB1cGRhdGVSZWNvdmVy
eShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNwaWxs
U2xvdCwgZm9ybWF0KSk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREZWx0YUNo
ZWNrKCkKK3sKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBnZXRGcmVlR1BSKCkgfTsKKyAgICBpZiAoc2NyYXRjaEdQ
UiAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiICBVc2luZyAiLCBzY3JhdGNoR1BSLCAiIGZvciB0aGUgZnAtc3AgZGVsdGEgY2hl
Y2tcbiIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlciwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG9rID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHNjcmF0Y2hHUFIsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKAor
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIG51
bUxvY2FscygpKSkpOworICAgICAgICBtX2ppdC5hYm9ydFdpdGhSZWFzb24oSklUVW5leHBlY3Rl
ZENhbGxGcmFtZVNpemUpOworICAgICAgICBvay5saW5rKCZtX2ppdCk7CisgICAgfSBlbHNlIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIFNraXBwaW5nIHRoZSBmcC1zcCBkZWx0YSBj
aGVjayBzaW5jZSB0aGVyZSBpcyB0b28gbXVjaCBwcmVzc3VyZSIpOworfQorCit2b2lkIENhbGxG
cmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgoKQoreworICAgIEFTU0VSVChpc1VuZGVj
aWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVjaygpOworCisgICAgbV9mcmFtZURlbHRhID0gbnVt
TG9jYWxzKCkgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZTsKKyAgICBtX25ld0ZyYW1l
QmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcjsKKyAgICBtX25ld0Zy
YW1lT2Zmc2V0ID0gLUpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworCisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIlxuXG5QcmVwYXJpbmcgZnJhbWUgZm9yIHNsb3cgcGF0
aCBjYWxsOlxuIiwgKnRoaXMpOworCisgICAgcHJlcGFyZUFueSgpOworCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIlJlYWR5IGZvciBzbG93IHBhdGggY2FsbCFcbiIpOworfQor
Cit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yVGFpbENhbGwoKQoreworICAgIEFT
U0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVjaygpOworCisgICAgLy8gV2Un
bGwgdXNlIHNwLWJhc2VkIGluZGV4aW5nIHNvIHRoYXQgd2UgY2FuIGxvYWQgdGhlCisgICAgLy8g
Y2FsbGVyJ3MgZnJhbWUgcG9pbnRlciBpbnRvIHRoZSBmcHIgaW1tZWRpYXRlbHkKKyAgICBtX29s
ZEZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcjsKKyAgICBt
X29sZEZyYW1lT2Zmc2V0ID0gbnVtTG9jYWxzKCk7CisgICAgbV9uZXdGcmFtZUJhc2UgPSBhY3F1
aXJlR1BSKCk7CisjaWYgQ1BVKFg4NikKKyAgICAvLyBXZSBsb2FkIHRoZSBmcmFtZSBwb2ludGVy
IG1hbnVhbGx5LCBidXQgd2UgbmVlZCB0byBhc2sgdGhlCisgICAgLy8gYWxnb3JpdGhtIHRvIG1v
dmUgdGhlIHJldHVybiBQQyBmb3IgdXMgKGl0J2QgcHJvYmFibHkKKyAgICAvLyByZXF1aXJlIGEg
d3JpdGUgdG8gdGhlIGRhbmdlciB6b25lKS4gU2luY2UgaXQnZCBiZSBhd2t3YXJkCisgICAgLy8g
dG8gYXNrIGZvciBoYWxmIGEgdmFsdWUgbW92ZSwgd2UgYXNrIHRoYXQgdGhlIHdob2xlIHRoaW5n
CisgICAgLy8gYmUgbW92ZWQgZm9yIHVzLgorICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyAw
IH0sCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVn
aXN0ZXIoMCksIERhdGFGb3JtYXRKUykpOworCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFk
MCBhbmQgd2Ugd2lsbCBtb3ZlIGl0IHVwIGhhbGYgYSBzbG90CisgICAgLy8gbWFudWFsbHkKKyAg
ICBtX25ld0ZyYW1lT2Zmc2V0ID0gMDsKKyNlbGlmIENQVShBUk0pIHx8IENQVShTSDQpIHx8IENQ
VShNSVBTKQorICAgIC8vIFdlIGxvYWQgdGhlIHRoZSBmcmFtZSBwb2ludGVyIGFuZCBsaW5rIHJl
Z2lzdGVyCisgICAgLy8gbWFudWFsbHkuIFdlIGNvdWxkIGFzayB0aGUgYWxnb3JpdGhtIHRvIGxv
YWQgdGhlbSBmb3IgdXMsCisgICAgLy8gYW5kIGl0IHdvdWxkIGFsbG93IHVzIHRvIHVzZSB0aGUg
bGluayByZWdpc3RlciBhcyBhbiBleHRyYQorICAgIC8vIHRlbXBvcmFyeSAtIGJ1dCBpdCdkIG1l
YW4gdGhhdCB0aGUgZnJhbWUgcG9pbnRlciBjYW4gYWxzbworICAgIC8vIGJlIHVzZWQgYXMgYW4g
ZXh0cmEgdGVtcG9yYXJ5LCBzbyB3ZSBrZWVwIHRoZSBsaW5rIHJlZ2lzdGVyCisgICAgLy8gbG9j
a2VkIGluc3RlYWQuCisKKyAgICAvLyBzcCB3aWxsIHBvaW50IHRvIGhlYWQxIHNpbmNlIHRoZSBj
YWxsZWUncyBwcm9sb2d1ZSBwdXNoZXMKKyAgICAvLyB0aGUgY2FsbCBmcmFtZSBhbmQgbGluayBy
ZWdpc3Rlci4KKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTE7CisjZWxpZiBDUFUoQVJNNjQpCisg
ICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9pbnRlciBhbmQgbGluayByZWdpc3RlciBtYW51YWxs
eS4gV2UKKyAgICAvLyBjb3VsZCBhc2sgdGhlIGFsZ29yaXRobSB0byBsb2FkIHRoZSBsaW5rIHJl
Z2lzdGVyIGZvciB1cworICAgIC8vICh3aGljaCB3b3VsZCBhbGxvdyBmb3IgaXRzIHVzZSBhcyBh
biBleHRyYSB0ZW1wb3JhcnkpLCBidXQKKyAgICAvLyBzaW5jZSBpdHMgbm90IGluIEdQUkluZm8s
IHdlIGNhbid0IGRvIGl0LgorCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMiBzaW5jZSB0
aGUgY2FsbGVlJ3MgcHJvbG9ndWUgcHVzaGVzIHRoZQorICAgIC8vIGNhbGwgZnJhbWUgYW5kIGxp
bmsgcmVnaXN0ZXIKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTI7CisjZWxpZiBDUFUoWDg2XzY0
KQorICAgIC8vIFdlIGxvYWQgdGhlIGZyYW1lIHBvaW50ZXIgbWFudWFsbHksIGJ1dCB3ZSBhc2sg
dGhlCisgICAgLy8gYWxnb3JpdGhtIHRvIG1vdmUgdGhlIHJldHVybiBQQyBmb3IgdXMgKGl0J2Qg
cHJvYmFibHkKKyAgICAvLyByZXF1aXJlIGEgd3JpdGUgaW4gdGhlIGRhbmdlciB6b25lKQorICAg
IGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyAxIH0sCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoMSksIERhdGFGb3JtYXRKUykpOworCisg
ICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMSBzaW5jZSB0aGUgY2FsbGVlJ3MgcHJvbG9ndWUg
cHVzaGVzCisgICAgLy8gdGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXIKKyAgICBtX25ld0ZyYW1lT2Zm
c2V0ID0gLTE7CisjZWxzZQorICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworI2VuZGlm
CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBFbWl0dGluZyBjb2RlIGZv
ciBjb21wdXRpbmcgdGhlIG5ldyBmcmFtZSBiYXNlXG4iKTsKKworICAgIC8vIFdlIGNvbXB1dGUg
dGhlIG5ldyBmcmFtZSBiYXNlIGJ5IGZpcnN0IGNvbXB1dGluZyB0aGUgdG9wIG9mIHRoZQorICAg
IC8vIG9sZCBmcmFtZSAodGFraW5nIGludG8gYWNjb3VudCBhbiBhcmd1bWVudCBjb3VudCBoaWdo
ZXIgdGhhbgorICAgIC8vIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyksIHRoZW4gc3Vic3RyYWN0
aW5nIHRvIGl0IHRoZSBhbGlnbmVkCisgICAgLy8gbmV3IGZyYW1lIHNpemUgKGFkanVzdGVkKS4K
KyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVudENvdW50T0sgPQorICAgICAgICBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKSkpOworICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSAtIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplKSwgbV9uZXdGcmFtZUJhc2UpOworICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1l
QmFzZSk7CisgICAgbV9qaXQubXVsMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXpl
b2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJhc2UsIG1fbmV3RnJhbWVCYXNlKTsKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgIGFyZ3VtZW50Q291bnRP
Sy5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihtX2FsaWduZWRPbGRGcmFtZVNpemUgKiBzaXplb2YoUmVnaXN0ZXIpKSwK
KyAgICAgICAgbV9uZXdGcmFtZUJhc2UpOworICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAg
bV9qaXQuYWRkUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBtX25ld0ZyYW1lQmFzZSk7
CisgICAgbV9qaXQuc3ViUHRyKAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KAorICAgICAgICAgICAgKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSArIG1fbmV3RnJhbWVPZmZzZXQp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIAorICAgICAgICBtX25ld0ZyYW1lQmFzZSk7CisKKyAgICAv
LyBXZSB3YW50IHRoZSBmcmFtZSBwb2ludGVyIHRvIGFsd2F5cyBwb2ludCB0byBhIHZhbGlkIGZy
YW1lLCBhbmQKKyAgICAvLyB3ZSBhcmUgZ29pbmcgdG8gdHJhc2ggdGhlIGN1cnJlbnQgb25lLiBM
ZXQncyBtYWtlIGl0IHBvaW50IHRvCisgICAgLy8gb3VyIGNhbGxlcidzIGZyYW1lLCBzaW5jZSB0
aGF0J3Mgd2hhdCB3ZSB3YW50IHRvIGVuZCB1cCB3aXRoLgorICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVy
KSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKworICAg
IC8vIFdlIGxvYWQgdGhlIGxpbmsgcmVnaXN0ZXIgbWFudWFsbHkgZm9yIGFyY2hpdGVjdHVyZXMg
dGhhdCBoYXZlIG9uZQorI2lmIENQVShBUk0pIHx8IENQVShTSDQpIHx8IENQVShBUk02NCkKKyAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6ZW9mKHZvaWQqKSksCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpsaW5rUmVnaXN0ZXIpOworI2VsaWYgQ1BVKE1JUFMpCisgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIHNpemVvZih2b2lkKikpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV0dXJuQWRkcmVz
c1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IlByZXBhcmluZyBmcmFtZSBmb3IgdGFpbCBjYWxsOlxuIiwgKnRoaXMpOworCisgICAgcHJlcGFy
ZUFueSgpOworCisjaWYgQ1BVKFg4NikKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiICBTaW11bGF0aW5nIHBvcCBvZiB0aGUgY2FsbCBmcmFtZSByZWdpc3RlclxuIik7CisgICAg
bV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSks
IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJSZWFkeSBmb3IgdGFpbCBjYWxsIVxuIik7Cit9
CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyhDYWNoZWRSZWNvdmVyeSYgY2Fj
aGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IEludmFsaWRHUFJS
ZWcpOworCisgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgc2V0IHVwIGNvcnJlY3RseSwg
d2UgZG9uJ3QgaGF2ZQorICAgIC8vIGFueXRoaW5nIHRvIGRvLgorICAgIGlmIChpc1Nsb3dQYXRo
KCkgJiYgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpCisgICAgICAgICYm
IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKS5zaXplKCkgPT0gMQorICAgICAgICAmJiAobmV3QXNP
bGQoY2FjaGVkUmVjb3ZlcnkudGFyZ2V0cygpWzBdKQorICAgICAgICAgICAgPT0gY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS52aXJ0dWFsUmVnaXN0ZXIoKSkpIHsKKyAgICAgICAgY2FjaGVkUmVj
b3ZlcnkuY2xlYXJUYXJnZXRzKCk7CisgICAgICAgIGlmICghY2FjaGVkUmVjb3Zlcnkud2FudGVk
SlNWYWx1ZVJlZ3MoKSkKKyAgICAgICAgICAgIGNsZWFyQ2FjaGVkUmVjb3ZlcnkoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm
ICghY2FuTG9hZEFuZEJveChjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGVtaXRMb2FkKGNhY2hlZFJlY292ZXJ5KTsKKyAgICBlbWl0Qm94KGNhY2hlZFJlY292
ZXJ5KTsKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luUmVnaXN0ZXJz
KCkKKyAgICAgICAgfHwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0NvbnN0YW50KCkpOwor
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICogU3RvcmluZyAiLCBjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAgICBmb3IgKHNpemVfdCBpIHsgMCB9OyBpIDwgY2Fj
aGVkUmVjb3ZlcnkudGFyZ2V0cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB0YXJnZXQgeyBjYWNoZWRSZWNvdmVyeS50YXJnZXRzKClbaV0gfTsKKyAgICAgICAgQVNT
RVJUKCFpc0Rhbmdlck5ldyh0YXJnZXQpKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKCFpID8gIiBpbnRvICIgOiAiLCBhbmQgIiwgIk5FVyAiLCB0YXJnZXQpOwor
ICAgICAgICBlbWl0U3RvcmUoY2FjaGVkUmVjb3ZlcnksIGFkZHJlc3NGb3JOZXcodGFyZ2V0KSk7
CisgICAgICAgIHNldE5ldyh0YXJnZXQsIG51bGxwdHIpOworICAgIH0KKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICBjYWNoZWRSZWNvdmVyeS5jbGVhclRhcmdl
dHMoKTsKKyAgICBpZiAoIWNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkpCisgICAg
ICAgIGNsZWFyQ2FjaGVkUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6cGVyZm9ybVNhZmVX
cml0ZXMoKQoreworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdFNhZmU7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGVuZCB7IGxhc3ROZXcoKSArIDEgfTsKKyAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVy
PiBmYWlsdXJlczsKKworICAgIC8vIEZvciBhbGwgY2FjaGVkUmVjb3ZlcmllcyB0aGF0IHdyaXRl
cyB0byB0aGUgc2FmZSB6b25lLCBpZiBpdAorICAgIC8vIGRvZXNuJ3QgYWxzbyB3cml0ZSB0byB0
aGUgZGFuZ2VyIHpvbmUsIHdlIHRyeSB0byBwZXJmb3JtCisgICAgLy8gdGhlIHdyaXRlcy4gVGhp
cyBtYXkgZnJlZSB1cCBkYW5nZXIgc2xvdHMsIHNvIHdlIGl0ZXJhdGUKKyAgICAvLyBhZ2FpbiB1
bnRpbCBpdCBkb2Vzbid0IGhhcHBlbiBhbnltb3JlLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0
IGV2ZW4gdGhvdWdoIHdlIGhhdmUgYSB3aGlsZSBibG9jaywgd2UgbG9vayBhdAorICAgIC8vIGVh
Y2ggc2xvdCBvZiB0aGUgbmV3IGNhbGwgZnJhbWUgYXQgbW9zdCBvbmNlIHNpbmNlIGluIGVhY2gK
KyAgICAvLyBpdGVyYXRpb24gYmV5b25kIHRoZSBmaXJzdCwgd2Ugb25seSBsb2FkIHVwIHRoZSBw
b3J0aW9uIG9mCisgICAgLy8gdGhlIG5ldyBjYWxsIGZyYW1lIHRoYXQgd2FzIGRhbmdlcm91cyBh
bmQgYmVjYW1lIHNhZmUgZHVlCisgICAgLy8gdG8gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4KKyAg
ICBkbyB7CisgICAgICAgIGZpcnN0U2FmZSA9IGRhbmdlckZyb250aWVyKCkgKyAxOworICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgVHJ5aW5nIHNhZmUgd3JpdGVz
IChiZXR3ZWVuIE5FVyAiLCBmaXJzdFNhZmUsICIgYW5kIE5FVyAiLCBlbmQgLSAxLCAiKVxuIik7
CisgICAgICAgIGJvb2wgZGlkUHJvZ3Jlc3MgPSBmYWxzZTsKKyAgICAgICAgZm9yIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnIHsgZmlyc3RTYWZlIH07IHJlZyA8IGVuZDsgcmVnICs9IDEpIHsKKyAgICAg
ICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldE5ldyhyZWcpOworICAg
ICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICArICIsIHJlZywgIiBpcyBPSy5c
biIpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCFoYXNPbmx5U2FmZVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgLSAi
LCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiB3cml0ZXMgdG8gTkVXICIsIHJlZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGFsc28gaGFzIGRhbmdlcm91cyB3cml0ZXMuXG4i
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdz
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAtICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIHdyaXRlcyB0
byBORVcgIiwgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBidXQgaXMgYWxzbyBuZWVk
ZWQgaW4gcmVnaXN0ZXJzLlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCF0cnlXcml0ZXMoKmNh
Y2hlZFJlY292ZXJ5KSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAtIFVuYWJsZSB0byB3cml0ZSB0byBORVcgIiwgcmVnLCAi
IGZyb20gIiwgY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAg
ICAgIGZhaWx1cmVzLmFwcGVuZChyZWcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGlk
UHJvZ3Jlc3MgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVuZCA9IGZpcnN0U2FmZTsKKwor
ICAgICAgICAvLyBJZiB3ZSBoYXZlIGNhY2hlZFJlY292ZXJpZXMgdGhhdCBmYWlsZWQgdG8gd3Jp
dGUsIGl0IGlzCisgICAgICAgIC8vIGJlY2F1c2UgdGhleSBhcmUgb24gdGhlIHN0YWNrIGFuZCB3
ZSBkaWRuJ3QgaGF2ZSBlbm91Z2gKKyAgICAgICAgLy8gcmVnaXN0ZXJzIGF2YWlsYWJsZSBhdCB0
aGUgdGltZSB0byBsb2FkIHRoZW0gaW50by4gSWYKKyAgICAgICAgLy8gd2UgaGF2ZSBhIGZyZWUg
cmVnaXN0ZXIsIHdlIHNob3VsZCB0cnkgYWdhaW4gYmVjYXVzZSBpdAorICAgICAgICAvLyBjb3Vs
ZCBmcmVlIHVwIHNvbWUgZGFuZ2VyIHNsb3RzLgorICAgICAgICBpZiAoZGlkUHJvZ3Jlc3MgJiYg
aGFzRnJlZVJlZ2lzdGVyKCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IHN0aWxsRmFpbGluZzsKKyAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIGZhaWxlZCA6
IGZhaWx1cmVzKSB7CisgICAgICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292
ZXJ5ID0gZ2V0TmV3KGZhaWxlZCk7CisgICAgICAgICAgICAgICAgLy8gSXQgY291bGQgaGF2ZSBi
ZWVuIGhhbmRsZWQgbGF0ZXIgaWYgaXQgaGFkCisgICAgICAgICAgICAgICAgLy8gc2V2ZXJhbCB0
YXJnZXRzCisgICAgICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQoaGFzT25seVNhZmVX
cml0ZXMoKmNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgICAgICAgICAmJiAhY2FjaGVkUmVj
b3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpOworICAgICAgICAgICAgICAgIGlmICghdHJ5V3Jp
dGVzKCpjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICAgICAgICAgIHN0aWxsRmFpbGluZy5h
cHBlbmQoZmFpbGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZhaWx1cmVzID0gV1RG
Ojptb3ZlKHN0aWxsRmFpbGluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UgJiYg
Zmlyc3RTYWZlICE9IGRhbmdlckZyb250aWVyKCkgKyAxKQorICAgICAgICAgICAgZGF0YUxvZygi
ICBXZSBmcmVlZCB1cCBkYW5nZXIgc2xvdHMhXG4iKTsKKyAgICB9IHdoaWxlIChmaXJzdFNhZmUg
IT0gZGFuZ2VyRnJvbnRpZXIoKSArIDEpOworCisgICAgcmV0dXJuIGZhaWx1cmVzLmlzRW1wdHko
KTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUFueSgpCit7CisgICAgQVNT
RVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7CisKKyAg
ICAvLyBGaXJzdCwgd2UgdHJ5IHRvIHN0b3JlIGFueSB2YWx1ZSB0aGF0IGdvZXMgYWJvdmUgdGhl
IGRhbmdlcgorICAgIC8vIGZyb250aWVyLiBUaGlzIHdpbGwgbmV2ZXIgdXNlIG1vcmUgcmVnaXN0
ZXJzIHNpbmNlIHdlIGFyZSBvbmx5CisgICAgLy8gbG9hZGluZytzdG9yaW5nIGlmIHdlIGVuc3Vy
ZSB0aGF0IGFueSByZWdpc3RlciB1c2VkIGZvciB0aGUgbG9hZAorICAgIC8vIHdpbGwgYmUgZnJl
ZWQgdXAgYWZ0ZXIgdGhlIHN0b3JlcyAoaS5lLiwgYWxsIHN0b3JlcyBhcmUgYWJvdmUKKyAgICAv
LyB0aGUgZGFuZ2VyIGZyb250aWVyLCBhbmQgdGhlcmUgaXMgbm8gd2FudGVkIHJlZ2lzdGVyKS4K
KyAgICBwZXJmb3JtU2FmZVdyaXRlcygpOworCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgY291
bGRuJ3QgaGF2ZSBtb3JlIGF2YWlsYWJsZSByZWdpc3RlcnMgdGhhbgorICAgIC8vIHdlIGhhdmUg
d2l0aG91dGggc3BpbGxpbmc6IGFsbCB2YWx1ZXMgY3VycmVudGx5IGluIHJlZ2lzdGVycworICAg
IC8vIGVpdGhlciByZXF1aXJlIGEgd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lLCBvciBoYXZlIGEg
d2FudGVkCisgICAgLy8gcmVnaXN0ZXIsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYW55IGNhc2UgdGhl
eSB3aWxsIGhhdmUgdG8gZ28KKyAgICAvLyB0aHJvdWdoIHJlZ2lzdGVycyBhZ2Fpbi4KKworICAg
IC8vIFdlIG5vdyBzbG93bHkgZnJlZSB1cCB0aGUgZGFuZ2VyIHpvbmUgYnkgZmlyc3QgbG9hZGlu
ZyB0aGUgb2xkCisgICAgLy8gdmFsdWUgb24gdGhlIGRhbmdlciBmcm9udGllciwgc3BpbGxpbmcg
YXMgbWFueSByZWdpc3RlcnMgYXMKKyAgICAvLyBuZWVkZWQgdG8gZG8gc28gYW5kIGVuc3VyaW5n
IHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiB0aGUKKyAgICAvLyBuZXcgZnJhbWUgaXMg
bm93IHJlYWR5IHRvIGJlIHdyaXR0ZW4uIFRoZW4sIHdlIHN0b3JlIHRoZSBvbGQKKyAgICAvLyB2
YWx1ZSB0byBpdHMgdGFyZ2V0IGxvY2F0aW9uIGlmIHBvc3NpYmxlICh3ZSBjb3VsZCBoYXZlIGZh
aWxlZAorICAgIC8vIHRvIGxvYWQgaXQgcHJldmlvdXNseSBkdWUgdG8gaGlnaCBwcmVzc3VyZSku
IEZpbmFsbHksIHdlIHdyaXRlCisgICAgLy8gdG8gYW55IG9mIHRoZSBuZXdseSBzYWZlIHNsb3Rz
IHRoYXQgd2UgY2FuLCB3aGljaCBjb3VsZCBmcmVlIHVwCisgICAgLy8gcmVnaXN0ZXJzIChoZW5j
ZSB3aHkgd2UgZG8gaXQgZWFnZXJseSkuCisgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnIHsg
ZGFuZ2VyRnJvbnRpZXIoKSB9OyByZWcgPj0gZmlyc3ROZXcoKTsgcmVnIC09IDEpIHsKKyAgICAg
ICAgaWYgKHJlZyA9PSBkYW5nZXJGcm9udGllcigpKSB7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIE5leHQgc2xvdCAoTkVXICIsIHJlZywgIikg
aXMgdGhlIGRhbmdlciBmcm9udGllclxuIik7CisgICAgICAgICAgICBDYWNoZWRSZWNvdmVyeSog
Y2FjaGVkUmVjb3ZlcnkgeyBnZXRPbGQobmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpIH07Cisg
ICAgICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAgZW5zdXJlTG9h
ZCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAgZW1pdExvYWQoKmNhY2hlZFJlY292ZXJ5
KTsKKyAgICAgICAgICAgIGVuc3VyZUJveCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAg
ZW1pdEJveCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAgaWYgKGhhc09ubHlTYWZlV3Jp
dGVzKCpjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICAgICAgdHJ5V3JpdGVzKCpjYWNoZWRS
ZWNvdmVyeSk7CisgICAgICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgTmV4dCBzbG90IGlzIE5FVyAiLCByZWcsICJcbiIpOworCisgICAgICAgIEFTU0VSVCgh
aXNEYW5nZXJOZXcocmVnKSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVy
eSA9IGdldE5ldyhyZWcpOworICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG9uZSBvZiB0aGUgaGVh
ZGVyIHNsb3RzIHdlIGRvbid0IGNhcmUgYWJvdXQuCisgICAgICAgIGlmICghY2FjaGVkUmVjb3Zl
cnkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICsgIiwgcmVnLCAiIGlzIE9LXG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGNhbkxvYWRBbmRCb3goKmNhY2hlZFJlY292ZXJ5KSAmJiBoYXNP
bmx5U2FmZVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAmJiAhY2FjaGVkUmVj
b3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpIHsKKyAgICAgICAgICAgIGVtaXRMb2FkKCpjYWNo
ZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAg
ICAgICAgICBib29sIHdyaXRlc09LID0gdHJ5V3JpdGVzKCpjYWNoZWRSZWNvdmVyeSk7CisgICAg
ICAgICAgICBBU1NFUlQod3JpdGVzT0spOworICAgICAgICB9IGVsc2UgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCIgICAtICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAi
IGNhbid0IGJlIGhhbmRsZWQganVzdCB5ZXQuXG4iKTsKKyAgICB9CisgICAgQVNTRVJUKGRhbmdl
ckZyb250aWVyKCkgPCBmaXJzdE5ldygpKTsKKworICAgIC8vIE5vdywgdGhlIGRhbmdlciB6b25l
IGlzIGVtcHR5LCBidXQgd2Ugc3RpbGwgaGF2ZSBhIGNvdXBsZSBvZgorICAgIC8vIHRoaW5ncyB0
byBkbzoKKyAgICAvLworICAgIC8vIDEpIFRoZXJlIGNvdWxkIGJlIHJlbWFpbmluZyBzYWZlIHdy
aXRlcyB0aGF0IGZhaWxlZCBlYXJsaWVyIGR1ZQorICAgIC8vICAgIHRvIGhpZ2ggcmVnaXN0ZXIg
cHJlc3N1cmUgYW5kIGhhZCBub3RoaW5nIHRvIGRvIHdpdGggdGhlCisgICAgLy8gICAgZGFuZ2Vy
IHpvbmUgd2hhdHNvZXZlci4KKyAgICAvLworICAgIC8vIDIpIFNvbWUgd2FudGVkIHJlZ2lzdGVy
cyBjb3VsZCBoYXZlIHRvIGJlIGxvYWRlZCAodGhpcyBjb3VsZAorICAgIC8vICAgIGhhcHBlbiBl
aXRoZXIgd2hlbiBtYWtpbmcgYSBjYWxsIHRvIGEgbmV3IGZ1bmN0aW9uIHdpdGggYQorICAgIC8v
ICAgIGxvd2VyIG51bWJlciBvZiBhcmd1bWVudHMgLSBzaW5jZSBhYm92ZSBoZXJlLCB3ZSBvbmx5
IGxvYWQKKyAgICAvLyAgICB3YW50ZWQgcmVnaXN0ZXJzIHdoZW4gdGhleSBhcmUgYXQgdGhlIGRh
bmdlciBmcm9udGllciAtLCBvcgorICAgIC8vICAgIGlmIGEgd2FudGVkIHJlZ2lzdGVyIGdvdCBz
cGlsbGVkKS4KKyAgICAvLworICAgIC8vIDMpIFNvbWUgd2FudGVkIHJlZ2lzdGVycyBjb3VsZCBo
YXZlIGJlZW4gbG9hZGVkIGluIHRoZSB3cm9uZworICAgIC8vICAgIHJlZ2lzdGVycworICAgIC8v
CisgICAgLy8gNCkgV2UgaGF2ZSB0byB0YWtlIGNhcmUgb2Ygc29tZSBib29ra2VlcGluZyAtIG5h
bWVseSwgc3RvcmluZworICAgIC8vICAgIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgdXBkYXRpbmcg
dGhlIHN0YWNrIHBvaW50ZXIuCisKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBtdXN0IGhhdmUg
ZW5vdWdoIHJlZ2lzdGVycyBhdmFpbGFibGUgZm9yCisgICAgLy8gaGFuZGxpbmcgMSkuIE5vbmUg
b2YgdGhlIGxvYWRzIGNhbiBmYWlsIGJlY2F1c2Ugd2UgaGF2ZSBiZWVuCisgICAgLy8gZWFnZXJs
eSBmcmVlaW5nIHVwIHJlZ2lzdGVycyBpbiBhbGwgdGhlIHByZXZpb3VzIHBoYXNlcyAtIHNvCisg
ICAgLy8gdGhlIG9ubHkgdmFsdWVzIHRoYXQgYXJlIGluIHJlZ2lzdGVycyBhdCB0aGlzIHBvaW50
IG11c3QgaGF2ZQorICAgIC8vIHdhbnRlZCByZWdpc3RlcnMuCisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIiAgRGFuZ2VyIHpvbmUgaXMgY2xlYXIsIHBlcmZvcm1pbmcgcmVtYWlu
aW5nIHdyaXRlcy5cbiIpOworICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyB7IGZpcnN0TmV3
KCkgfTsgcmVnIDw9IGxhc3ROZXcoKTsgcmVnICs9IDEpIHsKKyAgICAgICAgQ2FjaGVkUmVjb3Zl
cnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3KHJlZykgfTsKKyAgICAgICAgaWYgKCFjYWNoZWRS
ZWNvdmVyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVtaXRMb2FkKCpjYWNo
ZWRSZWNvdmVyeSk7CisgICAgICAgIGVtaXRCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAg
Ym9vbCB3cml0ZXNPSyA9IHRyeVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBBU1NF
UlQod3JpdGVzT0spOworICAgIH0KKworICAgIC8vIEhhbmRsZSAyKSBieSBsb2FkaW5nIGFsbCBy
ZWdpc3RlcnMuIFdlIGRvbid0IGhhdmUgdG8gZG8gYW55CisgICAgLy8gd3JpdGVzLCBzaW5jZSB0
aGV5IGhhdmUgYmVlbiB0YWtlbiBjYXJlIG9mIGFib3ZlLgorICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCIgIExvYWRpbmcgd2FudGVkIEdQUnMgaW50byByZWdpc3RlcnNcbiIpOwor
ICAgIGZvciAoUmVnIHJlZyB7IFJlZzo6Zmlyc3QoKSB9OyByZWcgPD0gUmVnOjpsYXN0KCk7IHJl
ZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5
IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVChyZWcuaXNHUFIoKSk7CisKKyAg
ICAgICAgZW1pdExvYWQoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgZW1pdEJveCgqY2FjaGVk
UmVjb3ZlcnkpOworICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnktPnRhcmdldHMoKS5pc0Vt
cHR5KCkpOworICAgIH0KKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgcmVhZCBldmVy
eXRoaW5nIHdlIGNhcmVkIGFib3V0IGZyb20gdGhlCisgICAgLy8gc3RhY2ssIGFuZCB3cml0dGVu
IGV2ZXJ5dGhpbmcgd2UgaGFkIHRvIHRvIHRoZSBzdGFjay4KKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZygiICBDYWxsZWUgZnJhbWUgaXMgZnVsbHkgc2V0IHVwXG4iKTsKKyAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcg
eyBmaXJzdE5ldygpIH07IHJlZyA8PSBsYXN0TmV3KCk7IHJlZyArPSAxKQorICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChyZWcsICFnZXROZXcocmVnKSk7CisKKyAgICAgICAgZm9yIChDYWNoZWRS
ZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgOiBtX2NhY2hlZFJlY292ZXJpZXMpIHsKKyAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY2FjaGVkUmVjb3ZlcnksIGNhY2hlZFJlY292ZXJ5LT50YXJnZXRz
KCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnktPnJlY292
ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXZSBuZWVk
IHRvIGhhbmRsZSA0KSBmaXJzdCBiZWNhdXNlIGl0IGltcGxpZXMgcmVsZWFzaW5nCisgICAgLy8g
bV9uZXdGcmFtZUJhc2UsIHdoaWNoIGNvdWxkIGJlIGEgd2FudGVkIHJlZ2lzdGVyLgorICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAqIFN0b3JpbmcgdGhlIGFyZ3VtZW50IGNv
dW50IGludG8gIiwgVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6QXJndW1lbnRDb3VudCB9LCAi
XG4iKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCks
CisgICAgICAgIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6QXJndW1l
bnRDb3VudCB9KS53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgIG1faml0LnN0b3JlMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmdDb3VudCgpKSwKKyAgICAgICAgYWRkcmVzc0Zv
ck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVudENvdW50IH0pLndpdGhPZmZz
ZXQoUGF5bG9hZE9mZnNldCkpOworCisgICAgaWYgKCFpc1Nsb3dQYXRoKCkpIHsKKyAgICAgICAg
QVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBSZWxl
YXNpbmcgdGhlIG5ldyBmcmFtZSBiYXNlIHBvaW50ZXJcbiIpOworICAgICAgICBtX2ppdC5tb3Zl
KG1fbmV3RnJhbWVCYXNlLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgICAgICByZWxlYXNlR1BSKG1fbmV3RnJhbWVCYXNlKTsKKyAgICB9CisKKyAgICAvLyBGaW5h
bGx5IHdlIGhhbmRsZSAzKQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIEVu
c3VyaW5nIHdhbnRlZCByZWdpc3RlcnMgYXJlIGluIHRoZSByaWdodCByZWdpc3RlclxuIik7Cisg
ICAgZm9yIChSZWcgcmVnIHsgUmVnOjpmaXJzdCgpIH07IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVn
ID0gcmVnLm5leHQoKSkgeworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zlcnkg
eyBtX25ld1JlZ2lzdGVyc1tyZWddIH07CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJUKHJlZy5pc0dQUigpKTsKKworICAg
ICAgICBlbWl0RGlzcGxhY2UoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGM1YzNlOGMxM2NlOTdj
MjYwZmE2NGY3YWZmN2M4NDliYjE3YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5oCkBAIC0wLDAgKzEsODAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FsbEZy
YW1lU2h1ZmZsZXJfaAorI2RlZmluZSBDYWxsRnJhbWVTaHVmZmxlcl9oCisKKyNpZiBFTkFCTEUo
SklUKQorCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSAiU3RhY2tB
bGlnbm1lbnQuaCIKKyNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCisjaW5jbHVkZSAiVmlydHVh
bFJlZ2lzdGVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworLy8gQSBDYWNoZWRSZWNvdmVyeSBpcyBhIHNpbXBsZSB3cmFwcGVyIGFyb3VuZCBhIFZhbHVl
UmVjb3ZlcnkgdGhhdCAKK2NsYXNzIENhY2hlZFJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBDYWNo
ZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5KQorICAgICAgICA6IG1fcmVjb3Zlcnkg
eyByZWNvdmVyeSB9CisgICAgeworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KENhY2hlZFJl
Y292ZXJ5JikgPSBkZWxldGU7CisgICAgQ2FjaGVkUmVjb3ZlcnkoQ2FjaGVkUmVjb3ZlcnkmJikg
PSBkZWxldGU7CisgICAgQ2FjaGVkUmVjb3ZlcnkmIG9wZXJhdG9yPShDYWNoZWRSZWNvdmVyeSYp
ID0gZGVsZXRlOworICAgIENhY2hlZFJlY292ZXJ5JiBvcGVyYXRvcj0oQ2FjaGVkUmVjb3Zlcnkm
JikgPSBkZWxldGU7CisKKyAgICBjb25zdCBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyLCAxPiYgdGFy
Z2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0czsgfQorCisgICAgdm9pZCBhZGRUYXJnZXQo
VmlydHVhbFJlZ2lzdGVyIHJlZykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RhcmdldHMuaXNF
bXB0eSgpIHx8IG1fdGFyZ2V0cy5sYXN0KCkgPCByZWcpOworICAgICAgICBtX3RhcmdldHMuYXBw
ZW5kKHJlZyk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmVUYXJnZXQoVmlydHVhbFJlZ2lzdGVy
IHJlZykKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RhcmdldHMubGFzdCgpID09IHJlZyk7Cisg
ICAgICAgIG1fdGFyZ2V0cy5zaHJpbmsobV90YXJnZXRzLnNpemUoKSAtIDEpOworICAgIH0KKwor
ICAgIHZvaWQgY2xlYXJUYXJnZXRzKCkKKyAgICB7CisgICAgICAgIG1fdGFyZ2V0cy5jbGVhcigp
OworICAgIH0KKworICAgIHZvaWQgc2V0V2FudGVkSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MganNW
YWx1ZVJlZ3MpCisgICAgeworICAgICAgICBtX3dhbnRlZEpTVmFsdWVSZWdzID0ganNWYWx1ZVJl
Z3M7CisgICAgfQorCisgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgY29udmVydGluZyB0aGlzIHJl
Y292ZXJ5IGludG8gYSBKU1ZhbHVlIHdpbGwKKyAgICAvLyByZXF1aXJlIGFkZGl0aW9uYWwgR1BS
cyBhbmQvb3IgRlBScy4KKyAgICAvLyBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gb25seSBkZXBlbmQg
b24gdGhlIERhdGFGb3JtYXQsIGFuZCB0aGUKKyAgICAvLyByZXN1bHQgb2YgdGhlc2UgY2FsbHMg
d2lsbCBzdGF5IHZhbGlkIGFmdGVyIGxvYWRzIGFuZC9vciBzdG9yZXMuCisgICAgYm9vbCBib3hp
bmdSZXF1aXJlc0dQUigpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAg
IHJldHVybiByZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlOworI2Vs
c2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCisgICAgfQorICAgIGJvb2wgYm94aW5n
UmVxdWlyZXNGUFIoKSBjb25zdAorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBz
d2l0Y2ggKHJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dEludDUyOgorICAgICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAg
IH0KKyAgICAKKworICAgIC8vIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCBraW5kIG9m
IHJlZ2lzdGVyIHdlIG5lZWQgdG8gYmUKKyAgICAvLyBhYmxlIHRvIGxvYWQgYSByZWNvdmVyeS4g
V2Ugb25seSB1c2UgaXQgd2hlbiBhIGRpcmVjdCBsb2FkIGlzCisgICAgLy8gY3VycmVudGx5IGlt
cG9zc2libGUsIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIHNob3VsZCBzcGlsbCBhCisgICAgLy8g
R1BSIG9yIGFuIEZQUiBmb3IgbG9hZGluZyB0aGlzIHZhbHVlLgorICAgIGJvb2wgbG9hZHNJbnRv
R1BSKCkgY29uc3Q7CisgICAgYm9vbCBsb2Fkc0ludG9GUFIoKSBjb25zdDsKKworICAgIFZhbHVl
UmVjb3ZlcnkgcmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBtX3JlY292ZXJ5OyB9CisKKyAgICB2
b2lkIHNldFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpIHsgbV9yZWNvdmVyeSA9IHJl
Y292ZXJ5OyB9CisKKyAgICBKU1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncygpIGNvbnN0IHsg
cmV0dXJuIG1fd2FudGVkSlNWYWx1ZVJlZ3M7IH0KK3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVy
eSBtX3JlY292ZXJ5OworICAgIEpTVmFsdWVSZWdzIG1fd2FudGVkSlNWYWx1ZVJlZ3M7CisgICAg
VmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMT4gbV90YXJnZXRzOworfTsKKworY2xhc3MgQ2FsbEZy
YW1lU2h1ZmZsZXIgeworcHVibGljOgorICAgIENhbGxGcmFtZVNodWZmbGVyKENDYWxsSGVscGVy
cyYsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworICAgIC8vIEFueSByZWdpc3RlciB0aGF0IGhhcyBiZWVuIGxvY2tl
ZCBvciBhY3F1aXJlZCBtdXN0IGJlIHJlbGVhc2VkCisgICAgLy8gYmVmb3JlIGNhbGxpbmcgcHJl
cGFyZUZvclRhaWxDYWxsKCkgb3IgcHJlcGFyZUZvclNsb3dQYXRoKCkuCisgICAgdm9pZCBsb2Nr
R1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0ZXJz
LmdldChncHIpKTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KGdwcik7CisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgKiBMb2NraW5nICIsIGdwciwg
IlxuIik7CisgICAgfQorCisgICAgR1BSUmVnIGFjcXVpcmVHUFIoKQorICAgIHsKKyAgICAgICAg
ZW5zdXJlR1BSKCk7CisgICAgICAgIEdQUlJlZyBncHIgeyBnZXRGcmVlR1BSKCkgfTsKKyAgICAg
ICAgQVNTRVJUKCFtX3JlZ2lzdGVyc1tncHJdKTsKKyAgICAgICAgbG9ja0dQUihncHIpOworICAg
ICAgICByZXR1cm4gZ3ByOworICAgIH0KKworICAgIHZvaWQgcmVsZWFzZUdQUihHUFJSZWcgZ3By
KQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgIGlmIChtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQoZ3ByKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIFJlbGVh
c2luZyAiLCBncHIsICJcbiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICogIiwgZ3ByLCAiIHdhcyBub3QgbG9ja2VkXG4iKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihncHIpOworICAgIH0KKworICAgIC8vIFlvdSBj
YW4gb25seSB0YWtlIGEgc25hcHNob3QgaWYgdGhlIHJlY292ZXJ5IGhhcyBub3Qgc3RhcnRlZAor
ICAgIC8vIHlldC4gVGhlIG9ubHkgb3BlcmF0aW9ucyB0aGF0IGFyZSB2YWxpZCBiZWZvcmUgdGFr
aW5nIGEKKyAgICAvLyBzbmFwc2hvdCBhcmUgbG9ja0dQUigpLCBhY3F1aXJlR1BSKCkgYW5kIHJl
bGVhc2VHUFIoKS4KKyAgICAvLworICAgIC8vIExvY2tpbmcgc3RhdHVzIGlzICpOT1QqIHByZXNl
cnZlZCBieSB0aGUgc25hcHNob3Q6IGl0IG9ubHkKKyAgICAvLyBjb250YWlucyBpbmZvcm1hdGlv
biBhYm91dCB3aGVyZSB0aGUKKyAgICAvLyBhcmd1bWVudHMvY2FsbGVlL2NhbGxlZS1zYXZlIHJl
Z2lzdGVycyBhcmUgYnkgdGFraW5nIGludG8KKyAgICAvLyBhY2NvdW50IGFueSBzcGlsbGluZyB0
aGF0IGFjcXVpcmVHUFIoKSBjb3VsZCBoYXZlIGRvbmUuCisgICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc25hcHNob3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVW5kZWNpZGVkKCkp
OworCisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGRhdGE7CisgICAgICAgIGRhdGEubnVt
TG9jYWxzID0gbnVtTG9jYWxzKCk7CisgICAgICAgIGRhdGEuY2FsbGVlID0gZ2V0TmV3KFZpcnR1
YWxSZWdpc3RlciB7IEpTU3RhY2s6OkNhbGxlZSB9KS0+cmVjb3ZlcnkoKTsKKyAgICAgICAgZGF0
YS5hcmdzLnJlc2l6ZShhcmdDb3VudCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSB7IDAgfTsg
aSA8IGFyZ0NvdW50KCk7ICsraSkKKyAgICAgICAgICAgIGRhdGEuYXJnc1tpXSA9IGdldE5ldyh2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSktPnJlY292ZXJ5KCk7CisgICAgICAgIGZvciAo
UmVnIHJlZyB7IFJlZzo6Zmlyc3QoKSB9OyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5u
ZXh0KCkpIHsKKyAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IG1f
bmV3UmVnaXN0ZXJzW3JlZ10gfTsKKyAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAg
ICAgZGF0YS5yZWdpc3RlcnNbcmVnXSA9IGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpOworI2Vs
c2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGRhdGEpOworICAgIH0KKworICAgIC8v
IEFzayB0aGUgc2h1ZmZsZXIgdG8gcHV0IHRoZSBjYWxsZWUgaW50byBzb21lIHJlZ2lzdGVycyBv
bmNlIHRoZQorICAgIC8vIHNodWZmbGluZyBpcyBkb25lLiBZb3Ugc2hvdWxkIGNhbGwgdGhpcyBi
ZWZvcmUgYW55IG9mIHRoZQorICAgIC8vIHByZXBhcmUoKSBtZXRob2RzLCBhbmQgbXVzdCBub3Qg
dGFrZSBhIHNuYXBzaG90IGFmdGVyd2FyZHMsIGFzCisgICAgLy8gdGhpcyB3b3VsZCBjcmFzaCAz
MmJpdHMgcGxhdGZvcm1zLgorICAgIHZvaWQgc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJl
Z3MganNWYWx1ZVJlZ3MpCisgICAgeworICAgICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7Cisg
ICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7CisgICAgICAgIENhY2hlZFJlY292
ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2Fs
bGVlKSkgfTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgYWRkTmV3
KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSk7CisgICAgfQorCisgICAg
Ly8gQXNrIHRoZSBzdWhmZmxlciB0byBhc3N1bWUgdGhlIGNhbGxlZSBoYXMgYWxyZWFkeSBiZSBj
aGVja2VkIHRvCisgICAgLy8gYmUgYSBjZWxsLiBUaGlzIGlzIGEgbm8tb3Agb24gNjRiaXQgcGxh
dGZvcm1zLCBidXQgYWxsb3dzIHRvCisgICAgLy8gZnJlZSB1cCBhIEdQUiBvbiAzMmJpdCBwbGF0
Zm9ybXMuCisgICAgLy8gWW91IG9idmlvdXNseSBtdXN0IGhhdmUgZW5zdXJlZCB0aGF0IHRoaXMg
aXMgdGhlIGNhc2UgYmVmb3JlCisgICAgLy8gcnVubmluZyBhbnkgb2YgdGhlIHByZXBhcmUgbWV0
aG9kcy4KKyAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgpCisgICAgeworI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCisgICAgICAgIENhY2hlZFJlY292ZXJ5JiBjYWxsZWVDYWNoZWRSZWNvdmVyeSB7
ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpIH07CisgICAgICAgIHN3
aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAg
ICAgICBjYXNlIEluUGFpcjoKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KAorICAgICAgICAg
ICAgICAgIGNhbGxlZUNhY2hlZFJlY292ZXJ5LAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluR1BSKAorICAgICAgICAgICAgICAgICAgICBjYWxsZWVDYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLnBheWxvYWRHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdENlbGwp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KAorICAgICAgICAgICAgICAgIGNhbGxlZUNhY2hl
ZFJlY292ZXJ5LAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNT
dGFjaygKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS52aXJ0dWFsUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1hdENlbGwp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICBjYXNl
IFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAg
QVNTRVJUKGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuY29uc3RhbnQoKS5pc0NlbGwo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2VuZGlmCisgICAgfQorCisgICAgLy8gVGhpcyB3aWxsIGVtaXQgY29kZSB0byBidWlsZCB0
aGUgbmV3IGZyYW1lIG92ZXIgdGhlIG9sZCBvbmUuCisgICAgdm9pZCBwcmVwYXJlRm9yVGFpbENh
bGwoKTsKKworICAgIC8vIFRoaXMgd2lsbCBlbWl0IGNvZGUgdG8gYnVpbGQgdGhlIG5ldyBmcmFt
ZSBhcyBpZiBwZXJmb3JtaW5nIGEKKyAgICAvLyByZWd1bGFyIGNhbGwuIEhvd2V2ZXIsIHRoZSBj
YWxsZWUgc2F2ZSByZWdpc3RlcnMgd2lsbCBiZQorICAgIC8vIHJlc3RvcmVkLCBhbmQgYW55IGxv
Y2FscyAobm90IHRoZSBoZWFkZXIgb3IgYXJndW1lbnRzKSBvZiB0aGUKKyAgICAvLyBjdXJyZW50
IGZyYW1lIGNhbiBiZSBvdmVyd3JpdHRlbi4KKyAgICAvLworICAgIC8vIEEgZnJhbWUgYnVpbHQg
dXNpbmcgcHJlcGFyZUZvclNsb3dQYXRoKCkgc2hvdWxkIGJlIHVzZWQgZWl0aGVyCisgICAgLy8g
dG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluLCBvciBkZXN0cm95ZWQgdXNpbmcKKyAgICAvLyBDQ2Fs
bEhlbHBlcnM6OnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKSBmb2xsb3dlZCBieSBhIHRhaWwgY2Fs
bC4KKyAgICB2b2lkIHByZXBhcmVGb3JTbG93UGF0aCgpOworCitwcml2YXRlOgorICAgIHN0YXRp
YyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAgIENDYWxsSGVscGVycyYgbV9qaXQ7
CisKKyAgICB2b2lkIHByZXBhcmVBbnkoKTsKKworICAgIHZvaWQgc3BpbGwoQ2FjaGVkUmVjb3Zl
cnkmKTsKKworICAgIC8vICJib3giIGlzIGFyZ3VhYmx5IGEgYmFkIG5hbWUgaGVyZS4gVGhlIG1l
YW5pbmcgaXMgdGhhdCBhZnRlcgorICAgIC8vIGNhbGxpbmcgZW1pdEJveCgpLCB5b3VyIGVuc3Vy
ZSB0aGF0IHN1YnNlcXVlbnRseSBjYWxsaW5nCisgICAgLy8gZW1pdFN0b3JlKCkgd2lsbCBiZSBh
YmxlIHRvIHN0b3JlIHRoZSB2YWx1ZSB3aXRob3V0IGFkZGl0aW9uYWwKKyAgICAvLyB0cmFuc2Zv
cm1hdGlvbi4gSW4gcGFydGljdWxhciwgdGhpcyBpcyBhIG5vLW9wIGZvciBjb25zdGFudHMsCisg
ICAgLy8gYW5kIGlzIGEgY29tcGxldGUgbm8tb3Agb24gMzJiaXRzIHNpbmNlIGFueSB1bmJveGVk
IHZhbHVlIGNhbgorICAgIC8vIHN0aWxsIGJlIHN0b3JlZCBieSBzdG9yaW5nIHRoZSBwYXlsb2Fk
IGFuZCBhIHN0YXRpY2FsbHkga25vd24KKyAgICAvLyB0YWcuCisgICAgdm9pZCBlbWl0Qm94KENh
Y2hlZFJlY292ZXJ5Jik7CisgICAgYm9vbCBjYW5Cb3goQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJl
Y292ZXJ5KQorICAgIHsKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVz
R1BSKCkgJiYgZ2V0RnJlZUdQUigpID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzRlBS
KCkgJiYgZ2V0RnJlZUZQUigpID09IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHZvaWQgZW5zdXJlQm94
KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChjYW5C
b3goY2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChj
YWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigpKQorICAgICAgICAgICAgZW5zdXJlR1BS
KCk7CisKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmJveGluZ1JlcXVpcmVzRlBSKCkpCisg
ICAgICAgICAgICBlbnN1cmVGUFIoKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRMb2FkKENhY2hl
ZFJlY292ZXJ5Jik7CisgICAgYm9vbCBjYW5Mb2FkKENhY2hlZFJlY292ZXJ5Jik7CisgICAgdm9p
ZCBlbnN1cmVMb2FkKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAg
ICAgIGlmIChjYW5Mb2FkKGNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgfHwgY2FjaGVkUmVj
b3ZlcnkubG9hZHNJbnRvRlBSKCkpOworCisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fk
c0ludG9GUFIoKSkgeworICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQ
UigpKQorICAgICAgICAgICAgICAgIGVuc3VyZVJlZ2lzdGVyKCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgZW5zdXJlRlBSKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgZW5zdXJlR1BSKCk7CisgICAgfQorCisgICAgYm9vbCBjYW5Mb2FkQW5kQm94KENhY2hlZFJl
Y292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUg
aW50ZXJmZXJpbmcgbG9hZHMgJiBib3hlcworICAgICAgICBBU1NFUlQoIWNhY2hlZFJlY292ZXJ5
LmxvYWRzSW50b0ZQUigpIHx8ICFjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0ZQUigpKTsK
KyAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSB8fCAhY2FjaGVk
UmVjb3ZlcnkuYm94aW5nUmVxdWlyZXNHUFIoKSk7CisKKyAgICAgICAgcmV0dXJuIGNhbkxvYWQo
Y2FjaGVkUmVjb3ZlcnkpICYmIGNhbkJveChjYWNoZWRSZWNvdmVyeSk7CisgICAgfQorCisgICAg
RGF0YUZvcm1hdCBlbWl0U3RvcmUoQ2FjaGVkUmVjb3ZlcnkmLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyk7CisKKyAgICB2b2lkIGVtaXREaXNwbGFjZShDYWNoZWRSZWNvdmVyeSYpOworCisgICAg
dm9pZCBlbWl0RGVsdGFDaGVjaygpOworCisgICAgQmFnPENhY2hlZFJlY292ZXJ5PiBtX2NhY2hl
ZFJlY292ZXJpZXM7CisKKyAgICB2b2lkIHVwZGF0ZVJlY292ZXJ5KENhY2hlZFJlY292ZXJ5JiBj
YWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGNs
ZWFyQ2FjaGVkUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgIGNh
Y2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgc2V0Q2FjaGVkUmVj
b3ZlcnkocmVjb3ZlcnksICZjYWNoZWRSZWNvdmVyeSk7CisgICAgfQorCisgICAgQ2FjaGVkUmVj
b3ZlcnkqIGdldENhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkpOworCisgICAgQ2FjaGVkUmVj
b3ZlcnkqIHNldENhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnksIENhY2hlZFJlY292ZXJ5Kik7
CisKKyAgICB2b2lkIGNsZWFyQ2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkK
KyAgICB7CisgICAgICAgIGlmICghcmVjb3ZlcnkuaXNDb25zdGFudCgpKQorICAgICAgICAgICAg
c2V0Q2FjaGVkUmVjb3ZlcnkocmVjb3ZlcnksIG51bGxwdHIpOworICAgIH0KKworICAgIENhY2hl
ZFJlY292ZXJ5KiBhZGRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5KQorICAg
IHsKKyAgICAgICAgaWYgKHJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBtX2NhY2hlZFJlY292ZXJpZXMuYWRkKHJlY292ZXJ5KTsKKyAgICAgICAgQ2FjaGVkUmVjb3Zl
cnkqIGNhY2hlZFJlY292ZXJ5ID0gZ2V0Q2FjaGVkUmVjb3ZlcnkocmVjb3ZlcnkpOworICAgICAg
ICBpZiAoIWNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgcmV0dXJuIHNldENhY2hlZFJlY292
ZXJ5KHJlY292ZXJ5LCBtX2NhY2hlZFJlY292ZXJpZXMuYWRkKHJlY292ZXJ5KSk7CisgICAgICAg
IHJldHVybiBjYWNoZWRSZWNvdmVyeTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHRoZSBjdXJy
ZW50IHJlY292ZXJpZXMgcHJlc2VudCBpbiB0aGUgb2xkIGZyYW1lJ3MKKyAgICAvLyBzbG90cy4g
QSBudWxsIENhY2hlZFJlY292ZXJ5IG1lYW5zIHdlIGNhbiB0cmFzaCB0aGUgY3VycmVudAorICAg
IC8vIHZhbHVlIGFzIHdlIGRvbid0IGNhcmUgYWJvdXQgaXQuCisgICAgVmVjdG9yPENhY2hlZFJl
Y292ZXJ5Kj4gbV9vbGRGcmFtZTsKKworICAgIGludCBudW1Mb2NhbHMoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fb2xkRnJhbWUuc2l6ZSgpIC0gSlNTdGFjazo6Q2FsbGVyRnJhbWVB
bmRQQ1NpemU7CisgICAgfQorCisgICAgQ2FjaGVkUmVjb3ZlcnkqIGdldE9sZChWaXJ0dWFsUmVn
aXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2xkRnJhbWVbSlNTdGFj
azo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgLSByZWcub2Zmc2V0KCkgLSAxXTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldE9sZChWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBDYWNoZWRSZWNvdmVyeSogY2FjaGVk
UmVjb3ZlcnkpCisgICAgeworICAgICAgICBtX29sZEZyYW1lW0pTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplIC0gcmVnLm9mZnNldCgpIC0gMV0gPSBjYWNoZWRSZWNvdmVyeTsKKyAgICB9CisK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZmlyc3RPbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFZpcnR1YWxSZWdpc3RlciB7IHN0YXRpY19jYXN0PGludD4oLW51bUxvY2FscygpKSB9Owor
ICAgIH0KKworICAgIFZpcnR1YWxSZWdpc3RlciBsYXN0T2xkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6
ZSAtIDEgfTsKKyAgICB9CisKKyAgICBib29sIGlzVmFsaWRPbGQoVmlydHVhbFJlZ2lzdGVyIHJl
ZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWcgPj0gZmlyc3RPbGQoKSAmJiByZWcg
PD0gbGFzdE9sZCgpOworICAgIH0KKworICAgIC8vIFRoaXMgc3RvcmVzLCBmb3IgZWFjaCBzbG90
IGluIHRoZSBuZXcgZnJhbWUsIGluZm9ybWF0aW9uIGFib3V0CisgICAgLy8gdGhlIHJlY292ZXJ5
IGZvciB0aGUgdmFsdWUgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnbyBpbnRvIHRoYXQKKyAgICAv
LyBzbG90LgorICAgIC8vCisgICAgLy8gT25jZSB0aGUgc2xvdCBoYXMgYmVlbiB3cml0dGVuLCB0
aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbgorICAgIC8vIG1fbmV3RnJhbWUgd2lsbCBiZSBlbXB0
eS4KKyAgICBWZWN0b3I8Q2FjaGVkUmVjb3ZlcnkqPiBtX25ld0ZyYW1lOworCisgICAgc2l6ZV90
IGFyZ0NvdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25ld0ZyYW1lLnNpemUo
KSAtIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgfQorCisgICAgQ2FjaGVkUmVj
b3ZlcnkqIGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnaXN0ZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9uZXdGcmFtZVtuZXdSZWdpc3Rlci5vZmZzZXQoKV07CisgICAgfQor
CisgICAgdm9pZCBzZXROZXcoVmlydHVhbFJlZ2lzdGVyIG5ld1JlZ2lzdGVyLCBDYWNoZWRSZWNv
dmVyeSogY2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICBtX25ld0ZyYW1lW25ld1JlZ2lz
dGVyLm9mZnNldCgpXSA9IGNhY2hlZFJlY292ZXJ5OworICAgIH0KKworICAgIHZvaWQgYWRkTmV3
KFZpcnR1YWxSZWdpc3RlciBuZXdSZWdpc3RlciwgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAg
ICB7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJl
Y292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgY2FjaGVkUmVjb3ZlcnktPmFkZFRhcmdldChuZXdS
ZWdpc3Rlcik7CisgICAgICAgIHNldE5ldyhuZXdSZWdpc3RlciwgY2FjaGVkUmVjb3ZlcnkpOwor
ICAgIH0KKworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdE5ldygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgMCB9OworICAgIH0KKworICAgIFZpcnR1YWxS
ZWdpc3RlciBsYXN0TmV3KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KG1fbmV3RnJhbWUuc2l6ZSgpKSAtIDEgfTsKKyAgICB9
CisKKyAgICBib29sIGlzVmFsaWROZXcoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiByZWcgPj0gZmlyc3ROZXcoKSAmJiByZWcgPD0gbGFzdE5ldygpOwor
ICAgIH0KKworCisgICAgaW50IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZTsKKyAgICBpbnQgbV9hbGln
bmVkTmV3RnJhbWVTaXplOworCisgICAgLy8gVGhpcyBpcyB0aGUgZGlzdGFuY2UsIGluIHNsb3Rz
LCBiZXR3ZWVuIHRoZSBiYXNlIG9mIHRoZSBuZXcKKyAgICAvLyBmcmFtZSBhbmQgdGhlIGJhc2Ug
b2YgdGhlIG9sZCBmcmFtZS4gSXQgY291bGQgYmUgbmVnYXRpdmUgd2hlbgorICAgIC8vIHByZXBh
cmluZyBmb3IgYSB0YWlsIGNhbGwgdG8gYSBmdW5jdGlvbiB3aXRoIHNtYWxsZXIgYXJndW1lbnQK
KyAgICAvLyBjb3VudC4KKyAgICAvLworICAgIC8vIFdlIHdpbGwgb3ZlcndyaXRlIHRoaXMgYXBw
cm9wcmlhdGVseSBmb3Igc2xvdyBwYXRoIGNhbGxzLCBidXQKKyAgICAvLyB3ZSBpbml0aWFsaXpl
IGl0IGFzIGlmIGRvaW5nIGEgZmFzdCBwYXRoIGZvciB0aGUgc3BpbGxzIHdlCisgICAgLy8gY291
bGQgZG8gd2hpbGUgdW5kZWNpZGVkICh0eXBpY2FsbHkgd2hpbGUgY2FsbGluZyBhY3F1aXJlR1BS
KCkKKyAgICAvLyBmb3IgYSBwb2x5bW9ycGhpYyBjYWxsKS4KKyAgICBpbnQgbV9mcmFtZURlbHRh
IHsgbV9hbGlnbmVkTmV3RnJhbWVTaXplIC0gbV9hbGlnbmVkT2xkRnJhbWVTaXplIH07CisKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbmV3QXNPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiByZWcgLSBtX2ZyYW1lRGVsdGE7CisgICAgfQorCisgICAgLy8g
VGhpcyBzdG9yZXMgdGhlIHNldCBvZiBsb2NrZWQgcmVnaXN0ZXJzLCBpLmUuIHJlZ2lzdGVycyBm
b3IKKyAgICAvLyB3aGljaCB3ZSBoYXZlIGFuIGltcGxpY2l0IHJlcXVpcmVtZW50IHRoYXQgdGhl
eSBhcmUgbm90IGNoYW5nZWQuCisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgdXN1YWxseSBjb250
YWlucyB0aGUgbGluayByZWdpc3RlciBvbiBhcmNoaXRlY3R1cmVzCisgICAgLy8gdGhhdCBoYXZl
IG9uZSwgYW55IHNjcmF0Y2ggcmVnaXN0ZXIgdXNlZCBieSB0aGUgbWFjcm8gYXNzZW1ibGVyCisg
ICAgLy8gKGUuZy4gcjExIG9uIFg4Nl82NCksIGFzIHdlbGwgYXMgYW55IHJlZ2lzdGVyIHRoYXQg
d2UgdXNlIGZvcgorICAgIC8vIGFkZHJlc3NpbmcgKHNlZSBtX29sZEZyYW1lQmFzZSBhbmQgbV9u
ZXdGcmFtZUJhc2UpLgorICAgIC8vCisgICAgLy8gV2UgYWxzbyB1c2UgdGhpcyB0byBsb2NrIHJl
Z2lzdGVycyB0ZW1wb3JhcmlseSwgZm9yIGluc3RhbmNlIHRvCisgICAgLy8gZW5zdXJlIHRoYXQg
d2UgaGF2ZSBhdCBsZWFzdCAyIGF2YWlsYWJsZSByZWdpc3RlcnMgZm9yIGxvYWRpbmcKKyAgICAv
LyBhIHBhaXIgb24gMzJiaXRzLgorICAgIFJlZ2lzdGVyU2V0IG1fbG9ja2VkUmVnaXN0ZXJzOwor
CisgICAgLy8gVGhpcyBzdG9yZXMgdGhlIGN1cnJlbnQgcmVjb3ZlcmllcyBwcmVzZW50IGluIHJl
Z2lzdGVycy4gQSBudWxsCisgICAgLy8gQ2FjaGVkUmVjb3ZlcnkgbWVhbnMgd2UgY2FuIHRyYXNo
IHRoZSBjdXJyZW50IHZhbHVlIGFzIHdlIGRvbid0CisgICAgLy8gY2FyZSBhYm91dCBpdC4gCisg
ICAgUmVnaXN0ZXJNYXA8Q2FjaGVkUmVjb3ZlcnkqPiBtX3JlZ2lzdGVyczsKKworICAgIC8vIFRo
aXMgc3RvcmVzLCBmb3IgZWFjaCByZWdpc3RlciwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY292
ZXJ5CisgICAgLy8gZm9yIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBldmVudHVhbGx5IGdvIGludG8g
dGhhdCByZWdpc3Rlci4gVGhlCisgICAgLy8gb25seSByZWdpc3RlcnMgdGhhdCBoYXZlIGEgdGFy
Z2V0IHJlY292ZXJ5IHdpbGwgYmUgY2FsbGVlLXNhdmUKKyAgICAvLyByZWdpc3RlcnMsIGFzIHdl
bGwgYXMgcG9zc2libHkgb25lIEpTVmFsdWVSZWdzIGZvciBob2xkaW5nIHRoZQorICAgIC8vIGNh
bGxlZS4KKyAgICAvLworICAgIC8vIE9uY2UgdGhlIGNvcnJlY3QgdmFsdWUgaGFzIGJlZW4gcHV0
IGludG8gdGhlIHJlZ2lzdGVycywgYW5kCisgICAgLy8gY29udHJhcnkgdG8gd2hhdCB3ZSBkbyB3
aXRoIG1fbmV3RnJhbWUsIHdlIGtlZXAgdGhlIGVudHJ5IGluCisgICAgLy8gbV9uZXdSZWdpc3Rl
cnMgdG8gc2ltcGxpZnkgc3BpbGxpbmcuCisgICAgLy8KKyAgICAvLyBGSVhNRTogQ29udHJhcnkg
dG8gd2hhdCB0aGUgbmFtZSBzdWdnZXN0cywgd2Ugb25seSBzdXBwb3J0IEdQUnMKKyAgICAvLyBm
b3Igbm93LgorICAgIFJlZ2lzdGVyTWFwPENhY2hlZFJlY292ZXJ5Kj4gbV9uZXdSZWdpc3RlcnM7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDaGVja0Z1bmN0b3I+CisgICAgUmVnIGdldEZyZWVS
ZWdpc3Rlcihjb25zdCBDaGVja0Z1bmN0b3ImIGNoZWNrKSBjb25zdAorICAgIHsKKyAgICAgICAg
UmVnIG5vblRlbXAgeyB9OworICAgICAgICBmb3IgKFJlZyByZWcgeyBSZWc6OmZpcnN0KCkgfTsg
cmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgICAgICBpZiAo
bV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGlmICghY2hlY2socmVnKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgaWYgKCFtX3JlZ2lzdGVyc1tyZWddKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFtX25ld1JlZ2lzdGVyc1tyZWddKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVn
OworICAgICAgICAgICAgICAgIGlmICghbm9uVGVtcCkKKyAgICAgICAgICAgICAgICAgICAgbm9u
VGVtcCA9IHJlZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbm9u
VGVtcDsKKyAgICB9CisKKyAgICBHUFJSZWcgZ2V0RnJlZUdQUigpIGNvbnN0CisgICAgeworICAg
ICAgICBSZWcgZnJlZUdQUiB7IGdldEZyZWVSZWdpc3RlcihbXSAoUmVnIHJlZykgeyByZXR1cm4g
cmVnLmlzR1BSKCk7IH0pIH07CisgICAgICAgIGlmICghZnJlZUdQUikKKyAgICAgICAgICAgIHJl
dHVybiBJbnZhbGlkR1BSUmVnOworICAgICAgICByZXR1cm4gZnJlZUdQUi5ncHIoKTsKKyAgICB9
CisKKyAgICBGUFJSZWcgZ2V0RnJlZUZQUigpIGNvbnN0CisgICAgeworICAgICAgICBSZWcgZnJl
ZUZQUiB7IGdldEZyZWVSZWdpc3RlcihbXSAoUmVnIHJlZykgeyByZXR1cm4gcmVnLmlzRlBSKCk7
IH0pIH07CisgICAgICAgIGlmICghZnJlZUZQUikKKyAgICAgICAgICAgIHJldHVybiBJbnZhbGlk
RlBSUmVnOworICAgICAgICByZXR1cm4gZnJlZUZQUi5mcHIoKTsKKyAgICB9CisKKyAgICBib29s
IGhhc0ZyZWVSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Ym9vbD4oZ2V0RnJlZVJlZ2lzdGVyKFtdIChSZWcpIHsgcmV0dXJuIHRydWU7IH0pKTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIGZyZWVzIHVwIGEgcmVnaXN0ZXIgc2F0aXNmeWluZyB0aGUgY2hl
Y2sgZnVuY3RvciAodGhpcworICAgIC8vIGZ1bmN0b3IgY291bGQgdGhlb3JldGljYWxseSBoYXZl
IGFueSBraW5kIG9mIGxvZ2ljLCBidXQgaXQgbXVzdAorICAgIC8vIGVuc3VyZSB0aGF0IGl0IHdp
bGwgb25seSByZXR1cm4gdHJ1ZSBmb3IgcmVnaXN0ZXJzIC0gc3BpbGwKKyAgICAvLyBhc3N1bWVz
IGFuZCBhc3NlcnRzIHRoYXQgaXQgaXMgcGFzc2VkIGEgY2FjaGVkUmVjb3Zlcnkgc3RvcmVkIGlu
IGEKKyAgICAvLyByZWdpc3RlcikuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hlY2tGdW5jdG9y
PgorICAgIHZvaWQgZW5zdXJlUmVnaXN0ZXIoY29uc3QgQ2hlY2tGdW5jdG9yJiBjaGVjaykKKyAg
ICB7CisgICAgICAgIC8vIElmIHdlIGNhbiBzcGlsbCBhIGNhbGxlZS1zYXZlLCB0aGF0J3MgYmVz
dCwgYmVjYXVzZSBpdCB3aWxsCisgICAgICAgIC8vIGZyZWUgdXAgYSByZWdpc3RlciB0aGF0IHdv
dWxkIG90aGVyd2lzZSBiZWVuIHRha2VuIGZvciB0aGUKKyAgICAgICAgLy8gbG9uZ2VzdCBhbW91
bnQgb2YgdGltZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgdHJ5IHRvIGJpYXMg
dG93YXJkcyB0aG9zZSB0aGF0IGFyZSBub3QgaW4gdGhlaXIKKyAgICAgICAgLy8gdGFyZ2V0IHJl
Z2lzdGVycyB5ZXQsIGJ1dCB0aGUgZ2FpbiBpcyBwcm9iYWJseSBzdXBlcgorICAgICAgICAvLyBz
bWFsbC4gVW5sZXNzIHlvdSBoYXZlIGEgaHVnZSBudW1iZXIgb2YgYXJndW1lbnQgKGF0IGxlYXN0
CisgICAgICAgIC8vIGFyb3VuZCB0d2ljZSB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSByZWdpc3Rl
cnMgb24geW91cgorICAgICAgICAvLyBhcmNoaXRlY3R1cmUpLCBubyBzcGlsbGluZyBpcyBnb2lu
ZyB0byB0YWtlIHBsYWNlIGFueXdheXMuCisgICAgICAgIGZvciAoUmVnIHJlZyB7IFJlZzo6Zmly
c3QoKSB9OyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAg
ICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9u
ZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGNoZWNrKCpjYWNoZWRS
ZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiBsb29rcyBs
aWtlIGEgZ29vZCBzcGlsbCBjYW5kaWRhdGVcbiIpOworICAgICAgICAgICAgICAgIHNwaWxsKCpj
YWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgdXNlIHRoZSBjYWNoZWRSZWNvdmVyeSBhc3NvY2lh
dGVkIHdpdGggdGhlIGZpcnN0IG5ldyBzbG90IHdlCisgICAgICAgIC8vIGNhbiwgYmVjYXVzZSB0
aGF0IGlzIHRoZSBvbmUgZm9yIHdoaWNoIGEgd3JpdGUgd2lsbCBiZQorICAgICAgICAvLyBwb3Nz
aWJsZSB0aGUgbGF0ZXN0LCBpLmUuIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHdlIHdvdWxkCisgICAg
ICAgIC8vIGhhdmUgaGFkIHRvIHJldGFpbiBpbiByZWdpc3RlcnMgZm9yIHRoZSBsb25nZXN0Lgor
ICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgeyBmaXJzdE5ldygpIH07IHJlZyA8PSBs
YXN0TmV3KCk7IHJlZyArPSAxKSB7CisgICAgICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVk
UmVjb3ZlcnkgeyBnZXROZXcocmVnKSB9OworICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVy
eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKGNoZWNrKCpj
YWNoZWRSZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBzcGlsbCgqY2FjaGVkUmVjb3Zlcnkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBl
bnN1cmVSZWdpc3RlcigpCisgICAgeworICAgICAgICBpZiAoaGFzRnJlZVJlZ2lzdGVyKCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCIgIEZpbmRpbmcgYSByZWdpc3RlciB0byBzcGlsbFxuIik7CisgICAgICAgIGVuc3Vy
ZVJlZ2lzdGVyKAorICAgICAgICAgICAgW3RoaXNdIChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2Fj
aGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5pc0luR1BSKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdp
c3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAg
ICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5GUFIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5mcHIoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICBp
ZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS50YWdHUFIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmICFt
X2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5wYXlsb2FkR1BS
KCkpOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlR1BSKCkKKyAg
ICB7CisgICAgICAgIGlmIChnZXRGcmVlR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
IiAgRmluZGluZyBhIEdQUiB0byBzcGlsbFxuIik7CisgICAgICAgIGVuc3VyZVJlZ2lzdGVyKAor
ICAgICAgICAgICAgW3RoaXNdIChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3Zlcnkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luR1BS
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisg
ICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkg
PT0gSW5QYWlyKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3Rl
cnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudGFnR1BSKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lk
IGVuc3VyZUZQUigpCisgICAgeworICAgICAgICBpZiAoZ2V0RnJlZUZQUigpICE9IEludmFsaWRG
UFJSZWcpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcgYW4gRlBSIHRvIHNwaWxsXG4iKTsKKyAgICAgICAg
ZW5zdXJlUmVnaXN0ZXIoCisgICAgICAgICAgICBbdGhpc10gKGNvbnN0IENhY2hlZFJlY292ZXJ5
JiBjYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmlzSW5GUFIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2xvY2tl
ZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgQ2Fj
aGVkUmVjb3ZlcnkqIGdldE5ldyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncykgY29uc3QKKyAgICB7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgcmV0dXJuIG1fbmV3UmVnaXN0ZXJzW2pzVmFs
dWVSZWdzLmdwcigpXTsKKyNlbHNlCisgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgIGpzVmFs
dWVSZWdzLnRhZ0dQUigpID09IEludmFsaWRHUFJSZWcgfHwganNWYWx1ZVJlZ3MucGF5bG9hZEdQ
UigpID09IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAgIHx8IG1fbmV3UmVnaXN0ZXJzW2pzVmFs
dWVSZWdzLnBheWxvYWRHUFIoKV0gPT0gbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MudGFnR1BS
KCldKTsKKyAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSA9PSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICAgICAgcmV0dXJuIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQ
UigpXTsKKyAgICAgICAgcmV0dXJuIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnBheWxvYWRH
UFIoKV07CisjZW5kaWYKKyAgICB9CisKKyAgICB2b2lkIGFkZE5ldyhKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncywgVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIEFTU0VSVChq
c1ZhbHVlUmVncyAmJiAhZ2V0TmV3KGpzVmFsdWVSZWdzKSk7CisgICAgICAgIENhY2hlZFJlY292
ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAg
ICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSk7CisgICAgICAg
IGNhY2hlZFJlY292ZXJ5LT5zZXRXYW50ZWRKU1ZhbHVlUmVncyhqc1ZhbHVlUmVncyk7CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MuZ3ByKCld
ID0gY2FjaGVkUmVjb3Zlcnk7CisjZWxzZQorICAgICAgICBpZiAoanNWYWx1ZVJlZ3MucGF5bG9h
ZEdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX25ld1JlZ2lzdGVyc1tqc1Zh
bHVlUmVncy5wYXlsb2FkR1BSKCldID0gY2FjaGVkUmVjb3Zlcnk7CisgICAgICAgIGlmIChqc1Zh
bHVlUmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9uZXdSZWdp
c3RlcnNbanNWYWx1ZVJlZ3MudGFnR1BSKCldID0gY2FjaGVkUmVjb3Zlcnk7CisjZW5kaWYKKyAg
ICB9CisKKyAgICAvLyBtX29sZEZyYW1lQmFzZSBpcyB0aGUgcmVnaXN0ZXIgcmVsYXRpdmUgdG8g
d2hpY2ggd2UgYWNjZXNzCisgICAgLy8gc2xvdHMgaW4gdGhlIG9sZCBjYWxsIGZyYW1lLCB3aXRo
IGFuIGFkZGl0aW9uYWwgb2Zmc2V0IG9mCisgICAgLy8gbV9vbGRGcmFtZU9mZnNldC4KKyAgICAv
LworICAgIC8vICAtIEZvciBhbiBhY3R1YWwgdGFpbCBjYWxsLCBtX29sZEZyYW1lQmFzZSBpcyB0
aGUgc3RhY2sKKyAgICAvLyAgICBwb2ludGVyLCBhbmQgbV9vbGRGcmFtZU9mZnNldCBpcyB0aGUg
bnVtYmVyIG9mIGxvY2FscyBvZiB0aGUKKyAgICAvLyAgICB0YWlsIGNhbGxlcidzIGZyYW1lLiBX
ZSB1c2Ugc3VjaCBzdGFjayBwb2ludGVyLWJhc2VkCisgICAgLy8gICAgYWRkcmVzc2luZyBiZWNh
dXNlIGl0IGFsbG93cyB1cyB0byBsb2FkIHRoZSB0YWlsIGNhbGxlcidzCisgICAgLy8gICAgY2Fs
bGVyJ3MgZnJhbWUgcG9pbnRlciBpbiB0aGUgZnJhbWUgcG9pbnRlciByZWdpc3RlcgorICAgIC8v
ICAgIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgYXdrd2FyZGx5IGtlZXBpbmcgaXQgYXJvdW5kIG9u
IHRoZQorICAgIC8vICAgIHN0YWNrLgorICAgIC8vCisgICAgLy8gIC0gRm9yIGEgc2xvdyBwYXRo
IGNhbGwsIG1fb2xkRnJhbWVCYXNlIGlzIGp1c3QgdGhlIGZyYW1lCisgICAgLy8gICAgcG9pbnRl
ciwgYW5kIG1fb2xkRnJhbWVPZmZzZXQgaXMgMC4gV2UgY291bGQgCisgICAgR1BSUmVnIG1fb2xk
RnJhbWVCYXNlIHsgTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyIH07CisgICAg
aW50IG1fb2xkRnJhbWVPZmZzZXQgeyAwIH07CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBhZGRyZXNzRm9yT2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9vbGRGcmFtZUJhc2UsCisgICAgICAg
ICAgICAobV9vbGRGcmFtZU9mZnNldCArIHJlZy5vZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIp
KTsKKyAgICB9CisKKyAgICAvLyBtX25ld0ZyYW1lQmFzZSBpcyB0aGUgcmVnaXN0ZXIgcmVsYXRp
dmUgdG8gd2hpY2ggd2UgYWNjZXNzCisgICAgLy8gc2xvdHMgaW4gdGhlIG5ldyBjYWxsIGZyYW1l
LCBhbmQgd2UgYWx3YXlzIG1ha2UgaXQgcG9pbnQgdG8KKyAgICAvLyB3aGVyZXZlciB0aGUgc3Rh
Y2sgcG9pbnRlciB3aWxsIGJlIHJpZ2h0IGJlZm9yZSBtYWtpbmcgdGhlCisgICAgLy8gYWN0dWFs
IGNhbGwvanVtcC4gVGhlIGFjdHVhbCBiYXNlIG9mIHRoZSBuZXcgZnJhbWUgaXMgYXQgb2Zmc2V0
CisgICAgLy8gbV9uZXdGcmFtZU9mZnNldCByZWxhdGl2ZSB0byBtX25ld0ZyYW1lQmFzZS4KKyAg
ICAvLworICAgIC8vICAtIEZvciBhbiBhY3R1YWwgdGFpbCBjYWxsLCBtX25ld0ZyYW1lQmFzZSBp
cyBjb21wdXRlZAorICAgIC8vICAgIGR5bmFtaWNhbGx5LCBhbmQgbV9uZXdGcmFtZU9mZnNldCB2
YXJpZXMgYmV0d2VlbiAwIGFuZCAtMgorICAgIC8vICAgIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0
ZWN0dXJlJ3MgY2FsbGluZyBjb252ZW50aW9uIChzZWUKKyAgICAvLyAgICBwcmVwYXJlRm9yVGFp
bENhbGwpLgorICAgIC8vCisgICAgLy8gIC0gRm9yIGEgc2xvdyBwYXRoIGNhbGwsIG1fbmV3RnJh
bWVCYXNlIGlzIHRoZSBhY3R1YWwgc3RhY2sKKyAgICAvLyAgICBwb2ludGVyLCBhbmQgbV9uZXdG
cmFtZU9mZnNldCBpcyAtIENhbGxlckZyYW1lQW5kUENTaXplLAorICAgIC8vICAgIGZvbGxvd2lu
ZyB0aGUgY29udmVudGlvbiBmb3IgYSByZWd1bGFyIGNhbGwuCisgICAgR1BSUmVnIG1fbmV3RnJh
bWVCYXNlIHsgSW52YWxpZEdQUlJlZyB9OworICAgIGludCBtX25ld0ZyYW1lT2Zmc2V0IHsgMH07
CisKKyAgICBib29sIGlzVW5kZWNpZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X25ld0ZyYW1lQmFzZSA9PSBJbnZhbGlkR1BSUmVnOworICAgIH0KKworICAgIGJvb2wgaXNTbG93
UGF0aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZUJhc2UgPT0gTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyOworICAgIH0KKworICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX25ld0ZyYW1l
QmFzZSwKKyAgICAgICAgICAgIChtX25ld0ZyYW1lT2Zmc2V0ICsgcmVnLm9mZnNldCgpKSAqIHNp
emVvZihSZWdpc3RlcikpOworICAgIH0KKworICAgIC8vIFdlIHVzZSBhIGNvbmNlcHQgb2YgImRh
bmdlciB6b25lIi4gVGhlIGRhbmdlciB6b25lIGNvbnNpc3RzIG9mCisgICAgLy8gYWxsIHRoZSB3
cml0ZXMgaW4gdGhlIG5ldyBmcmFtZSB0aGF0IGNvdWxkIG92ZXJsYXAgd2l0aCByZWFkcworICAg
IC8vIGluIHRoZSBvbGQgZnJhbWUuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIHdlIGNvdWxkIGhh
dmUgYSBoaWdoZXIgYWN0dWFsIG51bWJlciBvZiBhcmd1bWVudHMgdGhhbgorICAgIC8vIHBhcmFt
ZXRlcnMsIHdoZW4gcHJlcGFyaW5nIGEgdGFpbCBjYWxsLCB3ZSBuZWVkIHRvIGFzc3VtZSB0aGF0
CisgICAgLy8gd3JpdGluZyB0byBhIHNsb3Qgb24gdGhlIG5ldyBmcmFtZSBjb3VsZCBvdmVybGFw
IG5vdCBvbmx5IHdpdGgKKyAgICAvLyB0aGUgY29ycmVzcG9uZGluZyBzbG90IGluIHRoZSBvbGQg
ZnJhbWUsIGJ1dCBhbHNvIHdpdGggYW55IHNsb3QKKyAgICAvLyBhYm92ZSBpdC4gVGh1cywgdGhl
IGRhbmdlciB6b25lIGNvbnNpc3RzIG9mIGFsbCB3cml0ZXMgYmV0d2VlbgorICAgIC8vIHRoZSBm
aXJzdCB3cml0ZSBhbmQgd2hhdCBJIGNhbGwgdGhlICJkYW5nZXIgZnJvbnRpZXIiOiB0aGUKKyAg
ICAvLyBoaWdoZXN0IHNsb3QgaW4gdGhlIG9sZCBmcmFtZSB3ZSBzdGlsbCBjYXJlIGFib3V0LiBU
aHVzLCB0aGUKKyAgICAvLyBkYW5nZXIgem9uZSBjb250YWlucyBhbGwgdGhlIHNsb3RzIGJldHdl
ZW4gdGhlIGZpcnN0IHNsb3Qgb2YKKyAgICAvLyB0aGUgbmV3IGZyYW1lIGFuZCB0aGUgZGFuZ2Vy
IGZyb250aWVyLiBCZWNhdXNlIHRoZSBkYW5nZXIKKyAgICAvLyBmcm9udGllciBpcyByZWxhdGVk
IHRvIHRoZSBuZXcgZnJhbWUsIGl0IGlzIHN0b3JlZCBhcyBhIHZpcnR1YWwKKyAgICAvLyByZWdp
c3RlciAqaW4gdGhlIG5ldyBmcmFtZSouCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fZGFuZ2VyRnJv
bnRpZXI7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZGFuZ2VyRnJvbnRpZXIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICByZXR1cm4gbV9k
YW5nZXJGcm9udGllcjsKKyAgICB9CisKKyAgICBib29sIGlzRGFuZ2VyTmV3KFZpcnR1YWxSZWdp
c3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkgJiYg
aXNWYWxpZE5ldyhyZWcpKTsKKyAgICAgICAgcmV0dXJuIHJlZyA8PSBkYW5nZXJGcm9udGllcigp
OworICAgIH0KKworICAgIHZvaWQgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICBtX2RhbmdlckZyb250aWVyID0g
Zmlyc3ROZXcoKSAtIDE7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyB7IGxhc3RO
ZXcoKSB9OyByZWcgPj0gZmlyc3ROZXcoKTsgcmVnIC09IDEpIHsKKyAgICAgICAgICAgIGlmICgh
Z2V0TmV3KHJlZykgfHwgIWlzVmFsaWRPbGQobmV3QXNPbGQocmVnKSkgfHwgIWdldE9sZChuZXdB
c09sZChyZWcpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbV9k
YW5nZXJGcm9udGllciA9IHJlZzsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgRGFuZ2VyIGZyb250aWVyIG5vdyBhdCBORVcgIiwgbV9kYW5nZXJG
cm9udGllciwgIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgQWxsIGNsZWFyISBEYW5nZXIgem9u
ZSBpcyBlbXB0eS5cbiIpOworICAgIH0KKworICAgIC8vIEEgc2FmZSB3cml0ZSBpcyBhIHdyaXRl
IHRoYXQgbmV2ZXIgd3JpdGVzIGludG8gdGhlIGRhbmdlciB6b25lLgorICAgIGJvb2wgaGFzT25s
eVNhZmVXcml0ZXMoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSBjb25zdAorICAgIHsK
KyAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IDogY2FjaGVkUmVjb3ZlcnkudGFy
Z2V0cygpKSB7CisgICAgICAgICAgICBpZiAoaXNEYW5nZXJOZXcodGFyZ2V0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgLy8gWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gZGFuZ2Vyb3Vz
IHdyaXRlcyBiZWZvcmUKKyAgICAvLyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgYm9vbCB0
cnlXcml0ZXMoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gdHJpZXMg
dG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gbG9uZ2VyIGFueQorICAgIC8vIHBvc3NpYmxlIHNh
ZmUgd3JpdGUsIGkuZS4gYWxsIHJlbWFpbmluZyB3cml0ZXMgYXJlIGVpdGhlciB0bworICAgIC8v
IHRoZSBkYW5nZXIgem9uZSBvciBjYWxsZWUgc2F2ZSByZXN0b3JhdGlvbnMuCisgICAgLy8KKyAg
ICAvLyBJdCByZXR1cm5zIGZhbHNlIGlmIGl0IHdhcyB1bmFibGUgdG8gcGVyZm9ybSBzb21lIHNh
ZmUgd3JpdGVzCisgICAgLy8gZHVlIHRvIGhpZ2ggcmVnaXN0ZXIgcHJlc3N1cmUuCisgICAgYm9v
bCBwZXJmb3JtU2FmZVdyaXRlcygpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gQ2FsbEZyYW1lU2h1ZmZsZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWZhOGU0OGM4OTEwMGFkOTk5YTlkZTM0ZjE1MGMwNDRjMjBhNDNkMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIzMl82NC5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZy
YW1lU2h1ZmZsZXIuaCIKKworI2lmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCisK
KyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworRGF0YUZvcm1hdCBDYWxs
RnJhbWVTaHVmZmxlcjo6ZW1pdFN0b3JlKENhY2hlZFJlY292ZXJ5JiBsb2NhdGlvbiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBBU1NFUlQoIWxvY2F0aW9uLnJlY292
ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisKKyAgICBzd2l0Y2ggKGxvY2F0aW9uLnJlY292ZXJ5KCku
dGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBtX2pp
dC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LAorICAgICAgICAgICAgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAgICAgICBt
X2ppdC5zdG9yZTMyKGxvY2F0aW9uLnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3Mud2l0aE9mZnNl
dChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SW50MzI7CisgICAg
Y2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAgICBhZGRyZXNz
LndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIobG9jYXRpb24u
cmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyAg
ICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAg
IG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGxvY2F0aW9uLnJlY292ZXJ5KCkuY29uc3RhbnQoKSwg
YWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CisgICAgY2FzZSBJblBhaXI6
CisgICAgICAgIG1faml0LnN0b3JlVmFsdWUobG9jYXRpb24ucmVjb3ZlcnkoKS5qc1ZhbHVlUmVn
cygpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIFVu
Ym94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwKKyAgICAgICAgICAgIGFkZHJlc3Mu
d2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihsb2NhdGlvbi5y
ZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworICAg
ICAgICByZXR1cm4gRGF0YUZvcm1hdEJvb2xlYW47CisgICAgY2FzZSBJbkZQUjoKKyAgICBjYXNl
IFVuYm94ZWREb3VibGVJbkZQUjoKKyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUobG9jYXRpb24u
cmVjb3ZlcnkoKS5mcHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3goQ2FjaGVkUmVjb3Zlcnkm
IGxvY2F0aW9uKQoreworICAgIC8vIE5vdGhpbmcgdG8gZG8sIHdlJ3JlIGdvb2QhIEpTVmFsdWVz
IGFuZCBkb3VibGVzIGNhbiBiZSBzdG9yZWQKKyAgICAvLyBpbW1lZGlhdGVseSwgYW5kIG90aGVy
IGZvcm1hdHMgZG9uJ3QgbmVlZCBhbnkgdHJhbnNmb3JtYXRpb24gLQorICAgIC8vIGp1c3Qgc3Rv
cmluZyBhIGNvbnN0YW50IHRhZyBzZXBhcmF0ZWx5LgorICAgIEFTU0VSVChjYW5Cb3gobG9jYXRp
b24pKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdExvYWQoQ2FjaGVkUmVjb3Zl
cnkmIGxvY2F0aW9uKQoreworICAgIGlmICghbG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luSlNTdGFj
aygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
ZygiICAgKiBMb2FkaW5nICIsIGxvY2F0aW9uLnJlY292ZXJ5KCksICIgaW50byAiKTsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgcmVnIHsgbG9jYXRpb24ucmVjb3ZlcnkoKS52aXJ0dWFsUmVnaXN0ZXIo
KSB9OworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MgeyBhZGRyZXNzRm9yT2xk
KHJlZykgfTsKKworICAgIGJvb2wgdHJ5RlBSIHsgdHJ1ZSB9OworICAgIEpTVmFsdWVSZWdzIHdh
bnRlZEpTVmFsdWVSZWdzIHsgbG9jYXRpb24ud2FudGVkSlNWYWx1ZVJlZ3MoKSB9OworICAgIGlm
ICh3YW50ZWRKU1ZhbHVlUmVncykgeworICAgICAgICBpZiAod2FudGVkSlNWYWx1ZVJlZ3MucGF5
bG9hZEdQUigpICE9IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAgICYmICFtX3JlZ2lzdGVyc1t3
YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldCisgICAgICAgICAgICAmJiAhbV9sb2NrZWRS
ZWdpc3RlcnMuZ2V0KHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSkpCisgICAgICAgICAg
ICB0cnlGUFIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHdhbnRlZEpTVmFsdWVSZWdzLnRhZ0dQUigp
ICE9IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAgICYmICFtX3JlZ2lzdGVyc1t3YW50ZWRKU1Zh
bHVlUmVncy50YWdHUFIoKV0KKyAgICAgICAgICAgICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQo
d2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCkpKQorICAgICAgICAgICAgdHJ5RlBSID0gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHRyeUZQUiAmJiBsb2NhdGlvbi5sb2Fkc0ludG9GUFIoKSkgewor
ICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gZ2V0RnJlZUZQUigpOworICAgICAgICBpZiAocmVz
dWx0RlBSICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUo
YWRkcmVzcywgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCA9
IERhdGFGb3JtYXRKUzsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLmRhdGFG
b3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgIGRhdGFGb3JtYXQg
PSBEYXRhRm9ybWF0RG91YmxlOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24s
IAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluRlBSKHJlc3VsdEZQUiwgZGF0YUZv
cm1hdCkpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
Zyhsb2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChyZWcgPT0gbmV3
QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisgICAgICAgICAgICAgICAgdXBkYXRlRGFuZ2VyRnJv
bnRpZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChsb2NhdGlvbi5sb2Fkc0ludG9HUFIoKSkgeworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSIHsg
d2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpIH07CisgICAgICAgIGlmIChyZXN1bHRHUFIg
PT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1tyZXN1bHRHUFJdIHx8IG1fbG9ja2VkUmVn
aXN0ZXJzLmdldChyZXN1bHRHUFIpKQorICAgICAgICAgICAgcmVzdWx0R1BSID0gZ2V0RnJlZUdQ
UigpOworICAgICAgICBBU1NFUlQocmVzdWx0R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAg
ICBtX2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24sIAorICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6aW5HUFIocmVzdWx0R1BSLCBsb2NhdGlvbi5yZWNvdmVyeSgpLmRhdGFGb3Jt
YXQoKSkpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2cobG9jYXRp
b24ucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgIGlmIChyZWcgPT0gbmV3QXNPbGQoZGFuZ2Vy
RnJvbnRpZXIoKSkpCisgICAgICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5p
cXVlKCkgPT0gRGlzcGxhY2VkSW5KU1N0YWNrKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiB7IHdh
bnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgIEdQUlJlZyB0YWdHUFIgeyB3YW50
ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSB9OworICAgIGlmIChwYXlsb2FkR1BSID09IEludmFsaWRH
UFJSZWcgfHwgbV9yZWdpc3RlcnNbcGF5bG9hZEdQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0
KHBheWxvYWRHUFIpKQorICAgICAgICBwYXlsb2FkR1BSID0gZ2V0RnJlZUdQUigpOworICAgIG1f
bG9ja2VkUmVnaXN0ZXJzLnNldChwYXlsb2FkR1BSKTsKKyAgICBpZiAodGFnR1BSID09IEludmFs
aWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbdGFnR1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQo
dGFnR1BSKSkKKyAgICAgICAgdGFnR1BSID0gZ2V0RnJlZUdQUigpOworICAgIG1fbG9ja2VkUmVn
aXN0ZXJzLmNsZWFyKHBheWxvYWRHUFIpOworICAgIEFTU0VSVChwYXlsb2FkR1BSICE9IEludmFs
aWRHUFJSZWcgJiYgdGFnR1BSICE9IEludmFsaWRHUFJSZWcgJiYgdGFnR1BSICE9IHBheWxvYWRH
UFIpOworICAgIG1faml0LmxvYWRQdHIoYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQp
LCBwYXlsb2FkR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChUYWdP
ZmZzZXQpLCB0YWdHUFIpOworICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAg
VmFsdWVSZWNvdmVyeTo6aW5QYWlyKHRhZ0dQUiwgcGF5bG9hZEdQUikpOworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKGxvY2F0aW9uLnJlY292ZXJ5KCksICJcbiIpOworICAgIGlm
IChyZWcgPT0gbmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisgICAgICAgIHVwZGF0ZURhbmdl
ckZyb250aWVyKCk7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQoQ2FjaGVk
UmVjb3ZlcnkmIGxvY2F0aW9uKQoreworICAgIGlmICghbG9jYXRpb24ucmVjb3ZlcnkoKS5pc0lu
SlNTdGFjaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChsb2NhdGlvbi5sb2Fk
c0ludG9GUFIoKSAmJiBnZXRGcmVlRlBSKCkgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBpZiAobG9jYXRpb24ubG9hZHNJbnRvR1BSKCkgJiYgZ2V0RnJlZUdQ
UigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGxv
Y2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gRGlzcGxhY2VkSW5KU1N0YWNrKSB7Cisg
ICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSIHsgZ2V0RnJlZUdQUigpIH07CisgICAgICAgIGlmIChw
YXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldChwYXlsb2FkR1BSKTsKKyAgICAgICAgR1BSUmVn
IHRhZ0dQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVh
cihwYXlsb2FkR1BSKTsKKyAgICAgICAgcmV0dXJuIHRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnOwor
ICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gV2UgcHJlZmVyIGxvYWRpbmcgZG91
YmxlcyBhbmQgdW5kZXRlcm1pbmVkIEpTVmFsdWVzIGludG8gRlBScworLy8gYmVjYXVzZSBpdCB3
b3VsZCBvdGhlcndpc2UgdXNlIHVwIHR3byBHUFJzLgorYm9vbCBDYWNoZWRSZWNvdmVyeTo6bG9h
ZHNJbnRvRlBSKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHJlY292ZXJ5KCkudGVjaG5pcXVlKCkp
IHsKKyAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIERpc3BsYWNl
ZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBJbnRlZ2VycywgYm9vbGVhbnMgYW5kIGNl
bGxzIGNhbiBiZSBsb2FkZWQgaW50byBhIHNpbmdsZSBHUFIKK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6
OmxvYWRzSW50b0dQUigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1
ZSgpKSB7CisgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIEJvb2xl
YW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREaXNwbGFjZShDYWNo
ZWRSZWNvdmVyeSYgbG9jYXRpb24pCit7CisgICAgQVNTRVJUKGxvY2F0aW9uLnJlY292ZXJ5KCku
aXNJblJlZ2lzdGVycygpKTsKKyAgICBKU1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncyB7IGxv
Y2F0aW9uLndhbnRlZEpTVmFsdWVSZWdzKCkgfTsKKyAgICBBU1NFUlQod2FudGVkSlNWYWx1ZVJl
Z3MpOworCisgICAgR1BSUmVnIHdhbnRlZFRhZ0dQUiB7IHdhbnRlZEpTVmFsdWVSZWdzLnRhZ0dQ
UigpIH07CisgICAgR1BSUmVnIHdhbnRlZFBheWxvYWRHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy5w
YXlsb2FkR1BSKCkgfTsKKyAgICAKKyAgICBpZiAod2FudGVkVGFnR1BSICE9IEludmFsaWRHUFJS
ZWcpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQod2FudGVkVGFnR1BS
KSk7CisgICAgICAgIGlmIChDYWNoZWRSZWNvdmVyeSogY3VycmVudFRhZyB7IG1fcmVnaXN0ZXJz
W3dhbnRlZFRhZ0dQUl0gfSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRUYWcgPT0gJmxvY2F0
aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICsgIiwgd2FudGVkVGFnR1BSLCAiIGlzIE9LXG4iKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gbmV2ZXIgaGFwcGVuIG9uIDMy
Yml0IHBsYXRmb3JtcyBzaW5jZSB3ZQorICAgICAgICAgICAgICAgIC8vIGhhdmUgYXQgbW9zdCBv
bmUgd2FudGVkIEpTVmFsdWVSZWdzLCBmb3IgdGhlCisgICAgICAgICAgICAgICAgLy8gY2FsbGVl
LCBhbmQgbm8gY2FsbGVlLXNhdmUgcmVnaXN0ZXJzLgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAod2FudGVkUGF5bG9hZEdQUiAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEFT
U0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFBheWxvYWRHUFIpKTsKKyAgICAgICAg
aWYgKENhY2hlZFJlY292ZXJ5KiBjdXJyZW50UGF5bG9hZCB7IG1fcmVnaXN0ZXJzW3dhbnRlZFBh
eWxvYWRHUFJdIH0pIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50UGF5bG9hZCA9PSAmbG9jYXRp
b24pIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgKyAiLCB3YW50ZWRQYXlsb2FkR1BSLCAiIGlzIE9LXG4iKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2VlIGFib3ZlCisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IElu
UGFpcgorICAgICAgICB8fCBsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5HUFIoKSkgeworICAgICAg
ICBHUFJSZWcgcGF5bG9hZEdQUjsKKyAgICAgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVj
aG5pcXVlKCkgPT0gSW5QYWlyKQorICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGxvY2F0aW9uLnJl
Y292ZXJ5KCkucGF5bG9hZEdQUigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwYXlsb2Fk
R1BSID0gbG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKTsKKworICAgICAgICBpZiAod2FudGVkUGF5
bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgd2FudGVkUGF5bG9hZEdQUiA9
IHBheWxvYWRHUFI7CisKKyAgICAgICAgaWYgKHBheWxvYWRHUFIgIT0gd2FudGVkUGF5bG9hZEdQ
UikgeworICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0g
SW5QYWlyCisgICAgICAgICAgICAgICAgJiYgd2FudGVkUGF5bG9hZEdQUiA9PSBsb2NhdGlvbi5y
ZWNvdmVyeSgpLnRhZ0dQUigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogU3dhcHBpbmcgIiwgcGF5bG9hZEdQUiwgIiBh
bmQgIiwgd2FudGVkUGF5bG9hZEdQUiwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9qaXQuc3dh
cChwYXlsb2FkR1BSLCB3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICAgICAgICAgICAgICB1cGRhdGVS
ZWNvdmVyeShsb2NhdGlvbiwgCisgICAgICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcihwYXlsb2FkR1BSLCB3YW50ZWRQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAqIE1vdmluZyAiLCBwYXlsb2FkR1BSLCAiIGludG8gIiwgd2FudGVkUGF5bG9hZEdQ
UiwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCB3YW50ZWRQ
YXlsb2FkR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNo
bmlxdWUoKSA9PSBJblBhaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3Zlcnko
bG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBhaXIo
bG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3YW50ZWRQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24sIAorICAgICAgICAgICAgICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIod2FudGVkUGF5bG9hZEdQUiwgbG9jYXRpb24ucmVj
b3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAod2FudGVkVGFnR1BSID09IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICB3YW50ZWRUYWdHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgIHN3aXRj
aCAobG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpIHsKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0SW50MzI6CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAqIE1vdmluZyBpbnQzMiB0YWcgaW50byAiLCB3YW50ZWRUYWdHUFIsICJcbiIp
OworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSwKKyAgICAgICAgICAgICAgICB3YW50ZWRUYWdHUFIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyBjZWxsIHRh
ZyBpbnRvICIsIHdhbnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisgICAgICAgICAg
ICAgICAgd2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERh
dGFGb3JtYXRCb29sZWFuOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgYm9vbGVhbiB0YWcgaW50byAiLCB3YW50ZWRUYWdHUFIs
ICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLAorICAgICAgICAgICAgICAgIHdhbnRlZFRhZ0dQUik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SlM6CisgICAgICAg
ICAgICBBU1NFUlQod2FudGVkVGFnR1BSICE9IGxvY2F0aW9uLnJlY292ZXJ5KCkucGF5bG9hZEdQ
UigpKTsKKyAgICAgICAgICAgIGlmICh3YW50ZWRUYWdHUFIgIT0gbG9jYXRpb24ucmVjb3Zlcnko
KS50YWdHUFIoKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyAiLCBsb2NhdGlvbi5yZWNvdmVyeSgpLnRhZ0dQ
UigpLCAiIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKGxvY2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCksIHdhbnRlZFRhZ0dQUik7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5GUFIoKSk7CisgICAg
ICAgIGlmICh3YW50ZWRUYWdHUFIgPT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICAgICAgQVNT
RVJUKHdhbnRlZFBheWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBtX2xv
Y2tlZFJlZ2lzdGVycy5zZXQod2FudGVkUGF5bG9hZEdQUik7CisgICAgICAgICAgICB3YW50ZWRU
YWdHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVh
cih3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICAgICAgfQorICAgICAgICBpZiAod2FudGVkUGF5bG9h
ZEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5z
ZXQod2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIHdhbnRlZFBheWxvYWRHUFIgPSBnZXRGcmVl
R1BSKCk7CisgICAgICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcih3YW50ZWRUYWdHUFIp
OworICAgICAgICB9CisgICAgICAgIG1faml0LmJveERvdWJsZShsb2NhdGlvbi5yZWNvdmVyeSgp
LmZwcigpLCB3YW50ZWRUYWdHUFIsIHdhbnRlZFBheWxvYWRHUFIpOworICAgIH0KKyAgICB1cGRh
dGVSZWNvdmVyeShsb2NhdGlvbiwgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKHdhbnRlZFRhZ0dQUiwg
d2FudGVkUGF5bG9hZEdQUikpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjY4ZDdkZGNm
OGFkYjViZDE1M2YwN2M4MjhkM2JlOGMxOGM4NjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcApAQCAtMCwwICsxLDM0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKKworI2lmIEVO
QUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitEYXRhRm9ybWF0
IENhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUoCisgICAgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hl
ZFJlY292ZXJ5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzKQoreworICAgIEFTU0VS
VCghY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKTsKKworICAgIHN3aXRj
aCAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2UgSW5H
UFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3By
KCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgVW5i
b3hlZEludDMySW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlMzIoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyAgICAg
ICAgcmV0dXJuIERhdGFGb3JtYXRJbnQzMjsKKyAgICBjYXNlIFVuYm94ZWRJbnQ1MkluR1BSOgor
ICAgICAgICBtX2ppdC5yc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OmludDUyU2hpZnRBbW91bnQpLAorICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5ncHIoKSk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgVW5ib3hlZFN0cmlj
dEludDUySW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdFN0cmljdElu
dDUyOworICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmVQ
dHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJl
dHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAg
ICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJl
c3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENlbGw7CisgICAgY2FzZSBVbmJveGVkRG91
YmxlSW5GUFI6CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZnByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdERvdWJsZTsK
KyAgICBjYXNlIEluRlBSOgorICAgICAgICBtX2ppdC5zdG9yZURvdWJsZShjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmZwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRK
UzsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBtX2ppdC5zdG9yZVRydXN0ZWRWYWx1ZShj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmNvbnN0YW50KCksIGFkZHJlc3MpOworICAgICAgICBy
ZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0
Qm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoY2FuQm94
KGNhY2hlZFJlY292ZXJ5KSk7CisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5pc0luR1BSKCkpIHsKKyAgICAgICAgc3dpdGNoIChjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmRhdGFGb3JtYXQoKSkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQzMjoKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogQm94
aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAgICAgbV9qaXQuemVy
b0V4dGVuZDMyVG9QdHIoCisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS5ncHIoKSwKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigp
KTsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuCisgICAg
ICAgICAgICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51
bWJlciksCisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7
CisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVyeSgKKyAgICAgICAgICAgICAg
ICBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBE
YXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogQm94aW5nICIs
IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAgICAgbV9qaXQucnNoaWZ0NjQo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSwK
KyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAg
ICAgICAgIGNhY2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAgICAgICAgICAgICAgIFZhbHVl
UmVjb3Zlcnk6OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIERhdGFGb3Jt
YXRTdHJpY3RJbnQ1MikpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7Cisg
ICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0U3RyaWN0SW50
NTI6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHRGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBtX2ppdC5jb252ZXJ0SW50NjRU
b0RvdWJsZShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksIFZhbHVlUmVjb3Zlcnk6Omlu
RlBSKHJlc3VsdEZQUiwgRGF0YUZvcm1hdERvdWJsZSkpOworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KFZhbHVlRmFsc2UpLAorICAgICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
Z3ByKCkpOworICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnkuc2V0UmVjb3ZlcnkoCisgICAgICAg
ICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5n
cHIoKSwgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4i
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmlzSW5GUFIoKSkgeworICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5k
YXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gY2FjaGVkUmVj
b3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKS5ncHIoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHRH
UFIgPT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1tyZXN1bHRHUFJdKQorICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBtX2ppdC5wdXJpZnlOYU4oY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91
YmxlVG82NChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCByZXN1bHRHUFIpOworICAg
ICAgICAgICAgbV9qaXQuc3ViNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBl
TnVtYmVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJl
Y292ZXJ5LCBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1bHRHUFIsIERhdGFGb3JtYXRKUykpOwor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGludG8g
IiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0
YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZm
bGVyOjplbWl0TG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgaWYg
KCFjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAqIExvYWRpbmcgIiwg
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIiBpbnRvICIpOworCisgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudmlydHVhbFJlZ2lzdGVyKCk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcyB7IGFkZHJlc3NGb3JPbGQocmVnKSB9
OworICAgIGJvb2wgdHJ5RlBSIHsgdHJ1ZSB9OworICAgIEdQUlJlZyByZXN1bHRHUFIgeyBjYWNo
ZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVlUmVncygpLmdwcigpIH07CisKKyAgICAvLyBJZiB3ZSB3
YW50IGEgR1BSIGFuZCBpdCdzIGF2YWlsYWJsZSwgdGhhdCdzIGJldHRlciB0aGFuIGxvYWRpbmcK
KyAgICAvLyBpbnRvIGFuIEZQUi4KKyAgICBpZiAocmVzdWx0R1BSICE9IEludmFsaWRHUFJSZWcg
JiYgIW1fcmVnaXN0ZXJzW3Jlc3VsdEdQUl0KKyAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJz
LmdldChyZXN1bHRHUFIpICYmIGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpKQorICAgICAg
ICB0cnlGUFIgPSBmYWxzZTsKKworICAgIC8vIE90aGVyd2lzZSwgd2UgcHJlZmVyIGxvYWRpbmcg
aW50byBGUFJzIGlmIHBvc3NpYmxlCisgICAgaWYgKHRyeUZQUiAmJiBjYWNoZWRSZWNvdmVyeS5s
b2Fkc0ludG9GUFIoKSkgeworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gZ2V0RnJlZUZQUigp
OworICAgICAgICBpZiAocmVzdWx0RlBSICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoYWRkcmVzcywgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIERhdGFG
b3JtYXQgZGF0YUZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgICAgIC8vIFdlIGNvdWxk
IGJlIHRyYW5zZm9ybWluZyBhIERhdGFGb3JtYXRDZWxsIGludG8gYQorICAgICAgICAgICAgLy8g
RGF0YUZvcm1hdEpTIGhlcmUgLSBidXQgdGhhdCdzIE9LLgorICAgICAgICAgICAgaWYgKGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisg
ICAgICAgICAgICAgICAgZGF0YUZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CisgICAgICAgICAg
ICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwKKyAgICAgICAgICAgICAgICBWYWx1ZVJl
Y292ZXJ5OjppbkZQUihyZXN1bHRGUFIsIGRhdGFGb3JtYXQpKTsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KSwgIlxuIik7CisgICAgICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250aWVy
KCkpKQorICAgICAgICAgICAgICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3Zlcnku
bG9hZHNJbnRvR1BSKCkpOworICAgIGlmIChyZXN1bHRHUFIgPT0gSW52YWxpZEdQUlJlZyB8fCBt
X3JlZ2lzdGVyc1tyZXN1bHRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZXN1bHRHUFIp
KQorICAgICAgICByZXN1bHRHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgQVNTRVJUKHJlc3VsdEdQ
UiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC5sb2FkUHRyKGFkZHJlc3MsIHJlc3VsdEdQ
Uik7CisgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksCisgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmluR1BSKHJlc3VsdEdQUiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9y
bWF0KCkpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyhjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250
aWVyKCkpKQorICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworfQorCitib29sIENhbGxG
cmFtZVNodWZmbGVyOjpjYW5Mb2FkKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sK
KyAgICBpZiAoIWNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBS
KCkgfHwgY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpOworCisgICAgaWYgKGNhY2hlZFJl
Y292ZXJ5LmxvYWRzSW50b0ZQUigpICYmIGdldEZyZWVGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9H
UFIoKSAmJiBnZXRGcmVlR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRz
SW50b0ZQUigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7
CisgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBEaXNwbGFjZWRJ
bkpTU3RhY2s6CisgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9
CisKK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0dQUigpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChyZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBJbnQzMkRpc3BsYWNlZElu
SlNTdGFjazoKKyAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgU3Ry
aWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5K
U1N0YWNrOgorICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgQ2VsbERpc3Bs
YWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpl
bWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQoreworICAgIEFTU0VS
VChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKSk7CisgICAgR1BSUmVn
IHdhbnRlZEdQUiB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkuZ3ByKCkgfTsK
KyAgICBBU1NFUlQod2FudGVkR1BSICE9IEludmFsaWRHUFJSZWcpOworICAgIEFTU0VSVCghbV9s
b2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZEdQUikpOworCisgICAgaWYgKENhY2hlZFJlY292ZXJ5
KiBjdXJyZW50ID0gbV9yZWdpc3RlcnNbd2FudGVkR1BSXSkgeworICAgICAgICBpZiAoY3VycmVu
dCA9PSAmY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICsgIiwgd2FudGVkR1BSLCAiIGlzIE9LXG4iKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBjb3VsZCBkbyBhIG1vcmUg
Y29tcGxleCB0aGluZyBieSBmaW5kaW5nIGN5Y2xlcworICAgICAgICAvLyBldGMuIGluIHRoYXQg
Y2FzZS4KKyAgICAgICAgLy8gSG93ZXZlciwgZW5kaW5nIHVwIGluIHRoaXMgc2l0dWF0aW9uIHdp
bGwgYmUgc3VwZXIKKyAgICAgICAgLy8gcmFyZSwgYW5kIHNob3VsZCBhY3R1YWxseSBiZSBvdXRy
aWdodCBpbXBvc3NpYmxlIGZvcgorICAgICAgICAvLyBub24tRlRMIHRpZXJzLCBzaW5jZToKKyAg
ICAgICAgLy8gIChhKSBBbGwgZG91YmxlcyBoYXZlIGJlZW4gY29udmVydGVkIGludG8gSlNWYWx1
ZXMgd2l0aAorICAgICAgICAvLyAgICAgIFZhbHVlUmVwIG5vZGVzLCBzbyBGUFJzIGFyZSBpbml0
aWFsbHkgZnJlZQorICAgICAgICAvLworICAgICAgICAvLyAgKGIpIFRoZSBvbmx5IHJlY292ZXJp
ZXMgd2l0aCB3YW50ZWQgcmVnaXN0ZXJzIGFyZSB0aGUKKyAgICAgICAgLy8gICAgICBjYWxsZWUg
KHdoaWNoIGFsd2F5cyBzdGFydHMgb3V0IGluIGEgcmVnaXN0ZXIpIGFuZAorICAgICAgICAvLyAg
ICAgIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIChj
KSBUaGUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGFyZSB0aGUgZmlyc3QgdGhpbmdzIHdlCisgICAg
ICAgIC8vICAgICAgbG9hZCAoYWZ0ZXIgdGhlIHJldHVybiBQQyksIGFuZCB0aGV5IGFyZSBsb2Fk
ZWQgYXMgSlNWYWx1ZXMKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIChkKSBXZSBwcmVmZXIgbG9h
ZGluZyBKU1ZhbHVlcyBpbnRvIEZQUnMgaWYgdGhlaXIKKyAgICAgICAgLy8gICAgICB3YW50ZWQg
R1BSIGlzIG5vdCBhdmFpbGFibGUKKyAgICAgICAgLy8KKyAgICAgICAgLy8gIChlKSBJZiB3ZSBl
bmQgdXAgc3BpbGxpbmcgc29tZSByZWdpc3RlcnMgd2l0aCBhCisgICAgICAgIC8vICAgICAgdGFy
Z2V0LCB3ZSB3b24ndCBsb2FkIHRoZW0gYWdhaW4gYmVmb3JlIHRoZSB2ZXJ5CisgICAgICAgIC8v
ICAgICAgZW5kIG9mIHRoZSBhbGdvcml0aG0KKyAgICAgICAgLy8KKyAgICAgICAgLy8gQ29tYmlu
ZWQsIHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIG5ldmVyIGxvYWQgYSByZWNvdmVyeQorICAgICAg
ICAvLyB3aXRoIGEgd2FudGVkIEdQUiBpbnRvIGFueSBHUFIgb3RoZXIgdGhhbiBpdHMgd2FudGVk
CisgICAgICAgIC8vIEdQUi4gVGhlIGNhbGxlZSBjb3VsZCBob3dldmVyIGhhdmUgYmVlbiBpbml0
aWFsbHkgaW4KKyAgICAgICAgLy8gb25lIG9mIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgLSBi
dXQgc2luY2UgdGhlIHdhbnRlZAorICAgICAgICAvLyBHUFIgZm9yIHRoZSBjYWxsZWUgaXMgYWx3
YXlzIHJlZ1QwLCBpdCB3aWxsIGJlIHRoZQorICAgICAgICAvLyBmaXJzdCBvbmUgdG8gYmUgZGlz
cGxhY2VkLCBhbmQgd2Ugd29uJ3Qgc2VlIGl0IHdoZW4KKyAgICAgICAgLy8gaGFuZGxpbmcgYW55
IG9mIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRo
dXMsIHRoZSBvbmx5IHdheSB3ZSBjb3VsZCBldmVyIHJlYWNoIHRoaXMgcGF0aCBpcyBpbgorICAg
ICAgICAvLyB0aGUgRlRMLCB3aGVuIHRoZXJlIGlzIHNvIG11Y2ggcHJlc3N1cmUgdGhhdCB3ZQor
ICAgICAgICAvLyBhYnNvbHV0ZWx5IG5lZWQgdG8gbG9hZCB0aGUgY2FsbGVlLXNhdmUgcmVnaXN0
ZXJzIGludG8KKyAgICAgICAgLy8gZGlmZmVyZW50IEdQUnMgaW5pdGlhbGx5IGJ1dCBub3QgZW5v
dWdoIHByZXNzdXJlIHRvCisgICAgICAgIC8vIHRoZW4gaGF2ZSB0byBzcGlsbCBhbGwgb2YgdGhl
bS4gQW5kIGV2ZW4gaW4gdGhhdCBjYXNlLAorICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIG9y
ZGVyIGluIHdoaWNoIExMVk0gc2F2ZXMgdGhlCisgICAgICAgIC8vIGNhbGxlZS1zYXZlcywgd2Ug
d2lsbCBwcm9iYWJseSBzdGlsbCBiZSBzYWZlLiBBbnl3YXksCisgICAgICAgIC8vIHRoZSBjb3Vw
bGUgZXh0cmEgbW92ZSBpbnN0cnVjdGlvbnMgY29tcGFyZWQgdG8gYW4KKyAgICAgICAgLy8gZWZm
aWNpZW50IGN5Y2xlLWJhc2VkIGFsZ29yaXRobSBhcmUgbm90IGdvaW5nIHRvIGh1cnQKKyAgICAg
ICAgLy8gdXMuCisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgKiBNb3ZpbmcgIiwgd2FudGVk
R1BSLCAiIGludG8gIiwgdGVtcEdQUiwgIlxuIik7CisgICAgICAgIG1faml0Lm1vdmUod2FudGVk
R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgdXBkYXRlUmVjb3ZlcnkoKmN1cnJlbnQsCisgICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUih0ZW1wR1BSLCBjdXJyZW50LT5yZWNvdmVyeSgpLmRh
dGFGb3JtYXQoKSkpOworICAgIH0KKyAgICBBU1NFUlQoIW1fcmVnaXN0ZXJzW3dhbnRlZEdQUl0p
OworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKSB7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgIiwgY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgIiBpbnRvICIsIHdhbnRlZEdQUiwgIlxuIik7
CisgICAgICAgIG1faml0Lm1vdmUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgd2Fu
dGVkR1BSKTsKKyAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksCisgICAgICAg
ICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUih3YW50ZWRHUFIsIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkZQUigpKTsKKyAgICAgICAgaWYgKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAg
ICAgICAgIC8vIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IHBpY2sgdGhlIHdhbnRlZCBHUFIKKyAg
ICAgICAgICAgIGVtaXRCb3goY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3Zp
bmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwgIiBpbnRvICIsIHdhbnRlZEdQ
UiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRHUFIpOworICAgICAgICAgICAgdXBkYXRlUmVjb3Zl
cnkoY2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIo
d2FudGVkR1BSLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJzW3dhbnRlZEdQUl0gPT0gJmNh
Y2hlZFJlY292ZXJ5KTsKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIo
KSA9PSB3YW50ZWRHUFIpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVO
QUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0dQUkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5o
CmluZGV4IGI4NjY3YjcyMDVmNzdjYTFiOTdlNDExM2UzYTc1YTc3NDEwOTg4ZGMuLmEzNTZmZjFl
NTU1ZmQ5MWZmMjk5MzU5NGRhMzU5NzFmOTE1YzY5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
R1BSSW5mby5oCkBAIC02NSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQUlJlZzsgfQor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2dwciAhPSBJbnZh
bGlkR1BSUmVnOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oSlNWYWx1ZVJlZ3Mgb3RoZXIpIHsg
cmV0dXJuIG1fZ3ByID09IG90aGVyLm1fZ3ByOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KEpTVmFs
dWVSZWdzIG90aGVyKSB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIAogICAgIEdQ
UlJlZyBncHIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQogICAgIEdQUlJlZyB0YWdHUFIoKSBj
b25zdCB7IHJldHVybiBJbnZhbGlkR1BSUmVnOyB9CkBAIC0xMTAsNiArMTE0LDcgQEAgcHVibGlj
OgogICAgIH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fYmFz
ZSA9PSBJbnZhbGlkR1BSUmVnOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZSAhPSBJbnZhbGlkR1BSUmVnOyB9CiAgICAgCiAgICAgYm9vbCBpc0Fk
ZHJlc3MoKSBjb25zdCB7IHJldHVybiBtX29mZnNldCAhPSBub3RBZGRyZXNzKCk7IH0KICAgICAK
QEAgLTE2NiwxMSArMTcxLDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdz
KEludmFsaWRHUFJSZWcsIGdwcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFzdGF0aWNfY2FzdDxi
b29sPigqdGhpcyk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fdGFnR1BSKSAhPSBJbnZhbGlk
R1BSUmVnCisgICAgICAgICAgICB8fCBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fcGF5bG9hZEdQUikg
IT0gSW52YWxpZEdQUlJlZzsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oSlNWYWx1ZVJl
Z3Mgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVn
PihtX3RhZ0dQUikgPT0gSW52YWxpZEdQUlJlZwotICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
R1BSUmVnPihtX3BheWxvYWRHUFIpID09IEludmFsaWRHUFJSZWc7CisgICAgICAgIHJldHVybiBt
X3RhZ0dQUiA9PSBvdGhlci5tX3RhZ0dQUgorICAgICAgICAgICAgJiYgbV9wYXlsb2FkR1BSID09
IG90aGVyLm1fcGF5bG9hZEdQUjsKICAgICB9CisgICAgYm9vbCBvcGVyYXRvciE9KEpTVmFsdWVS
ZWdzIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogICAgIAogICAg
IEdQUlJlZyB0YWdHUFIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fdGFn
R1BSKTsgfQogICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8R1BSUmVnPihtX3BheWxvYWRHUFIpOyB9CkBAIC0yMzgsMTEgKzI1MSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJlc3VsdC5tX3RhZ1R5cGUgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KEpTVmFsdWU6
OkNlbGxUYWcpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICAKLSAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0CisKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFzdGF0aWNfY2FzdDxib29sPigqdGhpcyk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fYmFz
ZU9yVGFnKSA9PSBJbnZhbGlkR1BSUmVnCi0gICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxHUFJS
ZWc+KG1fcGF5bG9hZCkgPT0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEdQUlJlZz4obV9iYXNlT3JUYWcpICE9IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAgIHx8
IHN0YXRpY19jYXN0PEdQUlJlZz4obV9wYXlsb2FkKSAhPSBJbnZhbGlkR1BSUmVnOwogICAgIH0K
ICAgICAKICAgICBib29sIGlzQWRkcmVzcygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAppbmRleCBkZTM3OWU4YWQyMWJkMzUzNWRhYjY1ZGM0YTY3OTJjYzFkOTBkYzU4
Li43NWZmMTRhZWFjNTUyMjNjNmNhNTEyMjc4Y2M3YmNlMDI1OGRiNmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBVU0UoSlNWQUxV
RTY0KQogI2luY2x1ZGUgIkpJVC5oIgogCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNBcnJheS5oIgpAQCAtMTY3LDYgKzE2OCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNh
CiAgICAgCiAgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXpl
b2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIo
YXJnQ291bnQpLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBKU1N0YWNrOjpBcmd1bWVu
dENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZz
ZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKwogICAgIH0gLy8gU1AgaG9sZHMgbmV3
Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQg
aW5pdGlhbGl6ZWQuCiAgICAgCiAgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBpbnN0cnVj
dGlvbiAtIG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwpAQCAtMTgxLDkgKzE4
Myw2IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF92YXJhcmdzKQotICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0KICAgICBE
YXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBKdW1wIHNsb3dD
YXNlID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjaywgVHJ1c3RlZEltbVB0cigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2UpOwpAQCAtMTk0LDcgKzE5MywyOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJ
RCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRk
cmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7Cisg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCkgeworICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAg
ICAgICAgICAgIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGZvciAoaW50IGkgeyAwIH07IGkg
PCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7ICsraSkgeworICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJnc1tpXSA9CisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5K
U1N0YWNrKAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSAtIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICAgICAgRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgfQorICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQorICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgICAg
IHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CisgICAg
ICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOwor
ICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhP
dGhlciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsKKyAgICAgICAgZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAg
ICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90
aGVyID0gZW1pdE5ha2VkVGFpbENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjE5LDYgKzIz
OSw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQs
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjCiAKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CiAKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbF92YXJhcmdzKQorICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92
bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnLmgKaW5kZXggMDcwNGUyZWMzOWQxMWJlYTJmYWMxY2RjOWI4Y2YwMDBjYTBmN2I2
Yi4uOWY2YWQxYzBjZDM0ODZkNmRjYjc5MjBjYWE2ZjUxYjk3NTJiZTJiMCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZy5oCkBAIC0xMDEsNiArMTAxLDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQogICAgIGJvb2wg
b3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wgaXNH
UFIoKSBjb25zdAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NDdlOGJkMjIzMDUzNjU3MzRiYjY0MTU3OTZkNTk4NzVlMjgwMzBkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCkBA
IC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgUmVnaXN0ZXJNYXBfaAorI2RlZmluZSBSZWdpc3Rlck1hcF9oCisKKyNp
ZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJS
ZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBS
ZWdpc3Rlck1hcCB7CitwdWJsaWM6CisgICAgVCYgb3BlcmF0b3JbXShSZWcgcmVnKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWFwW3JlZy5pbmRleCgpXTsKKyAgICB9CisKKyAgICBUJiBvcGVy
YXRvcltdKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3Nl
bWJsZXI6OnJlZ2lzdGVySW5kZXgoZ3ByKV07CisgICAgfQorCisgICAgVCYgb3BlcmF0b3JbXShG
UFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpy
ZWdpc3RlckluZGV4KGZwcildOworICAgIH0KKworICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oUmVn
IHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFtyZWcuaW5kZXgoKV07Cisg
ICAgfQorCisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShHUFJSZWcgZ3ByKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KGdwcild
OworICAgIH0KKworICAgIGNvbnN0IFQmIG9wZXJhdG9yW10oRlBSUmVnIGZwcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX21hcFtNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChm
cHIpXTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxl
cjo6dG90YWxOdW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IH07Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgR1BSTWFwIHsKK3B1YmxpYzoKKyAgICBUJiBvcGVyYXRvcltdKEdQ
UlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9Bc3NlbWJsZXI6OnJl
Z2lzdGVySW5kZXgoZ3ByKV07CisgICAgfQorCisgICAgY29uc3QgVCYgb3BlcmF0b3JbXShHUFJS
ZWcgZ3ByKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW01hY3JvQXNzZW1ibGVy
OjpyZWdpc3RlckluZGV4KGdwcildOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OmFycmF5
PFQsIE1hY3JvQXNzZW1ibGVyOjpudW1iZXJPZlJlZ2lzdGVycygpPiBtX21hcCB7IH07Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRlBSTWFwIHsKK3B1YmxpYzoKKyAgICBUJiBv
cGVyYXRvcltdKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbTWFjcm9B
c3NlbWJsZXI6OmZwUmVnaXN0ZXJJbmRleChmcHIpXTsKKyAgICB9CisKKyAgICBjb25zdCBUJiBv
cGVyYXRvcltdKEZQUlJlZyBmcHIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBb
TWFjcm9Bc3NlbWJsZXI6OmZwUmVnaXN0ZXJJbmRleChmcHIpXTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgc3RkOjphcnJheTxULCBNYWNyb0Fzc2VtYmxlcjo6bnVtYmVyT2ZGUFJlZ2lzdGVycygp
PiBtX21hcCB7IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJM
RShKSVQpCisKKyNlbmRpZiAvLyBSZWdpc3Rlck1hcF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAppbmRleCBhNDIyNTc0OTQ4ZmZiNzMyMDU0YTg4NmE0Zjc3MzE1OWUxNDAyMjll
Li40OTk2NDRhZDJiZmYwNzQyYmVmOWNhN2M0NTM5YmE0MDFhM2UxMTUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkJpbmFyeVN3aXRjaC5oIgogI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAj
aW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgi
CiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCkBAIC0xNzg3LDI2ICsxNzg4LDMyIEBAIHZvaWQgbGlu
a1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgIAotICAgIHB0cmRpZmZfdCBvZmZzZXRUb0ZyYW1lID0gLXNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKTsKLQotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBva0FyZ3VtZW50Q291bnQgPSBzdHViSml0LmJyYW5jaDMyKAotICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9m
KFJlZ2lzdGVyKSAqIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpICsgb2Zmc2V0VG9GcmFtZSArIFBh
eWxvYWRPZmZzZXQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxMDAwMDAwMCkpOwotICAg
ICAgICBzdHViSml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1lbnRDb3VudCk7
Ci0gICAgICAgIG9rQXJndW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZXI+IGZyYW1lU2h1ZmZsZXI7CisgICAgaWYgKGNhbGxMaW5r
SW5mby5mcmFtZVNodWZmbGVEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKGNhbGxMaW5rSW5mby5p
c1RhaWxDYWxsKCkpOworICAgICAgICBmcmFtZVNodWZmbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxD
YWxsRnJhbWVTaHVmZmxlcj4oc3R1YkppdCwgKmNhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRh
KCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIC8vIFdlIHdvdWxkIGhhdmUgYWxy
ZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwsIGFuZCB3ZSBjYW4KKyAgICAg
ICAgLy8gdXNlIHRoZSBhZGRpdGlvbmFsIHJlZ2lzdGVyIHRoaXMgYnV5cyB1cy4KKyAgICAgICAg
ZnJhbWVTaHVmZmxlci0+YXNzdW1lQ2FsbGVlSXNDZWxsKCk7CisjZW5kaWYKKyAgICAgICAgZnJh
bWVTaHVmZmxlci0+bG9ja0dQUihjYWxsZWVHUFIpOwogICAgIH0KLSAgICAKLSAgICBHUFJSZWcg
c2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxsZWVHUFIpOwog
ICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7CiAgICAgCiAgICAgaWYgKGlzQ2xvc3VyZUNh
bGwpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9uIGFuZCBzdGFz
aCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgorICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjsK
KyAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCisgICAgICAgICAgICBzY3JhdGNoR1BSID0gZnJh
bWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3Jh
dGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUik7Cisg
ICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rhc2ggdGhlIGV4
ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIC8v
IFdlIGNhbiBzYWZlbHkgY2xvYmJlciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2FsbGVlR1BSLiBX
ZSBjYW4ndCByZWx5IG9uIHRhZ01hc2tSZWdpc3RlcgotICAgICAgICAvLyBiZWluZyBzZXQuIFNv
IHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgc2NyYXRjaCk7Ci0gICAgICAgIHNsb3dQYXRo
LmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxl
ZUdQUiwgc2NyYXRjaCkpOworICAgICAgICAvLyBXZSBjYW4ndCByZWx5IG9uIHRhZ01hc2tSZWdp
c3RlciBiZWluZyBzZXQsIHNvIHdlIGRvIHRoaXMgdGhlIGhhcmQKKyAgICAgICAgLy8gd2F5Lgor
ICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNr
KSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRl
c3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaEdQUikpOwogI2Vs
c2UKICAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2Fs
bGVlIGlzIGEgY2VsbC4KICNlbmRpZgpAQCAtMTgxOSw5ICsxODI2LDkgQEAgdm9pZCBsaW5rUG9s
eW1vcnBoaWNDYWxsKAogICAgIAogICAgICAgICBzdHViSml0LmxvYWRQdHIoCiAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4
ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBzY3JhdGNoKTsKKyAgICAgICAgICAgIHNjcmF0Y2hH
UFIpOwogICAgICAgICAKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaDsKKyAg
ICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaEdQUjsKICAgICB9IGVsc2UKICAgICAg
ICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwogICAgIApAQCAtMTg2Myw4ICsxODcw
LDEzIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgY2FzZVZhbHVlc1tpXSA9
IG5ld0Nhc2VWYWx1ZTsKICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZhc3RDb3VudHNCYXNlR1BS
ID0KLSAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwg
Y29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgR1BSUmVnIGZhc3RDb3Vu
dHNCYXNlR1BSOworICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICBmYXN0Q291bnRzQmFz
ZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
ZmFzdENvdW50c0Jhc2VHUFIgPQorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RT
Y3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7
CisgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZmFz
dENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKICAgICAKICAgICBCaW5hcnlTd2l0
Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVlcywgQmluYXJ5U3dp
dGNoOjpJbnRQdHIpOwpAQCAtMTg4NCw3ICsxODk2LDEwIEBAIHZvaWQgbGlua1BvbHltb3JwaGlj
Q2FsbCgKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwKICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jhc2VHUFIsIGNh
c2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikgewor
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVmZmxlci0+c25h
cHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxsc1tjYXNlSW5k
ZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgaWYgKGNh
bGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKICAgICAgICAgICAgIHN0dWJKaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgc3R1YkppdC5wcmVwYXJlRm9yVGFpbENhbGxT
bG93KCk7CiAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJU
YWlsQ2FsbCgpOwpAQCAtMTg5NiwxMCArMTkxMSwyMyBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0Nh
bGwoCiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CiAgICAgYmluYXJ5U3dpdGNo
LmZhbGxUaHJvdWdoKCkubGluaygmc3R1YkppdCk7Ci0gICAgc3R1YkppdC5tb3ZlKGNhbGxlZUdQ
UiwgR1BSSW5mbzo6cmVnVDApOworCisgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsKKyAgICAgICAg
ZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjYWxsZWVHUFIpOworICAgICAgICBmcmFtZVNodWZm
bGVyLT5yZWxlYXNlR1BSKGNvbXBhcmlzb25WYWx1ZUdQUik7CisgICAgICAgIGZyYW1lU2h1ZmZs
ZXItPnJlbGVhc2VHUFIoZmFzdENvdW50c0Jhc2VHUFIpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGZyYW1lU2h1ZmZsZXItPnNldENhbGxl
ZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCkp
OworI2Vsc2UKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNW
YWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICNlbmRpZgorICAgICAgICBmcmFtZVNodWZmbGVy
LT5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHViSml0Lm1v
dmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICB9CiAgICAgc3R1YkppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLCBHUFJJbmZv
OjpyZWdUNCk7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259677</attachid>
            <date>2015-08-21 15:53:53 -0700</date>
            <delta_ts>2015-08-24 19:17:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147508-20150821155347.patch</filename>
            <type>text/plain</type>
            <size>133983</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4NzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NTVhZTg3OGYzMmM1MDMyYmIyZTllMjBkYTExZGRkOGI0NGUxNGVjLi5iYmIzYWI5ODE1ZThiMzFl
ZWQxMjIwZjA3MDY0NTUzOGE3OTBhMmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxMzEgQEAKIDIwMTUtMDgtMjEgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tPgogCisgICAgICAgIGpzYy10YWlsY2FsbDogV2Ugc2hvdWxkIHJldXNlIHRoZSBm
cmFtZSBlZmZpY2llbnRseSBpbiB0aGUgREZHIGluc3RlYWQgb2YgZG9pbmcgYSBtZW1tb3ZlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJv
ZHVjZXMgYSBuZXcgY2xhc3MgKENhbGxGcmFtZVNodWZmbGVyKSB0aGF0IGlzIHJlc3BvbnNpYmxl
IGZvcgorICAgICAgICBlZmZpY2llbnRseSBidWlsZGluZyB0aGUgbmV3IGZyYW1lcyB3aGVuIHBl
cmZvcm1pbmcgYSB0YWlsIGNhbGwuIEluCisgICAgICAgIG9yZGVyIGZvciBSZXBhdGNoIHRvIGtu
b3cgYWJvdXQgdGhlIHBvc2l0aW9uIG9mIGFyZ3VtZW50cyBvbiB0aGUKKyAgICAgICAgc3RhY2sv
cmVnaXN0ZXJzIChlLmcuIGZvciBwb2x5bW9ycGhpYyBjYWxsIGlubGluZSBjYWNoZXMpLCB3ZSBz
dG9yZSBhCisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGluIHRoZSBDYWxsTGlua0luZm8u
IE90aGVyd2lzZSwgdGhlIEpJVCBhbmQgREZHCisgICAgICAgIGNvbXBpbGVyIGFyZSBub3cgdXNp
bmcgQ2FsbEZyYW1lU2h1ZmZsZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ2FsbEhlbHBlcnM6OnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKSB0byBidWlsZCB0aGUgZnJhbWUgZm9yIGEgdGFpbAorICAg
ICAgICBjYWxsLgorCisgICAgICAgIFdoZW4gdGFraW5nIGEgc2xvdyBwYXRoLCB3ZSBzdGlsbCBi
dWlsZCB0aGUgZnJhbWUgYXMgaWYgZG9pbmcgYSByZWd1bGFyCisgICAgICAgIGNhbGwsIGJlY2F1
c2Ugd2UgY291bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBuZWVkIHRoZSBjYWxsZXIncyBmcmFt
ZQorICAgICAgICBhdCB0aGF0IHBvaW50LiBUaGlzIG1lYW5zIHRoYXQgZm9yIHZpcnR1YWwgY2Fs
bHMsIHdlIGRvbid0IGJlbmVmaXQgZnJvbQorICAgICAgICB0aGUgZWZmaWNpZW50IGZyYW1lIG1v
dmUuIFdlIHdpbGwgdGFrZSBjYXJlIG9mIHRoaXMgaW4gYSBzdWJzZXF1ZW50IHBhdGNoLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fib3J0
UmVhc29uLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YSk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6ZnJhbWVTaHVmZmxlRGF0YSk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRp
b25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnJlY292ZXJ5KToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6IEFkZGVkLgorICAgICAg
ICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRD
YWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWNo
ZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzcGlsbCk6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGVsdGFDaGVjayk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYWxsKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjpwcmVwYXJlQW55KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpDYWNoZWRSZWNvdmVyeSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp0YXJnZXRzKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkUmVjb3Zlcnk6OmFkZFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpy
ZW1vdmVUYXJnZXQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6Y2xlYXJUYXJnZXRz
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEpTVmFsdWVSZWdzKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmJveGluZ1JlcXVpcmVzR1BSKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmJveGluZ1JlcXVpcmVzRlBSKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmVjb3Zlcnk6OnJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zl
cnk6OnNldFJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OndhbnRlZEpT
VmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmxvY2tHUFIpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWNxdWlyZUdQUik6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjpyZWxlYXNlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZXI6OnNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnNldENhbGxlZUpTVmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmFzc3VtZUNhbGxlZUlzQ2VsbCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpj
YW5Cb3gpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlQm94KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVuc3VyZUxvYWQpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6Y2FuTG9hZEFuZEJveCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjp1cGRhdGVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjpjbGVhckNhY2hlZFJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmFkZENhY2hlZFJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6Om51bUxvY2Fscyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRPbGQp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0T2xkKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmZpcnN0T2xkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6Omxhc3RPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNW
YWxpZE9sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphcmdDb3VudCk6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXROZXcpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWVTaHVmZmxlcjo6c2V0TmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OmFkZE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpmaXJzdE5ldyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpsYXN0TmV3KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzVmFsaWROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6bmV3QXNPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
Z2V0RnJlZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldEZy
ZWVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZUZQUik6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpoYXNGcmVlUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OmVuc3VyZUZQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjph
ZGRyZXNzRm9yT2xkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzVW5kZWNp
ZGVkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzU2xvd1BhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkcmVzc0Zvck5ldyk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjpkYW5nZXJGcm9udGllcik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjppc0Rhbmdlck5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjp1cGRhdGVEYW5nZXJGcm9udGllcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjpoYXNPbmx5U2FmZVdyaXRlcyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZm
bGVyMzJfNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVt
aXRTdG9yZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0Qm94KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVy
eTo6bG9hZHNJbnRvRlBSKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50
b0dQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UpOgor
ICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6ZW1pdEJveCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpl
bWl0TG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpjYW5Mb2FkKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUik6CisgICAgICAgIChKU0M6
OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9HUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6ZW1pdERpc3BsYWNlKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChK
U0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgorCisyMDE1LTA4LTIxICBCYXNpbGUgQ2xlbWVudCAg
PGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbT4KKwogICAgICAgICBqc2MtdGFpbGNhbGw6IFdlIHNo
b3VsZCBub3QgYXNzdW1lIHRoYXQgb25seSB0aGUgYmFzZWxpbmUgSklUIGNhbiBoYXZlIEJ5SWQg
YWNjZXNzZXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODMzMAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjVjMTc4YmI4
NTA5YWVhMDkzNmUzY2JhYjM3MDIyMDMzOGI1YmY5NS4uZTJjNjhhYzhhYTZkYzI4YTAzZmIyYjYw
NTdkYWUzNTA3ZDRjYjkwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MzQzLDYgKzM0MywxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9BY2Nl
c3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAKICAgICBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAog
ICAgIGppdC9CaW5hcnlTd2l0Y2guY3BwCisgICAgaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNw
cAorICAgIGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXIzMl82NC5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKICAgICBqaXQvRXhl
Y3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRleCBhODZiNWQ1ZDUxMGI5NjM4OTZjOWU0Njk3
MjUyZmU5MDlkMjdlNTViLi4yMDc0ZTQ3MWZkMTRkMDQ4ZjU3OTgyMTcxMDJjODQ0NGZhYTZiMzBi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTYwNiw2ICs2MDYs
MTAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRTdHVi
Um91dGluZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXNzZW1ibHlI
ZWxwZXJzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxCaW5hcnlTd2l0
Y2guY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZm
bGVEYXRhLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVT
aHVmZmxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1l
U2h1ZmZsZXIzMl82NC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2Fs
bEZyYW1lU2h1ZmZsZXI2NC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIiAvPgpAQCAtMTM3
MCw2ICsxMzc0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBY2Nlc3NvckNh
bGxKSVRTdHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFz
c2VtYmx5SGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEJpbmFy
eVN3aXRjaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNo
dWZmbGVEYXRhLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1l
U2h1ZmZsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDQ2FsbEhlbHBl
cnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDb21wYWN0SklUQ29kZU1h
cC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0
aW9uRnV6ei5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCmluZGV4IDlmYmNiNWJkNmNjMTMzYjQ3ZmMwMzJkYTc3MDE0MzZmNmVmODA4NWUu
Ljk4ZTI3NTAzYWI5NWFjYzUyMmU1NmU3MmZiYTAyMDA4NDkyODA2NTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTM3OCw2ICszNzgs
MTggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxIb3N0Q2FsbFJldHVyblZhbHVl
LmNwcCI+CiAgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCI+Cisg
ICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVyLmNwcCI+CisgICAgICA8RmlsdGVy
PmppdDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aml0PC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
Q2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAiPgorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KKyAg
ICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVQuY3BwIj4K
ICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDE2OTMxMWE2MTFkZDY3MzViZTlmMDY0NGRhNDk1OGMxMTA2
NmI5NGYuLjUzNWU0NmY2YTJlOWMwNzZkYzM0ZjYxMzk0MWRhNTc2YTgzZTc3Y2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NjUsNiArOTY1LDEyIEBACiAJCTYyNzY3MzI0MUI2
ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNjI3NjczMjIxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJEMkQz
OEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMx
IC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovOyB9OwogCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2
QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjJEMkQzOEUxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2
MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQ3NTVEMzFCODRGQjM5
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgKi87IH07CisJCTYyRDc1NUQ1MUI4
NEZCNDAwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQyMUI4NEZCMzkwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCAqLzsgfTsKKwkJNjJENzU1RDYxQjg0RkI0
NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQwMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxs
RnJhbWVTaHVmZmxlci5jcHAgKi87IH07CisJCTYyRDc1NUQ3MUI4NEZCNEEwMDE4MDFGQSAvKiBD
YWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjJENzU1RDExQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmgg
Ki87IH07CisJCTYyRUM5QkI2MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkVD
OUJCNDFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwICovOyB9Owor
CQk2MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRUM5QkI1MUI3RUIw
N0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyRjJBQTM3MUIwQkVERTMwMDYxMEM3QSAv
KiBERkdMYXp5Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2MkE5QTI5RTFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuY3BwICovOyB9
OwogCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyQTlBMjlGMUIwQkVENDgwMEJE
NTRDQSAvKiBERkdMYXp5Tm9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTA3RDI5NzBF
ODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjg0LDYgKzI2OTAsMTIgQEAKIAkJNjJBOUEyOUYx
QjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0xhenlOb2RlLmg7IHBhdGggPSBkZmcvREZHTGF6eU5vZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0
aW9uUmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVu
Y3Rpb25SYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyRDJEMzhF
MUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNjJENzU1RDAxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJENzU1RDExQjg0RkIzOTAwMTgw
MUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGxGcmFtZVNodWZmbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYy
RDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyMzJfNjQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2MkQ3NTVEMzFCODRGQjM5MDAxODAx
RkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxGcmFtZVNodWZm
bGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJFQzlCQjUxQjdFQjA3
QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAvKiBKU1R5cGVJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZUluZm8uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNjUxMTIyRTUxNDA0NjlCQTAwMkIxMDFEIC8qIHRlc3RSZWdFeHAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdGVzdFJlZ0V4cC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAvKiB0
ZXN0UmVnRXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGgg
PSB0ZXN0UmVnRXhwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtMzkw
MywxNiArMzkxNSwyMiBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRkYwNTRGNzFBQzM1
QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKLQkJCQkwRkYw
NTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8sCiAJ
CQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5l
LmNwcCAqLywKIAkJCQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjI0RTUzQjE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1i
bHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRjI0RTUzQzE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1i
bHlIZWxwZXJzLmggKi8sCiAJCQkJMEY2NEIyNkYxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3
aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5oICovLAorCQkJCTYyRUM5QkI0MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxl
RGF0YS5jcHAgKi8sCisJCQkJNjJFQzlCQjUxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNo
dWZmbGVEYXRhLmggKi8sCisJCQkJNjJENzU1RDAxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFt
ZVNodWZmbGVyLmNwcCAqLywKKwkJCQk2MkQ3NTVEMTFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZy
YW1lU2h1ZmZsZXIuaCAqLywKKwkJCQk2MkQ3NTVEMjFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZy
YW1lU2h1ZmZsZXIzMl82NC5jcHAgKi8sCisJCQkJNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyNjQuY3BwICovLAogCQkJCTBGMjRFNTNEMTdFQTlGNTkwMEFCQjIx
NyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCAqLywKKwkJCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyog
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKKwkJCQkwRkYwNTRGODFBQzM1QjQ0MDBF
NUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3
NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1
MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggKi8sCiAJCQkJODZEQjY0
NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAg
Ki8sCkBAIC01NjU3LDYgKzU2NzUsNyBAQAogCQkJCUM0RjRCNkY0MUEwNUM5NDQwMDVDQUI3NiAv
KiBjcHBfZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTQxODU2OTcwOTAw
MkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJz
ICovLAorCQkJCTYyRDc1NUQ3MUI4NEZCNEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMDQxOUY2REU3MjAwOThGNUVDIC8qIGdlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzEwNTE5RjZERTc0MDA5OEY1RUMgLyogZ2VuZXJhdGVf
b2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weSBpbiBIZWFkZXJzICovLApAQCAtNTgxMiw2ICs1
ODMxLDcgQEAKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmlj
YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDAxN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQyMTdBMEJCRkQw
MEE4REI4MSAvKiBERkdDbG9iYmVyU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQk2MkVDOUJCNzFC
N0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdDb21tb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25L
ZXkuaCBpbiBIZWFkZXJzICovLApAQCAtNzEwOCw2ICs3MTI4LDcgQEAKIAkJCQkwRkYwRjE5RDE2
QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEw
QTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbktleS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk2MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIwMTkxN0NGRTc1NTAwQjE0NEQz
IC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0ExQTE1
M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJDNUU4IC8qIERGR0NQU1JldGhyZWFkaW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MTU3LDYgKzcxNzgsNyBAQAogCQkJCTBGRjBGMTlD
MTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4
MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZEMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdP
U1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgy
RTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4QTMyNTE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Mjc5LDYgKzczMDEsNyBAQAogCQkJCTE0N0YzOUNC
MTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1w
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyQjMxMEZEMTk3NEFFODcwMDgwODU3QyAvKiBGdW5j
dGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJENzU1RDUxQjg0
RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNjRCMjcxMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0
Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdD
QXdhcmVKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0MDAsNiArNzQyMyw3
IEBACiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVj
dFJlZi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyog
Q2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Y5OTM2MDBGRDcz
MjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZCNkMz
ODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5
NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxlclByaXZhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0
UmVhc29uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmgK
aW5kZXggZTk0NDQ5YWQ0YzQ5NTUzYWU2NzBiYTZmNzU3NmY5MWFkYzkxNDVlZC4uZWFlNTQwZjgz
NjEyOTY1MTBkMzM0OTBkZTY4MGY0MDRhYzI5N2RkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJlYXNvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJvcnRSZWFzb24uaApAQCAtNjMsNiArNjMsNyBAQCBlbnVtIEFib3J0
UmVhc29uIHsKICAgICBKSVRHZXRCeVZhbFJlc3VsdElzTm90RW1wdHkgICAgICAgICAgICAgICAg
ICAgICAgID0gMjUwLAogICAgIEpJVE5vdFN1cHBvcnRlZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAyNjAsCiAgICAgSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDI3MCwKKyAgICBKSVRVbmV4cGVjdGVkQ2FsbEZyYW1lU2l6ZSAg
ICAgICAgICAgICAgICAgICAgICAgID0gMjc1LAogICAgIEpJVFVucmVhc29uYWJsZUxvb3BIaW50
SnVtcFRhcmdldCAgICAgICAgICAgICAgICAgPSAyODAsCiAgICAgUlBXVW5yZWFzb25hYmxlSnVt
cFRhcmdldCAgICAgICAgICAgICAgICAgICAgICAgICA9IDI5MCwKICAgICBSZXBhdGNoSW5lZmZl
Y3RpdmVXYXRjaHBvaW50ICAgICAgICAgICAgICAgICAgICAgID0gMzAwLApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oCmluZGV4IDYyMTI0MjVlMTY5ZThh
ODEwMjlkMzBiOWI1OWFmOGVmNGYzZDQyZDYuLmUzZTczOTVmYjFmYTNkNDBiODY0ZWYzYWExNTg4
ZmU2ZWI2MGEyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExp
bmtJbmZvLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ2FsbExpbmtJbmZvX2gKICNkZWZp
bmUgQ2FsbExpbmtJbmZvX2gKIAorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCiAj
aW5jbHVkZSAiQ2FsbE1vZGUuaCIKICNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKICNpbmNsdWRl
ICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCkBAIC0zMjksNiArMzMwLDE2IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXImKTsKIAorICAgIHZvaWQgc2V0RnJh
bWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSYgc2h1ZmZsZURhdGEpCisg
ICAgeworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxG
cmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7CisgICAgfQorCisgICAgY29uc3QgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1ZmZsZURhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgQ29kZUxv
Y2F0aW9uTmVhckNhbGwgbV9jYWxsUmV0dXJuTG9jYXRpb247CiAgICAgQ29kZUxvY2F0aW9uRGF0
YUxhYmVsUHRyIG1faG90UGF0aEJlZ2luOwpAQCAtMzM3LDYgKzM0OCw3IEBAIHByaXZhdGU6CiAg
ICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fbGFzdFNlZW5DYWxsZWU7CiAgICAgUmVmUHRy
PFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7CiAgICAgUmVmUHRyPEpJVFN0dWJS
b3V0aW5lPiBtX3Nsb3dTdHViOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxl
RGF0YT4gbV9mcmFtZVNodWZmbGVEYXRhOwogICAgIHVuc2lnbmVkIG1fcmVnaXN0ZXJQcmVzZXJ2
YXRpb25Nb2RlIDogMTsgLy8gUmVhbCB0eXBlIGlzIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZQog
ICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7CiAgICAgYm9vbCBtX2hhc1NlZW5D
bG9zdXJlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2Vu
ZXJhdGlvbkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbklu
Zm8uaAppbmRleCBiMzBmMzUwOGQ3MmRlYTdhZTQ5ZTdiOWE4MmEyNTRiMjMyZDgyMGFkLi44MDBm
OTdiODAzYTczNDU4YzI0NjkwODRiOGNiNDk1ZWQzNDAwMDllIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCkBAIC0zNzgsNiArMzc4LDI5IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQogCisgICAgVmFsdWVSZWNv
dmVyeSByZWNvdmVyeShWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxTbG90KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1faXNDb25zdGFudCkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
Ojpjb25zdGFudChtX25vZGUtPmNvbnN0YW50KCktPnZhbHVlKCkpOworCisgICAgICAgIGlmICht
X3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZWNvdmVyeTo6aW5GUFIodS5mcHIsIERhdGFGb3JtYXREb3VibGUpOworCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0
SlMpIHsKKyAgICAgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRKUykK
KyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKHUudi50YWdHUFIs
IHUudi5wYXlsb2FkR1BSKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQ
Uih1LnYucGF5bG9hZEdQUiwgc3RhdGljX2Nhc3Q8RGF0YUZvcm1hdD4obV9yZWdpc3RlckZvcm1h
dCAmIH5EYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChtX3Jl
Z2lzdGVyRm9ybWF0KQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHUu
Z3ByLCBtX3JlZ2lzdGVyRm9ybWF0KTsKKworICAgICAgICBBU1NFUlQobV9zcGlsbEZvcm1hdCk7
CisKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzcGls
bFNsb3QsIG1fc3BpbGxGb3JtYXQpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGFwcGVu
ZEJpcnRoKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSkKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCAz
YzEyZTMyYWY0ODc0MGY3OTE1MDY2ZGVmZDA0MThmNDk5NzM1MjIxLi43Y2RjMWEzZTE4OGJiYmZm
M2UyMzMwODMyM2ZjZTUyZGI5MTYxZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVk
ZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgpAQCAtNzAzLDYgKzcwNCw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgRWRn
ZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKKyAgICBHUFJSZWcg
Y2FsbGVlVGFnR1BSOworICAgIEdQUlJlZyBjYWxsZWVQYXlsb2FkR1BSOworICAgIENhbGxGcmFt
ZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwogICAgIAogICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFy
Z3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgogICAgIGlmIChpc1ZhcmFyZ3Mg
fHwgaXNGb3J3YXJkVmFyYXJncykgewpAQCAtNzk0LDM1ICs3OTgsNDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgLy8gcmVjZWl2ZXIgKG1ldGhv
ZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KICAgICAgICAg
aW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKIAotICAgICAgICBt
X2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyks
IG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwor
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOworICAgICAgICAgICAgY2FsbGVlVGFn
R1BSID0gY2FsbGVlLnRhZ0dQUigpOworICAgICAgICAgICAgY2FsbGVlUGF5bG9hZEdQUiA9IGNh
bGxlZS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICB1c2UoY2FsbGVlRWRnZSk7CisKKyAgICAg
ICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IG1faml0LmdyYXBoKCkuZnJhbWVSZWdpc3Rl
ckNvdW50KCk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5
OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKKyAgICAgICAgICAgIHNo
dWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bVBhc3NlZEFyZ3MpOworCisgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgeworICAgICAgICAgICAgICAgIEVk
Z2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOworICAg
ICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm8oYXJnRWRn
ZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gaW5mby5yZWNvdmVyeShhcmdFZGdlLT52aXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyks
IG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwog
ICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKysp
IHsKLSAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdDaGls
ZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgICAgICBHUFJSZWcgYXJnVGFnR1BSID0g
YXJnLnRhZ0dQUigpOwotICAgICAgICAgICAgR1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcucGF5
bG9hZEdQUigpOwotICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBFZGdl
IGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGls
ZCgpICsgMSArIGldOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBh
cmdFZGdlKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigp
OworICAgICAgICAgICAgICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFRhZ1Nsb3Qo
aSkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxs
ZWVBcmd1bWVudFBheWxvYWRTbG90KGkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KGFyZ1RhZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRUYWdTbG90KGkpKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50UGF5
bG9hZFNsb3QoaSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNW
YWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwotICAgIEdQUlJlZyBjYWxsZWVU
YWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7Ci0gICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFIgPSBj
YWxsZWUucGF5bG9hZEdQUigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKLSAgICBtX2ppdC5zdG9y
ZTMyKGNhbGxlZVBheWxvYWRHUFIsIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFj
azo6Q2FsbGVlKSk7Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxsZWVUYWdHUFIsIG1faml0LmNhbGxl
ZUZyYW1lVGFnU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBpZiAobm9kZS0+b3AoKSAhPSBU
YWlsQ2FsbCkgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRn
ZSk7CisgICAgICAgIGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50YWdHUFIoKTsKKyAgICAgICAgY2Fs
bGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7CisgICAgICAgIHVzZShjYWxsZWVF
ZGdlKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQYXlsb2FkR1BSLCBtX2ppdC5jYWxs
ZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBtX2ppdC5zdG9y
ZTMyKGNhbGxlZVRhZ0dQUiwgbV9qaXQuY2FsbGVlRnJhbWVUYWdTbG90KEpTU3RhY2s6OkNhbGxl
ZSkpOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBhbiBlZmZpY2llbnQgbW92ZSBvZiB0
aGUgYXJndW1lbnRzIGludG8KLSAgICAvLyB0aGVpciB0YXJnZXQgc3RhY2sgcG9zaXRpb24gaW5z
dGVhZCBvZiBidWlsZGluZyB0aGVuIG1lbW1vdmluZwotICAgIC8vIHRoZSBjYWxsZWUgZnJhbWUu
Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUwOAot
ICAgIGlmIChpc1RhaWwpCi0gICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7Ci0gICAgZWxzZQog
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIH0KIAogICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQyIHJlc3Vs
dFRhZyh0aGlzKTsKQEAgLTg0MiwxNiArODU5LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9qaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWUuanNWYWx1ZVJlZ3MoKSkpOworICAgIGlmIChpc1Rh
aWwgJiYgbm9kZS0+b3AoKSAhPSBUYWlsQ2FsbCkKKyAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOworCisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2Vs
bChKU1ZhbHVlUmVncyhjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpKSk7CiAgICAgc2xv
d1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRhcmdldFRvQ2hlY2spKTsKIAogICAgIGlmIChpc1Rh
aWwpIHsKLSAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGRvIGFuIGVmZmljaWVudCBtb3ZlIG9mIHRoZSBhcmd1bWVudHMg
aW50bwotICAgICAgICAvLyB0aGVpciB0YXJnZXQgc3RhY2sgcG9zaXRpb24gaW5zdGVhZCBvZiBi
dWlsZGluZyB0aGVuIG1lbW1vdmluZwotICAgICAgICAvLyB0aGUgY2FsbGVlIGZyYW1lLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTA4Ci0g
ICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURh
dGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNo
dWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CiAgICAgfQogCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgZmFzdENhbGwgPSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwoKSA6IG1f
aml0Lm5lYXJDYWxsKCk7CkBAIC04NjAsMTcgKzg3OSwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0Q2FsbChOb2RlKiBub2RlKQogCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogCi0g
ICAgLy8gQ2FsbGVlIHBheWxvYWQgbmVlZHMgdG8gYmUgaW4gcmVnVDAsIHRhZyBpbiByZWdUMQot
ICAgIGlmIChjYWxsZWVUYWdHUFIgPT0gR1BSSW5mbzo6cmVnVDApIHsKLSAgICAgICAgaWYgKGNh
bGxlZVBheWxvYWRHUFIgPT0gR1BSSW5mbzo6cmVnVDEpCi0gICAgICAgICAgICBtX2ppdC5zd2Fw
KEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgbV9qaXQubW92ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBjYWxs
RnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpOworICAgICAgICBjYWxsRnJhbWVTaHVm
Zmxlci5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncygKKyAgICAgICAgICAgIEdQUklu
Zm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5w
cmVwYXJlRm9yU2xvd1BhdGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYWxsZWUgcGF5
bG9hZCBuZWVkcyB0byBiZSBpbiByZWdUMCwgdGFnIGluIHJlZ1QxCisgICAgICAgIGlmIChjYWxs
ZWVUYWdHUFIgPT0gR1BSSW5mbzo6cmVnVDApIHsKKyAgICAgICAgICAgIGlmIChjYWxsZWVQYXls
b2FkR1BSID09IEdQUkluZm86OnJlZ1QxKQorICAgICAgICAgICAgICAgIG1faml0LnN3YXAoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlVGFnR1BSLCBHUFJJbmZvOjpyZWdUMSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVQYXlsb2FkR1BSLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KGNhbGxlZVBheWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoY2FsbGVlVGFnR1BSLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVBheWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsK
LSAgICAgICAgbV9qaXQubW92ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKICAgICB9
CiAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVh
ckNhbGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCmluZGV4IDQxM2U2Yzk0N2JiN2Q0MzM0MTRlZTc1YTMwMzkwNWJhMjIzMGM2ODIu
LjQ1ODE3MzQwZGZhZjExMGVmZjYyYzkwY2RlMTg1Yjg0ZmY5MjczMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xv
d1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC02ODgsNyAr
Njg5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5j
aGlsZChub2RlLCAwKTsKKyAgICBHUFJSZWcgY2FsbGVlR1BSOworICAgIENhbGxGcmFtZVNodWZm
bGVEYXRhIHNodWZmbGVEYXRhOwogICAgIAogICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50
cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgogICAgIGlmIChpc1ZhcmFyZ3MgfHwgaXNG
b3J3YXJkVmFyYXJncykgewpAQCAtNzc1LDM0ICs3NzcsNDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgLy8gYXJndW1lbnRzLgogICAgICAgICBp
bnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogCi0gICAgICAgIG1f
aml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwg
SklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpOwotICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkr
KykgewotICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0No
aWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBh
cmcuZ3ByKCk7Ci0gICAgICAgICAgICB1c2UoYXJnRWRnZSk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFNsb3Qo
aSkpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAgICAgICAgICAg
RWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKKyAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAgICAg
IGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgICAgIGNhbGxlZS51c2UoKTsKKwor
ICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gbV9qaXQuZ3JhcGgoKS5mcmFtZVJl
Z2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVj
b3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3MucmVzaXplKG51bVBhc3NlZEFyZ3MpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgeworICAgICAgICAg
ICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSAr
IDEpOworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbklu
Zm8oYXJnRWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAg
ICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gaW5mby5yZWNvdmVyeShhcmdFZGdlLT52
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNodWZmbGVE
YXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2ppdC5jb2RlQmxvY2soKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobnVtUGFzc2VkQXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRT
bG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBFZGdlIGFyZ0Vk
Z2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsg
MSArIGldOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdl
KTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAg
ICAgICAgIHVzZShhcmdFZGdlKTsKKworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJn
R1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxs
ZWVFZGdlKTsKLSAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgIGNhbGxl
ZS51c2UoKTsKLSAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxl
ZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBpZiAobm9kZS0+b3AoKSAhPSBUYWls
Q2FsbCkgeworICAgICAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5v
ZGUsIDApOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7
CisgICAgICAgIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgY2FsbGVlLnVzZSgp
OworICAgICAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUZy
YW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8g
YW4gZWZmaWNpZW50IG1vdmUgb2YgdGhlIGFyZ3VtZW50cyBpbnRvCi0gICAgLy8gdGhlaXIgdGFy
Z2V0IHN0YWNrIHBvc2l0aW9uIGluc3RlYWQgb2YgYnVpbGRpbmcgdGhlbiBtZW1tb3ZpbmcKLSAg
ICAvLyB0aGUgY2FsbGVlIGZyYW1lLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDc1MDgKLSAgICBpZiAoaXNUYWlsKQotICAgICAgICBBU1NFUlQoaXNG
bHVzaGVkKCkpOwotICAgIGVsc2UKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgIEdQ
UkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgIH0KIAogICAgIENvZGVPcmlnaW4gc3RhdGljT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOwogICAgIEFTU0VSVCghaXNUYWlsIHx8ICFzdGF0aWNPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lIHx8ICFzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxs
ZXJTa2lwcGluZ0RlYWRGcmFtZXMoKSk7CkBAIC04MTQsMTYgKzgyOSwxOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIAogICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogCisg
ICAgaWYgKGlzVGFpbCAmJiBub2RlLT5vcCgpICE9IFRhaWxDYWxsKQorICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRh
cmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIGlm
IChpc1RhaWwpIHsKLSAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGFuIGVmZmljaWVudCBtb3ZlIG9mIHRoZSBhcmd1
bWVudHMgaW50bwotICAgICAgICAvLyB0aGVpciB0YXJnZXQgc3RhY2sgcG9zaXRpb24gaW5zdGVh
ZCBvZiBidWlsZGluZyB0aGVuIG1lbW1vdmluZwotICAgICAgICAvLyB0aGUgY2FsbGVlIGZyYW1l
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3
NTA4Ci0gICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICB9
CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJU
YWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwoKTsKQEAgLTgzMSwxMSArODQ4LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7
Ci0gICAgCi0gICAgaWYgKGlzVGFpbCkKLSAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogCi0gICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8g
Q2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCisgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENh
bGwpIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKTsKKyAgICAgICAgY2FsbEZyYW1lU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgY2FsbEZyYW1lU2h1
ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1faml0Lm1v
dmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiBy
ZWdUMAorCiAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxs
TGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiBy
ZWdUMgogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsK
IApAQCAtODQ0LDYgKzg2NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiAgICAgaWYgKGlzVGFpbCkKICAgICAgICAgbV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgZWxzZSB7CisgICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9k
ZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43Y2MwNzk1NjVkNDYxZmM2MTRmZDY3OTIwMmJmMGY3NDZiZmU4N2YzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2
ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0OjphbGxWTUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9Owor
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgeyAwIH07IGkg
PCByZWdpc3RlclNhdmVMb2NhdGlvbnMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIFJlZ2lzdGVy
QXRPZmZzZXQgZW50cnkgeyByZWdpc3RlclNhdmVMb2NhdGlvbnMtPmF0KGkpIH07CisgICAgICAg
IGlmICghY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQoZW50cnkucmVnKCkpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgQVNTRVJUKGVudHJ5LnJlZygpLmlzR1BSKCkpOworCisgICAg
ICAgIFZpcnR1YWxSZWdpc3RlciBzYXZlU2xvdCB7IGVudHJ5Lm9mZnNldEFzSW5kZXgoKSB9Owor
ICAgICAgICByZWdpc3RlcnNbZW50cnkucmVnKCldCisgICAgICAgICAgICA9IFZhbHVlUmVjb3Zl
cnk6OmRpc3BsYWNlZEluSlNTdGFjayhzYXZlU2xvdCwgRGF0YUZvcm1hdEpTKTsKKyAgICB9CisK
KyAgICBmb3IgKFJlZyByZWcgeyBSZWc6OmZpcnN0KCkgfTsgcmVnIDw9IFJlZzo6bGFzdCgpOyBy
ZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgIGlmICghY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQo
cmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChyZWdpc3RlcnNbcmVn
XSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEFTU0VSVChyZWcuaXNHUFIoKSk7
CisKKyAgICAgICAgcmVnaXN0ZXJzW3JlZ10KKyAgICAgICAgICAgID0gVmFsdWVSZWNvdmVyeTo6
aW5HUFIocmVnLmdwcigpLCBEYXRhRm9ybWF0SlMpOworICAgIH0KK30KKworI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40NDgwMmU4NmQxNGFlOTlhZDMwOWI0YWNmZjMyMGUxMzY0MjM1MDQ3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlRGF0YS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYWxsRnJhbWVTaHVmZmxlRGF0YV9oCisjZGVmaW5l
IENhbGxGcmFtZVNodWZmbGVEYXRhX2gKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJS
ZWdpc3Rlck1hcC5oIgorI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK3N0cnVjdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSB7CisgICAgdW5zaWduZWQgbnVtTG9j
YWxzOworICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlOworICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5
PiBhcmdzOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVy
eT4gcmVnaXN0ZXJzOworCisgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJs
b2NrKik7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKKworI2VuZGlmIC8vIENhbGxGcmFtZVNodWZmbGVEYXRhX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTA5
YzZkN2E1NDhlYTg0ODE1ZWMyZjIxYjMyYWFjOTBlZGJiMjE2OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCkBAIC0wLDAg
KzEsNzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgorCisj
aWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNv
ZGVCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxG
cmFtZVNodWZmbGVyKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0
YSYgZGF0YSkKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fb2xkRnJhbWUoZGF0YS5udW1Mb2Nh
bHMgKyBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSwgbnVsbHB0cikKKyAgICAsIG1fbmV3
RnJhbWUoZGF0YS5hcmdzLnNpemUoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUsIG51
bGxwdHIpCisgICAgLCBtX2FsaWduZWRPbGRGcmFtZVNpemUoSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZQorICAgICAgICArIHJvdW5kQXJndW1lbnRDb3VudFRvQWxpZ25GcmFtZShqaXQuY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpCisgICAgLCBtX2FsaWduZWROZXdGcmFtZVNpemUo
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZQorICAgICAgICArIHJvdW5kQXJndW1lbnRDb3Vu
dFRvQWxpZ25GcmFtZShkYXRhLmFyZ3Muc2l6ZSgpKSkKKyAgICAsIG1fbG9ja2VkUmVnaXN0ZXJz
KFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKK3sKKyAgICAvLyBXZSBhcmUgYWxsb3dlZCBh
bGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgorICAgIGZvciAodW5zaWduZWQgaSB7IEdQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzIH07IGktLTsgKQorICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5j
bGVhcihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgeyBGUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVycyB9OyBpLS07ICkKKyAgICAgICAgbV9sb2NrZWRSZWdpc3Rl
cnMuY2xlYXIoRlBSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgLy8gLi4uIGFzIHdlbGwgYXMg
dGhlIHJ1bnRpbWUgcmVnaXN0ZXJzLgorICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVn
aXN0ZXJTZXQ6OnJ1bnRpbWVSZWdpc3RlcnMoKSk7CisKKyAgICBBU1NFUlQoIWRhdGEuY2FsbGVl
LmlzSW5KU1N0YWNrKCkgfHwgZGF0YS5jYWxsZWUudmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgp
KTsKKyAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIGRhdGEuY2Fs
bGVlKTsKKworICAgIGZvciAoc2l6ZV90IGkgeyAwIH07IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgQVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRh
LmFyZ3NbaV0udmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKKyAgICAgICAgYWRkTmV3KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBkYXRhLmFyZ3NbaV0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgZm9yIChSZWcgcmVnIHsgUmVnOjpmaXJzdCgpIH07IHJlZyA8
PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBpZiAoIWRhdGEucmVn
aXN0ZXJzW3JlZ10uaXNTZXQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHJlZy5pc0dQUigpKTsKKworICAgICAgICBhZGROZXcoSlNWYWx1ZVJlZ3Mo
cmVnLmdwcigpKSwKKyAgICAgICAgICAgIGRhdGEucmVnaXN0ZXJzW3JlZ10pOworICAgIH0KKyNl
bmRpZgorfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRlbGltaXRlciAgICAgICAgICAgICA9
ICIgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICI7CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGRhbmdlckRlbGltaXRlciAgICAgICA9ICIgWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS1YICI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGRhbmdlckJvdW5kc0RlbGltaXRl
ciA9ICIgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYICI7CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGVtcHR5U3BhY2UgICAgICAgICAgICA9ICIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICI7CisgICAgQVNTRVJUKG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSA8PSBudW1M
b2NhbHMoKSk7CisgICAgb3V0LnByaW50KCIgICAgICAgICAgIik7CisgICAgb3V0LnByaW50KCIg
ICAgICAgICAgIE9sZCBmcmFtZSAgICAgICAgICAgICAgICIpOworICAgIG91dC5wcmludCgiICAg
ICAgICAgICBOZXcgZnJhbWUgICAgICAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIlxuIik7
CisgICAgZm9yIChpbnQgaSB7IDAgfTsgaSA8IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSArIG51bUxv
Y2FscygpICsgMzsgKytpKSB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvbGQgeyBtX2FsaWdu
ZWRPbGRGcmFtZVNpemUgLSBpIC0gMSB9OworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVn
IHsgb2xkICsgbV9mcmFtZURlbHRhIH07CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2xkKG9sZCkg
JiYgb2xkICE9IGZpcnN0T2xkKCkgLSAxCisgICAgICAgICAgICAmJiAhaXNWYWxpZE5ldyhuZXdS
ZWcpICYmIG5ld1JlZyAhPSBmaXJzdE5ldygpIC0gMSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIG91dC5wcmludCgiICAgICAgICAiKTsKKyAgICAgICAgaWYgKGRhbmdlckZyb250
aWVyKCkgPj0gZmlyc3ROZXcoKQorICAgICAgICAgICAgJiYgKG5ld1JlZyA9PSBkYW5nZXJGcm9u
dGllcigpIHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0gMSkpCisgICAgICAgICAgICBvdXQucHJp
bnQoZGFuZ2VyQm91bmRzRGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNWYWxpZE9sZChv
bGQpKQorICAgICAgICAgICAgb3V0LnByaW50KGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rhbmdl
ck5ldyhuZXdSZWcpID8gZGFuZ2VyRGVsaW1pdGVyIDogZGVsaW1pdGVyKTsKKyAgICAgICAgZWxz
ZSBpZiAob2xkID09IGZpcnN0T2xkKCkgLSAxKQorICAgICAgICAgICAgb3V0LnByaW50KGRlbGlt
aXRlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsK
KyAgICAgICAgaWYgKGRhbmdlckZyb250aWVyKCkgPj0gZmlyc3ROZXcoKQorICAgICAgICAgICAg
JiYgKG5ld1JlZyA9PSBkYW5nZXJGcm9udGllcigpIHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0g
MSkpCisgICAgICAgICAgICBvdXQucHJpbnQoZGFuZ2VyQm91bmRzRGVsaW1pdGVyKTsKKyAgICAg
ICAgZWxzZSBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpIHx8IG5ld1JlZyA9PSBmaXJzdE5ldygpIC0g
MSkKKyAgICAgICAgICAgIG91dC5wcmludChpc0Rhbmdlck5ldyhuZXdSZWcpID8gZGFuZ2VyRGVs
aW1pdGVyIDogZGVsaW1pdGVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50
KGVtcHR5U3BhY2UpOworICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgIGlmIChvbGQg
PT0gZmlyc3RPbGQoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIHNwIC0tPiAiKTsKKyAgICAg
ICAgZWxzZSBpZiAoIW9sZC5vZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiIGZwIC0t
PiAiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgICAgICIpOwor
ICAgICAgICBpZiAoaXNWYWxpZE9sZChvbGQpKSB7CisgICAgICAgICAgICBpZiAoZ2V0T2xkKG9s
ZCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHN0ciA9IHRvQ1N0cmluZyhvbGQpOworICAgICAg
ICAgICAgICAgIGlmIChpc1ZhbGlkTmV3KG5ld1JlZykgJiYgaXNEYW5nZXJOZXcobmV3UmVnKSkK
KyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIFggICAgICAlMThzICAgICAgIFggIiwg
c3RyLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnRmKCIgfCAgICAgICUxOHMgICAgICAgfCAiLCBzdHIuZGF0YSgpKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaXNWYWxpZE5ldyhuZXdSZWcpICYmIGlzRGFuZ2VyTmV3KG5ld1JlZykp
CisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIFglMzBzIFggIiwgIiIpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiB8JTMwcyB8ICIsICIiKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7CisgICAgICAg
IGlmIChpc1ZhbGlkTmV3KG5ld1JlZykpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgZCA9IGlz
RGFuZ2VyTmV3KG5ld1JlZykgPyAnWCcgOiAnfCc7CisgICAgICAgICAgICBhdXRvIHN0ciA9IHRv
Q1N0cmluZyhuZXdSZWcpOworICAgICAgICAgICAgaWYgKGdldE5ldyhuZXdSZWcpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGdldE5ldyhuZXdSZWcpLT5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiICVjJThzIDwtICAgICAgICAgICBjb25z
dGFudCAlYyAiLCBkLCBzdHIuZGF0YSgpLCBkKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byByZWNvdmVyeVN0ciA9IHRvQ1N0cmluZyhnZXROZXcobmV3
UmVnKS0+cmVjb3ZlcnkoKSk7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4
cyA8LSAlMThzICVjICIsIGQsIHN0ci5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZWNvdmVyeVN0ci5kYXRhKCksIGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobmV3UmVnID09IFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQgfSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMlOHMgPC0gJTE4enUgJWMgIiwg
ZCwgc3RyLmRhdGEoKSwgYXJnQ291bnQoKSwgZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgb3V0LnByaW50ZigiICVjJTMwcyAlYyAiLCBkLCAiIiwgZCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworICAgICAgICBpZiAobmV3
UmVnID09IGZpcnN0TmV3KCkgLSBtX25ld0ZyYW1lT2Zmc2V0ICYmICFpc1Nsb3dQYXRoKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiA8LS0gbmV3IHNwIGJlZm9yZSBqdW1wIChjdXJyZW50ICIs
IG1fbmV3RnJhbWVCYXNlLCAiKSAiKTsKKyAgICAgICAgaWYgKG5ld1JlZyA9PSBmaXJzdE5ldygp
KQorICAgICAgICAgICAgb3V0LnByaW50KCIgPC0tIG5ldyBmcCBhZnRlciBwcm9sb2d1ZSIpOwor
ICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgfQorICAgIG91dC5wcmludCgiICAgICAgICAg
ICIpOworICAgIG91dC5wcmludCgiICAgICAgICBMaXZlIHJlZ2lzdGVycyAgICAgICAgICAgICAi
KTsKKyAgICBvdXQucHJpbnQoIiAgICAgICAgV2FudGVkIHJlZ2lzdGVycyAgICAgICAgICAgIik7
CisgICAgb3V0LnByaW50KCJcbiIpOworICAgIGZvciAoUmVnIHJlZyB7IFJlZzo6Zmlyc3QoKSB9
OyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFy
ZWcuaXNHUFIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZFJlY292
ZXJ5KiBvbGRDYWNoZWRSZWNvdmVyeSB7IG1fcmVnaXN0ZXJzW3JlZy5ncHIoKV0gfTsKKyAgICAg
ICAgQ2FjaGVkUmVjb3ZlcnkqIG5ld0NhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVn
LmdwcigpXSB9OworICAgICAgICBpZiAoIW9sZENhY2hlZFJlY292ZXJ5ICYmICFuZXdDYWNoZWRS
ZWNvdmVyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoIiAgICAg
ICAgICAiKTsKKyAgICAgICAgaWYgKG9sZENhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICBh
dXRvIHN0ciA9IHRvQ1N0cmluZyhyZWcuZ3ByKCkpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
ICAgICAgICAgJThzICAgICAgICAgICAgICAgICAgIiwgc3RyLmRhdGEoKSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgICAgIGlmIChuZXdDYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3MgeyBuZXdDYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNW
YWx1ZVJlZ3MoKSB9OworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSA9PSB3YW50ZWRKU1ZhbHVl
UmVncy50YWdHUFIoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQocmVnLmdwcigpLCAiIDwt
IHRhZygiLCBuZXdDYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIikiKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQocmVnLmdwcigpLCAiIDwtIHBheWxvYWQo
IiwgbmV3Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIpIik7CisgICAgICAgIH0KKyNlbHNl
CisgICAgICAgIGlmIChuZXdDYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICAgICAgIiwgcmVnLmdwcigpLCAiIDwtICIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVy
eSgpKTsKKyNlbmRpZgorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgfQorICAgIG91dC5w
cmludCgiICBMb2NrZWQgcmVnaXN0ZXJzOiAiKTsKKyAgICBib29sIGZpcnN0TG9ja2VkIHsgdHJ1
ZSB9OworICAgIGZvciAoUmVnIHJlZyB7IFJlZzo6Zmlyc3QoKSB9OyByZWcgPD0gUmVnOjpsYXN0
KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFyZWcuaXNHUFIoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVn
LmdwcigpKSkgeworICAgICAgICAgICAgb3V0LnByaW50KGZpcnN0TG9ja2VkID8gIiIgOiAiLCAi
LCByZWcuZ3ByKCkpOworICAgICAgICAgICAgZmlyc3RMb2NrZWQgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBvdXQucHJpbnQoIlxuIik7CisKKyAgICBpZiAoaXNTbG93UGF0aCgpKQor
ICAgICAgICBvdXQucHJpbnQoIiAgVXNpbmcgZnAtcmVsYXRpdmUgYWRkcmVzc2luZyBmb3Igc2xv
dyBwYXRoIGNhbGxcbiIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCIgIFVzaW5nIHNw
LXJlbGF0aXZlIGFkZHJlc3NpbmcgZm9yIGp1bXAgKHVzaW5nICIsIG1fbmV3RnJhbWVCYXNlLCAi
IGFzIG5ldyBzcClcbiIpOworICAgIGlmIChtX29sZEZyYW1lT2Zmc2V0KQorICAgICAgICBvdXQu
cHJpbnQoIiAgIE9sZCBmcmFtZSBvZmZzZXQgaXMgIiwgbV9vbGRGcmFtZU9mZnNldCwgIlxuIik7
CisgICAgaWYgKG1fbmV3RnJhbWVPZmZzZXQpCisgICAgICAgIG91dC5wcmludCgiICAgTmV3IGZy
YW1lIG9mZnNldCBpcyAiLCBtX25ld0ZyYW1lT2Zmc2V0LCAiXG4iKTsKK30KKworQ2FjaGVkUmVj
b3ZlcnkqIENhbGxGcmFtZVNodWZmbGVyOjpnZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5
IHJlY292ZXJ5KQoreworICAgIEFTU0VSVCghcmVjb3ZlcnkuaXNDb25zdGFudCgpKTsKKyAgICBp
ZiAocmVjb3ZlcnkuaXNJbkdQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3Zl
cnkuZ3ByKCldOworICAgIGlmIChyZWNvdmVyeS5pc0luRlBSKCkpCisgICAgICAgIHJldHVybiBt
X3JlZ2lzdGVyc1tyZWNvdmVyeS5mcHIoKV07CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBp
ZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgIEFTU0VSVChtX3Jl
Z2lzdGVyc1tyZWNvdmVyeS50YWdHUFIoKV0gPT0gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5bG9h
ZEdQUigpXSk7CisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5wYXlsb2FkR1BS
KCldOworICAgIH0KKyNlbmRpZgorICAgIEFTU0VSVChyZWNvdmVyeS5pc0luSlNTdGFjaygpKTsK
KyAgICByZXR1cm4gZ2V0T2xkKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKTsKK30KKworQ2Fj
aGVkUmVjb3ZlcnkqIENhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJl
Y292ZXJ5IHJlY292ZXJ5LCBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkpCit7CisgICAg
QVNTRVJUKCFyZWNvdmVyeS5pc0NvbnN0YW50KCkpOworICAgIGlmIChyZWNvdmVyeS5pc0luR1BS
KCkpCisgICAgICAgIHJldHVybiBtX3JlZ2lzdGVyc1tyZWNvdmVyeS5ncHIoKV0gPSBjYWNoZWRS
ZWNvdmVyeTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkZQUigpKQorICAgICAgICByZXR1cm4gbV9y
ZWdpc3RlcnNbcmVjb3ZlcnkuZnByKCldID0gY2FjaGVkUmVjb3Zlcnk7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAg
ICAgIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnRhZ0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworICAg
ICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5bG9hZEdQUigpXSA9IGNhY2hlZFJl
Y292ZXJ5OworICAgIH0KKyNlbmRpZgorICAgIEFTU0VSVChyZWNvdmVyeS5pc0luSlNTdGFjaygp
KTsKKyAgICBzZXRPbGQocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCksIGNhY2hlZFJlY292ZXJ5
KTsKKyAgICByZXR1cm4gY2FjaGVkUmVjb3Zlcnk7Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OnNwaWxsKENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQo
IWlzU2xvd1BhdGgoKSk7CisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJ
blJlZ2lzdGVycygpKTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBzcGlsbFNsb3QgeyAwIH07Cisg
ICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgc2xvdCB7IGZpcnN0T2xkKCkgfTsgc2xvdCA8PSBsYXN0
T2xkKCk7IHNsb3QgLT0gMSkgeworICAgICAgICBBU1NFUlQoc2xvdCA8IG5ld0FzT2xkKGZpcnN0
TmV3KCkpKTsKKyAgICAgICAgaWYgKGdldE9sZChzbG90KSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIHNwaWxsU2xvdCA9IHNsb3Q7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAvLyBXZSBtdXN0IGhhdmUgZW5vdWdoIHNsb3RzIHRvIGJlIGFibGUgdG8gZml0IHRoZSB3aG9s
ZQorICAgIC8vIGNhbGxlZSdzIGZyYW1lIGZvciB0aGUgc2xvdyBwYXRoLgorICAgIFJFTEVBU0Vf
QVNTRVJUKHNwaWxsU2xvdC5pc0xvY2FsKCkpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2coIiAgICogU3BpbGxpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIiBp
bnRvICIsIHNwaWxsU2xvdCwgIlxuIik7CisgICAgYXV0byBmb3JtYXQgPSBlbWl0U3RvcmUoY2Fj
aGVkUmVjb3ZlcnksIGFkZHJlc3NGb3JPbGQoc3BpbGxTbG90KSk7CisgICAgQVNTRVJUKGZvcm1h
dCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3Zlcnks
IFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhzcGlsbFNsb3QsIGZvcm1hdCkpOwor
fQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0RGVsdGFDaGVjaygpCit7CisgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpCisgICAgICAgIHJldHVybjsKKworICAgIEdQUlJlZyBzY3JhdGNo
R1BSIHsgZ2V0RnJlZUdQUigpIH07CisgICAgaWYgKHNjcmF0Y2hHUFIgIT0gSW52YWxpZEdQUlJl
ZykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgVXNpbmcg
Iiwgc2NyYXRjaEdQUiwgIiBmb3IgdGhlIGZwLXNwIGRlbHRhIGNoZWNrXG4iKTsKKyAgICAgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgc2NyYXRjaEdQUik7CisgICAg
ICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNj
cmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvayA9IG1faml0LmJyYW5j
aDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBzY3JhdGNoR1BSLAorICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpemVvZihSZWdpc3RlcikgKiBudW1Mb2NhbHMoKSkpKTsKKyAg
ICAgICAgbV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJVFVuZXhwZWN0ZWRDYWxsRnJhbWVTaXplKTsK
KyAgICAgICAgb2subGluaygmbV9qaXQpOworICAgIH0gZWxzZSBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiICBTa2lwcGluZyB0aGUgZnAtc3AgZGVsdGEgY2hlY2sgc2luY2UgdGhlcmUg
aXMgdG9vIG11Y2ggcHJlc3N1cmUiKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJl
cGFyZUZvclNsb3dQYXRoKCkKK3sKKyAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CisgICAgZW1p
dERlbHRhQ2hlY2soKTsKKworICAgIG1fZnJhbWVEZWx0YSA9IG51bUxvY2FscygpICsgSlNTdGFj
azo6Q2FsbGVyRnJhbWVBbmRQQ1NpemU7CisgICAgbV9uZXdGcmFtZUJhc2UgPSBNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXI7CisgICAgbV9uZXdGcmFtZU9mZnNldCA9IC1KU1N0
YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCJcblxuUHJlcGFyaW5nIGZyYW1lIGZvciBzbG93IHBhdGggY2FsbDpcbiIsICp0aGlz
KTsKKworICAgIHByZXBhcmVBbnkoKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJSZWFkeSBmb3Igc2xvdyBwYXRoIGNhbGwhXG4iKTsKK30KKwordm9pZCBDYWxsRnJhbWVT
aHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYWxsKCkKK3sKKyAgICBBU1NFUlQoaXNVbmRlY2lkZWQo
KSk7CisgICAgZW1pdERlbHRhQ2hlY2soKTsKKworICAgIC8vIFdlJ2xsIHVzZSBzcC1iYXNlZCBp
bmRleGluZyBzbyB0aGF0IHdlIGNhbiBsb2FkIHRoZQorICAgIC8vIGNhbGxlcidzIGZyYW1lIHBv
aW50ZXIgaW50byB0aGUgZnByIGltbWVkaWF0ZWx5CisgICAgbV9vbGRGcmFtZUJhc2UgPSBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXI7CisgICAgbV9vbGRGcmFtZU9mZnNldCA9
IG51bUxvY2FscygpOworICAgIG1fbmV3RnJhbWVCYXNlID0gYWNxdWlyZUdQUigpOworI2lmIENQ
VShYODYpCisgICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9pbnRlciBtYW51YWxseSwgYnV0IHdl
IG5lZWQgdG8gYXNrIHRoZQorICAgIC8vIGFsZ29yaXRobSB0byBtb3ZlIHRoZSByZXR1cm4gUEMg
Zm9yIHVzIChpdCdkIHByb2JhYmx5CisgICAgLy8gcmVxdWlyZSBhIHdyaXRlIHRvIHRoZSBkYW5n
ZXIgem9uZSkuIFNpbmNlIGl0J2QgYmUgYXdrd2FyZAorICAgIC8vIHRvIGFzayBmb3IgaGFsZiBh
IHZhbHVlIG1vdmUsIHdlIGFzayB0aGF0IHRoZSB3aG9sZSB0aGluZworICAgIC8vIGJlIG1vdmVk
IGZvciB1cy4KKyAgICBhZGROZXcoVmlydHVhbFJlZ2lzdGVyIHsgMCB9LAorICAgICAgICBWYWx1
ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soVmlydHVhbFJlZ2lzdGVyKDApLCBEYXRhRm9y
bWF0SlMpKTsKKworICAgIC8vIHNwIHdpbGwgcG9pbnQgdG8gaGVhZDAgYW5kIHdlIHdpbGwgbW92
ZSBpdCB1cCBoYWxmIGEgc2xvdAorICAgIC8vIG1hbnVhbGx5CisgICAgbV9uZXdGcmFtZU9mZnNl
dCA9IDA7CisjZWxpZiBDUFUoQVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoTUlQUykKKyAgICAvLyBX
ZSBsb2FkIHRoZSB0aGUgZnJhbWUgcG9pbnRlciBhbmQgbGluayByZWdpc3RlcgorICAgIC8vIG1h
bnVhbGx5LiBXZSBjb3VsZCBhc2sgdGhlIGFsZ29yaXRobSB0byBsb2FkIHRoZW0gZm9yIHVzLAor
ICAgIC8vIGFuZCBpdCB3b3VsZCBhbGxvdyB1cyB0byB1c2UgdGhlIGxpbmsgcmVnaXN0ZXIgYXMg
YW4gZXh0cmEKKyAgICAvLyB0ZW1wb3JhcnkgLSBidXQgaXQnZCBtZWFuIHRoYXQgdGhlIGZyYW1l
IHBvaW50ZXIgY2FuIGFsc28KKyAgICAvLyBiZSB1c2VkIGFzIGFuIGV4dHJhIHRlbXBvcmFyeSwg
c28gd2Uga2VlcCB0aGUgbGluayByZWdpc3RlcgorICAgIC8vIGxvY2tlZCBpbnN0ZWFkLgorCisg
ICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMSBzaW5jZSB0aGUgY2FsbGVlJ3MgcHJvbG9ndWUg
cHVzaGVzCisgICAgLy8gdGhlIGNhbGwgZnJhbWUgYW5kIGxpbmsgcmVnaXN0ZXIuCisgICAgbV9u
ZXdGcmFtZU9mZnNldCA9IC0xOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIC8vIFdlIGxvYWQgdGhl
IGZyYW1lIHBvaW50ZXIgYW5kIGxpbmsgcmVnaXN0ZXIgbWFudWFsbHkuIFdlCisgICAgLy8gY291
bGQgYXNrIHRoZSBhbGdvcml0aG0gdG8gbG9hZCB0aGUgbGluayByZWdpc3RlciBmb3IgdXMKKyAg
ICAvLyAod2hpY2ggd291bGQgYWxsb3cgZm9yIGl0cyB1c2UgYXMgYW4gZXh0cmEgdGVtcG9yYXJ5
KSwgYnV0CisgICAgLy8gc2luY2UgaXRzIG5vdCBpbiBHUFJJbmZvLCB3ZSBjYW4ndCBkbyBpdC4K
KworICAgIC8vIHNwIHdpbGwgcG9pbnQgdG8gaGVhZDIgc2luY2UgdGhlIGNhbGxlZSdzIHByb2xv
Z3VlIHB1c2hlcyB0aGUKKyAgICAvLyBjYWxsIGZyYW1lIGFuZCBsaW5rIHJlZ2lzdGVyCisgICAg
bV9uZXdGcmFtZU9mZnNldCA9IC0yOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICAvLyBXZSBsb2Fk
IHRoZSBmcmFtZSBwb2ludGVyIG1hbnVhbGx5LCBidXQgd2UgYXNrIHRoZQorICAgIC8vIGFsZ29y
aXRobSB0byBtb3ZlIHRoZSByZXR1cm4gUEMgZm9yIHVzIChpdCdkIHByb2JhYmx5CisgICAgLy8g
cmVxdWlyZSBhIHdyaXRlIGluIHRoZSBkYW5nZXIgem9uZSkKKyAgICBhZGROZXcoVmlydHVhbFJl
Z2lzdGVyIHsgMSB9LAorICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2so
VmlydHVhbFJlZ2lzdGVyKDEpLCBEYXRhRm9ybWF0SlMpKTsKKworICAgIC8vIHNwIHdpbGwgcG9p
bnQgdG8gaGVhZDEgc2luY2UgdGhlIGNhbGxlZSdzIHByb2xvZ3VlIHB1c2hlcworICAgIC8vIHRo
ZSBjYWxsIGZyYW1lIHJlZ2lzdGVyCisgICAgbV9uZXdGcmFtZU9mZnNldCA9IC0xOworI2Vsc2UK
KyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKKyNlbmRpZgorCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2coIiAgRW1pdHRpbmcgY29kZSBmb3IgY29tcHV0aW5nIHRoZSBu
ZXcgZnJhbWUgYmFzZVxuIik7CisKKyAgICAvLyBXZSBjb21wdXRlIHRoZSBuZXcgZnJhbWUgYmFz
ZSBieSBmaXJzdCBjb21wdXRpbmcgdGhlIHRvcCBvZiB0aGUKKyAgICAvLyBvbGQgZnJhbWUgKHRh
a2luZyBpbnRvIGFjY291bnQgYW4gYXJndW1lbnQgY291bnQgaGlnaGVyIHRoYW4KKyAgICAvLyB0
aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMpLCB0aGVuIHN1YnN0cmFjdGluZyB0byBpdCB0aGUgYWxp
Z25lZAorICAgIC8vIG5ldyBmcmFtZSBzaXplIChhZGp1c3RlZCkuCisgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKU1N0
YWNrOjpBcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAr
IFBheWxvYWRPZmZzZXQpLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgYXJndW1lbnRDb3VudE9LID0KKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93T3JFcXVhbCwgbV9uZXdGcmFtZUJhc2UsCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkpKTsK
KyAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YWNrQWxpZ25t
ZW50UmVnaXN0ZXJzKCkgLSAxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSksIG1fbmV3
RnJhbWVCYXNlKTsKKyAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KC1zdGFja0FsaWdubWVudFJlZ2lzdGVycygpKSwgbV9uZXdGcmFtZUJhc2UpOworICAgIG1faml0
Lm11bDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIG1f
bmV3RnJhbWVCYXNlLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICBhcmd1bWVudENvdW50T0subGluaygmbV9qaXQpOwor
ICAgIG1faml0Lm1vdmUoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobV9h
bGlnbmVkT2xkRnJhbWVTaXplICogc2l6ZW9mKFJlZ2lzdGVyKSksCisgICAgICAgIG1fbmV3RnJh
bWVCYXNlKTsKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgIG1faml0LmFkZFB0cihHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgbV9uZXdGcmFtZUJhc2UpOworICAgIG1faml0LnN1YlB0
cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigKKyAgICAgICAgICAgICht
X2FsaWduZWROZXdGcmFtZVNpemUgKyBtX25ld0ZyYW1lT2Zmc2V0KSAqIHNpemVvZihSZWdpc3Rl
cikpLCAKKyAgICAgICAgbV9uZXdGcmFtZUJhc2UpOworCisgICAgLy8gV2Ugd2FudCB0aGUgZnJh
bWUgcG9pbnRlciB0byBhbHdheXMgcG9pbnQgdG8gYSB2YWxpZCBmcmFtZSwgYW5kCisgICAgLy8g
d2UgYXJlIGdvaW5nIHRvIHRyYXNoIHRoZSBjdXJyZW50IG9uZS4gTGV0J3MgbWFrZSBpdCBwb2lu
dCB0bworICAgIC8vIG91ciBjYWxsZXIncyBmcmFtZSwgc2luY2UgdGhhdCdzIHdoYXQgd2Ugd2Fu
dCB0byBlbmQgdXAgd2l0aC4KKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciksCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAvLyBXZSBsb2FkIHRoZSBs
aW5rIHJlZ2lzdGVyIG1hbnVhbGx5IGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBvbmUKKyNp
ZiBDUFUoQVJNKSB8fCBDUFUoU0g0KSB8fCBDUFUoQVJNNjQpCisgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0
ZXIsIHNpemVvZih2b2lkKikpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6bGlua1JlZ2lzdGVy
KTsKKyNlbGlmIENQVShNSVBTKQorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBzaXplb2Yodm9pZCop
KSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJldHVybkFkZHJlc3NSZWdpc3Rlcik7CisjZW5k
aWYKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJQcmVwYXJpbmcgZnJhbWUg
Zm9yIHRhaWwgY2FsbDpcbiIsICp0aGlzKTsKKworICAgIHByZXBhcmVBbnkoKTsKKworI2lmIENQ
VShYODYpCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgU2ltdWxhdGluZyBw
b3Agb2YgdGhlIGNhbGwgZnJhbWUgcmVnaXN0ZXJcbiIpOworICAgIG1faml0LmFkZFB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZih2b2lkKikpLCBNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworI2VuZGlmCisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiUmVhZHkgZm9yIHRhaWwgY2FsbCFcbiIpOworfQorCitib29sIENhbGxGcmFt
ZVNodWZmbGVyOjp0cnlXcml0ZXMoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQorewor
ICAgIEFTU0VSVChtX25ld0ZyYW1lQmFzZSAhPSBJbnZhbGlkR1BSUmVnKTsKKworICAgIC8vIElm
IHRoZSB2YWx1ZSBpcyBhbHJlYWR5IHNldCB1cCBjb3JyZWN0bHksIHdlIGRvbid0IGhhdmUKKyAg
ICAvLyBhbnl0aGluZyB0byBkby4KKyAgICBpZiAoaXNTbG93UGF0aCgpICYmIGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKQorICAgICAgICAmJiBjYWNoZWRSZWNvdmVyeS50
YXJnZXRzKCkuc2l6ZSgpID09IDEKKyAgICAgICAgJiYgKG5ld0FzT2xkKGNhY2hlZFJlY292ZXJ5
LnRhcmdldHMoKVswXSkKKyAgICAgICAgICAgID09IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
dmlydHVhbFJlZ2lzdGVyKCkpKSB7CisgICAgICAgIGNhY2hlZFJlY292ZXJ5LmNsZWFyVGFyZ2V0
cygpOworICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFsdWVSZWdzKCkpCisg
ICAgICAgICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoIWNhbkxvYWRBbmRCb3go
Y2FjaGVkUmVjb3ZlcnkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBlbWl0TG9hZChj
YWNoZWRSZWNvdmVyeSk7CisgICAgZW1pdEJveChjYWNoZWRSZWNvdmVyeSk7CisgICAgQVNTRVJU
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJblJlZ2lzdGVycygpCisgICAgICAgIHx8IGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNDb25zdGFudCgpKTsKKworICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICBkYXRhTG9nKCIgICAqIFN0b3JpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKSk7CisgICAgZm9yIChzaXplX3QgaSB7IDAgfTsgaSA8IGNhY2hlZFJlY292ZXJ5LnRhcmdl
dHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgY2Fj
aGVkUmVjb3ZlcnkudGFyZ2V0cygpW2ldIH07CisgICAgICAgIEFTU0VSVCghaXNEYW5nZXJOZXco
dGFyZ2V0KSk7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyghaSA/
ICIgaW50byAiIDogIiwgYW5kICIsICJORVcgIiwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdFN0b3Jl
KGNhY2hlZFJlY292ZXJ5LCBhZGRyZXNzRm9yTmV3KHRhcmdldCkpOworICAgICAgICBzZXROZXco
dGFyZ2V0LCBudWxscHRyKTsKKyAgICB9CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2coIlxuIik7CisgICAgY2FjaGVkUmVjb3ZlcnkuY2xlYXJUYXJnZXRzKCk7CisgICAgaWYgKCFj
YWNoZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVlUmVncygpKQorICAgICAgICBjbGVhckNhY2hlZFJl
Y292ZXJ5KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OnBlcmZvcm1TYWZlV3JpdGVzKCkKK3sKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgZmlyc3RTYWZlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbmQgeyBsYXN0
TmV3KCkgKyAxIH07CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gZmFpbHVyZXM7CisKKyAg
ICAvLyBGb3IgYWxsIGNhY2hlZFJlY292ZXJpZXMgdGhhdCB3cml0ZXMgdG8gdGhlIHNhZmUgem9u
ZSwgaWYgaXQKKyAgICAvLyBkb2Vzbid0IGFsc28gd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lLCB3
ZSB0cnkgdG8gcGVyZm9ybQorICAgIC8vIHRoZSB3cml0ZXMuIFRoaXMgbWF5IGZyZWUgdXAgZGFu
Z2VyIHNsb3RzLCBzbyB3ZSBpdGVyYXRlCisgICAgLy8gYWdhaW4gdW50aWwgaXQgZG9lc24ndCBo
YXBwZW4gYW55bW9yZS4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB3ZSBo
YXZlIGEgd2hpbGUgYmxvY2ssIHdlIGxvb2sgYXQKKyAgICAvLyBlYWNoIHNsb3Qgb2YgdGhlIG5l
dyBjYWxsIGZyYW1lIGF0IG1vc3Qgb25jZSBzaW5jZSBpbiBlYWNoCisgICAgLy8gaXRlcmF0aW9u
IGJleW9uZCB0aGUgZmlyc3QsIHdlIG9ubHkgbG9hZCB1cCB0aGUgcG9ydGlvbiBvZgorICAgIC8v
IHRoZSBuZXcgY2FsbCBmcmFtZSB0aGF0IHdhcyBkYW5nZXJvdXMgYW5kIGJlY2FtZSBzYWZlIGR1
ZQorICAgIC8vIHRvIHRoZSBwcmV2aW91cyBpdGVyYXRpb24uCisgICAgZG8geworICAgICAgICBm
aXJzdFNhZmUgPSBkYW5nZXJGcm9udGllcigpICsgMTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCIgIFRyeWluZyBzYWZlIHdyaXRlcyAoYmV0d2VlbiBORVcgIiwg
Zmlyc3RTYWZlLCAiIGFuZCBORVcgIiwgZW5kIC0gMSwgIilcbiIpOworICAgICAgICBib29sIGRp
ZFByb2dyZXNzID0gZmFsc2U7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyB7IGZp
cnN0U2FmZSB9OyByZWcgPCBlbmQ7IHJlZyArPSAxKSB7CisgICAgICAgICAgICBDYWNoZWRSZWNv
dmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBnZXROZXcocmVnKTsKKyAgICAgICAgICAgIGlmICghY2Fj
aGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgKyAiLCByZWcsICIgaXMgT0suXG4iKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaGFzT25seVNh
ZmVXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIC0gIiwgY2FjaGVkUmVjb3Zlcnkt
PnJlY292ZXJ5KCksICIgd3JpdGVzIHRvIE5FVyAiLCByZWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAiIGJ1dCBhbHNvIGhhcyBkYW5nZXJvdXMgd3JpdGVzLlxuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgLSAi
LCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiB3cml0ZXMgdG8gTkVXICIsIHJlZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICIgYnV0IGlzIGFsc28gbmVlZGVkIGluIHJlZ2lzdGVycy5c
biIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdHJ5V3JpdGVzKCpjYWNoZWRSZWNvdmVyeSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiICAgLSBVbmFibGUgdG8gd3JpdGUgdG8gTkVXICIsIHJlZywgIiBmcm9tICIsIGNhY2hlZFJl
Y292ZXJ5LT5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBmYWlsdXJlcy5hcHBl
bmQocmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRpZFByb2dyZXNzID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBlbmQgPSBmaXJzdFNhZmU7CisKKyAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBjYWNoZWRSZWNvdmVyaWVzIHRoYXQgZmFpbGVkIHRvIHdyaXRlLCBpdCBpcworICAgICAg
ICAvLyBiZWNhdXNlIHRoZXkgYXJlIG9uIHRoZSBzdGFjayBhbmQgd2UgZGlkbid0IGhhdmUgZW5v
dWdoCisgICAgICAgIC8vIHJlZ2lzdGVycyBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdG8gbG9hZCB0
aGVtIGludG8uIElmCisgICAgICAgIC8vIHdlIGhhdmUgYSBmcmVlIHJlZ2lzdGVyLCB3ZSBzaG91
bGQgdHJ5IGFnYWluIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gY291bGQgZnJlZSB1cCBzb21lIGRh
bmdlciBzbG90cy4KKyAgICAgICAgaWYgKGRpZFByb2dyZXNzICYmIGhhc0ZyZWVSZWdpc3Rlcigp
KSB7CisgICAgICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBzdGlsbEZhaWxpbmc7Cisg
ICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBmYWlsZWQgOiBmYWlsdXJlcykgeworICAg
ICAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldE5ldyhmYWls
ZWQpOworICAgICAgICAgICAgICAgIC8vIEl0IGNvdWxkIGhhdmUgYmVlbiBoYW5kbGVkIGxhdGVy
IGlmIGl0IGhhZAorICAgICAgICAgICAgICAgIC8vIHNldmVyYWwgdGFyZ2V0cworICAgICAgICAg
ICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICAgICAgQVNTRVJUKGhhc09ubHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNv
dmVyeSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIWNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1Zh
bHVlUmVncygpKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRyeVdyaXRlcygqY2FjaGVkUmVjb3Zl
cnkpKQorICAgICAgICAgICAgICAgICAgICBzdGlsbEZhaWxpbmcuYXBwZW5kKGZhaWxlZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmYWlsdXJlcyA9IFdURjo6bW92ZShzdGlsbEZhaWxp
bmcpOworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJib3NlICYmIGZpcnN0U2FmZSAhPSBkYW5n
ZXJGcm9udGllcigpICsgMSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgV2UgZnJlZWQgdXAgZGFu
Z2VyIHNsb3RzIVxuIik7CisgICAgfSB3aGlsZSAoZmlyc3RTYWZlICE9IGRhbmdlckZyb250aWVy
KCkgKyAxKTsKKworICAgIHJldHVybiBmYWlsdXJlcy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgQ2Fs
bEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVBbnkoKQoreworICAgIEFTU0VSVCghaXNVbmRlY2lkZWQo
KSk7CisKKyAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworCisgICAgLy8gRmlyc3QsIHdlIHRy
eSB0byBzdG9yZSBhbnkgdmFsdWUgdGhhdCBnb2VzIGFib3ZlIHRoZSBkYW5nZXIKKyAgICAvLyBm
cm9udGllci4gVGhpcyB3aWxsIG5ldmVyIHVzZSBtb3JlIHJlZ2lzdGVycyBzaW5jZSB3ZSBhcmUg
b25seQorICAgIC8vIGxvYWRpbmcrc3RvcmluZyBpZiB3ZSBlbnN1cmUgdGhhdCBhbnkgcmVnaXN0
ZXIgdXNlZCBmb3IgdGhlIGxvYWQKKyAgICAvLyB3aWxsIGJlIGZyZWVkIHVwIGFmdGVyIHRoZSBz
dG9yZXMgKGkuZS4sIGFsbCBzdG9yZXMgYXJlIGFib3ZlCisgICAgLy8gdGhlIGRhbmdlciBmcm9u
dGllciwgYW5kIHRoZXJlIGlzIG5vIHdhbnRlZCByZWdpc3RlcikuCisgICAgcGVyZm9ybVNhZmVX
cml0ZXMoKTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGNvdWxkbid0IGhhdmUgbW9yZSBh
dmFpbGFibGUgcmVnaXN0ZXJzIHRoYW4KKyAgICAvLyB3ZSBoYXZlIHdpdGhvdXRoIHNwaWxsaW5n
OiBhbGwgdmFsdWVzIGN1cnJlbnRseSBpbiByZWdpc3RlcnMKKyAgICAvLyBlaXRoZXIgcmVxdWly
ZSBhIHdyaXRlIHRvIHRoZSBkYW5nZXIgem9uZSwgb3IgaGF2ZSBhIHdhbnRlZAorICAgIC8vIHJl
Z2lzdGVyLCB3aGljaCBtZWFucyB0aGF0IGluIGFueSBjYXNlIHRoZXkgd2lsbCBoYXZlIHRvIGdv
CisgICAgLy8gdGhyb3VnaCByZWdpc3RlcnMgYWdhaW4uCisKKyAgICAvLyBXZSBub3cgc2xvd2x5
IGZyZWUgdXAgdGhlIGRhbmdlciB6b25lIGJ5IGZpcnN0IGxvYWRpbmcgdGhlIG9sZAorICAgIC8v
IHZhbHVlIG9uIHRoZSBkYW5nZXIgZnJvbnRpZXIsIHNwaWxsaW5nIGFzIG1hbnkgcmVnaXN0ZXJz
IGFzCisgICAgLy8gbmVlZGVkIHRvIGRvIHNvIGFuZCBlbnN1cmluZyB0aGF0IHRoZSBjb3JyZXNw
b25kaW5nIHNsb3QgaW4gdGhlCisgICAgLy8gbmV3IGZyYW1lIGlzIG5vdyByZWFkeSB0byBiZSB3
cml0dGVuLiBUaGVuLCB3ZSBzdG9yZSB0aGUgb2xkCisgICAgLy8gdmFsdWUgdG8gaXRzIHRhcmdl
dCBsb2NhdGlvbiBpZiBwb3NzaWJsZSAod2UgY291bGQgaGF2ZSBmYWlsZWQKKyAgICAvLyB0byBs
b2FkIGl0IHByZXZpb3VzbHkgZHVlIHRvIGhpZ2ggcHJlc3N1cmUpLiBGaW5hbGx5LCB3ZSB3cml0
ZQorICAgIC8vIHRvIGFueSBvZiB0aGUgbmV3bHkgc2FmZSBzbG90cyB0aGF0IHdlIGNhbiwgd2hp
Y2ggY291bGQgZnJlZSB1cAorICAgIC8vIHJlZ2lzdGVycyAoaGVuY2Ugd2h5IHdlIGRvIGl0IGVh
Z2VybHkpLgorICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyB7IGRhbmdlckZyb250aWVyKCkg
fTsgcmVnID49IGZpcnN0TmV3KCk7IHJlZyAtPSAxKSB7CisgICAgICAgIGlmIChyZWcgPT0gZGFu
Z2VyRnJvbnRpZXIoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICBOZXh0IHNsb3QgKE5FVyAiLCByZWcsICIpIGlzIHRoZSBkYW5nZXIgZnJv
bnRpZXJcbiIpOworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsg
Z2V0T2xkKG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKSB9OworICAgICAgICAgICAgQVNTRVJU
KGNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVuc3VyZUxvYWQoKmNhY2hlZFJlY292ZXJ5
KTsKKyAgICAgICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBl
bnN1cmVCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVtaXRCb3goKmNhY2hlZFJl
Y292ZXJ5KTsKKyAgICAgICAgICAgIGlmIChoYXNPbmx5U2FmZVdyaXRlcygqY2FjaGVkUmVjb3Zl
cnkpKQorICAgICAgICAgICAgICAgIHRyeVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpOworICAgICAg
ICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIE5leHQgc2xvdCBp
cyBORVcgIiwgcmVnLCAiXG4iKTsKKworICAgICAgICBBU1NFUlQoIWlzRGFuZ2VyTmV3KHJlZykp
OworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBnZXROZXcocmVnKTsK
KyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBvbmUgb2YgdGhlIGhlYWRlciBzbG90cyB3ZSBkb24n
dCBjYXJlIGFib3V0LgorICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICArICIsIHJlZywgIiBp
cyBPS1xuIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChjYW5Mb2FkQW5kQm94KCpjYWNoZWRSZWNvdmVyeSkgJiYgaGFzT25seVNhZmVXcml0ZXMoKmNh
Y2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgJiYgIWNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1Zh
bHVlUmVncygpKSB7CisgICAgICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3ZlcnkpOworICAg
ICAgICAgICAgZW1pdEJveCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAgYm9vbCB3cml0
ZXNPSyA9IHRyeVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAgQVNTRVJUKHdy
aXRlc09LKTsKKyAgICAgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
ZygiICAgLSAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIiBjYW4ndCBiZSBoYW5kbGVk
IGp1c3QgeWV0LlxuIik7CisgICAgfQorICAgIEFTU0VSVChkYW5nZXJGcm9udGllcigpIDwgZmly
c3ROZXcoKSk7CisKKyAgICAvLyBOb3csIHRoZSBkYW5nZXIgem9uZSBpcyBlbXB0eSwgYnV0IHdl
IHN0aWxsIGhhdmUgYSBjb3VwbGUgb2YKKyAgICAvLyB0aGluZ3MgdG8gZG86CisgICAgLy8KKyAg
ICAvLyAxKSBUaGVyZSBjb3VsZCBiZSByZW1haW5pbmcgc2FmZSB3cml0ZXMgdGhhdCBmYWlsZWQg
ZWFybGllciBkdWUKKyAgICAvLyAgICB0byBoaWdoIHJlZ2lzdGVyIHByZXNzdXJlIGFuZCBoYWQg
bm90aGluZyB0byBkbyB3aXRoIHRoZQorICAgIC8vICAgIGRhbmdlciB6b25lIHdoYXRzb2V2ZXIu
CisgICAgLy8KKyAgICAvLyAyKSBTb21lIHdhbnRlZCByZWdpc3RlcnMgY291bGQgaGF2ZSB0byBi
ZSBsb2FkZWQgKHRoaXMgY291bGQKKyAgICAvLyAgICBoYXBwZW4gZWl0aGVyIHdoZW4gbWFraW5n
IGEgY2FsbCB0byBhIG5ldyBmdW5jdGlvbiB3aXRoIGEKKyAgICAvLyAgICBsb3dlciBudW1iZXIg
b2YgYXJndW1lbnRzIC0gc2luY2UgYWJvdmUgaGVyZSwgd2Ugb25seSBsb2FkCisgICAgLy8gICAg
d2FudGVkIHJlZ2lzdGVycyB3aGVuIHRoZXkgYXJlIGF0IHRoZSBkYW5nZXIgZnJvbnRpZXIgLSwg
b3IKKyAgICAvLyAgICBpZiBhIHdhbnRlZCByZWdpc3RlciBnb3Qgc3BpbGxlZCkuCisgICAgLy8K
KyAgICAvLyAzKSBTb21lIHdhbnRlZCByZWdpc3RlcnMgY291bGQgaGF2ZSBiZWVuIGxvYWRlZCBp
biB0aGUgd3JvbmcKKyAgICAvLyAgICByZWdpc3RlcnMKKyAgICAvLworICAgIC8vIDQpIFdlIGhh
dmUgdG8gdGFrZSBjYXJlIG9mIHNvbWUgYm9va2tlZXBpbmcgLSBuYW1lbHksIHN0b3JpbmcKKyAg
ICAvLyAgICB0aGUgYXJndW1lbnQgY291bnQgYW5kIHVwZGF0aW5nIHRoZSBzdGFjayBwb2ludGVy
LgorCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbXVzdCBoYXZlIGVub3VnaCByZWdpc3RlcnMg
YXZhaWxhYmxlIGZvcgorICAgIC8vIGhhbmRsaW5nIDEpLiBOb25lIG9mIHRoZSBsb2FkcyBjYW4g
ZmFpbCBiZWNhdXNlIHdlIGhhdmUgYmVlbgorICAgIC8vIGVhZ2VybHkgZnJlZWluZyB1cCByZWdp
c3RlcnMgaW4gYWxsIHRoZSBwcmV2aW91cyBwaGFzZXMgLSBzbworICAgIC8vIHRoZSBvbmx5IHZh
bHVlcyB0aGF0IGFyZSBpbiByZWdpc3RlcnMgYXQgdGhpcyBwb2ludCBtdXN0IGhhdmUKKyAgICAv
LyB3YW50ZWQgcmVnaXN0ZXJzLgorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIg
IERhbmdlciB6b25lIGlzIGNsZWFyLCBwZXJmb3JtaW5nIHJlbWFpbmluZyB3cml0ZXMuXG4iKTsK
KyAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgeyBmaXJzdE5ldygpIH07IHJlZyA8PSBsYXN0
TmV3KCk7IHJlZyArPSAxKSB7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVy
eSB7IGdldE5ldyhyZWcpIH07CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3ZlcnkpOworICAg
ICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIGJvb2wgd3JpdGVzT0sgPSB0
cnlXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgQVNTRVJUKHdyaXRlc09LKTsKKyAg
ICB9CisKKyAgICAvLyBIYW5kbGUgMikgYnkgbG9hZGluZyBhbGwgcmVnaXN0ZXJzLiBXZSBkb24n
dCBoYXZlIHRvIGRvIGFueQorICAgIC8vIHdyaXRlcywgc2luY2UgdGhleSBoYXZlIGJlZW4gdGFr
ZW4gY2FyZSBvZiBhYm92ZS4KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBM
b2FkaW5nIHdhbnRlZCBHUFJzIGludG8gcmVnaXN0ZXJzXG4iKTsKKyAgICBmb3IgKFJlZyByZWcg
eyBSZWc6OmZpcnN0KCkgfTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7
CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJz
W3JlZ10gfTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBBU1NFUlQocmVnLmlzR1BSKCkpOworCisgICAgICAgIGVtaXRMb2FkKCpj
YWNoZWRSZWNvdmVyeSk7CisgICAgICAgIGVtaXRCb3goKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAg
ICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LT50YXJnZXRzKCkuaXNFbXB0eSgpKTsKKyAgICB9CisK
KyAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBoYXZlIHJlYWQgZXZlcnl0aGluZyB3ZSBjYXJlZCBh
Ym91dCBmcm9tIHRoZQorICAgIC8vIHN0YWNrLCBhbmQgd3JpdHRlbiBldmVyeXRoaW5nIHdlIGhh
ZCB0byB0byB0aGUgc3RhY2suCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAg
Q2FsbGVlIGZyYW1lIGlzIGZ1bGx5IHNldCB1cFxuIik7CisgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKKyAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgcmVnIHsgZmlyc3ROZXcoKSB9OyBy
ZWcgPD0gbGFzdE5ldygpOyByZWcgKz0gMSkKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmVn
LCAhZ2V0TmV3KHJlZykpOworCisgICAgICAgIGZvciAoQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJl
Y292ZXJ5IDogbV9jYWNoZWRSZWNvdmVyaWVzKSB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGNhY2hlZFJlY292ZXJ5LCBjYWNoZWRSZWNvdmVyeS0+dGFyZ2V0cygpLmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQoIWNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLmlzSW5KU1N0YWNr
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgNCkgZmly
c3QgYmVjYXVzZSBpdCBpbXBsaWVzIHJlbGVhc2luZworICAgIC8vIG1fbmV3RnJhbWVCYXNlLCB3
aGljaCBjb3VsZCBiZSBhIHdhbnRlZCByZWdpc3Rlci4KKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiICAgKiBTdG9yaW5nIHRoZSBhcmd1bWVudCBjb3VudCBpbnRvICIsIFZpcnR1
YWxSZWdpc3RlciB7IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgfSwgIlxuIik7CisgICAgbV9qaXQu
c3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLAorICAgICAgICBhZGRyZXNz
Rm9yTmV3KFZpcnR1YWxSZWdpc3RlciB7IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQgfSkud2l0aE9m
ZnNldChUYWdPZmZzZXQpKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoYXJnQ291bnQoKSksCisgICAgICAgIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lz
dGVyIHsgSlNTdGFjazo6QXJndW1lbnRDb3VudCB9KS53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQp
KTsKKworICAgIGlmICghaXNTbG93UGF0aCgpKSB7CisgICAgICAgIEFTU0VSVChtX25ld0ZyYW1l
QmFzZSAhPSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgUmVsZWFzaW5nIHRoZSBuZXcgZnJh
bWUgYmFzZSBwb2ludGVyXG4iKTsKKyAgICAgICAgbV9qaXQubW92ZShtX25ld0ZyYW1lQmFzZSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgcmVsZWFzZUdQ
UihtX25ld0ZyYW1lQmFzZSk7CisgICAgfQorCisgICAgLy8gRmluYWxseSB3ZSBoYW5kbGUgMykK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBFbnN1cmluZyB3YW50ZWQgcmVn
aXN0ZXJzIGFyZSBpbiB0aGUgcmlnaHQgcmVnaXN0ZXJcbiIpOworICAgIGZvciAoUmVnIHJlZyB7
IFJlZzo6Zmlyc3QoKSB9OyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsK
KyAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNb
cmVnXSB9OworICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIEFTU0VSVChyZWcuaXNHUFIoKSk7CisKKyAgICAgICAgZW1pdERpc3BsYWNl
KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFt
ZVNodWZmbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBjNWMzZThjMTNjZTk3YzI2MGZhNjRmN2FmZjdjODQ5
YmIxN2FhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2Fs
bEZyYW1lU2h1ZmZsZXIuaApAQCAtMCwwICsxLDgwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbGxGcmFtZVNodWZmbGVyX2gKKyNk
ZWZpbmUgQ2FsbEZyYW1lU2h1ZmZsZXJfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUg
IkNhbGxGcmFtZVNodWZmbGVEYXRhLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNp
bmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5j
bHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgQ2FjaGVkUmVj
b3ZlcnkgaXMgYSBzaW1wbGUgd3JhcHBlciBhcm91bmQgYSBWYWx1ZVJlY292ZXJ5IHRoYXQgCitj
bGFzcyBDYWNoZWRSZWNvdmVyeSB7CitwdWJsaWM6CisgICAgQ2FjaGVkUmVjb3ZlcnkoVmFsdWVS
ZWNvdmVyeSByZWNvdmVyeSkKKyAgICAgICAgOiBtX3JlY292ZXJ5IHsgcmVjb3ZlcnkgfQorICAg
IHsKKyAgICB9CisKKyAgICBDYWNoZWRSZWNvdmVyeShDYWNoZWRSZWNvdmVyeSYpID0gZGVsZXRl
OworICAgIENhY2hlZFJlY292ZXJ5KENhY2hlZFJlY292ZXJ5JiYpID0gZGVsZXRlOworICAgIENh
Y2hlZFJlY292ZXJ5JiBvcGVyYXRvcj0oQ2FjaGVkUmVjb3ZlcnkmKSA9IGRlbGV0ZTsKKyAgICBD
YWNoZWRSZWNvdmVyeSYgb3BlcmF0b3I9KENhY2hlZFJlY292ZXJ5JiYpID0gZGVsZXRlOworCisg
ICAgY29uc3QgVmVjdG9yPFZpcnR1YWxSZWdpc3RlciwgMT4mIHRhcmdldHMoKSBjb25zdCB7IHJl
dHVybiBtX3RhcmdldHM7IH0KKworICAgIHZvaWQgYWRkVGFyZ2V0KFZpcnR1YWxSZWdpc3RlciBy
ZWcpCisgICAgeworICAgICAgICBBU1NFUlQobV90YXJnZXRzLmlzRW1wdHkoKSB8fCBtX3Rhcmdl
dHMubGFzdCgpIDwgcmVnKTsKKyAgICAgICAgbV90YXJnZXRzLmFwcGVuZChyZWcpOworICAgIH0K
KworICAgIHZvaWQgcmVtb3ZlVGFyZ2V0KFZpcnR1YWxSZWdpc3RlciByZWcpCisgICAgeworICAg
ICAgICBBU1NFUlQobV90YXJnZXRzLmxhc3QoKSA9PSByZWcpOworICAgICAgICBtX3RhcmdldHMu
c2hyaW5rKG1fdGFyZ2V0cy5zaXplKCkgLSAxKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyVGFy
Z2V0cygpCisgICAgeworICAgICAgICBtX3RhcmdldHMuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFdhbnRlZEpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKQorICAgIHsK
KyAgICAgICAgbV93YW50ZWRKU1ZhbHVlUmVncyA9IGpzVmFsdWVSZWdzOworICAgIH0KKworICAg
IC8vIERldGVybWluZSB3aGV0aGVyIGNvbnZlcnRpbmcgdGhpcyByZWNvdmVyeSBpbnRvIGEgSlNW
YWx1ZSB3aWxsCisgICAgLy8gcmVxdWlyZSBhZGRpdGlvbmFsIEdQUnMgYW5kL29yIEZQUnMuCisg
ICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIG9ubHkgZGVwZW5kIG9uIHRoZSBEYXRhRm9ybWF0
LCBhbmQgdGhlCisgICAgLy8gcmVzdWx0IG9mIHRoZXNlIGNhbGxzIHdpbGwgc3RheSB2YWxpZCBh
ZnRlciBsb2FkcyBhbmQvb3Igc3RvcmVzLgorICAgIGJvb2wgYm94aW5nUmVxdWlyZXNHUFIoKSBj
b25zdAorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICByZXR1cm4gcmVjb3Zlcnko
KS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZTsKKyNlbHNlCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorICAgIH0KKyAgICBib29sIGJveGluZ1JlcXVpcmVzRlBSKCkgY29u
c3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeSgp
LmRhdGFGb3JtYXQoKSkgeworICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKKyAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0U3RyaWN0SW50NTI6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisj
ZWxzZQorICAgICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKKyAgICB9CisgICAgCisKKyAgICAv
LyBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiByZWdpc3RlciB3ZSBuZWVk
IHRvIGJlCisgICAgLy8gYWJsZSB0byBsb2FkIGEgcmVjb3ZlcnkuIFdlIG9ubHkgdXNlIGl0IHdo
ZW4gYSBkaXJlY3QgbG9hZCBpcworICAgIC8vIGN1cnJlbnRseSBpbXBvc3NpYmxlLCB0byBkZXRl
cm1pbmUgd2hldGhlciB3ZSBzaG91bGQgc3BpbGwgYQorICAgIC8vIEdQUiBvciBhbiBGUFIgZm9y
IGxvYWRpbmcgdGhpcyB2YWx1ZS4KKyAgICBib29sIGxvYWRzSW50b0dQUigpIGNvbnN0OworICAg
IGJvb2wgbG9hZHNJbnRvRlBSKCkgY29uc3Q7CisKKyAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5
KCkgY29uc3QgeyByZXR1cm4gbV9yZWNvdmVyeTsgfQorCisgICAgdm9pZCBzZXRSZWNvdmVyeShW
YWx1ZVJlY292ZXJ5IHJlY292ZXJ5KSB7IG1fcmVjb3ZlcnkgPSByZWNvdmVyeTsgfQorCisgICAg
SlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3MoKSBjb25zdCB7IHJldHVybiBtX3dhbnRlZEpT
VmFsdWVSZWdzOyB9Citwcml2YXRlOgorICAgIFZhbHVlUmVjb3ZlcnkgbV9yZWNvdmVyeTsKKyAg
ICBKU1ZhbHVlUmVncyBtX3dhbnRlZEpTVmFsdWVSZWdzOworICAgIFZlY3RvcjxWaXJ0dWFsUmVn
aXN0ZXIsIDE+IG1fdGFyZ2V0czsKK307CisKK2NsYXNzIENhbGxGcmFtZVNodWZmbGVyIHsKK3B1
YmxpYzoKKyAgICBDYWxsRnJhbWVTaHVmZmxlcihDQ2FsbEhlbHBlcnMmLCBjb25zdCBDYWxsRnJh
bWVTaHVmZmxlRGF0YSYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
KyAgICAvLyBBbnkgcmVnaXN0ZXIgdGhhdCBoYXMgYmVlbiBsb2NrZWQgb3IgYWNxdWlyZWQgbXVz
dCBiZSByZWxlYXNlZAorICAgIC8vIGJlZm9yZSBjYWxsaW5nIHByZXBhcmVGb3JUYWlsQ2FsbCgp
IG9yIHByZXBhcmVGb3JTbG93UGF0aCgpLgorICAgIHZvaWQgbG9ja0dQUihHUFJSZWcgZ3ByKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoZ3ByKSk7CisgICAg
ICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldChncHIpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICogTG9ja2luZyAiLCBncHIsICJcbiIpOworICAgIH0KKwor
ICAgIEdQUlJlZyBhY3F1aXJlR1BSKCkKKyAgICB7CisgICAgICAgIGVuc3VyZUdQUigpOworICAg
ICAgICBHUFJSZWcgZ3ByIHsgZ2V0RnJlZUdQUigpIH07CisgICAgICAgIEFTU0VSVCghbV9yZWdp
c3RlcnNbZ3ByXSk7CisgICAgICAgIGxvY2tHUFIoZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsK
KyAgICB9CisKKyAgICB2b2lkIHJlbGVhc2VHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAg
IGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBpZiAobV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGdw
cikpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBSZWxlYXNpbmcgIiwgZ3ByLCAiXG4i
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqICIsIGdw
ciwgIiB3YXMgbm90IGxvY2tlZFxuIik7CisgICAgICAgIH0KKyAgICAgICAgbV9sb2NrZWRSZWdp
c3RlcnMuY2xlYXIoZ3ByKTsKKyAgICB9CisKKyAgICAvLyBZb3UgY2FuIG9ubHkgdGFrZSBhIHNu
YXBzaG90IGlmIHRoZSByZWNvdmVyeSBoYXMgbm90IHN0YXJ0ZWQKKyAgICAvLyB5ZXQuIFRoZSBv
bmx5IG9wZXJhdGlvbnMgdGhhdCBhcmUgdmFsaWQgYmVmb3JlIHRha2luZyBhCisgICAgLy8gc25h
cHNob3QgYXJlIGxvY2tHUFIoKSwgYWNxdWlyZUdQUigpIGFuZCByZWxlYXNlR1BSKCkuCisgICAg
Ly8KKyAgICAvLyBMb2NraW5nIHN0YXR1cyBpcyAqTk9UKiBwcmVzZXJ2ZWQgYnkgdGhlIHNuYXBz
aG90OiBpdCBvbmx5CisgICAgLy8gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhl
CisgICAgLy8gYXJndW1lbnRzL2NhbGxlZS9jYWxsZWUtc2F2ZSByZWdpc3RlcnMgYXJlIGJ5IHRh
a2luZyBpbnRvCisgICAgLy8gYWNjb3VudCBhbnkgc3BpbGxpbmcgdGhhdCBhY3F1aXJlR1BSKCkg
Y291bGQgaGF2ZSBkb25lLgorICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNuYXBzaG90KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICBDYWxs
RnJhbWVTaHVmZmxlRGF0YSBkYXRhOworICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2Fs
cygpOworICAgICAgICBkYXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0
YWNrOjpDYWxsZWUgfSktPnJlY292ZXJ5KCk7CisgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJn
Q291bnQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgeyAwIH07IGkgPCBhcmdDb3VudCgpOyAr
K2kpCisgICAgICAgICAgICBkYXRhLmFyZ3NbaV0gPSBnZXROZXcodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoaSkpLT5yZWNvdmVyeSgpOworICAgICAgICBmb3IgKFJlZyByZWcgeyBSZWc6OmZp
cnN0KCkgfTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAg
ICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBtX25ld1JlZ2lzdGVyc1tyZWdd
IH07CisgICAgICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIGRhdGEucmVnaXN0ZXJz
W3JlZ10gPSBjYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKTsKKyNlbHNlCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIFdURjo6bW92ZShkYXRhKTsKKyAgICB9CisKKyAgICAvLyBBc2sgdGhlIHNodWZmbGVy
IHRvIHB1dCB0aGUgY2FsbGVlIGludG8gc29tZSByZWdpc3RlcnMgb25jZSB0aGUKKyAgICAvLyBz
aHVmZmxpbmcgaXMgZG9uZS4gWW91IHNob3VsZCBjYWxsIHRoaXMgYmVmb3JlIGFueSBvZiB0aGUK
KyAgICAvLyBwcmVwYXJlKCkgbWV0aG9kcywgYW5kIG11c3Qgbm90IHRha2UgYSBzbmFwc2hvdCBh
ZnRlcndhcmRzLCBhcworICAgIC8vIHRoaXMgd291bGQgY3Jhc2ggMzJiaXRzIHBsYXRmb3Jtcy4K
KyAgICB2b2lkIHNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVW5kZWNpZGVkKCkpOworICAgICAgICBBU1NFUlQoIWdl
dE5ldyhqc1ZhbHVlUmVncykpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zl
cnkgeyBnZXROZXcoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpIH07CisgICAgICAg
IEFTU0VSVChjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIGFkZE5ldyhqc1ZhbHVlUmVncywgY2Fj
aGVkUmVjb3ZlcnktPnJlY292ZXJ5KCkpOworICAgIH0KKworICAgIC8vIEFzayB0aGUgc3VoZmZs
ZXIgdG8gYXNzdW1lIHRoZSBjYWxsZWUgaGFzIGFscmVhZHkgYmUgY2hlY2tlZCB0bworICAgIC8v
IGJlIGEgY2VsbC4gVGhpcyBpcyBhIG5vLW9wIG9uIDY0Yml0IHBsYXRmb3JtcywgYnV0IGFsbG93
cyB0bworICAgIC8vIGZyZWUgdXAgYSBHUFIgb24gMzJiaXQgcGxhdGZvcm1zLgorICAgIC8vIFlv
dSBvYnZpb3VzbHkgbXVzdCBoYXZlIGVuc3VyZWQgdGhhdCB0aGlzIGlzIHRoZSBjYXNlIGJlZm9y
ZQorICAgIC8vIHJ1bm5pbmcgYW55IG9mIHRoZSBwcmVwYXJlIG1ldGhvZHMuCisgICAgdm9pZCBh
c3N1bWVDYWxsZWVJc0NlbGwoKQorICAgIHsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBDYWNoZWRSZWNvdmVyeSYgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkgeyAqZ2V0TmV3KFZpcnR1YWxS
ZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSB9OworICAgICAgICBzd2l0Y2ggKGNhbGxlZUNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJblBhaXI6
CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICBjYWxsZWVDYWNo
ZWRSZWNvdmVyeSwKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUigKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5wYXlsb2FkR1BS
KCksCisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRDZWxsKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICB1cGRh
dGVSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICBjYWxsZWVDYWNoZWRSZWNvdmVyeSwKKyAgICAg
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAg
ICAgICAgICAgIGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudmlydHVhbFJlZ2lzdGVy
KCksCisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRDZWxsKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BS
OgorICAgICAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgIEFTU0VSVChjYWxsZWVDYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmNvbnN0YW50KCkuaXNDZWxsKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0K
KworICAgIC8vIFRoaXMgd2lsbCBlbWl0IGNvZGUgdG8gYnVpbGQgdGhlIG5ldyBmcmFtZSBvdmVy
IHRoZSBvbGQgb25lLgorICAgIHZvaWQgcHJlcGFyZUZvclRhaWxDYWxsKCk7CisKKyAgICAvLyBU
aGlzIHdpbGwgZW1pdCBjb2RlIHRvIGJ1aWxkIHRoZSBuZXcgZnJhbWUgYXMgaWYgcGVyZm9ybWlu
ZyBhCisgICAgLy8gcmVndWxhciBjYWxsLiBIb3dldmVyLCB0aGUgY2FsbGVlIHNhdmUgcmVnaXN0
ZXJzIHdpbGwgYmUKKyAgICAvLyByZXN0b3JlZCwgYW5kIGFueSBsb2NhbHMgKG5vdCB0aGUgaGVh
ZGVyIG9yIGFyZ3VtZW50cykgb2YgdGhlCisgICAgLy8gY3VycmVudCBmcmFtZSBjYW4gYmUgb3Zl
cndyaXR0ZW4uCisgICAgLy8KKyAgICAvLyBBIGZyYW1lIGJ1aWx0IHVzaW5nIHByZXBhcmVGb3JT
bG93UGF0aCgpIHNob3VsZCBiZSB1c2VkIGVpdGhlcgorICAgIC8vIHRvIHRocm93IGFuIGV4Y2Vw
dGlvbiBpbiwgb3IgZGVzdHJveWVkIHVzaW5nCisgICAgLy8gQ0NhbGxIZWxwZXJzOjpwcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCkgZm9sbG93ZWQgYnkgYSB0YWlsIGNhbGwuCisgICAgdm9pZCBwcmVw
YXJlRm9yU2xvd1BhdGgoKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CisKKyAgICBDQ2FsbEhlbHBlcnMmIG1faml0OworCisgICAgdm9pZCBwcmVw
YXJlQW55KCk7CisKKyAgICB2b2lkIHNwaWxsKENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICAvLyAi
Ym94IiBpcyBhcmd1YWJseSBhIGJhZCBuYW1lIGhlcmUuIFRoZSBtZWFuaW5nIGlzIHRoYXQgYWZ0
ZXIKKyAgICAvLyBjYWxsaW5nIGVtaXRCb3goKSwgeW91ciBlbnN1cmUgdGhhdCBzdWJzZXF1ZW50
bHkgY2FsbGluZworICAgIC8vIGVtaXRTdG9yZSgpIHdpbGwgYmUgYWJsZSB0byBzdG9yZSB0aGUg
dmFsdWUgd2l0aG91dCBhZGRpdGlvbmFsCisgICAgLy8gdHJhbnNmb3JtYXRpb24uIEluIHBhcnRp
Y3VsYXIsIHRoaXMgaXMgYSBuby1vcCBmb3IgY29uc3RhbnRzLAorICAgIC8vIGFuZCBpcyBhIGNv
bXBsZXRlIG5vLW9wIG9uIDMyYml0cyBzaW5jZSBhbnkgdW5ib3hlZCB2YWx1ZSBjYW4KKyAgICAv
LyBzdGlsbCBiZSBzdG9yZWQgYnkgc3RvcmluZyB0aGUgcGF5bG9hZCBhbmQgYSBzdGF0aWNhbGx5
IGtub3duCisgICAgLy8gdGFnLgorICAgIHZvaWQgZW1pdEJveChDYWNoZWRSZWNvdmVyeSYpOwor
ICAgIGJvb2wgY2FuQm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7Cisg
ICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigpICYmIGdldEZyZWVH
UFIoKSA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0ZQUigpICYmIGdldEZyZWVGUFIo
KSA9PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICB2b2lkIGVuc3VyZUJveChDYWNoZWRSZWNvdmVyeSYg
Y2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoY2FuQm94KGNhY2hlZFJlY292ZXJ5
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkuYm94
aW5nUmVxdWlyZXNHUFIoKSkKKyAgICAgICAgICAgIGVuc3VyZUdQUigpOworCisgICAgICAgIGlm
IChjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0ZQUigpKQorICAgICAgICAgICAgZW5zdXJl
RlBSKCk7CisgICAgfQorCisgICAgdm9pZCBlbWl0TG9hZChDYWNoZWRSZWNvdmVyeSYpOworICAg
IGJvb2wgY2FuTG9hZChDYWNoZWRSZWNvdmVyeSYpOworICAgIHZvaWQgZW5zdXJlTG9hZChDYWNo
ZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoY2FuTG9hZChj
YWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQVNTRVJUKGNh
Y2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpIHx8IGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQ
UigpKTsKKworICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBSKCkpIHsKKyAg
ICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSkKKyAgICAgICAgICAg
ICAgICBlbnN1cmVSZWdpc3RlcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGVuc3VyZUZQUigpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGVuc3VyZUdQUigpOwor
ICAgIH0KKworICAgIGJvb2wgY2FuTG9hZEFuZEJveChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVj
b3ZlcnkpCisgICAgeworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGludGVyZmVyaW5nIGxvYWRz
ICYgYm94ZXMKKyAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSB8
fCAhY2FjaGVkUmVjb3ZlcnkuYm94aW5nUmVxdWlyZXNGUFIoKSk7CisgICAgICAgIEFTU0VSVCgh
Y2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgfHwgIWNhY2hlZFJlY292ZXJ5LmJveGluZ1Jl
cXVpcmVzR1BSKCkpOworCisgICAgICAgIHJldHVybiBjYW5Mb2FkKGNhY2hlZFJlY292ZXJ5KSAm
JiBjYW5Cb3goY2FjaGVkUmVjb3ZlcnkpOworICAgIH0KKworICAgIERhdGFGb3JtYXQgZW1pdFN0
b3JlKENhY2hlZFJlY292ZXJ5JiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MpOworCisgICAgdm9p
ZCBlbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIHZvaWQgZW1pdERlbHRhQ2hl
Y2soKTsKKworICAgIEJhZzxDYWNoZWRSZWNvdmVyeT4gbV9jYWNoZWRSZWNvdmVyaWVzOworCisg
ICAgdm9pZCB1cGRhdGVSZWNvdmVyeShDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnksIFZh
bHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBjbGVhckNhY2hlZFJlY292ZXJ5
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRS
ZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIHNldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5LCAm
Y2FjaGVkUmVjb3ZlcnkpOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRDYWNoZWRS
ZWNvdmVyeShWYWx1ZVJlY292ZXJ5KTsKKworICAgIENhY2hlZFJlY292ZXJ5KiBzZXRDYWNoZWRS
ZWNvdmVyeShWYWx1ZVJlY292ZXJ5LCBDYWNoZWRSZWNvdmVyeSopOworCisgICAgdm9pZCBjbGVh
ckNhY2hlZFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBp
ZiAoIXJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIHNldENhY2hlZFJlY292ZXJ5
KHJlY292ZXJ5LCBudWxscHRyKTsKKyAgICB9CisKKyAgICBDYWNoZWRSZWNvdmVyeSogYWRkQ2Fj
aGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmIChy
ZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICByZXR1cm4gbV9jYWNoZWRSZWNvdmVy
aWVzLmFkZChyZWNvdmVyeSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVy
eSA9IGdldENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZWNv
dmVyeSkKKyAgICAgICAgICAgIHJldHVybiBzZXRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSwgbV9j
YWNoZWRSZWNvdmVyaWVzLmFkZChyZWNvdmVyeSkpOworICAgICAgICByZXR1cm4gY2FjaGVkUmVj
b3Zlcnk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgY3VycmVudCByZWNvdmVyaWVzIHBy
ZXNlbnQgaW4gdGhlIG9sZCBmcmFtZSdzCisgICAgLy8gc2xvdHMuIEEgbnVsbCBDYWNoZWRSZWNv
dmVyeSBtZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQKKyAgICAvLyB2YWx1ZSBhcyB3ZSBk
b24ndCBjYXJlIGFib3V0IGl0LgorICAgIFZlY3RvcjxDYWNoZWRSZWNvdmVyeSo+IG1fb2xkRnJh
bWU7CisKKyAgICBpbnQgbnVtTG9jYWxzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X29sZEZyYW1lLnNpemUoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgIH0K
KworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX29sZEZyYW1lW0pTU3RhY2s6OkNhbGxlckZyYW1lQW5k
UENTaXplIC0gcmVnLm9mZnNldCgpIC0gMV07CisgICAgfQorCisgICAgdm9pZCBzZXRPbGQoVmly
dHVhbFJlZ2lzdGVyIHJlZywgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQorICAgIHsK
KyAgICAgICAgbV9vbGRGcmFtZVtKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSAtIHJlZy5v
ZmZzZXQoKSAtIDFdID0gY2FjaGVkUmVjb3Zlcnk7CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lz
dGVyIGZpcnN0T2xkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0
ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KC1udW1Mb2NhbHMoKSkgfTsKKyAgICB9CisKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbGFzdE9sZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVh
bFJlZ2lzdGVyIHsgSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgLSAxIH07CisgICAgfQor
CisgICAgYm9vbCBpc1ZhbGlkT2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0T2xkKCkgJiYgcmVnIDw9IGxhc3RPbGQoKTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIHN0b3JlcywgZm9yIGVhY2ggc2xvdCBpbiB0aGUgbmV3IGZyYW1l
LCBpbmZvcm1hdGlvbiBhYm91dAorICAgIC8vIHRoZSByZWNvdmVyeSBmb3IgdGhlIHZhbHVlIHRo
YXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0CisgICAgLy8gc2xvdC4KKyAgICAvLwor
ICAgIC8vIE9uY2UgdGhlIHNsb3QgaGFzIGJlZW4gd3JpdHRlbiwgdGhlIGNvcnJlc3BvbmRpbmcg
ZW50cnkgaW4KKyAgICAvLyBtX25ld0ZyYW1lIHdpbGwgYmUgZW1wdHkuCisgICAgVmVjdG9yPENh
Y2hlZFJlY292ZXJ5Kj4gbV9uZXdGcmFtZTsKKworICAgIHNpemVfdCBhcmdDb3VudCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZS5zaXplKCkgLSBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXROZXcoVmly
dHVhbFJlZ2lzdGVyIG5ld1JlZ2lzdGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bmV3RnJhbWVbbmV3UmVnaXN0ZXIub2Zmc2V0KCldOworICAgIH0KKworICAgIHZvaWQgc2V0TmV3
KFZpcnR1YWxSZWdpc3RlciBuZXdSZWdpc3RlciwgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292
ZXJ5KQorICAgIHsKKyAgICAgICAgbV9uZXdGcmFtZVtuZXdSZWdpc3Rlci5vZmZzZXQoKV0gPSBj
YWNoZWRSZWNvdmVyeTsKKyAgICB9CisKKyAgICB2b2lkIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIg
bmV3UmVnaXN0ZXIsIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBDYWNo
ZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7
CisgICAgICAgIGNhY2hlZFJlY292ZXJ5LT5hZGRUYXJnZXQobmV3UmVnaXN0ZXIpOworICAgICAg
ICBzZXROZXcobmV3UmVnaXN0ZXIsIGNhY2hlZFJlY292ZXJ5KTsKKyAgICB9CisKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZmlyc3ROZXcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFZpcnR1
YWxSZWdpc3RlciB7IDAgfTsKKyAgICB9CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbGFzdE5ldygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgc3RhdGljX2Nh
c3Q8aW50PihtX25ld0ZyYW1lLnNpemUoKSkgLSAxIH07CisgICAgfQorCisgICAgYm9vbCBpc1Zh
bGlkTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
cmVnID49IGZpcnN0TmV3KCkgJiYgcmVnIDw9IGxhc3ROZXcoKTsKKyAgICB9CisKKworICAgIGlu
dCBtX2FsaWduZWRPbGRGcmFtZVNpemU7CisgICAgaW50IG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZTsK
KworICAgIC8vIFRoaXMgaXMgdGhlIGRpc3RhbmNlLCBpbiBzbG90cywgYmV0d2VlbiB0aGUgYmFz
ZSBvZiB0aGUgbmV3CisgICAgLy8gZnJhbWUgYW5kIHRoZSBiYXNlIG9mIHRoZSBvbGQgZnJhbWUu
IEl0IGNvdWxkIGJlIG5lZ2F0aXZlIHdoZW4KKyAgICAvLyBwcmVwYXJpbmcgZm9yIGEgdGFpbCBj
YWxsIHRvIGEgZnVuY3Rpb24gd2l0aCBzbWFsbGVyIGFyZ3VtZW50CisgICAgLy8gY291bnQuCisg
ICAgLy8KKyAgICAvLyBXZSB3aWxsIG92ZXJ3cml0ZSB0aGlzIGFwcHJvcHJpYXRlbHkgZm9yIHNs
b3cgcGF0aCBjYWxscywgYnV0CisgICAgLy8gd2UgaW5pdGlhbGl6ZSBpdCBhcyBpZiBkb2luZyBh
IGZhc3QgcGF0aCBmb3IgdGhlIHNwaWxscyB3ZQorICAgIC8vIGNvdWxkIGRvIHdoaWxlIHVuZGVj
aWRlZCAodHlwaWNhbGx5IHdoaWxlIGNhbGxpbmcgYWNxdWlyZUdQUigpCisgICAgLy8gZm9yIGEg
cG9seW1vcnBoaWMgY2FsbCkuCisgICAgaW50IG1fZnJhbWVEZWx0YSB7IG1fYWxpZ25lZE5ld0Zy
YW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSB9OworCisgICAgVmlydHVhbFJlZ2lzdGVy
IG5ld0FzT2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gcmVnIC0gbV9mcmFtZURlbHRhOworICAgIH0KKworICAgIC8vIFRoaXMgc3RvcmVzIHRoZSBz
ZXQgb2YgbG9ja2VkIHJlZ2lzdGVycywgaS5lLiByZWdpc3RlcnMgZm9yCisgICAgLy8gd2hpY2gg
d2UgaGF2ZSBhbiBpbXBsaWNpdCByZXF1aXJlbWVudCB0aGF0IHRoZXkgYXJlIG5vdCBjaGFuZ2Vk
LgorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHVzdWFsbHkgY29udGFpbnMgdGhlIGxpbmsgcmVn
aXN0ZXIgb24gYXJjaGl0ZWN0dXJlcworICAgIC8vIHRoYXQgaGF2ZSBvbmUsIGFueSBzY3JhdGNo
IHJlZ2lzdGVyIHVzZWQgYnkgdGhlIG1hY3JvIGFzc2VtYmxlcgorICAgIC8vIChlLmcuIHIxMSBv
biBYODZfNjQpLCBhcyB3ZWxsIGFzIGFueSByZWdpc3RlciB0aGF0IHdlIHVzZSBmb3IKKyAgICAv
LyBhZGRyZXNzaW5nIChzZWUgbV9vbGRGcmFtZUJhc2UgYW5kIG1fbmV3RnJhbWVCYXNlKS4KKyAg
ICAvLworICAgIC8vIFdlIGFsc28gdXNlIHRoaXMgdG8gbG9jayByZWdpc3RlcnMgdGVtcG9yYXJp
bHksIGZvciBpbnN0YW5jZSB0bworICAgIC8vIGVuc3VyZSB0aGF0IHdlIGhhdmUgYXQgbGVhc3Qg
MiBhdmFpbGFibGUgcmVnaXN0ZXJzIGZvciBsb2FkaW5nCisgICAgLy8gYSBwYWlyIG9uIDMyYml0
cy4KKyAgICBSZWdpc3RlclNldCBtX2xvY2tlZFJlZ2lzdGVyczsKKworICAgIC8vIFRoaXMgc3Rv
cmVzIHRoZSBjdXJyZW50IHJlY292ZXJpZXMgcHJlc2VudCBpbiByZWdpc3RlcnMuIEEgbnVsbAor
ICAgIC8vIENhY2hlZFJlY292ZXJ5IG1lYW5zIHdlIGNhbiB0cmFzaCB0aGUgY3VycmVudCB2YWx1
ZSBhcyB3ZSBkb24ndAorICAgIC8vIGNhcmUgYWJvdXQgaXQuIAorICAgIFJlZ2lzdGVyTWFwPENh
Y2hlZFJlY292ZXJ5Kj4gbV9yZWdpc3RlcnM7CisKKyAgICAvLyBUaGlzIHN0b3JlcywgZm9yIGVh
Y2ggcmVnaXN0ZXIsIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNvdmVyeQorICAgIC8vIGZvciB0
aGUgdmFsdWUgdGhhdCBzaG91bGQgZXZlbnR1YWxseSBnbyBpbnRvIHRoYXQgcmVnaXN0ZXIuIFRo
ZQorICAgIC8vIG9ubHkgcmVnaXN0ZXJzIHRoYXQgaGF2ZSBhIHRhcmdldCByZWNvdmVyeSB3aWxs
IGJlIGNhbGxlZS1zYXZlCisgICAgLy8gcmVnaXN0ZXJzLCBhcyB3ZWxsIGFzIHBvc3NpYmx5IG9u
ZSBKU1ZhbHVlUmVncyBmb3IgaG9sZGluZyB0aGUKKyAgICAvLyBjYWxsZWUuCisgICAgLy8KKyAg
ICAvLyBPbmNlIHRoZSBjb3JyZWN0IHZhbHVlIGhhcyBiZWVuIHB1dCBpbnRvIHRoZSByZWdpc3Rl
cnMsIGFuZAorICAgIC8vIGNvbnRyYXJ5IHRvIHdoYXQgd2UgZG8gd2l0aCBtX25ld0ZyYW1lLCB3
ZSBrZWVwIHRoZSBlbnRyeSBpbgorICAgIC8vIG1fbmV3UmVnaXN0ZXJzIHRvIHNpbXBsaWZ5IHNw
aWxsaW5nLgorICAgIC8vCisgICAgLy8gRklYTUU6IENvbnRyYXJ5IHRvIHdoYXQgdGhlIG5hbWUg
c3VnZ2VzdHMsIHdlIG9ubHkgc3VwcG9ydCBHUFJzCisgICAgLy8gZm9yIG5vdy4KKyAgICBSZWdp
c3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fbmV3UmVnaXN0ZXJzOworCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hlY2tGdW5jdG9yPgorICAgIFJlZyBnZXRGcmVlUmVnaXN0ZXIoY29uc3QgQ2hl
Y2tGdW5jdG9yJiBjaGVjaykgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBub25UZW1wIHsgfTsK
KyAgICAgICAgZm9yIChSZWcgcmVnIHsgUmVnOjpmaXJzdCgpIH07IHJlZyA8PSBSZWc6Omxhc3Qo
KTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJz
LmdldChyZWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAo
IWNoZWNrKHJlZykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlm
ICghbV9yZWdpc3RlcnNbcmVnXSkgeworICAgICAgICAgICAgICAgIGlmICghbV9uZXdSZWdpc3Rl
cnNbcmVnXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICAgICAgICAgICAg
ICBpZiAoIW5vblRlbXApCisgICAgICAgICAgICAgICAgICAgIG5vblRlbXAgPSByZWc7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vblRlbXA7CisgICAgfQorCisg
ICAgR1BSUmVnIGdldEZyZWVHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVnIGZyZWVHUFIg
eyBnZXRGcmVlUmVnaXN0ZXIoW10gKFJlZyByZWcpIHsgcmV0dXJuIHJlZy5pc0dQUigpOyB9KSB9
OworICAgICAgICBpZiAoIWZyZWVHUFIpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJl
ZzsKKyAgICAgICAgcmV0dXJuIGZyZWVHUFIuZ3ByKCk7CisgICAgfQorCisgICAgRlBSUmVnIGdl
dEZyZWVGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVnIGZyZWVGUFIgeyBnZXRGcmVlUmVn
aXN0ZXIoW10gKFJlZyByZWcpIHsgcmV0dXJuIHJlZy5pc0ZQUigpOyB9KSB9OworICAgICAgICBp
ZiAoIWZyZWVGUFIpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEZQUlJlZzsKKyAgICAgICAg
cmV0dXJuIGZyZWVGUFIuZnByKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNGcmVlUmVnaXN0ZXIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KGdldEZyZWVS
ZWdpc3RlcihbXSAoUmVnKSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgfQorCisgICAgLy8gVGhp
cyBmcmVlcyB1cCBhIHJlZ2lzdGVyIHNhdGlzZnlpbmcgdGhlIGNoZWNrIGZ1bmN0b3IgKHRoaXMK
KyAgICAvLyBmdW5jdG9yIGNvdWxkIHRoZW9yZXRpY2FsbHkgaGF2ZSBhbnkga2luZCBvZiBsb2dp
YywgYnV0IGl0IG11c3QKKyAgICAvLyBlbnN1cmUgdGhhdCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRy
dWUgZm9yIHJlZ2lzdGVycyAtIHNwaWxsCisgICAgLy8gYXNzdW1lcyBhbmQgYXNzZXJ0cyB0aGF0
IGl0IGlzIHBhc3NlZCBhIGNhY2hlZFJlY292ZXJ5IHN0b3JlZCBpbiBhCisgICAgLy8gcmVnaXN0
ZXIpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrRnVuY3Rvcj4KKyAgICB2b2lkIGVuc3Vy
ZVJlZ2lzdGVyKGNvbnN0IENoZWNrRnVuY3RvciYgY2hlY2spCisgICAgeworICAgICAgICAvLyBJ
ZiB3ZSBjYW4gc3BpbGwgYSBjYWxsZWUtc2F2ZSwgdGhhdCdzIGJlc3QsIGJlY2F1c2UgaXQgd2ls
bAorICAgICAgICAvLyBmcmVlIHVwIGEgcmVnaXN0ZXIgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmVl
biB0YWtlbiBmb3IgdGhlCisgICAgICAgIC8vIGxvbmdlc3QgYW1vdW50IG9mIHRpbWUuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIHRyeSB0byBiaWFzIHRvd2FyZHMgdGhvc2UgdGhh
dCBhcmUgbm90IGluIHRoZWlyCisgICAgICAgIC8vIHRhcmdldCByZWdpc3RlcnMgeWV0LCBidXQg
dGhlIGdhaW4gaXMgcHJvYmFibHkgc3VwZXIKKyAgICAgICAgLy8gc21hbGwuIFVubGVzcyB5b3Ug
aGF2ZSBhIGh1Z2UgbnVtYmVyIG9mIGFyZ3VtZW50IChhdCBsZWFzdAorICAgICAgICAvLyBhcm91
bmQgdHdpY2UgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgcmVnaXN0ZXJzIG9uIHlvdXIKKyAgICAg
ICAgLy8gYXJjaGl0ZWN0dXJlKSwgbm8gc3BpbGxpbmcgaXMgZ29pbmcgdG8gdGFrZSBwbGFjZSBh
bnl3YXlzLgorICAgICAgICBmb3IgKFJlZyByZWcgeyBSZWc6OmZpcnN0KCkgfTsgcmVnIDw9IFJl
Zzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CisgICAgICAgICAgICBpZiAobV9sb2NrZWRS
ZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3JlZ10g
fTsKKyAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgIGlmIChjaGVjaygqY2FjaGVkUmVjb3ZlcnkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IiwgY2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIgbG9va3MgbGlrZSBhIGdvb2Qgc3BpbGwg
Y2FuZGlkYXRlXG4iKTsKKyAgICAgICAgICAgICAgICBzcGlsbCgqY2FjaGVkUmVjb3ZlcnkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIC8vIFdlIHVzZSB0aGUgY2FjaGVkUmVjb3ZlcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJz
dCBuZXcgc2xvdCB3ZQorICAgICAgICAvLyBjYW4sIGJlY2F1c2UgdGhhdCBpcyB0aGUgb25lIGZv
ciB3aGljaCBhIHdyaXRlIHdpbGwgYmUKKyAgICAgICAgLy8gcG9zc2libGUgdGhlIGxhdGVzdCwg
aS5lLiB0aGF0IGlzIHRoZSBvbmUgdGhhdCB3ZSB3b3VsZAorICAgICAgICAvLyBoYXZlIGhhZCB0
byByZXRhaW4gaW4gcmVnaXN0ZXJzIGZvciB0aGUgbG9uZ2VzdC4KKyAgICAgICAgZm9yIChWaXJ0
dWFsUmVnaXN0ZXIgcmVnIHsgZmlyc3ROZXcoKSB9OyByZWcgPD0gbGFzdE5ldygpOyByZWcgKz0g
MSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5IHsgZ2V0TmV3
KHJlZykgfTsKKyAgICAgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChjaGVjaygqY2FjaGVkUmVjb3ZlcnkpKSB7
CisgICAgICAgICAgICAgICAgc3BpbGwoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlUmVnaXN0ZXIoKQor
ICAgIHsKKyAgICAgICAgaWYgKGhhc0ZyZWVSZWdpc3RlcigpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5n
IGEgcmVnaXN0ZXIgdG8gc3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAg
ICAgICAgIFt0aGlzXSAoY29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAh
bV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOwor
I2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
dGFnR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMu
Z2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAg
ICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZUdQUigpCisgICAgeworICAgICAgICBpZiAo
Z2V0RnJlZUdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcgYSBHUFIg
dG8gc3BpbGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlz
XSAoY29uc3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmdwcigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIGlm
IChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpLnRhZ0dQUigpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1f
bG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxvYWRHUFIo
KSk7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVGUFIoKQorICAg
IHsKKyAgICAgICAgaWYgKGdldEZyZWVGUFIoKSAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
ICBGaW5kaW5nIGFuIEZQUiB0byBzcGlsbFxuIik7CisgICAgICAgIGVuc3VyZVJlZ2lzdGVyKAor
ICAgICAgICAgICAgW3RoaXNdIChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3Zlcnkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBS
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIENhY2hlZFJlY292ZXJ5KiBnZXRO
ZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MpIGNvbnN0CisgICAgeworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5ncHIoKV07Cisj
ZWxzZQorICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBqc1ZhbHVlUmVncy50YWdHUFIoKSA9
PSBJbnZhbGlkR1BSUmVnIHx8IGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSA9PSBJbnZhbGlkR1BS
UmVnCisgICAgICAgICAgICB8fCBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BS
KCldID09IG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXSk7CisgICAgICAgIGlm
IChqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IHJldHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy50YWdHUFIoKV07CisgICAgICAgIHJl
dHVybiBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldOworI2VuZGlmCisg
ICAgfQorCisgICAgdm9pZCBhZGROZXcoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIFZhbHVlUmVj
b3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBBU1NFUlQoanNWYWx1ZVJlZ3MgJiYgIWdl
dE5ldyhqc1ZhbHVlUmVncykpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3Zl
cnkgPSBhZGRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVCghY2FjaGVk
UmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+
c2V0V2FudGVkSlNWYWx1ZVJlZ3MoanNWYWx1ZVJlZ3MpOworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLmdwcigpXSA9IGNhY2hlZFJlY292ZXJ5
OworI2Vsc2UKKyAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MucGF5bG9hZEdQ
UigpXSA9IGNhY2hlZFJlY292ZXJ5OworICAgICAgICBpZiAoanNWYWx1ZVJlZ3MudGFnR1BSKCkg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdz
LnRhZ0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2VuZGlmCisgICAgfQorCisgICAgLy8gbV9v
bGRGcmFtZUJhc2UgaXMgdGhlIHJlZ2lzdGVyIHJlbGF0aXZlIHRvIHdoaWNoIHdlIGFjY2Vzcwor
ICAgIC8vIHNsb3RzIGluIHRoZSBvbGQgY2FsbCBmcmFtZSwgd2l0aCBhbiBhZGRpdGlvbmFsIG9m
ZnNldCBvZgorICAgIC8vIG1fb2xkRnJhbWVPZmZzZXQuCisgICAgLy8KKyAgICAvLyAgLSBGb3Ig
YW4gYWN0dWFsIHRhaWwgY2FsbCwgbV9vbGRGcmFtZUJhc2UgaXMgdGhlIHN0YWNrCisgICAgLy8g
ICAgcG9pbnRlciwgYW5kIG1fb2xkRnJhbWVPZmZzZXQgaXMgdGhlIG51bWJlciBvZiBsb2NhbHMg
b2YgdGhlCisgICAgLy8gICAgdGFpbCBjYWxsZXIncyBmcmFtZS4gV2UgdXNlIHN1Y2ggc3RhY2sg
cG9pbnRlci1iYXNlZAorICAgIC8vICAgIGFkZHJlc3NpbmcgYmVjYXVzZSBpdCBhbGxvd3MgdXMg
dG8gbG9hZCB0aGUgdGFpbCBjYWxsZXIncworICAgIC8vICAgIGNhbGxlcidzIGZyYW1lIHBvaW50
ZXIgaW4gdGhlIGZyYW1lIHBvaW50ZXIgcmVnaXN0ZXIKKyAgICAvLyAgICBpbW1lZGlhdGVseSBp
bnN0ZWFkIG9mIGF3a3dhcmRseSBrZWVwaW5nIGl0IGFyb3VuZCBvbiB0aGUKKyAgICAvLyAgICBz
dGFjay4KKyAgICAvLworICAgIC8vICAtIEZvciBhIHNsb3cgcGF0aCBjYWxsLCBtX29sZEZyYW1l
QmFzZSBpcyBqdXN0IHRoZSBmcmFtZQorICAgIC8vICAgIHBvaW50ZXIsIGFuZCBtX29sZEZyYW1l
T2Zmc2V0IGlzIDAuIFdlIGNvdWxkIAorICAgIEdQUlJlZyBtX29sZEZyYW1lQmFzZSB7IE1hY3Jv
QXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciB9OworICAgIGludCBtX29sZEZyYW1lT2Zm
c2V0IHsgMCB9OworCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzc0Zvck9sZChW
aXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG1fb2xkRnJhbWVCYXNlLAorICAgICAgICAgICAgKG1fb2xkRnJhbWVP
ZmZzZXQgKyByZWcub2Zmc2V0KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgfQorCisgICAg
Ly8gbV9uZXdGcmFtZUJhc2UgaXMgdGhlIHJlZ2lzdGVyIHJlbGF0aXZlIHRvIHdoaWNoIHdlIGFj
Y2VzcworICAgIC8vIHNsb3RzIGluIHRoZSBuZXcgY2FsbCBmcmFtZSwgYW5kIHdlIGFsd2F5cyBt
YWtlIGl0IHBvaW50IHRvCisgICAgLy8gd2hlcmV2ZXIgdGhlIHN0YWNrIHBvaW50ZXIgd2lsbCBi
ZSByaWdodCBiZWZvcmUgbWFraW5nIHRoZQorICAgIC8vIGFjdHVhbCBjYWxsL2p1bXAuIFRoZSBh
Y3R1YWwgYmFzZSBvZiB0aGUgbmV3IGZyYW1lIGlzIGF0IG9mZnNldAorICAgIC8vIG1fbmV3RnJh
bWVPZmZzZXQgcmVsYXRpdmUgdG8gbV9uZXdGcmFtZUJhc2UuCisgICAgLy8KKyAgICAvLyAgLSBG
b3IgYW4gYWN0dWFsIHRhaWwgY2FsbCwgbV9uZXdGcmFtZUJhc2UgaXMgY29tcHV0ZWQKKyAgICAv
LyAgICBkeW5hbWljYWxseSwgYW5kIG1fbmV3RnJhbWVPZmZzZXQgdmFyaWVzIGJldHdlZW4gMCBh
bmQgLTIKKyAgICAvLyAgICBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSdzIGNhbGxpbmcg
Y29udmVudGlvbiAoc2VlCisgICAgLy8gICAgcHJlcGFyZUZvclRhaWxDYWxsKS4KKyAgICAvLwor
ICAgIC8vICAtIEZvciBhIHNsb3cgcGF0aCBjYWxsLCBtX25ld0ZyYW1lQmFzZSBpcyB0aGUgYWN0
dWFsIHN0YWNrCisgICAgLy8gICAgcG9pbnRlciwgYW5kIG1fbmV3RnJhbWVPZmZzZXQgaXMgLSBD
YWxsZXJGcmFtZUFuZFBDU2l6ZSwKKyAgICAvLyAgICBmb2xsb3dpbmcgdGhlIGNvbnZlbnRpb24g
Zm9yIGEgcmVndWxhciBjYWxsLgorICAgIEdQUlJlZyBtX25ld0ZyYW1lQmFzZSB7IEludmFsaWRH
UFJSZWcgfTsKKyAgICBpbnQgbV9uZXdGcmFtZU9mZnNldCB7IDB9OworCisgICAgYm9vbCBpc1Vu
ZGVjaWRlZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9uZXdGcmFtZUJhc2UgPT0g
SW52YWxpZEdQUlJlZzsKKyAgICB9CisKKyAgICBib29sIGlzU2xvd1BhdGgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbmV3RnJhbWVCYXNlID09IE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlcjsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBh
ZGRyZXNzRm9yTmV3KFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9uZXdGcmFtZUJhc2UsCisgICAgICAgICAg
ICAobV9uZXdGcmFtZU9mZnNldCArIHJlZy5vZmZzZXQoKSkgKiBzaXplb2YoUmVnaXN0ZXIpKTsK
KyAgICB9CisKKyAgICAvLyBXZSB1c2UgYSBjb25jZXB0IG9mICJkYW5nZXIgem9uZSIuIFRoZSBk
YW5nZXIgem9uZSBjb25zaXN0cyBvZgorICAgIC8vIGFsbCB0aGUgd3JpdGVzIGluIHRoZSBuZXcg
ZnJhbWUgdGhhdCBjb3VsZCBvdmVybGFwIHdpdGggcmVhZHMKKyAgICAvLyBpbiB0aGUgb2xkIGZy
YW1lLgorICAgIC8vCisgICAgLy8gQmVjYXVzZSB3ZSBjb3VsZCBoYXZlIGEgaGlnaGVyIGFjdHVh
bCBudW1iZXIgb2YgYXJndW1lbnRzIHRoYW4KKyAgICAvLyBwYXJhbWV0ZXJzLCB3aGVuIHByZXBh
cmluZyBhIHRhaWwgY2FsbCwgd2UgbmVlZCB0byBhc3N1bWUgdGhhdAorICAgIC8vIHdyaXRpbmcg
dG8gYSBzbG90IG9uIHRoZSBuZXcgZnJhbWUgY291bGQgb3ZlcmxhcCBub3Qgb25seSB3aXRoCisg
ICAgLy8gdGhlIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiB0aGUgb2xkIGZyYW1lLCBidXQgYWxzbyB3
aXRoIGFueSBzbG90CisgICAgLy8gYWJvdmUgaXQuIFRodXMsIHRoZSBkYW5nZXIgem9uZSBjb25z
aXN0cyBvZiBhbGwgd3JpdGVzIGJldHdlZW4KKyAgICAvLyB0aGUgZmlyc3Qgd3JpdGUgYW5kIHdo
YXQgSSBjYWxsIHRoZSAiZGFuZ2VyIGZyb250aWVyIjogdGhlCisgICAgLy8gaGlnaGVzdCBzbG90
IGluIHRoZSBvbGQgZnJhbWUgd2Ugc3RpbGwgY2FyZSBhYm91dC4gVGh1cywgdGhlCisgICAgLy8g
ZGFuZ2VyIHpvbmUgY29udGFpbnMgYWxsIHRoZSBzbG90cyBiZXR3ZWVuIHRoZSBmaXJzdCBzbG90
IG9mCisgICAgLy8gdGhlIG5ldyBmcmFtZSBhbmQgdGhlIGRhbmdlciBmcm9udGllci4gQmVjYXVz
ZSB0aGUgZGFuZ2VyCisgICAgLy8gZnJvbnRpZXIgaXMgcmVsYXRlZCB0byB0aGUgbmV3IGZyYW1l
LCBpdCBpcyBzdG9yZWQgYXMgYSB2aXJ0dWFsCisgICAgLy8gcmVnaXN0ZXIgKmluIHRoZSBuZXcg
ZnJhbWUqLgorICAgIFZpcnR1YWxSZWdpc3RlciBtX2RhbmdlckZyb250aWVyOworCisgICAgVmly
dHVhbFJlZ2lzdGVyIGRhbmdlckZyb250aWVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VCghaXNVbmRlY2lkZWQoKSk7CisKKyAgICAgICAgcmV0dXJuIG1fZGFuZ2VyRnJvbnRpZXI7Cisg
ICAgfQorCisgICAgYm9vbCBpc0Rhbmdlck5ldyhWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpICYmIGlzVmFsaWROZXcocmVnKSk7
CisgICAgICAgIHJldHVybiByZWcgPD0gZGFuZ2VyRnJvbnRpZXIoKTsKKyAgICB9CisKKyAgICB2
b2lkIHVwZGF0ZURhbmdlckZyb250aWVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNVbmRl
Y2lkZWQoKSk7CisKKyAgICAgICAgbV9kYW5nZXJGcm9udGllciA9IGZpcnN0TmV3KCkgLSAxOwor
ICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciByZWcgeyBsYXN0TmV3KCkgfTsgcmVnID49IGZp
cnN0TmV3KCk7IHJlZyAtPSAxKSB7CisgICAgICAgICAgICBpZiAoIWdldE5ldyhyZWcpIHx8ICFp
c1ZhbGlkT2xkKG5ld0FzT2xkKHJlZykpIHx8ICFnZXRPbGQobmV3QXNPbGQocmVnKSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIG1fZGFuZ2VyRnJvbnRpZXIgPSBy
ZWc7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
IERhbmdlciBmcm9udGllciBub3cgYXQgTkVXICIsIG1fZGFuZ2VyRnJvbnRpZXIsICJcbiIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKCIgIEFsbCBjbGVhciEgRGFuZ2VyIHpvbmUgaXMgZW1wdHkuXG4iKTsK
KyAgICB9CisKKyAgICAvLyBBIHNhZmUgd3JpdGUgaXMgYSB3cml0ZSB0aGF0IG5ldmVyIHdyaXRl
cyBpbnRvIHRoZSBkYW5nZXIgem9uZS4KKyAgICBib29sIGhhc09ubHlTYWZlV3JpdGVzKENhY2hl
ZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoVmly
dHVhbFJlZ2lzdGVyIHRhcmdldCA6IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKSkgeworICAgICAg
ICAgICAgaWYgKGlzRGFuZ2VyTmV3KHRhcmdldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIFlv
dSBtdXN0IGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIGRhbmdlcm91cyB3cml0ZXMgYmVmb3JlCisg
ICAgLy8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAgIGJvb2wgdHJ5V3JpdGVzKENhY2hlZFJl
Y292ZXJ5Jik7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIGVuc3VyZSB0aGF0IHRo
ZXJlIGlzIG5vIGxvbmdlciBhbnkKKyAgICAvLyBwb3NzaWJsZSBzYWZlIHdyaXRlLCBpLmUuIGFs
bCByZW1haW5pbmcgd3JpdGVzIGFyZSBlaXRoZXIgdG8KKyAgICAvLyB0aGUgZGFuZ2VyIHpvbmUg
b3IgY2FsbGVlIHNhdmUgcmVzdG9yYXRpb25zLgorICAgIC8vCisgICAgLy8gSXQgcmV0dXJucyBm
YWxzZSBpZiBpdCB3YXMgdW5hYmxlIHRvIHBlcmZvcm0gc29tZSBzYWZlIHdyaXRlcworICAgIC8v
IGR1ZSB0byBoaWdoIHJlZ2lzdGVyIHByZXNzdXJlLgorICAgIGJvb2wgcGVyZm9ybVNhZmVXcml0
ZXMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
KworI2VuZGlmIC8vIENhbGxGcmFtZVNodWZmbGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmYThl
NDhjODkxMDBhZDk5OWE5ZGUzNGYxNTBjMDQ0YzIwYTQzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwCkBAIC0w
LDAgKzEsMzMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisK
KyNpZiBFTkFCTEUoSklUKSAmJiBVU0UoSlNWQUxVRTMyXzY0KQorCisjaW5jbHVkZSAiQ0NhbGxI
ZWxwZXJzLmgiCisjaW5jbHVkZSAiRGF0YUZvcm1hdC5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RhdGFGb3JtYXQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVt
aXRTdG9yZShDYWNoZWRSZWNvdmVyeSYgbG9jYXRpb24sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
IGFkZHJlc3MpCit7CisgICAgQVNTRVJUKCFsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5KU1N0YWNr
KCkpOworCisgICAgc3dpdGNoIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7Cisg
ICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwKKyAgICAgICAgICAgIGFk
ZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihsb2Nh
dGlvbi5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkp
OworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEludDMyOworICAgIGNhc2UgVW5ib3hlZENlbGxJ
bkdQUjoKKyAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09m
ZnNldCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGxvY2F0aW9uLnJlY292ZXJ5KCkuZ3ByKCks
IGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBEYXRh
Rm9ybWF0Q2VsbDsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBtX2ppdC5zdG9yZVRydXN0
ZWRWYWx1ZShsb2NhdGlvbi5yZWNvdmVyeSgpLmNvbnN0YW50KCksIGFkZHJlc3MpOworICAgICAg
ICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGNhc2UgSW5QYWlyOgorICAgICAgICBtX2ppdC5z
dG9yZVZhbHVlKGxvY2F0aW9uLnJlY292ZXJ5KCkuanNWYWx1ZVJlZ3MoKSwgYWRkcmVzcyk7Cisg
ICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CisgICAgY2FzZSBVbmJveGVkQm9vbGVhbkluR1BS
OgorICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Qm9vbGVhblRhZyksCisgICAgICAgICAgICBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zm
c2V0KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIobG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKSwg
YWRkcmVzcy53aXRoT2Zmc2V0KFBheWxvYWRPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXRCb29sZWFuOworICAgIGNhc2UgSW5GUFI6CisgICAgY2FzZSBVbmJveGVkRG91YmxlSW5G
UFI6CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGxvY2F0aW9uLnJlY292ZXJ5KCkuZnByKCks
IGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIENh
bGxGcmFtZVNodWZmbGVyOjplbWl0Qm94KENhY2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sKKyAg
ICAvLyBOb3RoaW5nIHRvIGRvLCB3ZSdyZSBnb29kISBKU1ZhbHVlcyBhbmQgZG91YmxlcyBjYW4g
YmUgc3RvcmVkCisgICAgLy8gaW1tZWRpYXRlbHksIGFuZCBvdGhlciBmb3JtYXRzIGRvbid0IG5l
ZWQgYW55IHRyYW5zZm9ybWF0aW9uIC0KKyAgICAvLyBqdXN0IHN0b3JpbmcgYSBjb25zdGFudCB0
YWcgc2VwYXJhdGVseS4KKyAgICBBU1NFUlQoY2FuQm94KGxvY2F0aW9uKSk7Cit9CisKK3ZvaWQg
Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKENhY2hlZFJlY292ZXJ5JiBsb2NhdGlvbikKK3sK
KyAgICBpZiAoIWxvY2F0aW9uLnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICogTG9hZGluZyAi
LCBsb2NhdGlvbi5yZWNvdmVyeSgpLCAiIGludG8gIik7CisgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyB7IGxvY2F0aW9uLnJlY292ZXJ5KCkudmlydHVhbFJlZ2lzdGVyKCkgfTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzIHsgYWRkcmVzc0Zvck9sZChyZWcpIH07CisKKyAgICBi
b29sIHRyeUZQUiB7IHRydWUgfTsKKyAgICBKU1ZhbHVlUmVncyB3YW50ZWRKU1ZhbHVlUmVncyB7
IGxvY2F0aW9uLndhbnRlZEpTVmFsdWVSZWdzKCkgfTsKKyAgICBpZiAod2FudGVkSlNWYWx1ZVJl
Z3MpIHsKKyAgICAgICAgaWYgKHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZh
bGlkR1BSUmVnCisgICAgICAgICAgICAmJiAhbV9yZWdpc3RlcnNbd2FudGVkSlNWYWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpXQorICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldCh3YW50
ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkpKQorICAgICAgICAgICAgdHJ5RlBSID0gZmFsc2U7
CisgICAgICAgIGlmICh3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSAhPSBJbnZhbGlkR1BSUmVn
CisgICAgICAgICAgICAmJiAhbV9yZWdpc3RlcnNbd2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCld
CisgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZEpTVmFsdWVSZWdz
LnRhZ0dQUigpKSkKKyAgICAgICAgICAgIHRyeUZQUiA9IGZhbHNlOworICAgIH0KKworICAgIGlm
ICh0cnlGUFIgJiYgbG9jYXRpb24ubG9hZHNJbnRvRlBSKCkpIHsKKyAgICAgICAgRlBSUmVnIHJl
c3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYgKHJlc3VsdEZQUiAhPSBJbnZhbGlk
RlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFkZHJlc3MsIHJlc3VsdEZQ
Uik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQgPSBEYXRhRm9ybWF0SlM7Cisg
ICAgICAgICAgICBpZiAobG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdERvdWJsZSkKKyAgICAgICAgICAgICAgICBkYXRhRm9ybWF0ID0gRGF0YUZvcm1hdERvdWJs
ZTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgICAg
ICBWYWx1ZVJlY292ZXJ5OjppbkZQUihyZXN1bHRGUFIsIGRhdGFGb3JtYXQpKTsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2cobG9jYXRpb24ucmVjb3Zl
cnkoKSwgIlxuIik7CisgICAgICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250
aWVyKCkpKQorICAgICAgICAgICAgICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobG9jYXRpb24ubG9hZHNJ
bnRvR1BSKCkpIHsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiB7IHdhbnRlZEpTVmFsdWVSZWdz
LnBheWxvYWRHUFIoKSB9OworICAgICAgICBpZiAocmVzdWx0R1BSID09IEludmFsaWRHUFJSZWcg
fHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0
R1BSKSkKKyAgICAgICAgICAgIHJlc3VsdEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAgQVNT
RVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihh
ZGRyZXNzLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCksIHJlc3VsdEdQUik7CisgICAgICAgIHVw
ZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BS
KHJlc3VsdEdQUiwgbG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKGxvY2F0aW9uLnJlY292ZXJ5KCksICJc
biIpOworICAgICAgICBpZiAocmVnID09IG5ld0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAg
ICAgICAgICAgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IERpc3BsYWNl
ZEluSlNTdGFjayk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy5w
YXlsb2FkR1BSKCkgfTsKKyAgICBHUFJSZWcgdGFnR1BSIHsgd2FudGVkSlNWYWx1ZVJlZ3MudGFn
R1BSKCkgfTsKKyAgICBpZiAocGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnIHx8IG1fcmVnaXN0
ZXJzW3BheWxvYWRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChwYXlsb2FkR1BSKSkKKyAg
ICAgICAgcGF5bG9hZEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBtX2xvY2tlZFJlZ2lzdGVycy5z
ZXQocGF5bG9hZEdQUik7CisgICAgaWYgKHRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnIHx8IG1fcmVn
aXN0ZXJzW3RhZ0dQUl0gfHwgbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHRhZ0dQUikpCisgICAgICAg
IHRhZ0dQUiA9IGdldEZyZWVHUFIoKTsKKyAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihwYXls
b2FkR1BSKTsKKyAgICBBU1NFUlQocGF5bG9hZEdQUiAhPSBJbnZhbGlkR1BSUmVnICYmIHRhZ0dQ
UiAhPSBJbnZhbGlkR1BSUmVnICYmIHRhZ0dQUiAhPSBwYXlsb2FkR1BSKTsKKyAgICBtX2ppdC5s
b2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSwgcGF5bG9hZEdQUik7Cisg
ICAgbV9qaXQubG9hZFB0cihhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSwgdGFnR1BSKTsK
KyAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6Omlu
UGFpcih0YWdHUFIsIHBheWxvYWRHUFIpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZyhsb2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICBpZiAocmVnID09IG5ld0FzT2xk
KGRhbmdlckZyb250aWVyKCkpKQorICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworfQor
Citib29sIENhbGxGcmFtZVNodWZmbGVyOjpjYW5Mb2FkKENhY2hlZFJlY292ZXJ5JiBsb2NhdGlv
bikKK3sKKyAgICBpZiAoIWxvY2F0aW9uLnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobG9jYXRpb24ubG9hZHNJbnRvRlBSKCkgJiYgZ2V0
RnJlZUZQUigpICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGxvY2F0aW9uLmxvYWRzSW50b0dQUigpICYmIGdldEZyZWVHUFIoKSAhPSBJbnZhbGlkR1BS
UmVnKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgp
LnRlY2huaXF1ZSgpID09IERpc3BsYWNlZEluSlNTdGFjaykgeworICAgICAgICBHUFJSZWcgcGF5
bG9hZEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAgICBpZiAocGF5bG9hZEdQUiA9PSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2xvY2tlZFJl
Z2lzdGVycy5zZXQocGF5bG9hZEdQUik7CisgICAgICAgIEdQUlJlZyB0YWdHUFIgeyBnZXRGcmVl
R1BSKCkgfTsKKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIocGF5bG9hZEdQUik7Cisg
ICAgICAgIHJldHVybiB0YWdHUFIgIT0gSW52YWxpZEdQUlJlZzsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKKy8vIFdlIHByZWZlciBsb2FkaW5nIGRvdWJsZXMgYW5kIHVuZGV0ZXJt
aW5lZCBKU1ZhbHVlcyBpbnRvIEZQUnMKKy8vIGJlY2F1c2UgaXQgd291bGQgb3RoZXJ3aXNlIHVz
ZSB1cCB0d28gR1BScy4KK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUigpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBEb3Vi
bGVEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKworLy8gSW50ZWdlcnMsIGJvb2xlYW5zIGFuZCBjZWxscyBjYW4gYmUgbG9hZGVk
IGludG8gYSBzaW5nbGUgR1BSCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9HUFIoKSBj
b25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2Ug
SW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBCb29sZWFuRGlzcGxhY2VkSW5KU1N0
YWNrOgorICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2
b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0
aW9uKQoreworICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKSk7
CisgICAgSlNWYWx1ZVJlZ3Mgd2FudGVkSlNWYWx1ZVJlZ3MgeyBsb2NhdGlvbi53YW50ZWRKU1Zh
bHVlUmVncygpIH07CisgICAgQVNTRVJUKHdhbnRlZEpTVmFsdWVSZWdzKTsKKworICAgIEdQUlJl
ZyB3YW50ZWRUYWdHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSB9OworICAgIEdQUlJl
ZyB3YW50ZWRQYXlsb2FkR1BSIHsgd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpIH07Cisg
ICAgCisgICAgaWYgKHdhbnRlZFRhZ0dQUiAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIEFT
U0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFRhZ0dQUikpOworICAgICAgICBpZiAo
Q2FjaGVkUmVjb3ZlcnkqIGN1cnJlbnRUYWcgeyBtX3JlZ2lzdGVyc1t3YW50ZWRUYWdHUFJdIH0p
IHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50VGFnID09ICZsb2NhdGlvbikgeworICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICArICIs
IHdhbnRlZFRhZ0dQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgY2FuIG5ldmVyIGhhcHBlbiBvbiAzMmJpdCBwbGF0Zm9ybXMgc2lu
Y2Ugd2UKKyAgICAgICAgICAgICAgICAvLyBoYXZlIGF0IG1vc3Qgb25lIHdhbnRlZCBKU1ZhbHVl
UmVncywgZm9yIHRoZQorICAgICAgICAgICAgICAgIC8vIGNhbGxlZSwgYW5kIG5vIGNhbGxlZS1z
YXZlIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHdhbnRlZFBh
eWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZykgeworICAgICAgICBBU1NFUlQoIW1fbG9ja2VkUmVn
aXN0ZXJzLmdldCh3YW50ZWRQYXlsb2FkR1BSKSk7CisgICAgICAgIGlmIChDYWNoZWRSZWNvdmVy
eSogY3VycmVudFBheWxvYWQgeyBtX3JlZ2lzdGVyc1t3YW50ZWRQYXlsb2FkR1BSXSB9KSB7Cisg
ICAgICAgICAgICBpZiAoY3VycmVudFBheWxvYWQgPT0gJmxvY2F0aW9uKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICsgIiwg
d2FudGVkUGF5bG9hZEdQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFNlZSBhYm92ZQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAobG9jYXRpb24ucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIKKyAgICAgICAgfHwg
bG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luR1BSKCkpIHsKKyAgICAgICAgR1BSUmVnIHBheWxvYWRH
UFI7CisgICAgICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFp
cikKKyAgICAgICAgICAgIHBheWxvYWRHUFIgPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnBheWxvYWRH
UFIoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGxvY2F0aW9uLnJl
Y292ZXJ5KCkuZ3ByKCk7CisKKyAgICAgICAgaWYgKHdhbnRlZFBheWxvYWRHUFIgPT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIHdhbnRlZFBheWxvYWRHUFIgPSBwYXlsb2FkR1BSOworCisg
ICAgICAgIGlmIChwYXlsb2FkR1BSICE9IHdhbnRlZFBheWxvYWRHUFIpIHsKKyAgICAgICAgICAg
IGlmIChsb2NhdGlvbi5yZWNvdmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcgorICAgICAgICAg
ICAgICAgICYmIHdhbnRlZFBheWxvYWRHUFIgPT0gbG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIo
KSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAqIFN3YXBwaW5nICIsIHBheWxvYWRHUFIsICIgYW5kICIsIHdhbnRlZFBheWxv
YWRHUFIsICJcbiIpOworICAgICAgICAgICAgICAgIG1faml0LnN3YXAocGF5bG9hZEdQUiwgd2Fu
dGVkUGF5bG9hZEdQUik7CisgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24s
IAorICAgICAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppblBhaXIocGF5bG9hZEdQUiwg
d2FudGVkUGF5bG9hZEdQUikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3Zpbmcg
IiwgcGF5bG9hZEdQUiwgIiBpbnRvICIsIHdhbnRlZFBheWxvYWRHUFIsICJcbiIpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUocGF5bG9hZEdQUiwgd2FudGVkUGF5bG9hZEdQUik7CisgICAg
ICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWly
KSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGxvY2F0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGxvY2F0aW9uLnJlY292ZXJ5
KCkudGFnR1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FudGVkUGF5bG9hZEdQ
UikpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0
ZVJlY292ZXJ5KGxvY2F0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zl
cnk6OmluR1BSKHdhbnRlZFBheWxvYWRHUFIsIGxvY2F0aW9uLnJlY292ZXJ5KCkuZGF0YUZvcm1h
dCgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHdhbnRlZFRhZ0dQUiA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgd2Fu
dGVkVGFnR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLnJlY292
ZXJ5KCkuZGF0YUZvcm1hdCgpKSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3Zp
bmcgaW50MzIgdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
CisgICAgICAgICAgICAgICAgd2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgY2VsbCB0YWcgaW50byAiLCB3YW50ZWRU
YWdHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLAorICAgICAgICAgICAgICAgIHdhbnRlZFRhZ0dQ
Uik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICog
TW92aW5nIGJvb2xlYW4gdGFnIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29s
ZWFuVGFnKSwKKyAgICAgICAgICAgICAgICB3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEpTOgorICAgICAgICAgICAgQVNTRVJUKHdhbnRl
ZFRhZ0dQUiAhPSBsb2NhdGlvbi5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAg
ICBpZiAod2FudGVkVGFnR1BSICE9IGxvY2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgKiBNb3ZpbmcgIiwgbG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIoKSwgIiBpbnRvICIsIHdh
bnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShsb2NhdGlvbi5y
ZWNvdmVyeSgpLnRhZ0dQUigpLCB3YW50ZWRUYWdHUFIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQobG9jYXRpb24ucmVjb3ZlcnkoKS5pc0luRlBSKCkpOworICAgICAgICBpZiAod2FudGVkVGFn
R1BSID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgICAgIEFTU0VSVCh3YW50ZWRQYXlsb2Fk
R1BSICE9IEludmFsaWRHUFJSZWcpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0
KHdhbnRlZFBheWxvYWRHUFIpOworICAgICAgICAgICAgd2FudGVkVGFnR1BSID0gZ2V0RnJlZUdQ
UigpOworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIod2FudGVkUGF5bG9hZEdQ
Uik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdhbnRlZFBheWxvYWRHUFIgPT0gSW52YWxpZEdQ
UlJlZykgeworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHdhbnRlZFRhZ0dQUik7
CisgICAgICAgICAgICB3YW50ZWRQYXlsb2FkR1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICAg
ICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIod2FudGVkVGFnR1BSKTsKKyAgICAgICAgfQorICAg
ICAgICBtX2ppdC5ib3hEb3VibGUobG9jYXRpb24ucmVjb3ZlcnkoKS5mcHIoKSwgd2FudGVkVGFn
R1BSLCB3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICB9CisgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRp
b24sIFZhbHVlUmVjb3Zlcnk6OmluUGFpcih3YW50ZWRUYWdHUFIsIHdhbnRlZFBheWxvYWRHUFIp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBV
U0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlcjY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZy
YW1lU2h1ZmZsZXI2NC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY2OGQ3ZGRjZjhhZGI1YmQxNTNmMDdjODI4
ZDNiZThjMThjODYxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisKKyNpZiBFTkFCTEUoSklUKSAmJiBVU0Uo
SlNWQUxVRTY0KQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiRGF0YUZv
cm1hdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworRGF0YUZvcm1hdCBDYWxsRnJhbWVTaHVmZmxl
cjo6ZW1pdFN0b3JlKAorICAgIENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBBU1NFUlQoIWNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisKKyAgICBzd2l0Y2ggKGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIEluR1BSOgorICAgICAgICBtX2pp
dC5zdG9yZVB0cihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgor
ICAgICAgICBtX2ppdC5zdG9yZTMyKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIGFk
ZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBEYXRhRm9y
bWF0SW50MzI7CisgICAgY2FzZSBVbmJveGVkSW50NTJJbkdQUjoKKyAgICAgICAgbV9qaXQucnNo
aWZ0NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1v
dW50KSwKKyAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAg
ICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFVuYm94ZWRTdHJpY3RJbnQ1MkluR1BSOgorICAg
ICAgICBtX2ppdC5zdG9yZVB0cihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBhZGRy
ZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjsKKyAgICBjYXNlIFVu
Ym94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEJv
b2xlYW47CisgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICBtX2ppdC5zdG9yZVB0
cihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0
dXJuIERhdGFGb3JtYXRDZWxsOworICAgIGNhc2UgVW5ib3hlZERvdWJsZUluRlBSOgorICAgICAg
ICBtX2ppdC5zdG9yZURvdWJsZShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCBhZGRy
ZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXREb3VibGU7CisgICAgY2FzZSBJbkZQUjoK
KyAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIo
KSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7CisgICAgY2FzZSBDb25z
dGFudDoKKyAgICAgICAgbV9qaXQuc3RvcmVUcnVzdGVkVmFsdWUoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5jb25zdGFudCgpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRK
UzsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveChDYWNoZWRSZWNvdmVy
eSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKGNhbkJveChjYWNoZWRSZWNvdmVyeSkp
OworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzQ29uc3RhbnQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigp
KSB7CisgICAgICAgIHN3aXRjaCAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0
KCkpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKAor
ICAgICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksCisgICAgICAg
ICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgICAgICAv
LyBXZSBoYXZlIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgorICAgICAgICAgICAgbV9qaXQub3I2
NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLAorICAgICAgICAg
ICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgY2Fj
aGVkUmVjb3Zlcnkuc2V0UmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6
aW5HUFIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgRGF0YUZvcm1hdEpTKSk7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAi
LCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIEJveGluZyAiLCBjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIG1faml0LnJzaGlmdDY0KE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksCisgICAgICAgICAgICAgICAg
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgICAgICBjYWNoZWRSZWNv
dmVyeS5zZXRSZWNvdmVyeSgKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpLCBEYXRhRm9ybWF0U3RyaWN0SW50NTIpKTsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRv
ICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdFN0cmljdEludDUyOiB7CisgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIEJveGluZyAiLCBj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIg
PSBnZXRGcmVlRlBSKCk7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0RlBSICE9IEludmFsaWRG
UFJSZWcpOworICAgICAgICAgICAgbV9qaXQuY29udmVydEludDY0VG9Eb3VibGUoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIHVwZGF0ZVJl
Y292ZXJ5KGNhY2hlZFJlY292ZXJ5LCBWYWx1ZVJlY292ZXJ5OjppbkZQUihyZXN1bHRGUFIsIERh
dGFGb3JtYXREb3VibGUpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0Qm9v
bGVhbjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAgICAg
bV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwKKyAg
ICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAg
ICAgIGNhY2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAgICAgICAgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIERhdGFGb3JtYXRK
UykpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
IGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luRlBSKCkpIHsK
KyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERh
dGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOwor
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFs
dWVSZWdzKCkuZ3ByKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0R1BSID09IEludmFsaWRHUFJS
ZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0R1BSXSkKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIg
PSBnZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0R1BSICE9IEludmFsaWRH
UFJSZWcpOworICAgICAgICAgICAgbV9qaXQucHVyaWZ5TmFOKGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZnByKCkpOworICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZVRvNjQoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1faml0LnN1
YjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNv
dmVyeTo6aW5HUFIocmVzdWx0R1BSLCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5
LnJlY292ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0SlMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdExvYWQoQ2Fj
aGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQoreworICAgIGlmICghY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBMb2FkaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCksICIgaW50byAiKTsKKworICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLnZpcnR1YWxSZWdpc3RlcigpOworICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzIGFkZHJlc3MgeyBhZGRyZXNzRm9yT2xkKHJlZykgfTsKKyAgICBib29sIHRyeUZQ
UiB7IHRydWUgfTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSIHsgY2FjaGVkUmVjb3Zlcnkud2FudGVk
SlNWYWx1ZVJlZ3MoKS5ncHIoKSB9OworCisgICAgLy8gSWYgd2Ugd2FudCBhIEdQUiBhbmQgaXQn
cyBhdmFpbGFibGUsIHRoYXQncyBiZXR0ZXIgdGhhbiBsb2FkaW5nCisgICAgLy8gaW50byBhbiBG
UFIuCisgICAgaWYgKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnICYmICFtX3JlZ2lzdGVyc1ty
ZXN1bHRHUFJdCisgICAgICAgICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0R1BSKSAm
JiBjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSkKKyAgICAgICAgdHJ5RlBSID0gZmFsc2U7
CisKKyAgICAvLyBPdGhlcndpc2UsIHdlIHByZWZlciBsb2FkaW5nIGludG8gRlBScyBpZiBwb3Nz
aWJsZQorICAgIGlmICh0cnlGUFIgJiYgY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBSKCkpIHsK
KyAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAgICAgaWYgKHJl
c3VsdEZQUiAhPSBJbnZhbGlkRlBSUmVnKSB7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KGFkZHJlc3MsIHJlc3VsdEZQUik7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGRhdGFGb3JtYXQg
PSBEYXRhRm9ybWF0SlM7CisgICAgICAgICAgICAvLyBXZSBjb3VsZCBiZSB0cmFuc2Zvcm1pbmcg
YSBEYXRhRm9ybWF0Q2VsbCBpbnRvIGEKKyAgICAgICAgICAgIC8vIERhdGFGb3JtYXRKUyBoZXJl
IC0gYnV0IHRoYXQncyBPSy4KKyAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgICAgIGRh
dGFGb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOworICAgICAgICAgICAgdXBkYXRlUmVjb3Zlcnko
Y2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5GUFIocmVz
dWx0RlBSLCBkYXRhRm9ybWF0KSk7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOworICAgICAg
ICAgICAgaWYgKHJlZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAgICAg
ICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0dQUigpKTsK
KyAgICBpZiAocmVzdWx0R1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcmVzdWx0
R1BSXSB8fCBtX2xvY2tlZFJlZ2lzdGVycy5nZXQocmVzdWx0R1BSKSkKKyAgICAgICAgcmVzdWx0
R1BSID0gZ2V0RnJlZUdQUigpOworICAgIEFTU0VSVChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJl
Zyk7CisgICAgbV9qaXQubG9hZFB0cihhZGRyZXNzLCByZXN1bHRHUFIpOworICAgIHVwZGF0ZVJl
Y292ZXJ5KGNhY2hlZFJlY292ZXJ5LAorICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1
bHRHUFIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxu
Iik7CisgICAgaWYgKHJlZyA9PSBuZXdBc09sZChkYW5nZXJGcm9udGllcigpKSkKKyAgICAgICAg
dXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKK30KKworYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6Y2Fu
TG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgaWYgKCFjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNrKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpIHx8IGNhY2hlZFJlY292
ZXJ5LmxvYWRzSW50b0dQUigpKTsKKworICAgIGlmIChjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9G
UFIoKSAmJiBnZXRGcmVlRlBSKCkgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBpZiAoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkgJiYgZ2V0RnJlZUdQ
UigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIENhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9GUFIoKSBjb25zdAor
eworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50ZWNobmlxdWUoKSkgeworICAgIGNhc2UgRG91Ymxl
RGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNh
c2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIENhY2hlZFJl
Y292ZXJ5Ojpsb2Fkc0ludG9HUFIoKSBjb25zdAoreworICAgIHN3aXRjaCAocmVjb3ZlcnkoKS50
ZWNobmlxdWUoKSkgeworICAgIGNhc2UgSW50MzJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2Fz
ZSBJbnQ1MkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIFN0cmljdEludDUyRGlzcGxhY2Vk
SW5KU1N0YWNrOgorICAgIGNhc2UgQm9vbGVhbkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNl
IERpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIENlbGxEaXNwbGFjZWRJbkpTU3RhY2s6Cisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdERpc3BsYWNlKENhY2hl
ZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKS5pc0luUmVnaXN0ZXJzKCkpOworICAgIEdQUlJlZyB3YW50ZWRHUFIgeyBjYWNo
ZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVlUmVncygpLmdwcigpIH07CisgICAgQVNTRVJUKHdhbnRl
ZEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBBU1NFUlQoIW1fbG9ja2VkUmVnaXN0ZXJzLmdl
dCh3YW50ZWRHUFIpKTsKKworICAgIGlmIChDYWNoZWRSZWNvdmVyeSogY3VycmVudCA9IG1fcmVn
aXN0ZXJzW3dhbnRlZEdQUl0pIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0gJmNhY2hlZFJlY292
ZXJ5KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICArICIsIHdhbnRlZEdQUiwgIiBpcyBPS1xuIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gV2UgY291bGQgZG8gYSBtb3JlIGNvbXBsZXggdGhpbmcgYnkg
ZmluZGluZyBjeWNsZXMKKyAgICAgICAgLy8gZXRjLiBpbiB0aGF0IGNhc2UuCisgICAgICAgIC8v
IEhvd2V2ZXIsIGVuZGluZyB1cCBpbiB0aGlzIHNpdHVhdGlvbiB3aWxsIGJlIHN1cGVyCisgICAg
ICAgIC8vIHJhcmUsIGFuZCBzaG91bGQgYWN0dWFsbHkgYmUgb3V0cmlnaHQgaW1wb3NzaWJsZSBm
b3IKKyAgICAgICAgLy8gbm9uLUZUTCB0aWVycywgc2luY2U6CisgICAgICAgIC8vICAoYSkgQWxs
IGRvdWJsZXMgaGF2ZSBiZWVuIGNvbnZlcnRlZCBpbnRvIEpTVmFsdWVzIHdpdGgKKyAgICAgICAg
Ly8gICAgICBWYWx1ZVJlcCBub2Rlcywgc28gRlBScyBhcmUgaW5pdGlhbGx5IGZyZWUKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gIChiKSBUaGUgb25seSByZWNvdmVyaWVzIHdpdGggd2FudGVkIHJl
Z2lzdGVycyBhcmUgdGhlCisgICAgICAgIC8vICAgICAgY2FsbGVlICh3aGljaCBhbHdheXMgc3Rh
cnRzIG91dCBpbiBhIHJlZ2lzdGVyKSBhbmQKKyAgICAgICAgLy8gICAgICB0aGUgY2FsbGVlLXNh
dmUgcmVnaXN0ZXJzCisgICAgICAgIC8vCisgICAgICAgIC8vICAoYykgVGhlIGNhbGxlZS1zYXZl
IHJlZ2lzdGVycyBhcmUgdGhlIGZpcnN0IHRoaW5ncyB3ZQorICAgICAgICAvLyAgICAgIGxvYWQg
KGFmdGVyIHRoZSByZXR1cm4gUEMpLCBhbmQgdGhleSBhcmUgbG9hZGVkIGFzIEpTVmFsdWVzCisg
ICAgICAgIC8vCisgICAgICAgIC8vICAoZCkgV2UgcHJlZmVyIGxvYWRpbmcgSlNWYWx1ZXMgaW50
byBGUFJzIGlmIHRoZWlyCisgICAgICAgIC8vICAgICAgd2FudGVkIEdQUiBpcyBub3QgYXZhaWxh
YmxlCisgICAgICAgIC8vCisgICAgICAgIC8vICAoZSkgSWYgd2UgZW5kIHVwIHNwaWxsaW5nIHNv
bWUgcmVnaXN0ZXJzIHdpdGggYQorICAgICAgICAvLyAgICAgIHRhcmdldCwgd2Ugd29uJ3QgbG9h
ZCB0aGVtIGFnYWluIGJlZm9yZSB0aGUgdmVyeQorICAgICAgICAvLyAgICAgIGVuZCBvZiB0aGUg
YWxnb3JpdGhtCisgICAgICAgIC8vCisgICAgICAgIC8vIENvbWJpbmVkLCB0aGlzIG1lYW5zIHRo
YXQgd2Ugd2lsbCBuZXZlciBsb2FkIGEgcmVjb3ZlcnkKKyAgICAgICAgLy8gd2l0aCBhIHdhbnRl
ZCBHUFIgaW50byBhbnkgR1BSIG90aGVyIHRoYW4gaXRzIHdhbnRlZAorICAgICAgICAvLyBHUFIu
IFRoZSBjYWxsZWUgY291bGQgaG93ZXZlciBoYXZlIGJlZW4gaW5pdGlhbGx5IGluCisgICAgICAg
IC8vIG9uZSBvZiB0aGUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIC0gYnV0IHNpbmNlIHRoZSB3YW50
ZWQKKyAgICAgICAgLy8gR1BSIGZvciB0aGUgY2FsbGVlIGlzIGFsd2F5cyByZWdUMCwgaXQgd2ls
bCBiZSB0aGUKKyAgICAgICAgLy8gZmlyc3Qgb25lIHRvIGJlIGRpc3BsYWNlZCwgYW5kIHdlIHdv
bid0IHNlZSBpdCB3aGVuCisgICAgICAgIC8vIGhhbmRsaW5nIGFueSBvZiB0aGUgY2FsbGVlLXNh
dmUgcmVnaXN0ZXJzLgorICAgICAgICAvLworICAgICAgICAvLyBUaHVzLCB0aGUgb25seSB3YXkg
d2UgY291bGQgZXZlciByZWFjaCB0aGlzIHBhdGggaXMgaW4KKyAgICAgICAgLy8gdGhlIEZUTCwg
d2hlbiB0aGVyZSBpcyBzbyBtdWNoIHByZXNzdXJlIHRoYXQgd2UKKyAgICAgICAgLy8gYWJzb2x1
dGVseSBuZWVkIHRvIGxvYWQgdGhlIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBpbnRvCisgICAgICAg
IC8vIGRpZmZlcmVudCBHUFJzIGluaXRpYWxseSBidXQgbm90IGVub3VnaCBwcmVzc3VyZSB0bwor
ICAgICAgICAvLyB0aGVuIGhhdmUgdG8gc3BpbGwgYWxsIG9mIHRoZW0uIEFuZCBldmVuIGluIHRo
YXQgY2FzZSwKKyAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBvcmRlciBpbiB3aGljaCBMTFZN
IHNhdmVzIHRoZQorICAgICAgICAvLyBjYWxsZWUtc2F2ZXMsIHdlIHdpbGwgcHJvYmFibHkgc3Rp
bGwgYmUgc2FmZS4gQW55d2F5LAorICAgICAgICAvLyB0aGUgY291cGxlIGV4dHJhIG1vdmUgaW5z
dHJ1Y3Rpb25zIGNvbXBhcmVkIHRvIGFuCisgICAgICAgIC8vIGVmZmljaWVudCBjeWNsZS1iYXNl
ZCBhbGdvcml0aG0gYXJlIG5vdCBnb2luZyB0byBodXJ0CisgICAgICAgIC8vIHVzLgorICAgICAg
ICBHUFJSZWcgdGVtcEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKCIgICogTW92aW5nICIsIHdhbnRlZEdQUiwgIiBpbnRvICIsIHRl
bXBHUFIsICJcbiIpOworICAgICAgICBtX2ppdC5tb3ZlKHdhbnRlZEdQUiwgdGVtcEdQUik7Cisg
ICAgICAgIHVwZGF0ZVJlY292ZXJ5KCpjdXJyZW50LAorICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6aW5HUFIodGVtcEdQUiwgY3VycmVudC0+cmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAg
ICB9CisgICAgQVNTRVJUKCFtX3JlZ2lzdGVyc1t3YW50ZWRHUFJdKTsKKworICAgIGlmIChjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5HUFIoKSkgeworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZ3ByKCksICIgaW50byAiLCB3YW50ZWRHUFIsICJcbiIpOworICAgICAgICBtX2ppdC5t
b3ZlKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIHdhbnRlZEdQUik7CisgICAgICAg
IHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LAorICAgICAgICAgICAgVmFsdWVSZWNvdmVy
eTo6aW5HUFIod2FudGVkR1BSLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQo
KSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmlzSW5GUFIoKSk7CisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRh
dGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAvLyBUaGlzIHdp
bGwgYXV0b21hdGljYWxseSBwaWNrIHRoZSB3YW50ZWQgR1BSCisgICAgICAgICAgICBlbWl0Qm94
KGNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogTW92aW5nICIsIGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZnByKCksICIgaW50byAiLCB3YW50ZWRHUFIsICJcbiIpOworICAgICAg
ICAgICAgbV9qaXQubW92ZURvdWJsZVRvNjQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIo
KSwgd2FudGVkR1BSKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5
LAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHdhbnRlZEdQUiwgY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIEFTU0VSVChtX3JlZ2lzdGVyc1t3YW50ZWRHUFJdID09ICZjYWNoZWRSZWNvdmVyeSk7Cisg
ICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkgPT0gd2FudGVkR1BSKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBVU0Uo
SlNWQUxVRTY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggZGUzNzll
OGFkMjFiZDM1MzVkYWI2NWRjNGE2NzkyY2MxZDkwZGM1OC4uMWYwMjdiNzI1MmJiZTBmMGJjM2Fh
YWQ4OTY5OTRjMGMyOWE1NThkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgVVNFKEpTVkFMVUU2NCkKICNpbmNsdWRlICJKSVQuaCIK
IAorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CiAjaW5jbHVkZSAiSklUSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKQEAgLTE4MSw5
ICsxODIsNiBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncykKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotCiAg
ICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgSnVtcCBz
bG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxp
bmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIoMCkpOwogICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlKTsKQEAgLTE5NCw3ICsxOTIsMjggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9
IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwogCi0gICAgaWYgKG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykg
eworICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwpIHsKKyAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CisgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
CisgICAgICAgICAgICBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykgLyBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJl
c2l6ZShpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBmb3IgKGludCBpIHsgMCB9
OyBpIDwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOyArK2kpIHsKKyAgICAgICAgICAgIHNodWZm
bGVEYXRhLmFyZ3NbaV0gPQorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNl
ZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoaSkgLSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgICAgIERh
dGFGb3JtYXRKUyk7CisgICAgICAgIH0KKyAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KKyAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAg
ICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOwor
ICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAg
Q2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwo
KTsKKyAgICAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQ
YXRoT3RoZXIgPSBlbWl0TmFrZWRUYWlsQ2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygp
OwogICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBh
dGhPdGhlciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxOSw2
ICsyMzgsOSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29k
ZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlYwogCiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogCisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncykKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwor
CiAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uY2FsbExpbmtJbmZvKSwgcmVnVDIpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxs
KG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCmluZGV4IGQyMWZjZDNlM2EwMDcxZGM4OGU5ZTg4
MTgyY2UwMTAwZTViMTgzYzIuLjc0ZDgwMzc3NmFmOGJjOTRlMjYxODA5NTU0OGM3NjViNGFmMGVj
OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiCiAjaW5jbHVkZSAiQmlu
YXJ5U3dpdGNoLmgiCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ2FsbEZy
YW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZH
U3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJGVExUaHVua3MuaCIKQEAgLTE3ODcsMjYgKzE3
ODgsMzIgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIAogICAgIENDYWxsSGVscGVy
czo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgCi0gICAgcHRyZGlmZl90IG9mZnNldFRvRnJhbWUg
PSAtc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpOwotCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
IHsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG9rQXJndW1lbnRDb3VudCA9IHN0dWJKaXQu
YnJhbmNoMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJlbG93LCBDQ2FsbEhlbHBlcnM6
OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihzaXplb2YoUmVnaXN0ZXIpICogSlNTdGFjazo6QXJndW1lbnRDb3VudCkgKyBv
ZmZzZXRUb0ZyYW1lICsgUGF5bG9hZE9mZnNldCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDEwMDAwMDAwKSk7Ci0gICAgICAgIHN0dWJKaXQuYWJvcnRXaXRoUmVhc29uKFJlcGF0Y2hJbnNh
bmVBcmd1bWVudENvdW50KTsKLSAgICAgICAgb2tBcmd1bWVudENvdW50LmxpbmsoJnN0dWJKaXQp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsRnJhbWVTaHVmZmxlcj4gZnJhbWVTaHVmZmxlcjsK
KyAgICBpZiAoY2FsbExpbmtJbmZvLmZyYW1lU2h1ZmZsZURhdGEoKSkgeworICAgICAgICBBU1NF
UlQoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSk7CisgICAgICAgIGZyYW1lU2h1ZmZsZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPENhbGxGcmFtZVNodWZmbGVyPihzdHViSml0LCAqY2FsbExpbmtJbmZv
LmZyYW1lU2h1ZmZsZURhdGEoKSk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgLy8g
V2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgY2FsbGVlIGlzIGEgY2VsbCwg
YW5kIHdlIGNhbgorICAgICAgICAvLyB1c2UgdGhlIGFkZGl0aW9uYWwgcmVnaXN0ZXIgdGhpcyBi
dXlzIHVzLgorICAgICAgICBmcmFtZVNodWZmbGVyLT5hc3N1bWVDYWxsZWVJc0NlbGwoKTsKKyNl
bmRpZgorICAgICAgICBmcmFtZVNodWZmbGVyLT5sb2NrR1BSKGNhbGxlZUdQUik7CiAgICAgfQot
ICAgIAotICAgIEdQUlJlZyBzY3JhdGNoID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNo
R1BSKGNhbGxlZUdQUik7CiAgICAgR1BSUmVnIGNvbXBhcmlzb25WYWx1ZUdQUjsKICAgICAKICAg
ICBpZiAoaXNDbG9zdXJlQ2FsbCkgewotICAgICAgICAvLyBWZXJpZnkgdGhhdCB3ZSBoYXZlIGEg
ZnVuY3Rpb24gYW5kIHN0YXNoIHRoZSBleGVjdXRhYmxlIGluIHNjcmF0Y2guCisgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSOworICAgICAgICBpZiAoZnJhbWVTaHVmZmxlcikKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIgPSBmcmFtZVNodWZmbGVyLT5hY3F1aXJlR1BSKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hH
UFIoY2FsbGVlR1BSKTsKKyAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9u
IGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoR1BSLgogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgLy8gV2UgY2FuIHNhZmVseSBjbG9iYmVyIGV2ZXJ5dGhpbmcgZXhjZXB0
IHRoZSBjYWxsZWVHUFIuIFdlIGNhbid0IHJlbHkgb24gdGFnTWFza1JlZ2lzdGVyCi0gICAgICAg
IC8vIGJlaW5nIHNldC4gU28gd2UgZG8gdGhpcyB0aGUgaGFyZCB3YXkuCi0gICAgICAgIHN0dWJK
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoKTsK
LSAgICAgICAgc2xvd1BhdGguYXBwZW5kKHN0dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVy
czo6Tm9uWmVybywgY2FsbGVlR1BSLCBzY3JhdGNoKSk7CisgICAgICAgIC8vIFdlIGNhbid0IHJl
bHkgb24gdGFnTWFza1JlZ2lzdGVyIGJlaW5nIHNldCwgc28gd2UgZG8gdGhpcyB0aGUgaGFyZAor
ICAgICAgICAvLyB3YXkuCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFRhZ01hc2spLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5k
KHN0dWJKaXQuYnJhbmNoVGVzdDY0KENDYWxsSGVscGVyczo6Tm9uWmVybywgY2FsbGVlR1BSLCBz
Y3JhdGNoR1BSKSk7CiAjZWxzZQogICAgICAgICAvLyBXZSB3b3VsZCBoYXZlIGFscmVhZHkgY2hl
Y2tlZCB0aGF0IHRoZSBjYWxsZWUgaXMgYSBjZWxsLgogI2VuZGlmCkBAIC0xODE5LDkgKzE4MjYs
OSBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgICAgIHN0dWJKaXQubG9h
ZFB0cigKICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVu
Y3Rpb246Om9mZnNldE9mRXhlY3V0YWJsZSgpKSwKLSAgICAgICAgICAgIHNjcmF0Y2gpOworICAg
ICAgICAgICAgc2NyYXRjaEdQUik7CiAgICAgICAgIAotICAgICAgICBjb21wYXJpc29uVmFsdWVH
UFIgPSBzY3JhdGNoOworICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBzY3JhdGNoR1BSOwog
ICAgIH0gZWxzZQogICAgICAgICBjb21wYXJpc29uVmFsdWVHUFIgPSBjYWxsZWVHUFI7CiAgICAg
CkBAIC0xODYzLDggKzE4NzAsMTMgQEAgdm9pZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAg
ICBjYXNlVmFsdWVzW2ldID0gbmV3Q2FzZVZhbHVlOwogICAgIH0KICAgICAKLSAgICBHUFJSZWcg
ZmFzdENvdW50c0Jhc2VHUFIgPQotICAgICAgICBBc3NlbWJseUhlbHBlcnM6OnNlbGVjdFNjcmF0
Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIsIEdQUkluZm86OnJlZ1QzKTsKKyAg
ICBHUFJSZWcgZmFzdENvdW50c0Jhc2VHUFI7CisgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCisgICAg
ICAgIGZhc3RDb3VudHNCYXNlR1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAg
IGVsc2UgeworICAgICAgICBmYXN0Q291bnRzQmFzZUdQUiA9CisgICAgICAgICAgICBBc3NlbWJs
eUhlbHBlcnM6OnNlbGVjdFNjcmF0Y2hHUFIoY2FsbGVlR1BSLCBjb21wYXJpc29uVmFsdWVHUFIs
IEdQUkluZm86OnJlZ1QzKTsKKyAgICB9CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihmYXN0Q291bnRzLmdldCgpKSwgZmFzdENvdW50c0Jhc2VHUFIpOwogICAg
IAogICAgIEJpbmFyeVN3aXRjaCBiaW5hcnlTd2l0Y2goY29tcGFyaXNvblZhbHVlR1BSLCBjYXNl
VmFsdWVzLCBCaW5hcnlTd2l0Y2g6OkludFB0cik7CkBAIC0xODg0LDcgKzE4OTYsMTAgQEAgdm9p
ZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDEpLAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhmYXN0
Q291bnRzQmFzZUdQUiwgY2FzZUluZGV4ICogc2l6ZW9mKHVpbnQzMl90KSkpOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChjYWxsTGlua0luZm8uaXNUYWlsQ2FsbCgpKSB7CisgICAgICAgIGlmIChm
cmFtZVNodWZmbGVyKSB7CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihzdHViSml0LCBm
cmFtZVNodWZmbGVyLT5zbmFwc2hvdCgpKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAg
ICAgIGNhbGxzW2Nhc2VJbmRleF0uY2FsbCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgewogICAgICAgICAgICAg
c3R1YkppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgICAgICAgICBzdHViSml0LnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICAgICAgICAgIGNhbGxzW2Nhc2VJbmRleF0uY2Fs
bCA9IHN0dWJKaXQubmVhclRhaWxDYWxsKCk7CkBAIC0xODk2LDEwICsxOTExLDIzIEBAIHZvaWQg
bGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZzdHViSml0KTsK
ICAgICBiaW5hcnlTd2l0Y2guZmFsbFRocm91Z2goKS5saW5rKCZzdHViSml0KTsKLSAgICBzdHVi
Sml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICBpZiAoZnJhbWVTaHVm
ZmxlcikgeworICAgICAgICBmcmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNhbGxlZUdQUik7Cisg
ICAgICAgIGZyYW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoY29tcGFyaXNvblZhbHVlR1BSKTsKKyAg
ICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihmYXN0Q291bnRzQmFzZUdQUik7CiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKLSAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgZnJhbWVT
aHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKSk7CisjZWxzZQorICAgICAgICBmcmFtZVNodWZmbGVyLT5zZXRDYWxs
ZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwogI2VuZGlmCisgICAg
ICAgIGZyYW1lU2h1ZmZsZXItPnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHN0dWJKaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQorICAgICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEdQUkluZm86OnJlZ1QxKTsKKyNlbmRpZgorICAgIH0K
ICAgICBzdHViSml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKCZjYWxsTGlua0lu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSksIEdQUkluZm86OnJlZ1Q0KTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259806</attachid>
            <date>2015-08-24 19:17:20 -0700</date>
            <delta_ts>2015-08-25 15:24:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147508-20150824191711.patch</filename>
            <type>text/plain</type>
            <size>134431</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
ZjY0NDUyMWRhOTk3ZThkYjIyMzcwMmZhNTM5ZDNjNzYyZjIxMzJhLi42OTAyNGE4ZmJhMTAyYjQw
ZWQxMWY4N2UzNDNiMDZjOGNiYjEzN2I3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMzAgQEAKKzIwMTUtMDgtMjQgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tPgorCisgICAgICAgIGpzYy10YWlsY2FsbDogV2Ugc2hvdWxkIHJldXNlIHRoZSBm
cmFtZSBlZmZpY2llbnRseSBpbiB0aGUgREZHIGluc3RlYWQgb2YgZG9pbmcgYSBtZW1tb3ZlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIFNhYm9mZi4KKworICAgICAgICBUaGlzIGludHJv
ZHVjZXMgYSBuZXcgY2xhc3MgKENhbGxGcmFtZVNodWZmbGVyKSB0aGF0IGlzIHJlc3BvbnNpYmxl
IGZvcgorICAgICAgICBlZmZpY2llbnRseSBidWlsZGluZyB0aGUgbmV3IGZyYW1lcyB3aGVuIHBl
cmZvcm1pbmcgYSB0YWlsIGNhbGwuIEluCisgICAgICAgIG9yZGVyIGZvciBSZXBhdGNoIHRvIGtu
b3cgYWJvdXQgdGhlIHBvc2l0aW9uIG9mIGFyZ3VtZW50cyBvbiB0aGUKKyAgICAgICAgc3RhY2sv
cmVnaXN0ZXJzIChlLmcuIGZvciBwb2x5bW9ycGhpYyBjYWxsIGlubGluZSBjYWNoZXMpLCB3ZSBz
dG9yZSBhCisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIGluIHRoZSBDYWxsTGlua0luZm8u
IE90aGVyd2lzZSwgdGhlIEpJVCBhbmQgREZHCisgICAgICAgIGNvbXBpbGVyIGFyZSBub3cgdXNp
bmcgQ2FsbEZyYW1lU2h1ZmZsZXIgaW5zdGVhZCBvZgorICAgICAgICBDQ2FsbEhlbHBlcnM6OnBy
ZXBhcmVGb3JUYWlsQ2FsbFNsb3coKSB0byBidWlsZCB0aGUgZnJhbWUgZm9yIGEgdGFpbAorICAg
ICAgICBjYWxsLgorCisgICAgICAgIFdoZW4gdGFraW5nIGEgc2xvdyBwYXRoLCB3ZSBzdGlsbCBi
dWlsZCB0aGUgZnJhbWUgYXMgaWYgZG9pbmcgYSByZWd1bGFyCisgICAgICAgIGNhbGwsIGJlY2F1
c2Ugd2UgY291bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBuZWVkIHRoZSBjYWxsZXIncyBmcmFt
ZQorICAgICAgICBhdCB0aGF0IHBvaW50LiBUaGlzIG1lYW5zIHRoYXQgZm9yIHZpcnR1YWwgY2Fs
bHMsIHdlIGRvbid0IGJlbmVmaXQgZnJvbQorICAgICAgICB0aGUgZWZmaWNpZW50IGZyYW1lIG1v
dmUuIFdlIHdpbGwgdGFrZSBjYXJlIG9mIHRoaXMgaW4gYSBzdWJzZXF1ZW50IHBhdGNoLgorCisg
ICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fib3J0
UmVhc29uLmg6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmg6CisgICAgICAgIChK
U0M6OkNhbGxMaW5rSW5mbzo6c2V0RnJhbWVTaHVmZmxlRGF0YSk6CisgICAgICAgIChKU0M6OkNh
bGxMaW5rSW5mbzo6ZnJhbWVTaHVmZmxlRGF0YSk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRp
b25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnJlY292ZXJ5KToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZURhdGE6OnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6IEFkZGVkLgorICAgICAg
ICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1lU2h1ZmZsZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6ZHVtcCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRD
YWNoZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzZXRDYWNo
ZWRSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzcGlsbCk6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGVsdGFDaGVjayk6CisgICAgICAg
IChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclRhaWxDYWxsKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnRyeVdyaXRlcyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjpwZXJmb3JtU2FmZVdyaXRlcyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjpwcmVwYXJlQW55KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5OjpDYWNoZWRSZWNvdmVyeSk6Cisg
ICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojp0YXJnZXRzKToKKyAgICAgICAgKEpTQzo6Q2Fj
aGVkUmVjb3Zlcnk6OmFkZFRhcmdldCk6CisgICAgICAgIChKU0M6OkNhY2hlZFJlY292ZXJ5Ojpy
ZW1vdmVUYXJnZXQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVyeTo6Y2xlYXJUYXJnZXRz
KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OnNldFdhbnRlZEpTVmFsdWVSZWdzKToK
KyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmJveGluZ1JlcXVpcmVzR1BSKToKKyAgICAg
ICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmJveGluZ1JlcXVpcmVzRlBSKToKKyAgICAgICAgKEpT
Qzo6Q2FjaGVkUmVjb3Zlcnk6OnJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zl
cnk6OnNldFJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OndhbnRlZEpT
VmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmxvY2tHUFIpOgor
ICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWNxdWlyZUdQUik6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjpyZWxlYXNlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZXI6OnNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OnNldENhbGxlZUpTVmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmFzc3VtZUNhbGxlZUlzQ2VsbCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpj
YW5Cb3gpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlQm94KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVuc3VyZUxvYWQpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6Y2FuTG9hZEFuZEJveCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjp1cGRhdGVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjpjbGVhckNhY2hlZFJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1
ZmZsZXI6OmFkZENhY2hlZFJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6Om51bUxvY2Fscyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRPbGQp
OgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6c2V0T2xkKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmZpcnN0T2xkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6Omxhc3RPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6aXNW
YWxpZE9sZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjphcmdDb3VudCk6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXROZXcpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWVTaHVmZmxlcjo6c2V0TmV3KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZs
ZXI6OmFkZE5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpmaXJzdE5ldyk6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpsYXN0TmV3KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzVmFsaWROZXcpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6bmV3QXNPbGQpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6
Z2V0RnJlZVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldEZy
ZWVHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZUZQUik6Cisg
ICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpoYXNGcmVlUmVnaXN0ZXIpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlUmVnaXN0ZXIpOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1l
U2h1ZmZsZXI6OmVuc3VyZUZQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjph
ZGRyZXNzRm9yT2xkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzVW5kZWNp
ZGVkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmlzU2xvd1BhdGgpOgorICAg
ICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6YWRkcmVzc0Zvck5ldyk6CisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjpkYW5nZXJGcm9udGllcik6CisgICAgICAgIChKU0M6OkNh
bGxGcmFtZVNodWZmbGVyOjppc0Rhbmdlck5ldyk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjp1cGRhdGVEYW5nZXJGcm9udGllcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjpoYXNPbmx5U2FmZVdyaXRlcyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZm
bGVyMzJfNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVt
aXRTdG9yZSk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0Qm94KToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRMb2FkKToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OmNhbkxvYWQpOgorICAgICAgICAoSlNDOjpDYWNoZWRSZWNvdmVy
eTo6bG9hZHNJbnRvRlBSKToKKyAgICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50
b0dQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UpOgor
ICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcDogQWRkZWQuCisgICAgICAgIChK
U0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUpOgorICAgICAgICAoSlNDOjpDYWxsRnJh
bWVTaHVmZmxlcjo6ZW1pdEJveCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpl
bWl0TG9hZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpjYW5Mb2FkKToKKyAg
ICAgICAgKEpTQzo6Q2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUik6CisgICAgICAgIChKU0M6
OkNhY2hlZFJlY292ZXJ5Ojpsb2Fkc0ludG9HUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6ZW1pdERpc3BsYWNlKToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJNYXAuaDoKKyAgICAgICAg
KiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OmxpbmtQb2x5bW9ycGhpY0NhbGwpOgor
CiAyMDE1LTA4LTI0ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAg
ICAgIGpzYy10YWlsY2FsbDogU3BlY2lhbGl6ZWQgdGh1bmtzIG5lZWQgdG8gc2F2ZSAvIHJlc3Rv
cmUgY2FsbGVlIHNhdmUgInRhZyIgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggMjVjMTc4YmI4NTA5YWVhMDkzNmUzY2JhYjM3MDIyMDMzOGI1YmY5NS4uZTJj
NjhhYzhhYTZkYzI4YTAzZmIyYjYwNTdkYWUzNTA3ZDRjYjkwOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dApAQCAtMzQzLDYgKzM0MywxMCBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGppdC9BY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAKICAgICBqaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAogICAgIGppdC9CaW5hcnlTd2l0Y2guY3BwCisgICAgaml0L0Nh
bGxGcmFtZVNodWZmbGVEYXRhLmNwcAorICAgIGppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKKyAg
ICBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAKKyAgICBqaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcAogICAgIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRleCBhODZi
NWQ1ZDUxMGI5NjM4OTZjOWU0Njk3MjUyZmU5MDlkMjdlNTViLi4yMDc0ZTQ3MWZkMTRkMDQ4ZjU3
OTgyMTcxMDJjODQ0NGZhYTZiMzBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oKQEAgLTYwNiw2ICs2MDYsMTAgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcQXNzZW1ibHlIZWxwZXJzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxCaW5hcnlTd2l0Y2guY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAiIC8+CisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwIiAvPgpAQCAtMTM3MCw2ICsxMzc0LDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5SGVscGVycy5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XEJpbmFyeVN3aXRjaC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVEYXRhLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxDQ2FsbEhlbHBlcnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxDb21wYWN0SklUQ29kZU1hcC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDlmYmNiNWJkNmNjMTMzYjQ3ZmMw
MzJkYTc3MDE0MzZmNmVmODA4NWUuLjk4ZTI3NTAzYWI5NWFjYzUyMmU1NmU3MmZiYTAyMDA4NDky
ODA2NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMKQEAgLTM3OCw2ICszNzgsMTggQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCI+CiAgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFt
ZVNodWZmbGVEYXRhLmNwcCI+CisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xD
b21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVy
LmNwcCI+CisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIj4K
KyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAiPgorICAgICAgPEZp
bHRlcj5qaXQ8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxKSVQuY3BwIj4KICAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9D
bENvbXBpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE2OTMxMWE2MTFkZDY3
MzViZTlmMDY0NGRhNDk1OGMxMTA2NmI5NGYuLjUzNWU0NmY2YTJlOWMwNzZkYzM0ZjYxMzk0MWRh
NTc2YTgzZTc3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NjUsNiArOTY1
LDEyIEBACiAJCTYyNzY3MzI0MUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjI3NjczMjIxQjY4MEMxRTAw
RkQ5RjJFIC8qIENhbGxNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJE
MkQzOEQxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovOyB9OwogCQk2
MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJEMkQzOEUxQURGMTAzRjAwMDIw
NkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAg
Ki87IH07CisJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMy
XzY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
RDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCAqLzsg
fTsKKwkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDc1NUQwMUI4
NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgKi87IH07CisJCTYyRDc1NUQ3
MUI4NEZCNEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDExQjg0RkIzOTAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyLmggKi87IH07CisJCTYyRUM5QkI2MUI3RUIwN0MwMDMwM0FEMSAv
KiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2MkVDOUJCNDFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuY3BwICovOyB9OworCQk2MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZy
YW1lU2h1ZmZsZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYyRUM5QkI1MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTYyRjJB
QTM3MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkE5QTI5RTFCMEJFRDQ4MDBCRDU0Q0EgLyog
REZHTGF6eU5vZGUuY3BwICovOyB9OwogCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZH
TGF6eU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDYyQTlBMjlGMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1MDdEMjlFMEU4NzFFNUUwMEQ3
RDg5NiAvKiBKU1R5cGVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTA3RDI5NzBFODcxRTRBMDBEN0Q4OTYgLyogSlNUeXBlSW5mby5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNjg0LDYgKzI2
OTAsMTIgQEAKIAkJNjJBOUEyOUYxQjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlOb2RlLmg7IHBhdGggPSBkZmcv
REZHTGF6eU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJEMkQzOEQxQURG
MTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25SYXJlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRh
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJENzU1RDAxQjg0RkIzOTAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxGcmFtZVNodWZmbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NjJENzU1RDExQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTYyRDc1NUQyMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVT
aHVmZmxlcjMyXzY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
MkQ3NTVEMzFCODRGQjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjJFQzlCQjQxQjdFQjA3QzAwMzAzQUQxIC8q
IENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNjJFQzlCQjUxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxGcmFtZVNodWZmbGVEYXRhLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MDdEMjk3MEU4NzFFNEEwMEQ3RDg5NiAv
KiBKU1R5cGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVHlwZUlu
Zm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjUxMTIyRTUxNDA0NjlCQTAwMkIx
MDFEIC8qIHRlc3RSZWdFeHAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gdGVzdFJlZ0V4cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1MTEyMzA1
MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNs
dWRlSW5JbmRleCA9IDA7IHBhdGggPSB0ZXN0UmVnRXhwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwpAQCAtMzkwMywxNiArMzkxNSwyMiBAQAogCQkxNDI5RDkyQzBFRDIyRDcw
MDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6LmNwcCAqLywKLQkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6LmggKi8sCiAJCQkJMEY3NTc2RDAxOEUxRkVFOTAwMkVGNENEIC8qIEFjY2Vz
c29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRjc1NzZEMTE4RTFGRUU5MDAyRUY0
Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuaCAqLywKIAkJCQkwRjI0RTUzQjE3RUE5
RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCAqLywKIAkJCQkwRjI0RTUzQzE3RUE5
RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmggKi8sCiAJCQkJMEY2NEIyNkYxQTc4NEJB
RjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5jcHAgKi8sCiAJCQkJMEY2NEIyNzAxQTc4NEJBRjAw
NkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oICovLAorCQkJCTYyRUM5QkI0MUI3RUIwN0MwMDMwM0FE
MSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgKi8sCisJCQkJNjJFQzlCQjUxQjdFQjA3QzAw
MzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggKi8sCisJCQkJNjJENzU1RDAxQjg0RkIz
OTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCAqLywKKwkJCQk2MkQ3NTVEMTFCODRG
QjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuaCAqLywKKwkJCQk2MkQ3NTVEMjFCODRG
QjM5MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgKi8sCisJCQkJNjJENzU1
RDMxQjg0RkIzOTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwICovLAogCQkJCTBG
MjRFNTNEMTdFQTlGNTkwMEFCQjIxNyAvKiBDQ2FsbEhlbHBlcnMuaCAqLywKIAkJCQkwRkQ4MkUz
NzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKKwkJCQkwRkYwNTRG
NzFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKKwkJ
CQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Lmgg
Ki8sCiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmggKi8sCiAJCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxv
Y2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8sCkBAIC01NjU3LDYgKzU2NzUsNyBAQAogCQkJCUM0RjRC
NkY0MUEwNUM5NDQwMDVDQUI3NiAvKiBjcHBfZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rv
ci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEwIC8q
IGNzc21pbi5weSBpbiBIZWFkZXJzICovLAorCQkJCTYyRDc1NUQ3MUI4NEZCNEEwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcxMDQxOUY2REU3
MjAwOThGNUVDIC8qIGdlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzEwNTE5RjZERTc0
MDA5OEY1RUMgLyogZ2VuZXJhdGVfb2JqY19jb25maWd1cmF0aW9uX2hlYWRlci5weSBpbiBIZWFk
ZXJzICovLApAQCAtNTgxMiw2ICs1ODMxLDcgQEAKIAkJCQkwRjNCM0EyODE1NDRDOTk3MDAzRUQw
RkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3
QTQyNDAxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3N0E0MjQyMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyU2V0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk2MkVDOUJCNzFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0IyOTREMTRDM0NENEMwMDdDM0RCMSAvKiBERkdD
b21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdDb21tb25EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM4QjAxODE3Q0ZFNzU1MDBCMTQ0
RDMgLyogREZHQ29tcGlsYXRpb25LZXkuaCBpbiBIZWFkZXJzICovLApAQCAtNzEwOCw2ICs3MTI4
LDcgQEAKIAkJCQkwRkYwRjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRUEwQTMxMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDE3MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbktleS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkVDOUJCNjFCN0VCMDdDMDAz
MDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYz
OEIwMTkxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5n
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzIxNkMxREIwMzAwODJDNUU4IC8q
IERGR0NQU1JldGhyZWFkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MTU3LDYgKzcx
NzgsNyBAQAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3Mu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0YxMzI4REY4MjAwMkIyQUQ3IC8qIERGR09w
ZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0ZEMTdB
MEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNTE3RDUxRjU3MDBDQTJDNDAgLyogREZHT1NS
RW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Mjc5LDYgKzcz
MDEsNyBAQAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyQjMxMEZEMTk3
NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNjJENzU1RDUxQjg0RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJf
NjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1
bmN0aW9uUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjRCMjcxMUE3ODRCQUYw
MDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMkYx
NUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc0MDAsNiArNzQyMyw3IEBACiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8q
IEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAw
NDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3
NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2MkQ3NTVE
NDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkZCNkMzODFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxl
clByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fib3J0UmVhc29uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fib3J0UmVhc29uLmgKaW5kZXggZTk0NDQ5YWQ0YzQ5NTUzYWU2NzBiYTZmNzU3NmY5
MWFkYzkxNDVlZC4uZWFlNTQwZjgzNjEyOTY1MTBkMzM0OTBkZTY4MGY0MDRhYzI5N2RkMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYm9ydFJlYXNvbi5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJvcnRSZWFzb24uaApAQCAtNjMs
NiArNjMsNyBAQCBlbnVtIEFib3J0UmVhc29uIHsKICAgICBKSVRHZXRCeVZhbFJlc3VsdElzTm90
RW1wdHkgICAgICAgICAgICAgICAgICAgICAgID0gMjUwLAogICAgIEpJVE5vdFN1cHBvcnRlZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAyNjAsCiAgICAgSklUT2Zmc2V0SXNO
b3RPdXRPZkxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDI3MCwKKyAgICBKSVRVbmV4
cGVjdGVkQ2FsbEZyYW1lU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgID0gMjc1LAogICAgIEpJ
VFVucmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCAgICAgICAgICAgICAgICAgPSAyODAsCiAg
ICAgUlBXVW5yZWFzb25hYmxlSnVtcFRhcmdldCAgICAgICAgICAgICAgICAgICAgICAgICA9IDI5
MCwKICAgICBSZXBhdGNoSW5lZmZlY3RpdmVXYXRjaHBvaW50ICAgICAgICAgICAgICAgICAgICAg
ID0gMzAwLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5o
CmluZGV4IDYyMTI0MjVlMTY5ZThhODEwMjlkMzBiOWI1OWFmOGVmNGYzZDQyZDYuLmUzZTczOTVm
YjFmYTNkNDBiODY0ZWYzYWExNTg4ZmU2ZWI2MGEyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYg
Q2FsbExpbmtJbmZvX2gKICNkZWZpbmUgQ2FsbExpbmtJbmZvX2gKIAorI2luY2x1ZGUgIkNhbGxG
cmFtZVNodWZmbGVEYXRhLmgiCiAjaW5jbHVkZSAiQ2FsbE1vZGUuaCIKICNpbmNsdWRlICJDb2Rl
TG9jYXRpb24uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCkBAIC0zMjks
NiArMzMwLDE2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdmlzaXRXZWFrKFJlcGF0Y2hCdWZmZXIm
KTsKIAorICAgIHZvaWQgc2V0RnJhbWVTaHVmZmxlRGF0YShjb25zdCBDYWxsRnJhbWVTaHVmZmxl
RGF0YSYgc2h1ZmZsZURhdGEpCisgICAgeworICAgICAgICBtX2ZyYW1lU2h1ZmZsZURhdGEgPSBz
dGQ6Om1ha2VfdW5pcXVlPENhbGxGcmFtZVNodWZmbGVEYXRhPihzaHVmZmxlRGF0YSk7CisgICAg
fQorCisgICAgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEqIGZyYW1lU2h1ZmZsZURhdGEoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVTaHVmZmxlRGF0YS5nZXQoKTsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uTmVhckNhbGwgbV9jYWxsUmV0dXJuTG9jYXRpb247
CiAgICAgQ29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIG1faG90UGF0aEJlZ2luOwpAQCAtMzM3LDYg
KzM0OCw3IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fbGFzdFNl
ZW5DYWxsZWU7CiAgICAgUmVmUHRyPFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lPiBtX3N0dWI7
CiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBtX3Nsb3dTdHViOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsRnJhbWVTaHVmZmxlRGF0YT4gbV9mcmFtZVNodWZmbGVEYXRhOwogICAgIHVuc2ln
bmVkIG1fcmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlIDogMTsgLy8gUmVhbCB0eXBlIGlzIFJlZ2lz
dGVyUHJlc2VydmF0aW9uTW9kZQogICAgIGJvb2wgbV9oYXNTZWVuU2hvdWxkUmVwYXRjaCA6IDE7
CiAgICAgYm9vbCBtX2hhc1NlZW5DbG9zdXJlIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAppbmRleCBiMzBmMzUwOGQ3MmRlYTdhZTQ5ZTdiOWE4
MmEyNTRiMjMyZDgyMGFkLi44MDBmOTdiODAzYTczNDU4YzI0NjkwODRiOGNiNDk1ZWQzNDAwMDll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZv
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCkBA
IC0zNzgsNiArMzc4LDI5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAg
ICAgfQogCisgICAgVmFsdWVSZWNvdmVyeSByZWNvdmVyeShWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxT
bG90KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNDb25zdGFudCkKKyAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX25vZGUtPmNvbnN0YW50KCktPnZhbHVl
KCkpOworCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUp
CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6aW5GUFIodS5mcHIsIERhdGFGb3Jt
YXREb3VibGUpOworCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgaWYgKG1fcmVnaXN0
ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9y
bWF0ID09IERhdGFGb3JtYXRKUykKKyAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6aW5QYWlyKHUudi50YWdHUFIsIHUudi5wYXlsb2FkR1BSKTsKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjppbkdQUih1LnYucGF5bG9hZEdQUiwgc3RhdGljX2Nhc3Q8RGF0YUZv
cm1hdD4obV9yZWdpc3RlckZvcm1hdCAmIH5EYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgfQorI2Vu
ZGlmCisgICAgICAgIGlmIChtX3JlZ2lzdGVyRm9ybWF0KQorICAgICAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmluR1BSKHUuZ3ByLCBtX3JlZ2lzdGVyRm9ybWF0KTsKKworICAgICAgICBB
U1NFUlQobV9zcGlsbEZvcm1hdCk7CisKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjayhzcGlsbFNsb3QsIG1fc3BpbGxGb3JtYXQpOworICAgIH0KKwogcHJp
dmF0ZToKICAgICB2b2lkIGFwcGVuZEJpcnRoKFZhcmlhYmxlRXZlbnRTdHJlYW0mIHN0cmVhbSkK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAppbmRleCA3ZDI5ZGFkNWY3YzZmODExOTc1OGI1NGRlZTFlZjZkYTQ0Mzgx
OWMxLi43Y2RjMWEzZTE4OGJiYmZmM2UyMzMwODMyM2ZjZTUyZGI5MTYxZDNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkFycmF5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJE
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgpA
QCAtNzAzLDYgKzcwNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUpCiAgICAgfQogCiAgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChu
b2RlLCAwKTsKKyAgICBHUFJSZWcgY2FsbGVlVGFnR1BSOworICAgIEdQUlJlZyBjYWxsZWVQYXls
b2FkR1BSOworICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwogICAgIAogICAg
IC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVy
LgogICAgIGlmIChpc1ZhcmFyZ3MgfHwgaXNGb3J3YXJkVmFyYXJncykgewpAQCAtNzk0LDMzICs3
OTgsNDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAg
ICAgLy8gcmVjZWl2ZXIgKG1ldGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhl
IGFyZ3VtZW50cy4KICAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJl
bigpIC0gMTsKIAotICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIobnVtUGFzc2VkQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkg
eworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwor
ICAgICAgICAgICAgY2FsbGVlVGFnR1BSID0gY2FsbGVlLnRhZ0dQUigpOworICAgICAgICAgICAg
Y2FsbGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICB1c2Uo
Y2FsbGVlRWRnZSk7CisKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IG1faml0
LmdyYXBoKCkuZnJhbWVSZWdpc3RlckNvdW50KCk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2Fk
R1BSKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bVBhc3NlZEFyZ3Mp
OworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkg
eworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgaSArIDEpOworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
Z2VuZXJhdGlvbkluZm8oYXJnRWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIHVzZShhcmdF
ZGdlKTsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gaW5mby5yZWNvdmVy
eShhcmdFZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIobnVtUGFzc2VkQXJncyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOwogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1QYXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0
LmdyYXBoKCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0g
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgICAg
ICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQUigpOwotICAgICAgICAgICAgR1BSUmVnIGFy
Z1BheWxvYWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOwotICAgICAgICAgICAgdXNlKGFyZ0VkZ2Up
OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hp
bGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJn
VGFnR1BSID0gYXJnLnRhZ0dQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBhcmdQYXlsb2Fk
R1BSID0gYXJnLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BSLCBtX2ppdC5j
YWxsZWVBcmd1bWVudFRhZ1Nsb3QoaSkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQ
YXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBheWxvYWRTbG90KGkpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRUYWdT
bG90KGkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1f
aml0LmNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaSkpOworICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2Up
OwotICAgIEdQUlJlZyBjYWxsZWVUYWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7Ci0gICAgR1BSUmVn
IGNhbGxlZVBheWxvYWRHUFIgPSBjYWxsZWUucGF5bG9hZEdQUigpOwotICAgIHVzZShjYWxsZWVF
ZGdlKTsKLSAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVBheWxvYWRHUFIsIG1faml0LmNhbGxlZUZy
YW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxs
ZWVUYWdHUFIsIG1faml0LmNhbGxlZUZyYW1lVGFnU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAg
ICBpZiAobm9kZS0+b3AoKSAhPSBUYWlsQ2FsbCkgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBj
YWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CisgICAgICAgIGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50
YWdHUFIoKTsKKyAgICAgICAgY2FsbGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7
CisgICAgICAgIHVzZShjYWxsZWVFZGdlKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQ
YXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkNhbGxlZSkp
OworICAgICAgICBtX2ppdC5zdG9yZTMyKGNhbGxlZVRhZ0dQUiwgbV9qaXQuY2FsbGVlRnJhbWVU
YWdTbG90KEpTU3RhY2s6OkNhbGxlZSkpOwogCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBh
biBlZmZpY2llbnQgbW92ZSBvZiB0aGUgYXJndW1lbnRzIGludG8KLSAgICAvLyB0aGVpciB0YXJn
ZXQgc3RhY2sgcG9zaXRpb24gaW5zdGVhZCBvZiBidWlsZGluZyB0aGVuIG1lbW1vdmluZwotICAg
IC8vIHRoZSBjYWxsZWUgZnJhbWUuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NzUwOAotICAgIGlmICghaXNUYWlsKQogICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgIH0KIAogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdFBheWxvYWQo
dGhpcyk7CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKQEAgLTg0
MCwxNiArODU5LDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUp
CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENh
bGxMaW5rSW5mbygpOwogCi0gICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2Vs
bChjYWxsZWUuanNWYWx1ZVJlZ3MoKSkpOworICAgIGlmIChpc1RhaWwgJiYgbm9kZS0+b3AoKSAh
PSBUYWlsQ2FsbCkKKyAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCisg
ICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhjYWxs
ZWVUYWdHUFIsIGNhbGxlZVBheWxvYWRHUFIpKSk7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVBheWxv
YWRHUFIsIHRhcmdldFRvQ2hlY2spKTsKIAogICAgIGlmIChpc1RhaWwpIHsKLSAgICAgICAgbV9q
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGRvIGFuIGVmZmljaWVudCBtb3ZlIG9mIHRoZSBhcmd1bWVudHMgaW50bwotICAgICAgICAvLyB0
aGVpciB0YXJnZXQgc3RhY2sgcG9zaXRpb24gaW5zdGVhZCBvZiBidWlsZGluZyB0aGVuIG1lbW1v
dmluZwotICAgICAgICAvLyB0aGUgY2FsbGVlIGZyYW1lLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTA4Ci0gICAgICAgIG1faml0LnByZXBh
cmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwp
IHsKKyAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwor
ICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJl
Rm9yVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5wcmVwYXJl
Rm9yVGFpbENhbGxTbG93KCk7CiAgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENh
bGwgPSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwoKSA6IG1faml0Lm5lYXJDYWxsKCk7CkBA
IC04NTgsMTcgKzg3OSwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBu
b2RlKQogCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogCi0gICAgLy8gQ2FsbGVlIHBheWxv
YWQgbmVlZHMgdG8gYmUgaW4gcmVnVDAsIHRhZyBpbiByZWdUMQotICAgIGlmIChjYWxsZWVUYWdH
UFIgPT0gR1BSSW5mbzo6cmVnVDApIHsKLSAgICAgICAgaWYgKGNhbGxlZVBheWxvYWRHUFIgPT0g
R1BSSW5mbzo6cmVnVDEpCi0gICAgICAgICAgICBtX2ppdC5zd2FwKEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9qaXQubW92ZShj
YWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWls
Q2FsbCkgeworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBjYWxsRnJhbWVTaHVmZmxlcihtX2pp
dCwgc2h1ZmZsZURhdGEpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5zZXRDYWxsZWVKU1Zh
bHVlUmVncyhKU1ZhbHVlUmVncygKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCkpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYWxsZWUgcGF5bG9hZCBuZWVkcyB0byBiZSBp
biByZWdUMCwgdGFnIGluIHJlZ1QxCisgICAgICAgIGlmIChjYWxsZWVUYWdHUFIgPT0gR1BSSW5m
bzo6cmVnVDApIHsKKyAgICAgICAgICAgIGlmIChjYWxsZWVQYXlsb2FkR1BSID09IEdQUkluZm86
OnJlZ1QxKQorICAgICAgICAgICAgICAgIG1faml0LnN3YXAoR1BSSW5mbzo6cmVnVDEsIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoY2FsbGVlVGFnR1BSLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShjYWxsZWVQYXlsb2FkR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVBheWxvYWRHUFIs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlVGFnR1BSLCBH
UFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBtX2ppdC5t
b3ZlKGNhbGxlZVBheWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgbV9qaXQubW92
ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAg
IEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGI3
YzVhYTRiZTZkYThkZGViZjNhYjYxZTM4MjQxMWY1ZjYzYmQzYmUuLjQ1ODE3MzQwZGZhZjExMGVm
ZjYyYzkwY2RlMTg1Yjg0ZmY5MjczMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJDYWxs
RnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC02ODgsNyArNjg5LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKKyAg
ICBHUFJSZWcgY2FsbGVlR1BSOworICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRh
OwogICAgIAogICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdz
IGlzIHRyaWNraWVyLgogICAgIGlmIChpc1ZhcmFyZ3MgfHwgaXNGb3J3YXJkVmFyYXJncykgewpA
QCAtNzc1LDMyICs3NzcsNDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZSkKICAgICAgICAgLy8gYXJndW1lbnRzLgogICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9
IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogCi0gICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgSklUQ29tcGlsZXI6OmNhbGxl
ZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgIAotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICAgICAg
RWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0
Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBh
cmdFZGdlKTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAg
ICAgICB1c2UoYXJnRWRnZSk7Ci0gICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChh
cmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFNsb3QoaSkpOworICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAgICAgICAgICAgRWRnZSBjYWxsZWVFZGdlID0g
bV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAgICAgIGNhbGxlZUdQUiA9IGNhbGxl
ZS5ncHIoKTsKKyAgICAgICAgICAgIGNhbGxlZS51c2UoKTsKKworICAgICAgICAgICAgc2h1ZmZs
ZURhdGEubnVtTG9jYWxzID0gbV9qaXQuZ3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxl
ZUdQUiwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KG51bVBhc3NlZEFyZ3MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgeworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRn
ZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOworICAgICAgICAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm8oYXJnRWRnZS5ub2RlKCkp
OworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgICAgICAgICBzaHVmZmxl
RGF0YS5hcmdzW2ldID0gaW5mby5yZWNvdmVyeShhcmdFZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKSk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2
ZVJlZ2lzdGVycyhtX2ppdC5jb2RlQmxvY2soKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2Vk
QXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQpKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRB
cmdzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgp
Lm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKKyAgICAgICAgICAgICAg
ICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdl
KTsKKworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBKSVRDb21waWxlcjo6
Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IAotICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKLSAgICBHUFJS
ZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgIGNhbGxlZS51c2UoKTsKLSAgICBtX2pp
dC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNr
OjpDYWxsZWUpKTsKKyAgICBpZiAobm9kZS0+b3AoKSAhPSBUYWlsQ2FsbCkgeworICAgICAgICBF
ZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CisgICAgICAgIGNhbGxlZUdQ
UiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgY2FsbGVlLnVzZSgpOworICAgICAgICBtX2ppdC5z
dG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpD
YWxsZWUpKTsKIAotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gYW4gZWZmaWNpZW50IG1vdmUg
b2YgdGhlIGFyZ3VtZW50cyBpbnRvCi0gICAgLy8gdGhlaXIgdGFyZ2V0IHN0YWNrIHBvc2l0aW9u
IGluc3RlYWQgb2YgYnVpbGRpbmcgdGhlbiBtZW1tb3ZpbmcKLSAgICAvLyB0aGUgY2FsbGVlIGZy
YW1lLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1
MDgKLSAgICBpZiAoIWlzVGFpbCkKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgIEdQ
UkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworICAgIH0KIAogICAgIENvZGVPcmlnaW4gc3RhdGljT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOwogICAgIEFTU0VSVCghaXNUYWlsIHx8ICFzdGF0aWNPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lIHx8ICFzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxs
ZXJTa2lwcGluZ0RlYWRGcmFtZXMoKSk7CkBAIC04MTIsMTYgKzgyOSwxOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAgIAogICAgIENhbGxMaW5rSW5mbyog
Y2FsbExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogCisg
ICAgaWYgKGlzVGFpbCAmJiBub2RlLT5vcCgpICE9IFRhaWxDYWxsKQorICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKICAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2s7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5i
cmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRh
cmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAogICAgIGlm
IChpc1RhaWwpIHsKLSAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRvIGFuIGVmZmljaWVudCBtb3ZlIG9mIHRoZSBhcmd1
bWVudHMgaW50bwotICAgICAgICAvLyB0aGVpciB0YXJnZXQgc3RhY2sgcG9zaXRpb24gaW5zdGVh
ZCBvZiBidWlsZGluZyB0aGVuIG1lbW1vdmluZwotICAgICAgICAvLyB0aGUgY2FsbGVlIGZyYW1l
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3
NTA4Ci0gICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKICAgICB9
CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJU
YWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwoKTsKQEAgLTgyOSwxMSArODQ4LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgSklUQ29tcGlsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7
Ci0gICAgCi0gICAgaWYgKGlzVGFpbCkKLSAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogCi0gICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8g
Q2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCisgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENh
bGwpIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQs
IHNodWZmbGVEYXRhKTsKKyAgICAgICAgY2FsbEZyYW1lU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgY2FsbEZyYW1lU2h1
ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1faml0Lm1v
dmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiBy
ZWdUMAorCiAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxs
TGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiBy
ZWdUMgogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsK
IApAQCAtODQyLDYgKzg2NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUq
IG5vZGUpCiAgICAgaWYgKGlzVGFpbCkKICAgICAgICAgbV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJ
VERpZFJldHVybkZyb21UYWlsQ2FsbCk7CiAgICAgZWxzZSB7CisgICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVz
dWx0R1BSKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9k
ZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kMDIyODUyMzVmOWEyMDNmYTk3MDA4OWM5OTM5MTI2MzAwMzlhMzdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5j
cHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVEYXRhOjpzZXR1cENhbGxlZVNhdmVSZWdp
c3RlcnMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2
ZVJlZ2lzdGVycyB7IFJlZ2lzdGVyU2V0OjphbGxWTUNhbGxlZVNhdmVSZWdpc3RlcnMoKSB9Owor
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0KiByZWdpc3RlclNhdmVMb2NhdGlvbnMgPSBjb2RlQmxv
Y2stPmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5zaXplKCk7ICsraSkgeworICAgICAgICBSZWdpc3RlckF0
T2Zmc2V0IGVudHJ5IHsgcmVnaXN0ZXJTYXZlTG9jYXRpb25zLT5hdChpKSB9OworICAgICAgICBp
ZiAoIWNhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KGVudHJ5LnJlZygpKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIEFTU0VSVChlbnRyeS5yZWcoKS5pc0dQUigpKTsKKworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgc2F2ZVNsb3QgeyBlbnRyeS5vZmZzZXRBc0luZGV4KCkgfTsKKyAg
ICAgICAgcmVnaXN0ZXJzW2VudHJ5LnJlZygpXQorICAgICAgICAgICAgPSBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJbkpTU3RhY2soc2F2ZVNsb3QsIERhdGFGb3JtYXRKUyk7CisgICAgfQorCisg
ICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9
IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFjYWxsZWVTYXZlUmVnaXN0ZXJzLmdldChyZWcp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHJlZ2lzdGVyc1tyZWddKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQVNTRVJUKHJlZy5pc0dQUigpKTsKKwor
ICAgICAgICByZWdpc3RlcnNbcmVnXQorICAgICAgICAgICAgPSBWYWx1ZVJlY292ZXJ5OjppbkdQ
UihyZWcuZ3ByKCksIERhdGFGb3JtYXRKUyk7CisgICAgfQorfQorCisjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0
YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ0ODAyZTg2ZDE0YWU5OWFkMzA5YjRhY2ZmMzIwZTEzNjQyMzUwNDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVE
YXRhLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIENhbGxGcmFtZVNodWZmbGVEYXRhX2gKKyNkZWZpbmUgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGFfaAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIlJlZ2lz
dGVyTWFwLmgiCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RydWN0IENhbGxGcmFtZVNodWZmbGVEYXRhIHsKKyAgICB1bnNpZ25lZCBudW1Mb2NhbHM7
CisgICAgVmFsdWVSZWNvdmVyeSBjYWxsZWU7CisgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFy
Z3M7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3Rlck1hcDxWYWx1ZVJlY292ZXJ5PiBy
ZWdpc3RlcnM7CisKKyAgICB2b2lkIHNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhDb2RlQmxvY2sq
KTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUo
SklUKQorCisjZW5kaWYgLy8gQ2FsbEZyYW1lU2h1ZmZsZURhdGFfaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMWRjOWRm
YzE3MTY0MWRmMzdmNzUwNzNhNjQxMjBkMThjNDQ3NWIyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAgLTAsMCArMSw3
MDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisKKyNpZiBF
TkFCTEUoSklUKQorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IENhbGxGcmFtZVNodWZmbGVEYXRhJiBk
YXRhKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9vbGRGcmFtZShkYXRhLm51bUxvY2FscyAr
IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplLCBudWxscHRyKQorICAgICwgbV9uZXdGcmFt
ZShkYXRhLmFyZ3Muc2l6ZSgpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSwgbnVsbHB0
cikKKyAgICAsIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZShKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJT
aXplCisgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9BbGlnbkZyYW1lKGppdC5jb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpKSkKKyAgICAsIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZShKU1N0
YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplCisgICAgICAgICsgcm91bmRBcmd1bWVudENvdW50VG9B
bGlnbkZyYW1lKGRhdGEuYXJncy5zaXplKCkpKQorICAgICwgbV9mcmFtZURlbHRhKG1fYWxpZ25l
ZE5ld0ZyYW1lU2l6ZSAtIG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSkKKyAgICAsIG1fbG9ja2VkUmVn
aXN0ZXJzKFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKSkKK3sKKyAgICAvLyBXZSBhcmUgYWxs
b3dlZCBhbGwgdGhlIHVzdWFsIHJlZ2lzdGVycy4uLgorICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07ICkKKyAgICAgICAgbV9sb2NrZWRSZWdpc3Rl
cnMuY2xlYXIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
RlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTsgKQorICAgICAgICBtX2xvY2tlZFJlZ2lz
dGVycy5jbGVhcihGUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsKKyAgICAvLyAuLi4gYXMgd2VsbCBh
cyB0aGUgcnVudGltZSByZWdpc3RlcnMuCisgICAgbV9sb2NrZWRSZWdpc3RlcnMuZXhjbHVkZShS
ZWdpc3RlclNldDo6cnVudGltZVJlZ2lzdGVycygpKTsKKworICAgIEFTU0VSVCghZGF0YS5jYWxs
ZWUuaXNJbkpTU3RhY2soKSB8fCBkYXRhLmNhbGxlZS52aXJ0dWFsUmVnaXN0ZXIoKS5pc0xvY2Fs
KCkpOworICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSwgZGF0YS5j
YWxsZWUpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhLmFyZ3Muc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgQVNTRVJUKCFkYXRhLmFyZ3NbaV0uaXNJbkpTU3RhY2soKSB8fCBkYXRh
LmFyZ3NbaV0udmlydHVhbFJlZ2lzdGVyKCkuaXNMb2NhbCgpKTsKKyAgICAgICAgYWRkTmV3KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLCBkYXRhLmFyZ3NbaV0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0g
UmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFkYXRhLnJlZ2lz
dGVyc1tyZWddLmlzU2V0KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBSRUxF
QVNFX0FTU0VSVChyZWcuaXNHUFIoKSk7CisKKyAgICAgICAgYWRkTmV3KEpTVmFsdWVSZWdzKHJl
Zy5ncHIoKSksCisgICAgICAgICAgICBkYXRhLnJlZ2lzdGVyc1tyZWddKTsKKyAgICB9CisjZW5k
aWYKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkZWxpbWl0ZXIgICAgICAgICAgICAgPSAi
ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKyAiOworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkYW5nZXJEZWxpbWl0ZXIgICAgICAgPSAiIFgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tWCAiOworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYW5nZXJCb3VuZHNEZWxpbWl0ZXIg
PSAiIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCAiOworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBlbXB0eVNwYWNlICAgICAgICAgICAgPSAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiOworICAgIEFTU0VSVChtX2FsaWduZWROZXdGcmFtZVNpemUgPD0gbnVtTG9j
YWxzKCkpOworICAgIG91dC5wcmludCgiICAgICAgICAgICIpOworICAgIG91dC5wcmludCgiICAg
ICAgICAgICBPbGQgZnJhbWUgICAgICAgICAgICAgICAiKTsKKyAgICBvdXQucHJpbnQoIiAgICAg
ICAgICAgTmV3IGZyYW1lICAgICAgICAgICAgICAgIik7CisgICAgb3V0LnByaW50KCJcbiIpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9hbGlnbmVkT2xkRnJhbWVTaXplICsgbnVtTG9jYWxz
KCkgKyAzOyArK2kpIHsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9sZCB7IG1fYWxpZ25lZE9s
ZEZyYW1lU2l6ZSAtIGkgLSAxIH07CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBuZXdSZWcgeyBv
bGQgKyBtX2ZyYW1lRGVsdGEgfTsKKworICAgICAgICBpZiAoIWlzVmFsaWRPbGQob2xkKSAmJiBv
bGQgIT0gZmlyc3RPbGQoKSAtIDEKKyAgICAgICAgICAgICYmICFpc1ZhbGlkTmV3KG5ld1JlZykg
JiYgbmV3UmVnICE9IGZpcnN0TmV3KCkgLSAxKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgb3V0LnByaW50KCIgICAgICAgICIpOworICAgICAgICBpZiAoZGFuZ2VyRnJvbnRpZXIo
KSA+PSBmaXJzdE5ldygpCisgICAgICAgICAgICAmJiAobmV3UmVnID09IGRhbmdlckZyb250aWVy
KCkgfHwgbmV3UmVnID09IGZpcnN0TmV3KCkgLSAxKSkKKyAgICAgICAgICAgIG91dC5wcmludChk
YW5nZXJCb3VuZHNEZWxpbWl0ZXIpOworICAgICAgICBlbHNlIGlmIChpc1ZhbGlkT2xkKG9sZCkp
CisgICAgICAgICAgICBvdXQucHJpbnQoaXNWYWxpZE5ldyhuZXdSZWcpICYmIGlzRGFuZ2VyTmV3
KG5ld1JlZykgPyBkYW5nZXJEZWxpbWl0ZXIgOiBkZWxpbWl0ZXIpOworICAgICAgICBlbHNlIGlm
IChvbGQgPT0gZmlyc3RPbGQoKSAtIDEpCisgICAgICAgICAgICBvdXQucHJpbnQoZGVsaW1pdGVy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworICAg
ICAgICBpZiAoZGFuZ2VyRnJvbnRpZXIoKSA+PSBmaXJzdE5ldygpCisgICAgICAgICAgICAmJiAo
bmV3UmVnID09IGRhbmdlckZyb250aWVyKCkgfHwgbmV3UmVnID09IGZpcnN0TmV3KCkgLSAxKSkK
KyAgICAgICAgICAgIG91dC5wcmludChkYW5nZXJCb3VuZHNEZWxpbWl0ZXIpOworICAgICAgICBl
bHNlIGlmIChpc1ZhbGlkTmV3KG5ld1JlZykgfHwgbmV3UmVnID09IGZpcnN0TmV3KCkgLSAxKQor
ICAgICAgICAgICAgb3V0LnByaW50KGlzRGFuZ2VyTmV3KG5ld1JlZykgPyBkYW5nZXJEZWxpbWl0
ZXIgOiBkZWxpbWl0ZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoZW1w
dHlTcGFjZSk7CisgICAgICAgIG91dC5wcmludCgiXG4iKTsKKyAgICAgICAgaWYgKG9sZCA9PSBm
aXJzdE9sZCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgc3AgLS0+ICIpOworICAgICAgICBl
bHNlIGlmICghb2xkLm9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgZnAgLS0+ICIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgIik7CisgICAg
ICAgIGlmIChpc1ZhbGlkT2xkKG9sZCkpIHsKKyAgICAgICAgICAgIGlmIChnZXRPbGQob2xkKSkg
eworICAgICAgICAgICAgICAgIGF1dG8gc3RyID0gdG9DU3RyaW5nKG9sZCk7CisgICAgICAgICAg
ICAgICAgaWYgKGlzVmFsaWROZXcobmV3UmVnKSAmJiBpc0Rhbmdlck5ldyhuZXdSZWcpKQorICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgWCAgICAgICUxOHMgICAgICAgWCAiLCBzdHIu
ZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG91dC5w
cmludGYoIiB8ICAgICAgJTE4cyAgICAgICB8ICIsIHN0ci5kYXRhKCkpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChpc1ZhbGlkTmV3KG5ld1JlZykgJiYgaXNEYW5nZXJOZXcobmV3UmVnKSkKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgWCUzMHMgWCAiLCAiIik7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiIHwlMzBzIHwgIiwgIiIpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludChlbXB0eVNwYWNlKTsKKyAgICAgICAgaWYg
KGlzVmFsaWROZXcobmV3UmVnKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciBkID0gaXNEYW5n
ZXJOZXcobmV3UmVnKSA/ICdYJyA6ICd8JzsKKyAgICAgICAgICAgIGF1dG8gc3RyID0gdG9DU3Ry
aW5nKG5ld1JlZyk7CisgICAgICAgICAgICBpZiAoZ2V0TmV3KG5ld1JlZykpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZ2V0TmV3KG5ld1JlZyktPnJlY292ZXJ5KCkuaXNDb25zdGFudCgpKQorICAg
ICAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCIgJWMlOHMgPC0gICAgICAgICAgIGNvbnN0YW50
ICVjICIsIGQsIHN0ci5kYXRhKCksIGQpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIHJlY292ZXJ5U3RyID0gdG9DU3RyaW5nKGdldE5ldyhuZXdSZWcp
LT5yZWNvdmVyeSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50ZigiICVjJThzIDwt
ICUxOHMgJWMgIiwgZCwgc3RyLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlY292
ZXJ5U3RyLmRhdGEoKSwgZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IGlmIChuZXdSZWcgPT0gVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6QXJndW1lbnRDb3VudCB9
KQorICAgICAgICAgICAgICAgIG91dC5wcmludGYoIiAlYyU4cyA8LSAlMTh6dSAlYyAiLCBkLCBz
dHIuZGF0YSgpLCBhcmdDb3VudCgpLCBkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBvdXQucHJpbnRmKCIgJWMlMzBzICVjICIsIGQsICIiLCBkKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoZW1wdHlTcGFjZSk7CisgICAgICAgIGlmIChuZXdSZWcg
PT0gZmlyc3ROZXcoKSAtIG1fbmV3RnJhbWVPZmZzZXQgJiYgIWlzU2xvd1BhdGgoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiIDwtLSBuZXcgc3AgYmVmb3JlIGp1bXAgKGN1cnJlbnQgIiwgbV9u
ZXdGcmFtZUJhc2UsICIpICIpOworICAgICAgICBpZiAobmV3UmVnID09IGZpcnN0TmV3KCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiA8LS0gbmV3IGZwIGFmdGVyIHByb2xvZ3VlIik7CisgICAg
ICAgIG91dC5wcmludCgiXG4iKTsKKyAgICB9CisgICAgb3V0LnByaW50KCIgICAgICAgICAgIik7
CisgICAgb3V0LnByaW50KCIgICAgICAgIExpdmUgcmVnaXN0ZXJzICAgICAgICAgICAgICIpOwor
ICAgIG91dC5wcmludCgiICAgICAgICBXYW50ZWQgcmVnaXN0ZXJzICAgICAgICAgICAiKTsKKyAg
ICBvdXQucHJpbnQoIlxuIik7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcg
PD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBv
bGRDYWNoZWRSZWNvdmVyeSB7IG1fcmVnaXN0ZXJzW3JlZy5ncHIoKV0gfTsKKyAgICAgICAgQ2Fj
aGVkUmVjb3ZlcnkqIG5ld0NhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnLmdwcigp
XSB9OworICAgICAgICBpZiAoIW9sZENhY2hlZFJlY292ZXJ5ICYmICFuZXdDYWNoZWRSZWNvdmVy
eSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBvdXQucHJpbnQoIiAgICAgICAgICAi
KTsKKyAgICAgICAgaWYgKG9sZENhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICBhdXRvIHN0
ciA9IHRvQ1N0cmluZyhyZWcuZ3ByKCkpOworICAgICAgICAgICAgb3V0LnByaW50ZigiICAgICAg
ICAgJThzICAgICAgICAgICAgICAgICAgIiwgc3RyLmRhdGEoKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgb3V0LnByaW50KGVtcHR5U3BhY2UpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgIGlmIChuZXdDYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3Mgd2FudGVkSlNWYWx1ZVJlZ3MgeyBuZXdDYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJl
Z3MoKSB9OworICAgICAgICAgICAgaWYgKHJlZy5ncHIoKSA9PSB3YW50ZWRKU1ZhbHVlUmVncy50
YWdHUFIoKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQocmVnLmdwcigpLCAiIDwtIHRhZygi
LCBuZXdDYWNoZWRSZWNvdmVyeS0+cmVjb3ZlcnkoKSwgIikiKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBvdXQucHJpbnQocmVnLmdwcigpLCAiIDwtIHBheWxvYWQoIiwgbmV3
Q2FjaGVkUmVjb3ZlcnktPnJlY292ZXJ5KCksICIpIik7CisgICAgICAgIH0KKyNlbHNlCisgICAg
ICAgIGlmIChuZXdDYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICAg
ICAgIiwgcmVnLmdwcigpLCAiIDwtICIsIG5ld0NhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpKTsK
KyNlbmRpZgorICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgfQorICAgIG91dC5wcmludCgi
ICBMb2NrZWQgcmVnaXN0ZXJzOiAiKTsKKyAgICBib29sIGZpcnN0TG9ja2VkIHsgdHJ1ZSB9Owor
ICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcg
PSByZWcubmV4dCgpKSB7CisgICAgICAgIGlmICghcmVnLmlzR1BSKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAobV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHJlZy5ncHIoKSkp
IHsKKyAgICAgICAgICAgIG91dC5wcmludChmaXJzdExvY2tlZCA/ICIiIDogIiwgIiwgcmVnLmdw
cigpKTsKKyAgICAgICAgICAgIGZpcnN0TG9ja2VkID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisgICAgb3V0LnByaW50KCJcbiIpOworCisgICAgaWYgKGlzU2xvd1BhdGgoKSkKKyAgICAgICAg
b3V0LnByaW50KCIgIFVzaW5nIGZwLXJlbGF0aXZlIGFkZHJlc3NpbmcgZm9yIHNsb3cgcGF0aCBj
YWxsXG4iKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgiICBVc2luZyBzcC1yZWxhdGl2
ZSBhZGRyZXNzaW5nIGZvciBqdW1wICh1c2luZyAiLCBtX25ld0ZyYW1lQmFzZSwgIiBhcyBuZXcg
c3ApXG4iKTsKKyAgICBpZiAobV9vbGRGcmFtZU9mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCIg
ICBPbGQgZnJhbWUgb2Zmc2V0IGlzICIsIG1fb2xkRnJhbWVPZmZzZXQsICJcbiIpOworICAgIGlm
IChtX25ld0ZyYW1lT2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIiAgIE5ldyBmcmFtZSBvZmZz
ZXQgaXMgIiwgbV9uZXdGcmFtZU9mZnNldCwgIlxuIik7Cit9CisKK0NhY2hlZFJlY292ZXJ5KiBD
YWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSByZWNvdmVy
eSkKK3sKKyAgICBBU1NFUlQoIXJlY292ZXJ5LmlzQ29uc3RhbnQoKSk7CisgICAgaWYgKHJlY292
ZXJ5LmlzSW5HUFIoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5Lmdwcigp
XTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkZQUigpKQorICAgICAgICByZXR1cm4gbV9yZWdpc3Rl
cnNbcmVjb3ZlcnkuZnByKCldOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaWYgKHJlY292
ZXJ5LnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICBBU1NFUlQobV9yZWdpc3RlcnNb
cmVjb3ZlcnkudGFnR1BSKCldID09IG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnBheWxvYWRHUFIoKV0p
OworICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkucGF5bG9hZEdQUigpXTsKKyAg
ICB9CisjZW5kaWYKKyAgICBBU1NFUlQocmVjb3ZlcnkuaXNJbkpTU3RhY2soKSk7CisgICAgcmV0
dXJuIGdldE9sZChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSk7Cit9CisKK0NhY2hlZFJlY292
ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6c2V0Q2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSBy
ZWNvdmVyeSwgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5KQoreworICAgIEFTU0VSVCgh
cmVjb3ZlcnkuaXNDb25zdGFudCgpKTsKKyAgICBpZiAocmVjb3ZlcnkuaXNJbkdQUigpKQorICAg
ICAgICByZXR1cm4gbV9yZWdpc3RlcnNbcmVjb3ZlcnkuZ3ByKCldID0gY2FjaGVkUmVjb3Zlcnk7
CisgICAgaWYgKHJlY292ZXJ5LmlzSW5GUFIoKSkKKyAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJz
W3JlY292ZXJ5LmZwcigpXSA9IGNhY2hlZFJlY292ZXJ5OworI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICBtX3Jl
Z2lzdGVyc1tyZWNvdmVyeS50YWdHUFIoKV0gPSBjYWNoZWRSZWNvdmVyeTsKKyAgICAgICAgcmV0
dXJuIG1fcmVnaXN0ZXJzW3JlY292ZXJ5LnBheWxvYWRHUFIoKV0gPSBjYWNoZWRSZWNvdmVyeTsK
KyAgICB9CisjZW5kaWYKKyAgICBBU1NFUlQocmVjb3ZlcnkuaXNJbkpTU3RhY2soKSk7CisgICAg
c2V0T2xkKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpLCBjYWNoZWRSZWNvdmVyeSk7CisgICAg
cmV0dXJuIGNhY2hlZFJlY292ZXJ5OworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpzcGls
bChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJUKCFpc1Nsb3dQ
YXRoKCkpOworICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3Rl
cnMoKSk7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxTbG90IHsgMCB9OworICAgIGZvciAo
VmlydHVhbFJlZ2lzdGVyIHNsb3QgPSBmaXJzdE9sZCgpOyBzbG90IDw9IGxhc3RPbGQoKTsgc2xv
dCAtPSAxKSB7CisgICAgICAgIEFTU0VSVChzbG90IDwgbmV3QXNPbGQoZmlyc3ROZXcoKSkpOwor
ICAgICAgICBpZiAoZ2V0T2xkKHNsb3QpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgc3BpbGxTbG90ID0gc2xvdDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIFdlIG11
c3QgaGF2ZSBlbm91Z2ggc2xvdHMgdG8gYmUgYWJsZSB0byBmaXQgdGhlIHdob2xlCisgICAgLy8g
Y2FsbGVlJ3MgZnJhbWUgZm9yIHRoZSBzbG93IHBhdGguCisgICAgUkVMRUFTRV9BU1NFUlQoc3Bp
bGxTbG90LmlzTG9jYWwoKSk7CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
ICAgKiBTcGlsbGluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiIGludG8gIiwgc3Bp
bGxTbG90LCAiXG4iKTsKKyAgICBhdXRvIGZvcm1hdCA9IGVtaXRTdG9yZShjYWNoZWRSZWNvdmVy
eSwgYWRkcmVzc0Zvck9sZChzcGlsbFNsb3QpKTsKKyAgICBBU1NFUlQoZm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKTsKKyAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNv
dmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNwaWxsU2xvdCwgZm9ybWF0KSk7Cit9CisKK3ZvaWQg
Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREZWx0YUNoZWNrKCkKK3sKKyAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgeyBnZXRG
cmVlR1BSKCkgfTsKKyAgICBpZiAoc2NyYXRjaEdQUiAhPSBJbnZhbGlkR1BSUmVnKSB7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBVc2luZyAiLCBzY3JhdGNo
R1BSLCAiIGZvciB0aGUgZnAtc3AgZGVsdGEgY2hlY2tcbiIpOworICAgICAgICBtX2ppdC5tb3Zl
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9qaXQu
c3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2NyYXRjaEdQUik7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9rID0gbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PHNpemVfdD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIG51bUxvY2FscygpKSkpOworICAgICAgICBtX2pp
dC5hYm9ydFdpdGhSZWFzb24oSklUVW5leHBlY3RlZENhbGxGcmFtZVNpemUpOworICAgICAgICBv
ay5saW5rKCZtX2ppdCk7CisgICAgfSBlbHNlIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
KCIgIFNraXBwaW5nIHRoZSBmcC1zcCBkZWx0YSBjaGVjayBzaW5jZSB0aGVyZSBpcyB0b28gbXVj
aCBwcmVzc3VyZSIpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xv
d1BhdGgoKQoreworICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICBlbWl0RGVsdGFDaGVj
aygpOworCisgICAgbV9mcmFtZURlbHRhID0gbnVtTG9jYWxzKCkgKyBKU1N0YWNrOjpDYWxsZXJG
cmFtZUFuZFBDU2l6ZTsKKyAgICBtX25ld0ZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlcjsKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLUpTU3RhY2s6OkNhbGxl
ckZyYW1lQW5kUENTaXplOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlxu
XG5QcmVwYXJpbmcgZnJhbWUgZm9yIHNsb3cgcGF0aCBjYWxsOlxuIiwgKnRoaXMpOworCisgICAg
cHJlcGFyZUFueSgpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlJlYWR5
IGZvciBzbG93IHBhdGggY2FsbCFcbiIpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpw
cmVwYXJlRm9yVGFpbENhbGwoKQoreworICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKyAgICBl
bWl0RGVsdGFDaGVjaygpOworCisgICAgLy8gV2UnbGwgdXNlIHNwLWJhc2VkIGluZGV4aW5nIHNv
IHRoYXQgd2UgY2FuIGxvYWQgdGhlCisgICAgLy8gY2FsbGVyJ3MgZnJhbWUgcG9pbnRlciBpbnRv
IHRoZSBmcHIgaW1tZWRpYXRlbHkKKyAgICBtX29sZEZyYW1lQmFzZSA9IE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlcjsKKyAgICBtX29sZEZyYW1lT2Zmc2V0ID0gbnVtTG9jYWxz
KCk7CisgICAgbV9uZXdGcmFtZUJhc2UgPSBhY3F1aXJlR1BSKCk7CisjaWYgQ1BVKFg4NikKKyAg
ICAvLyBXZSBsb2FkIHRoZSBmcmFtZSBwb2ludGVyIG1hbnVhbGx5LCBidXQgd2UgbmVlZCB0byBh
c2sgdGhlCisgICAgLy8gYWxnb3JpdGhtIHRvIG1vdmUgdGhlIHJldHVybiBQQyBmb3IgdXMgKGl0
J2QgcHJvYmFibHkKKyAgICAvLyByZXF1aXJlIGEgd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lKS4g
U2luY2UgaXQnZCBiZSBhd2t3YXJkCisgICAgLy8gdG8gYXNrIGZvciBoYWxmIGEgdmFsdWUgbW92
ZSwgd2UgYXNrIHRoYXQgdGhlIHdob2xlIHRoaW5nCisgICAgLy8gYmUgbW92ZWQgZm9yIHVzLgor
ICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyAwIH0sCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVnaXN0ZXIoMCksIERhdGFGb3JtYXRKUykpOwor
CisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFkMCBhbmQgd2Ugd2lsbCBtb3ZlIGl0IHVwIGhh
bGYgYSBzbG90CisgICAgLy8gbWFudWFsbHkKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gMDsKKyNl
bGlmIENQVShBUk0pIHx8IENQVShTSDQpIHx8IENQVShNSVBTKQorICAgIC8vIFdlIGxvYWQgdGhl
IHRoZSBmcmFtZSBwb2ludGVyIGFuZCBsaW5rIHJlZ2lzdGVyCisgICAgLy8gbWFudWFsbHkuIFdl
IGNvdWxkIGFzayB0aGUgYWxnb3JpdGhtIHRvIGxvYWQgdGhlbSBmb3IgdXMsCisgICAgLy8gYW5k
IGl0IHdvdWxkIGFsbG93IHVzIHRvIHVzZSB0aGUgbGluayByZWdpc3RlciBhcyBhbiBleHRyYQor
ICAgIC8vIHRlbXBvcmFyeSAtIGJ1dCBpdCdkIG1lYW4gdGhhdCB0aGUgZnJhbWUgcG9pbnRlciBj
YW4gYWxzbworICAgIC8vIGJlIHVzZWQgYXMgYW4gZXh0cmEgdGVtcG9yYXJ5LCBzbyB3ZSBrZWVw
IHRoZSBsaW5rIHJlZ2lzdGVyCisgICAgLy8gbG9ja2VkIGluc3RlYWQuCisKKyAgICAvLyBzcCB3
aWxsIHBvaW50IHRvIGhlYWQxIHNpbmNlIHRoZSBjYWxsZWUncyBwcm9sb2d1ZSBwdXNoZXMKKyAg
ICAvLyB0aGUgY2FsbCBmcmFtZSBhbmQgbGluayByZWdpc3Rlci4KKyAgICBtX25ld0ZyYW1lT2Zm
c2V0ID0gLTE7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgLy8gV2UgbG9hZCB0aGUgZnJhbWUgcG9p
bnRlciBhbmQgbGluayByZWdpc3RlciBtYW51YWxseS4gV2UKKyAgICAvLyBjb3VsZCBhc2sgdGhl
IGFsZ29yaXRobSB0byBsb2FkIHRoZSBsaW5rIHJlZ2lzdGVyIGZvciB1cworICAgIC8vICh3aGlj
aCB3b3VsZCBhbGxvdyBmb3IgaXRzIHVzZSBhcyBhbiBleHRyYSB0ZW1wb3JhcnkpLCBidXQKKyAg
ICAvLyBzaW5jZSBpdHMgbm90IGluIEdQUkluZm8sIHdlIGNhbid0IGRvIGl0LgorCisgICAgLy8g
c3Agd2lsbCBwb2ludCB0byBoZWFkMiBzaW5jZSB0aGUgY2FsbGVlJ3MgcHJvbG9ndWUgcHVzaGVz
IHRoZQorICAgIC8vIGNhbGwgZnJhbWUgYW5kIGxpbmsgcmVnaXN0ZXIKKyAgICBtX25ld0ZyYW1l
T2Zmc2V0ID0gLTI7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIC8vIFdlIGxvYWQgdGhlIGZyYW1l
IHBvaW50ZXIgbWFudWFsbHksIGJ1dCB3ZSBhc2sgdGhlCisgICAgLy8gYWxnb3JpdGhtIHRvIG1v
dmUgdGhlIHJldHVybiBQQyBmb3IgdXMgKGl0J2QgcHJvYmFibHkKKyAgICAvLyByZXF1aXJlIGEg
d3JpdGUgaW4gdGhlIGRhbmdlciB6b25lKQorICAgIGFkZE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyAx
IH0sCisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVn
aXN0ZXIoMSksIERhdGFGb3JtYXRKUykpOworCisgICAgLy8gc3Agd2lsbCBwb2ludCB0byBoZWFk
MSBzaW5jZSB0aGUgY2FsbGVlJ3MgcHJvbG9ndWUgcHVzaGVzCisgICAgLy8gdGhlIGNhbGwgZnJh
bWUgcmVnaXN0ZXIKKyAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLTE7CisjZWxzZQorICAgIFVOUkVB
Q0hBQkxFX0ZPUl9QTEFURk9STSgpOworI2VuZGlmCisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiICBFbWl0dGluZyBjb2RlIGZvciBjb21wdXRpbmcgdGhlIG5ldyBmcmFtZSBi
YXNlXG4iKTsKKworICAgIC8vIFdlIGNvbXB1dGUgdGhlIG5ldyBmcmFtZSBiYXNlIGJ5IGZpcnN0
IGNvbXB1dGluZyB0aGUgdG9wIG9mIHRoZQorICAgIC8vIG9sZCBmcmFtZSAodGFraW5nIGludG8g
YWNjb3VudCBhbiBhcmd1bWVudCBjb3VudCBoaWdoZXIgdGhhbgorICAgIC8vIHRoZSBudW1iZXIg
b2YgcGFyYW1ldGVycyksIHRoZW4gc3Vic3RyYWN0aW5nIHRvIGl0IHRoZSBhbGlnbmVkCisgICAg
Ly8gbmV3IGZyYW1lIHNpemUgKGFkanVzdGVkKS4KKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpTU3RhY2s6OkFyZ3Vt
ZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCksIG1fbmV3RnJhbWVCYXNlKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBhcmd1bWVu
dENvdW50T0sgPQorICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3dP
ckVxdWFsLCBtX25ld0ZyYW1lQmFzZSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSkpOworICAgIG1faml0
LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhY2tBbGlnbm1lbnRSZWdpc3Rl
cnMoKSAtIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKSwgbV9uZXdGcmFtZUJhc2Up
OworICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoLXN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCkpLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgbV9qaXQubXVsMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgbV9uZXdGcmFtZUJh
c2UsIG1fbmV3RnJhbWVCYXNlKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOworICAgIGFyZ3VtZW50Q291bnRPSy5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQu
bW92ZSgKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihtX2FsaWduZWRPbGRG
cmFtZVNpemUgKiBzaXplb2YoUmVnaXN0ZXIpKSwKKyAgICAgICAgbV9uZXdGcmFtZUJhc2UpOwor
ICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgbV9qaXQuYWRkUHRyKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLCBtX25ld0ZyYW1lQmFzZSk7CisgICAgbV9qaXQuc3ViUHRyKAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKAorICAgICAgICAgICAgKG1fYWxpZ25lZE5l
d0ZyYW1lU2l6ZSArIG1fbmV3RnJhbWVPZmZzZXQpICogc2l6ZW9mKFJlZ2lzdGVyKSksIAorICAg
ICAgICBtX25ld0ZyYW1lQmFzZSk7CisKKyAgICAvLyBXZSB3YW50IHRoZSBmcmFtZSBwb2ludGVy
IHRvIGFsd2F5cyBwb2ludCB0byBhIHZhbGlkIGZyYW1lLCBhbmQKKyAgICAvLyB3ZSBhcmUgZ29p
bmcgdG8gdHJhc2ggdGhlIGN1cnJlbnQgb25lLiBMZXQncyBtYWtlIGl0IHBvaW50IHRvCisgICAg
Ly8gb3VyIGNhbGxlcidzIGZyYW1lLCBzaW5jZSB0aGF0J3Mgd2hhdCB3ZSB3YW50IHRvIGVuZCB1
cCB3aXRoLgorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoTWFjcm9B
c3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIC8vIFdlIGxvYWQgdGhlIGxpbmsgcmVnaXN0
ZXIgbWFudWFsbHkgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBoYXZlIG9uZQorI2lmIENQVShBUk0p
IHx8IENQVShTSDQpIHx8IENQVShBUk02NCkKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlciwgc2l6ZW9m
KHZvaWQqKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpsaW5rUmVnaXN0ZXIpOworI2VsaWYg
Q1BVKE1JUFMpCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhNYWNy
b0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIsIHNpemVvZih2b2lkKikpLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmV0dXJuQWRkcmVzc1JlZ2lzdGVyKTsKKyNlbmRpZgorCisgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlByZXBhcmluZyBmcmFtZSBmb3IgdGFpbCBj
YWxsOlxuIiwgKnRoaXMpOworCisgICAgcHJlcGFyZUFueSgpOworCisjaWYgQ1BVKFg4NikKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBTaW11bGF0aW5nIHBvcCBvZiB0aGUg
Y2FsbCBmcmFtZSByZWdpc3RlclxuIik7CisgICAgbV9qaXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc2l6ZW9mKHZvaWQqKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CisjZW5kaWYKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
KCJSZWFkeSBmb3IgdGFpbCBjYWxsIVxuIik7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6
OnRyeVdyaXRlcyhDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCit7CisgICAgQVNTRVJU
KG1fbmV3RnJhbWVCYXNlICE9IEludmFsaWRHUFJSZWcpOworCisgICAgLy8gSWYgdGhlIHZhbHVl
IGlzIGFscmVhZHkgc2V0IHVwIGNvcnJlY3RseSwgd2UgZG9uJ3QgaGF2ZQorICAgIC8vIGFueXRo
aW5nIHRvIGRvLgorICAgIGlmIChpc1Nsb3dQYXRoKCkgJiYgY2FjaGVkUmVjb3ZlcnkucmVjb3Zl
cnkoKS5pc0luSlNTdGFjaygpCisgICAgICAgICYmIGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKS5z
aXplKCkgPT0gMQorICAgICAgICAmJiAobmV3QXNPbGQoY2FjaGVkUmVjb3ZlcnkudGFyZ2V0cygp
WzBdKQorICAgICAgICAgICAgPT0gY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS52aXJ0dWFsUmVn
aXN0ZXIoKSkpIHsKKyAgICAgICAgY2FjaGVkUmVjb3ZlcnkuY2xlYXJUYXJnZXRzKCk7CisgICAg
ICAgIGlmICghY2FjaGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKSkKKyAgICAgICAgICAg
IGNsZWFyQ2FjaGVkUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICghY2FuTG9hZEFuZEJveChjYWNoZWRSZWNv
dmVyeSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGVtaXRMb2FkKGNhY2hlZFJlY292
ZXJ5KTsKKyAgICBlbWl0Qm94KGNhY2hlZFJlY292ZXJ5KTsKKyAgICBBU1NFUlQoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5pc0luUmVnaXN0ZXJzKCkKKyAgICAgICAgfHwgY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5pc0NvbnN0YW50KCkpOworCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2coIiAgICogU3RvcmluZyAiLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhY2hlZFJlY292ZXJ5LnRhcmdldHMoKS5zaXplKCk7
ICsraSkgeworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IHsgY2FjaGVkUmVjb3Zlcnku
dGFyZ2V0cygpW2ldIH07CisgICAgICAgIEFTU0VSVCghaXNEYW5nZXJOZXcodGFyZ2V0KSk7Cisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyghaSA/ICIgaW50byAiIDog
IiwgYW5kICIsICJORVcgIiwgdGFyZ2V0KTsKKyAgICAgICAgZW1pdFN0b3JlKGNhY2hlZFJlY292
ZXJ5LCBhZGRyZXNzRm9yTmV3KHRhcmdldCkpOworICAgICAgICBzZXROZXcodGFyZ2V0LCBudWxs
cHRyKTsKKyAgICB9CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIlxuIik7Cisg
ICAgY2FjaGVkUmVjb3ZlcnkuY2xlYXJUYXJnZXRzKCk7CisgICAgaWYgKCFjYWNoZWRSZWNvdmVy
eS53YW50ZWRKU1ZhbHVlUmVncygpKQorICAgICAgICBjbGVhckNhY2hlZFJlY292ZXJ5KGNhY2hl
ZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2Fs
bEZyYW1lU2h1ZmZsZXI6OnBlcmZvcm1TYWZlV3JpdGVzKCkKK3sKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZmlyc3RTYWZlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbmQgeyBsYXN0TmV3KCkgKyAxIH07
CisgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gZmFpbHVyZXM7CisKKyAgICAvLyBGb3IgYWxs
IGNhY2hlZFJlY292ZXJpZXMgdGhhdCB3cml0ZXMgdG8gdGhlIHNhZmUgem9uZSwgaWYgaXQKKyAg
ICAvLyBkb2Vzbid0IGFsc28gd3JpdGUgdG8gdGhlIGRhbmdlciB6b25lLCB3ZSB0cnkgdG8gcGVy
Zm9ybQorICAgIC8vIHRoZSB3cml0ZXMuIFRoaXMgbWF5IGZyZWUgdXAgZGFuZ2VyIHNsb3RzLCBz
byB3ZSBpdGVyYXRlCisgICAgLy8gYWdhaW4gdW50aWwgaXQgZG9lc24ndCBoYXBwZW4gYW55bW9y
ZS4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB3ZSBoYXZlIGEgd2hpbGUg
YmxvY2ssIHdlIGxvb2sgYXQKKyAgICAvLyBlYWNoIHNsb3Qgb2YgdGhlIG5ldyBjYWxsIGZyYW1l
IGF0IG1vc3Qgb25jZSBzaW5jZSBpbiBlYWNoCisgICAgLy8gaXRlcmF0aW9uIGJleW9uZCB0aGUg
Zmlyc3QsIHdlIG9ubHkgbG9hZCB1cCB0aGUgcG9ydGlvbiBvZgorICAgIC8vIHRoZSBuZXcgY2Fs
bCBmcmFtZSB0aGF0IHdhcyBkYW5nZXJvdXMgYW5kIGJlY2FtZSBzYWZlIGR1ZQorICAgIC8vIHRv
IHRoZSBwcmV2aW91cyBpdGVyYXRpb24uCisgICAgZG8geworICAgICAgICBmaXJzdFNhZmUgPSBk
YW5nZXJGcm9udGllcigpICsgMTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCIgIFRyeWluZyBzYWZlIHdyaXRlcyAoYmV0d2VlbiBORVcgIiwgZmlyc3RTYWZlLCAi
IGFuZCBORVcgIiwgZW5kIC0gMSwgIilcbiIpOworICAgICAgICBib29sIGRpZFByb2dyZXNzID0g
ZmFsc2U7CisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGZpcnN0U2FmZTsgcmVn
IDwgZW5kOyByZWcgKz0gMSkgeworICAgICAgICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJl
Y292ZXJ5ID0gZ2V0TmV3KHJlZyk7CisgICAgICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KSB7
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICsgIiwgcmVnLCAiIGlzIE9LLlxuIik7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWhhc09ubHlTYWZlV3JpdGVzKCpjYWNo
ZWRSZWNvdmVyeSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAtICIsIGNhY2hlZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAi
IHdyaXRlcyB0byBORVcgIiwgcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBidXQgYWxz
byBoYXMgZGFuZ2Vyb3VzIHdyaXRlcy5cbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjYWNoZWRS
ZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIC0gIiwgY2FjaGVkUmVjb3Zl
cnktPnJlY292ZXJ5KCksICIgd3JpdGVzIHRvIE5FVyAiLCByZWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAiIGJ1dCBpcyBhbHNvIG5lZWRlZCBpbiByZWdpc3RlcnMuXG4iKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIXRyeVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIC0gVW5hYmxl
IHRvIHdyaXRlIHRvIE5FVyAiLCByZWcsICIgZnJvbSAiLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3Zl
cnkoKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZmFpbHVyZXMuYXBwZW5kKHJlZyk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkaWRQcm9ncmVzcyA9IHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgZW5kID0gZmlyc3RTYWZlOworCisgICAgICAgIC8vIElmIHdlIGhhdmUgY2FjaGVkUmVj
b3ZlcmllcyB0aGF0IGZhaWxlZCB0byB3cml0ZSwgaXQgaXMKKyAgICAgICAgLy8gYmVjYXVzZSB0
aGV5IGFyZSBvbiB0aGUgc3RhY2sgYW5kIHdlIGRpZG4ndCBoYXZlIGVub3VnaAorICAgICAgICAv
LyByZWdpc3RlcnMgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRvIGxvYWQgdGhlbSBpbnRvLiBJZgor
ICAgICAgICAvLyB3ZSBoYXZlIGEgZnJlZSByZWdpc3Rlciwgd2Ugc2hvdWxkIHRyeSBhZ2FpbiBi
ZWNhdXNlIGl0CisgICAgICAgIC8vIGNvdWxkIGZyZWUgdXAgc29tZSBkYW5nZXIgc2xvdHMuCisg
ICAgICAgIGlmIChkaWRQcm9ncmVzcyAmJiBoYXNGcmVlUmVnaXN0ZXIoKSkgeworICAgICAgICAg
ICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gc3RpbGxGYWlsaW5nOworICAgICAgICAgICAgZm9y
IChWaXJ0dWFsUmVnaXN0ZXIgZmFpbGVkIDogZmFpbHVyZXMpIHsKKyAgICAgICAgICAgICAgICBD
YWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBnZXROZXcoZmFpbGVkKTsKKyAgICAgICAg
ICAgICAgICAvLyBJdCBjb3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBsYXRlciBpZiBpdCBoYWQKKyAg
ICAgICAgICAgICAgICAvLyBzZXZlcmFsIHRhcmdldHMKKyAgICAgICAgICAgICAgICBpZiAoIWNh
Y2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgIEFTU0VSVChoYXNPbmx5U2FmZVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpCisgICAgICAg
ICAgICAgICAgICAgICYmICFjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCF0cnlXcml0ZXMoKmNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAg
ICAgICAgICAgICAgc3RpbGxGYWlsaW5nLmFwcGVuZChmYWlsZWQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZmFpbHVyZXMgPSBXVEY6Om1vdmUoc3RpbGxGYWlsaW5nKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAodmVyYm9zZSAmJiBmaXJzdFNhZmUgIT0gZGFuZ2VyRnJvbnRpZXIoKSAr
IDEpCisgICAgICAgICAgICBkYXRhTG9nKCIgIFdlIGZyZWVkIHVwIGRhbmdlciBzbG90cyFcbiIp
OworICAgIH0gd2hpbGUgKGZpcnN0U2FmZSAhPSBkYW5nZXJGcm9udGllcigpICsgMSk7CisKKyAg
ICByZXR1cm4gZmFpbHVyZXMuaXNFbXB0eSgpOworfQorCit2b2lkIENhbGxGcmFtZVNodWZmbGVy
OjpwcmVwYXJlQW55KCkKK3sKKyAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkpOworCisgICAgdXBk
YXRlRGFuZ2VyRnJvbnRpZXIoKTsKKworICAgIC8vIEZpcnN0LCB3ZSB0cnkgdG8gc3RvcmUgYW55
IHZhbHVlIHRoYXQgZ29lcyBhYm92ZSB0aGUgZGFuZ2VyCisgICAgLy8gZnJvbnRpZXIuIFRoaXMg
d2lsbCBuZXZlciB1c2UgbW9yZSByZWdpc3RlcnMgc2luY2Ugd2UgYXJlIG9ubHkKKyAgICAvLyBs
b2FkaW5nK3N0b3JpbmcgaWYgd2UgZW5zdXJlIHRoYXQgYW55IHJlZ2lzdGVyIHVzZWQgZm9yIHRo
ZSBsb2FkCisgICAgLy8gd2lsbCBiZSBmcmVlZCB1cCBhZnRlciB0aGUgc3RvcmVzIChpLmUuLCBh
bGwgc3RvcmVzIGFyZSBhYm92ZQorICAgIC8vIHRoZSBkYW5nZXIgZnJvbnRpZXIsIGFuZCB0aGVy
ZSBpcyBubyB3YW50ZWQgcmVnaXN0ZXIpLgorICAgIHBlcmZvcm1TYWZlV3JpdGVzKCk7CisKKyAg
ICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBjb3VsZG4ndCBoYXZlIG1vcmUgYXZhaWxhYmxlIHJlZ2lz
dGVycyB0aGFuCisgICAgLy8gd2UgaGF2ZSB3aXRob3V0aCBzcGlsbGluZzogYWxsIHZhbHVlcyBj
dXJyZW50bHkgaW4gcmVnaXN0ZXJzCisgICAgLy8gZWl0aGVyIHJlcXVpcmUgYSB3cml0ZSB0byB0
aGUgZGFuZ2VyIHpvbmUsIG9yIGhhdmUgYSB3YW50ZWQKKyAgICAvLyByZWdpc3Rlciwgd2hpY2gg
bWVhbnMgdGhhdCBpbiBhbnkgY2FzZSB0aGV5IHdpbGwgaGF2ZSB0byBnbworICAgIC8vIHRocm91
Z2ggcmVnaXN0ZXJzIGFnYWluLgorCisgICAgLy8gV2Ugbm93IHNsb3dseSBmcmVlIHVwIHRoZSBk
YW5nZXIgem9uZSBieSBmaXJzdCBsb2FkaW5nIHRoZSBvbGQKKyAgICAvLyB2YWx1ZSBvbiB0aGUg
ZGFuZ2VyIGZyb250aWVyLCBzcGlsbGluZyBhcyBtYW55IHJlZ2lzdGVycyBhcworICAgIC8vIG5l
ZWRlZCB0byBkbyBzbyBhbmQgZW5zdXJpbmcgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBzbG90IGlu
IHRoZQorICAgIC8vIG5ldyBmcmFtZSBpcyBub3cgcmVhZHkgdG8gYmUgd3JpdHRlbi4gVGhlbiwg
d2Ugc3RvcmUgdGhlIG9sZAorICAgIC8vIHZhbHVlIHRvIGl0cyB0YXJnZXQgbG9jYXRpb24gaWYg
cG9zc2libGUgKHdlIGNvdWxkIGhhdmUgZmFpbGVkCisgICAgLy8gdG8gbG9hZCBpdCBwcmV2aW91
c2x5IGR1ZSB0byBoaWdoIHByZXNzdXJlKS4gRmluYWxseSwgd2Ugd3JpdGUKKyAgICAvLyB0byBh
bnkgb2YgdGhlIG5ld2x5IHNhZmUgc2xvdHMgdGhhdCB3ZSBjYW4sIHdoaWNoIGNvdWxkIGZyZWUg
dXAKKyAgICAvLyByZWdpc3RlcnMgKGhlbmNlIHdoeSB3ZSBkbyBpdCBlYWdlcmx5KS4KKyAgICBm
b3IgKFZpcnR1YWxSZWdpc3RlciByZWcgPSBkYW5nZXJGcm9udGllcigpOyByZWcgPj0gZmlyc3RO
ZXcoKTsgcmVnIC09IDEpIHsKKyAgICAgICAgaWYgKHJlZyA9PSBkYW5nZXJGcm9udGllcigpKSB7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgIE5l
eHQgc2xvdCAoTkVXICIsIHJlZywgIikgaXMgdGhlIGRhbmdlciBmcm9udGllclxuIik7CisgICAg
ICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXRPbGQobmV3QXNPbGQo
ZGFuZ2VyRnJvbnRpZXIoKSkpIH07CisgICAgICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3Zlcnkp
OworICAgICAgICAgICAgZW5zdXJlTG9hZCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAg
ZW1pdExvYWQoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgICAgIGVuc3VyZUJveCgqY2FjaGVk
UmVjb3ZlcnkpOworICAgICAgICAgICAgZW1pdEJveCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAg
ICAgICAgaWYgKGhhc09ubHlTYWZlV3JpdGVzKCpjYWNoZWRSZWNvdmVyeSkpCisgICAgICAgICAg
ICAgICAgdHJ5V3JpdGVzKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIH0gZWxzZSBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgTmV4dCBzbG90IGlzIE5FVyAiLCByZWcsICJc
biIpOworCisgICAgICAgIEFTU0VSVCghaXNEYW5nZXJOZXcocmVnKSk7CisgICAgICAgIENhY2hl
ZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGdldE5ldyhyZWcpOworICAgICAgICAvLyBUaGlz
IGNvdWxkIGJlIG9uZSBvZiB0aGUgaGVhZGVyIHNsb3RzIHdlIGRvbid0IGNhcmUgYWJvdXQuCisg
ICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICsgIiwgcmVnLCAiIGlzIE9LXG4iKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNhbkxvYWRBbmRCb3go
KmNhY2hlZFJlY292ZXJ5KSAmJiBoYXNPbmx5U2FmZVdyaXRlcygqY2FjaGVkUmVjb3ZlcnkpCisg
ICAgICAgICAgICAmJiAhY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpIHsKKyAg
ICAgICAgICAgIGVtaXRMb2FkKCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBlbWl0Qm94
KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBib29sIHdyaXRlc09LID0gdHJ5V3JpdGVz
KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgICAgICBBU1NFUlQod3JpdGVzT0spOworICAgICAg
ICB9IGVsc2UgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAtICIsIGNhY2hl
ZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIGNhbid0IGJlIGhhbmRsZWQganVzdCB5ZXQuXG4iKTsK
KyAgICB9CisgICAgQVNTRVJUKGRhbmdlckZyb250aWVyKCkgPCBmaXJzdE5ldygpKTsKKworICAg
IC8vIE5vdywgdGhlIGRhbmdlciB6b25lIGlzIGVtcHR5LCBidXQgd2Ugc3RpbGwgaGF2ZSBhIGNv
dXBsZSBvZgorICAgIC8vIHRoaW5ncyB0byBkbzoKKyAgICAvLworICAgIC8vIDEpIFRoZXJlIGNv
dWxkIGJlIHJlbWFpbmluZyBzYWZlIHdyaXRlcyB0aGF0IGZhaWxlZCBlYXJsaWVyIGR1ZQorICAg
IC8vICAgIHRvIGhpZ2ggcmVnaXN0ZXIgcHJlc3N1cmUgYW5kIGhhZCBub3RoaW5nIHRvIGRvIHdp
dGggdGhlCisgICAgLy8gICAgZGFuZ2VyIHpvbmUgd2hhdHNvZXZlci4KKyAgICAvLworICAgIC8v
IDIpIFNvbWUgd2FudGVkIHJlZ2lzdGVycyBjb3VsZCBoYXZlIHRvIGJlIGxvYWRlZCAodGhpcyBj
b3VsZAorICAgIC8vICAgIGhhcHBlbiBlaXRoZXIgd2hlbiBtYWtpbmcgYSBjYWxsIHRvIGEgbmV3
IGZ1bmN0aW9uIHdpdGggYQorICAgIC8vICAgIGxvd2VyIG51bWJlciBvZiBhcmd1bWVudHMgLSBz
aW5jZSBhYm92ZSBoZXJlLCB3ZSBvbmx5IGxvYWQKKyAgICAvLyAgICB3YW50ZWQgcmVnaXN0ZXJz
IHdoZW4gdGhleSBhcmUgYXQgdGhlIGRhbmdlciBmcm9udGllciAtLCBvcgorICAgIC8vICAgIGlm
IGEgd2FudGVkIHJlZ2lzdGVyIGdvdCBzcGlsbGVkKS4KKyAgICAvLworICAgIC8vIDMpIFNvbWUg
d2FudGVkIHJlZ2lzdGVycyBjb3VsZCBoYXZlIGJlZW4gbG9hZGVkIGluIHRoZSB3cm9uZworICAg
IC8vICAgIHJlZ2lzdGVycworICAgIC8vCisgICAgLy8gNCkgV2UgaGF2ZSB0byB0YWtlIGNhcmUg
b2Ygc29tZSBib29ra2VlcGluZyAtIG5hbWVseSwgc3RvcmluZworICAgIC8vICAgIHRoZSBhcmd1
bWVudCBjb3VudCBhbmQgdXBkYXRpbmcgdGhlIHN0YWNrIHBvaW50ZXIuCisKKyAgICAvLyBBdCB0
aGlzIHBvaW50LCB3ZSBtdXN0IGhhdmUgZW5vdWdoIHJlZ2lzdGVycyBhdmFpbGFibGUgZm9yCisg
ICAgLy8gaGFuZGxpbmcgMSkuIE5vbmUgb2YgdGhlIGxvYWRzIGNhbiBmYWlsIGJlY2F1c2Ugd2Ug
aGF2ZSBiZWVuCisgICAgLy8gZWFnZXJseSBmcmVlaW5nIHVwIHJlZ2lzdGVycyBpbiBhbGwgdGhl
IHByZXZpb3VzIHBoYXNlcyAtIHNvCisgICAgLy8gdGhlIG9ubHkgdmFsdWVzIHRoYXQgYXJlIGlu
IHJlZ2lzdGVycyBhdCB0aGlzIHBvaW50IG11c3QgaGF2ZQorICAgIC8vIHdhbnRlZCByZWdpc3Rl
cnMuCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgRGFuZ2VyIHpvbmUgaXMg
Y2xlYXIsIHBlcmZvcm1pbmcgcmVtYWluaW5nIHdyaXRlcy5cbiIpOworICAgIGZvciAoVmlydHVh
bFJlZ2lzdGVyIHJlZyA9IGZpcnN0TmV3KCk7IHJlZyA8PSBsYXN0TmV3KCk7IHJlZyArPSAxKSB7
CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhyZWcpIH07
CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICBlbWl0Qm94KCpjYWNo
ZWRSZWNvdmVyeSk7CisgICAgICAgIGJvb2wgd3JpdGVzT0sgPSB0cnlXcml0ZXMoKmNhY2hlZFJl
Y292ZXJ5KTsKKyAgICAgICAgQVNTRVJUKHdyaXRlc09LKTsKKyAgICB9CisKKyAgICAvLyBIYW5k
bGUgMikgYnkgbG9hZGluZyBhbGwgcmVnaXN0ZXJzLiBXZSBkb24ndCBoYXZlIHRvIGRvIGFueQor
ICAgIC8vIHdyaXRlcywgc2luY2UgdGhleSBoYXZlIGJlZW4gdGFrZW4gY2FyZSBvZiBhYm92ZS4K
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICBMb2FkaW5nIHdhbnRlZCBHUFJz
IGludG8gcmVnaXN0ZXJzXG4iKTsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJl
ZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICBDYWNoZWRSZWNv
dmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBtX25ld1JlZ2lzdGVyc1tyZWddIH07CisgICAgICAgIGlm
ICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNTRVJU
KHJlZy5pc0dQUigpKTsKKworICAgICAgICBlbWl0TG9hZCgqY2FjaGVkUmVjb3ZlcnkpOworICAg
ICAgICBlbWl0Qm94KCpjYWNoZWRSZWNvdmVyeSk7CisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNv
dmVyeS0+dGFyZ2V0cygpLmlzRW1wdHkoKSk7CisgICAgfQorCisgICAgLy8gQXQgdGhpcyBwb2lu
dCwgd2UgaGF2ZSByZWFkIGV2ZXJ5dGhpbmcgd2UgY2FyZWQgYWJvdXQgZnJvbSB0aGUKKyAgICAv
LyBzdGFjaywgYW5kIHdyaXR0ZW4gZXZlcnl0aGluZyB3ZSBoYWQgdG8gdG8gdGhlIHN0YWNrLgor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgIENhbGxlZSBmcmFtZSBpcyBmdWxs
eSBzZXQgdXBcbiIpOworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAo
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IGZpcnN0TmV3KCk7IHJlZyA8PSBsYXN0TmV3KCk7IHJlZyAr
PSAxKQorICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyZWcsICFnZXROZXcocmVnKSk7CisKKyAg
ICAgICAgZm9yIChDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgOiBtX2NhY2hlZFJlY292
ZXJpZXMpIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FjaGVkUmVjb3ZlcnksIGNhY2hl
ZFJlY292ZXJ5LT50YXJnZXRzKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghY2Fj
aGVkUmVjb3ZlcnktPnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSA0KSBmaXJzdCBiZWNhdXNlIGl0IGltcGxpZXMg
cmVsZWFzaW5nCisgICAgLy8gbV9uZXdGcmFtZUJhc2UsIHdoaWNoIGNvdWxkIGJlIGEgd2FudGVk
IHJlZ2lzdGVyLgorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCIgICAqIFN0b3Jp
bmcgdGhlIGFyZ3VtZW50IGNvdW50IGludG8gIiwgVmlydHVhbFJlZ2lzdGVyIHsgSlNTdGFjazo6
QXJndW1lbnRDb3VudCB9LCAiXG4iKTsKKyAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCksCisgICAgICAgIGFkZHJlc3NGb3JOZXcoVmlydHVhbFJlZ2lzdGVy
IHsgSlNTdGFjazo6QXJndW1lbnRDb3VudCB9KS53aXRoT2Zmc2V0KFRhZ09mZnNldCkpOworICAg
IG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihhcmdDb3VudCgpKSwK
KyAgICAgICAgYWRkcmVzc0Zvck5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpBcmd1bWVu
dENvdW50IH0pLndpdGhPZmZzZXQoUGF5bG9hZE9mZnNldCkpOworCisgICAgaWYgKCFpc1Nsb3dQ
YXRoKCkpIHsKKyAgICAgICAgQVNTRVJUKG1fbmV3RnJhbWVCYXNlICE9IE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiICBSZWxlYXNpbmcgdGhlIG5ldyBmcmFtZSBiYXNlIHBvaW50ZXJcbiIpOwor
ICAgICAgICBtX2ppdC5tb3ZlKG1fbmV3RnJhbWVCYXNlLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICByZWxlYXNlR1BSKG1fbmV3RnJhbWVCYXNlKTsKKyAg
ICB9CisKKyAgICAvLyBGaW5hbGx5IHdlIGhhbmRsZSAzKQorICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKCIgIEVuc3VyaW5nIHdhbnRlZCByZWdpc3RlcnMgYXJlIGluIHRoZSByaWdo
dCByZWdpc3RlclxuIik7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0g
UmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgQ2FjaGVkUmVjb3Zlcnkq
IGNhY2hlZFJlY292ZXJ5IHsgbV9uZXdSZWdpc3RlcnNbcmVnXSB9OworICAgICAgICBpZiAoIWNh
Y2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVChyZWcu
aXNHUFIoKSk7CisKKyAgICAgICAgZW1pdERpc3BsYWNlKCpjYWNoZWRSZWNvdmVyeSk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTc2NTNkMWUzM2EwMGExNDJjOWU5NjhmMjQ1N2NiMzAzYzNjODEwYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaApAQCAtMCww
ICsxLDgwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIENhbGxGcmFtZVNodWZmbGVyX2gKKyNkZWZpbmUgQ2FsbEZyYW1lU2h1ZmZsZXJf
aAorCisjaWYgRU5BQkxFKEpJVCkKKworI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZmbGVEYXRhLmgi
CisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgor
I2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgor
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKKy8vIEEgQ2FjaGVkUmVjb3ZlcnkgaXMgYSB3cmFwcGVyIGFyb3Vu
ZCBhIFZhbHVlUmVjb3ZlcnkgdGhhdCByZWNvcmRzIHdoZXJlIHNhaWQKKy8vIHZhbHVlIHNob3Vs
ZCBnbyBvbiB0aGUgc3RhY2sgYW5kL29yIGluIHJlZ2lzdGVycy4gV2hlbmV2ZXIgd2UgcGVyZm9y
bSBhbgorLy8gb3BlcmF0aW9uIGNoYW5naW5nIHRoZSBWYWx1ZVJlY292ZXJ5LCB3ZSB1cGRhdGUg
dGhlIENhY2hlZFJlY292ZXJ5J3MgbWVtYmVyCisvLyBpbiBwbGFjZS4KK2NsYXNzIENhY2hlZFJl
Y292ZXJ5IHsKK3B1YmxpYzoKKyAgICBDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5IHJlY292
ZXJ5KQorICAgICAgICA6IG1fcmVjb3ZlcnkgeyByZWNvdmVyeSB9CisgICAgeworICAgIH0KKwor
ICAgIENhY2hlZFJlY292ZXJ5KENhY2hlZFJlY292ZXJ5JikgPSBkZWxldGU7CisgICAgQ2FjaGVk
UmVjb3ZlcnkoQ2FjaGVkUmVjb3ZlcnkmJikgPSBkZWxldGU7CisgICAgQ2FjaGVkUmVjb3Zlcnkm
IG9wZXJhdG9yPShDYWNoZWRSZWNvdmVyeSYpID0gZGVsZXRlOworICAgIENhY2hlZFJlY292ZXJ5
JiBvcGVyYXRvcj0oQ2FjaGVkUmVjb3ZlcnkmJikgPSBkZWxldGU7CisKKyAgICBjb25zdCBWZWN0
b3I8VmlydHVhbFJlZ2lzdGVyLCAxPiYgdGFyZ2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
czsgfQorCisgICAgdm9pZCBhZGRUYXJnZXQoVmlydHVhbFJlZ2lzdGVyIHJlZykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3RhcmdldHMuaXNFbXB0eSgpIHx8IG1fdGFyZ2V0cy5sYXN0KCkgPCBy
ZWcpOworICAgICAgICBtX3RhcmdldHMuYXBwZW5kKHJlZyk7CisgICAgfQorCisgICAgdm9pZCBy
ZW1vdmVUYXJnZXQoVmlydHVhbFJlZ2lzdGVyIHJlZykKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3RhcmdldHMubGFzdCgpID09IHJlZyk7CisgICAgICAgIG1fdGFyZ2V0cy5zaHJpbmsobV90YXJn
ZXRzLnNpemUoKSAtIDEpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJUYXJnZXRzKCkKKyAgICB7
CisgICAgICAgIG1fdGFyZ2V0cy5jbGVhcigpOworICAgIH0KKworICAgIHZvaWQgc2V0V2FudGVk
SlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MpCisgICAgeworICAgICAgICBtX3dh
bnRlZEpTVmFsdWVSZWdzID0ganNWYWx1ZVJlZ3M7CisgICAgfQorCisgICAgLy8gRGV0ZXJtaW5l
IHdoZXRoZXIgY29udmVydGluZyB0aGlzIHJlY292ZXJ5IGludG8gYSBKU1ZhbHVlIHdpbGwKKyAg
ICAvLyByZXF1aXJlIGFkZGl0aW9uYWwgR1BScyBhbmQvb3IgRlBScy4KKyAgICAvLyBUaGlzIGlz
IGd1YXJhbnRlZWQgdG8gb25seSBkZXBlbmQgb24gdGhlIERhdGFGb3JtYXQsIGFuZCB0aGUKKyAg
ICAvLyByZXN1bHQgb2YgdGhlc2UgY2FsbHMgd2lsbCBzdGF5IHZhbGlkIGFmdGVyIGxvYWRzIGFu
ZC9vciBzdG9yZXMuCisgICAgYm9vbCBib3hpbmdSZXF1aXJlc0dQUigpIGNvbnN0CisgICAgewor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIHJldHVybiByZWNvdmVyeSgpLmRhdGFGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0RG91YmxlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCisgICAgfQorICAgIGJvb2wgYm94aW5nUmVxdWlyZXNGUFIoKSBjb25zdAorICAgIHsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5KCkuZGF0YUZvcm1hdCgp
KSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgorICAgICAgICBjYXNlIERhdGFGb3Jt
YXRTdHJpY3RJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIHVzZWQg
dG8gZGV0ZXJtaW5lIHdoYXQga2luZCBvZiByZWdpc3RlciB3ZSBuZWVkIHRvIGJlCisgICAgLy8g
YWJsZSB0byBsb2FkIGEgcmVjb3ZlcnkuIFdlIG9ubHkgdXNlIGl0IHdoZW4gYSBkaXJlY3QgbG9h
ZCBpcworICAgIC8vIGN1cnJlbnRseSBpbXBvc3NpYmxlLCB0byBkZXRlcm1pbmUgd2hldGhlciB3
ZSBzaG91bGQgc3BpbGwgYQorICAgIC8vIEdQUiBvciBhbiBGUFIgZm9yIGxvYWRpbmcgdGhpcyB2
YWx1ZS4KKyAgICBib29sIGxvYWRzSW50b0dQUigpIGNvbnN0OworICAgIGJvb2wgbG9hZHNJbnRv
RlBSKCkgY29uc3Q7CisKKyAgICBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5KCkgY29uc3QgeyByZXR1
cm4gbV9yZWNvdmVyeTsgfQorCisgICAgdm9pZCBzZXRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5IHJl
Y292ZXJ5KSB7IG1fcmVjb3ZlcnkgPSByZWNvdmVyeTsgfQorCisgICAgSlNWYWx1ZVJlZ3Mgd2Fu
dGVkSlNWYWx1ZVJlZ3MoKSBjb25zdCB7IHJldHVybiBtX3dhbnRlZEpTVmFsdWVSZWdzOyB9Citw
cml2YXRlOgorICAgIFZhbHVlUmVjb3ZlcnkgbV9yZWNvdmVyeTsKKyAgICBKU1ZhbHVlUmVncyBt
X3dhbnRlZEpTVmFsdWVSZWdzOworICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXIsIDE+IG1fdGFy
Z2V0czsKK307CisKK2NsYXNzIENhbGxGcmFtZVNodWZmbGVyIHsKK3B1YmxpYzoKKyAgICBDYWxs
RnJhbWVTaHVmZmxlcihDQ2FsbEhlbHBlcnMmLCBjb25zdCBDYWxsRnJhbWVTaHVmZmxlRGF0YSYp
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBBbnkgcmVn
aXN0ZXIgdGhhdCBoYXMgYmVlbiBsb2NrZWQgb3IgYWNxdWlyZWQgbXVzdCBiZSByZWxlYXNlZAor
ICAgIC8vIGJlZm9yZSBjYWxsaW5nIHByZXBhcmVGb3JUYWlsQ2FsbCgpIG9yIHByZXBhcmVGb3JT
bG93UGF0aCgpLgorICAgIHZvaWQgbG9ja0dQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoZ3ByKSk7CisgICAgICAgIG1fbG9ja2VkUmVn
aXN0ZXJzLnNldChncHIpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2coIiAgICogTG9ja2luZyAiLCBncHIsICJcbiIpOworICAgIH0KKworICAgIEdQUlJlZyBhY3F1
aXJlR1BSKCkKKyAgICB7CisgICAgICAgIGVuc3VyZUdQUigpOworICAgICAgICBHUFJSZWcgZ3By
IHsgZ2V0RnJlZUdQUigpIH07CisgICAgICAgIEFTU0VSVCghbV9yZWdpc3RlcnNbZ3ByXSk7Cisg
ICAgICAgIGxvY2tHUFIoZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisKKyAgICB2
b2lkIHJlbGVhc2VHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlKSB7
CisgICAgICAgICAgICBpZiAobV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGdwcikpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgKiBSZWxlYXNpbmcgIiwgZ3ByLCAiXG4iKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqICIsIGdwciwgIiB3YXMgbm90IGxv
Y2tlZFxuIik7CisgICAgICAgIH0KKyAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIoZ3By
KTsKKyAgICB9CisKKyAgICAvLyBZb3UgY2FuIG9ubHkgdGFrZSBhIHNuYXBzaG90IGlmIHRoZSBy
ZWNvdmVyeSBoYXMgbm90IHN0YXJ0ZWQKKyAgICAvLyB5ZXQuIFRoZSBvbmx5IG9wZXJhdGlvbnMg
dGhhdCBhcmUgdmFsaWQgYmVmb3JlIHRha2luZyBhCisgICAgLy8gc25hcHNob3QgYXJlIGxvY2tH
UFIoKSwgYWNxdWlyZUdQUigpIGFuZCByZWxlYXNlR1BSKCkuCisgICAgLy8KKyAgICAvLyBMb2Nr
aW5nIHN0YXR1cyBpcyAqTk9UKiBwcmVzZXJ2ZWQgYnkgdGhlIHNuYXBzaG90OiBpdCBvbmx5Cisg
ICAgLy8gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlCisgICAgLy8gYXJndW1l
bnRzL2NhbGxlZS9jYWxsZWUtc2F2ZSByZWdpc3RlcnMgYXJlIGJ5IHRha2luZyBpbnRvCisgICAg
Ly8gYWNjb3VudCBhbnkgc3BpbGxpbmcgdGhhdCBhY3F1aXJlR1BSKCkgY291bGQgaGF2ZSBkb25l
LgorICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNuYXBzaG90KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc1VuZGVjaWRlZCgpKTsKKworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0
YSBkYXRhOworICAgICAgICBkYXRhLm51bUxvY2FscyA9IG51bUxvY2FscygpOworICAgICAgICBk
YXRhLmNhbGxlZSA9IGdldE5ldyhWaXJ0dWFsUmVnaXN0ZXIgeyBKU1N0YWNrOjpDYWxsZWUgfSkt
PnJlY292ZXJ5KCk7CisgICAgICAgIGRhdGEuYXJncy5yZXNpemUoYXJnQ291bnQoKSk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJnQ291bnQoKTsgKytpKQorICAgICAgICAgICAg
ZGF0YS5hcmdzW2ldID0gZ2V0TmV3KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKS0+cmVj
b3ZlcnkoKTsKKyAgICAgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVn
OjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICAgICAgICAgIENhY2hlZFJlY292ZXJ5
KiBjYWNoZWRSZWNvdmVyeSB7IG1fbmV3UmVnaXN0ZXJzW3JlZ10gfTsKKyAgICAgICAgICAgIGlm
ICghY2FjaGVkUmVjb3ZlcnkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgZGF0YS5yZWdpc3RlcnNbcmVnXSA9IGNhY2hlZFJlY292
ZXJ5LT5yZWNvdmVyeSgpOworI2Vsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV1RGOjptb3ZlKGRh
dGEpOworICAgIH0KKworICAgIC8vIEFzayB0aGUgc2h1ZmZsZXIgdG8gcHV0IHRoZSBjYWxsZWUg
aW50byBzb21lIHJlZ2lzdGVycyBvbmNlIHRoZQorICAgIC8vIHNodWZmbGluZyBpcyBkb25lLiBZ
b3Ugc2hvdWxkIGNhbGwgdGhpcyBiZWZvcmUgYW55IG9mIHRoZQorICAgIC8vIHByZXBhcmUoKSBt
ZXRob2RzLCBhbmQgbXVzdCBub3QgdGFrZSBhIHNuYXBzaG90IGFmdGVyd2FyZHMsIGFzCisgICAg
Ly8gdGhpcyB3b3VsZCBjcmFzaCAzMmJpdHMgcGxhdGZvcm1zLgorICAgIHZvaWQgc2V0Q2FsbGVl
SlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNVbmRlY2lkZWQoKSk7CisgICAgICAgIEFTU0VSVCghZ2V0TmV3KGpzVmFsdWVSZWdzKSk7
CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSB7IGdldE5ldyhWaXJ0dWFs
UmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkgfTsKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292
ZXJ5KTsKKyAgICAgICAgYWRkTmV3KGpzVmFsdWVSZWdzLCBjYWNoZWRSZWNvdmVyeS0+cmVjb3Zl
cnkoKSk7CisgICAgfQorCisgICAgLy8gQXNrIHRoZSBzdWhmZmxlciB0byBhc3N1bWUgdGhlIGNh
bGxlZSBoYXMgYWxyZWFkeSBiZSBjaGVja2VkIHRvCisgICAgLy8gYmUgYSBjZWxsLiBUaGlzIGlz
IGEgbm8tb3Agb24gNjRiaXQgcGxhdGZvcm1zLCBidXQgYWxsb3dzIHRvCisgICAgLy8gZnJlZSB1
cCBhIEdQUiBvbiAzMmJpdCBwbGF0Zm9ybXMuCisgICAgLy8gWW91IG9idmlvdXNseSBtdXN0IGhh
dmUgZW5zdXJlZCB0aGF0IHRoaXMgaXMgdGhlIGNhc2UgYmVmb3JlCisgICAgLy8gcnVubmluZyBh
bnkgb2YgdGhlIHByZXBhcmUgbWV0aG9kcy4KKyAgICB2b2lkIGFzc3VtZUNhbGxlZUlzQ2VsbCgp
CisgICAgeworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIENhY2hlZFJlY292ZXJ5JiBj
YWxsZWVDYWNoZWRSZWNvdmVyeSB7ICpnZXROZXcoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNh
bGxlZSkpIH07CisgICAgICAgIHN3aXRjaCAoY2FsbGVlQ2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIEluUGFpcjoKKyAgICAgICAgICAgIHVwZGF0
ZVJlY292ZXJ5KAorICAgICAgICAgICAgICAgIGNhbGxlZUNhY2hlZFJlY292ZXJ5LAorICAgICAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKAorICAgICAgICAgICAgICAgICAgICBjYWxs
ZWVDYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgRGF0YUZvcm1hdENlbGwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIHVwZGF0ZVJlY292ZXJ5KAorICAgICAg
ICAgICAgICAgIGNhbGxlZUNhY2hlZFJlY292ZXJ5LAorICAgICAgICAgICAgICAgIFZhbHVlUmVj
b3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlQ2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS52aXJ0dWFsUmVnaXN0ZXIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgRGF0YUZvcm1hdENlbGwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEluRlBSOgorICAgICAgICBjYXNlIFVuYm94ZWRDZWxsSW5HUFI6CisgICAgICAgIGNhc2UgQ2Vs
bERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENv
bnN0YW50OgorICAgICAgICAgICAgQVNTRVJUKGNhbGxlZUNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuY29uc3RhbnQoKS5pc0NlbGwoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisgICAgLy8gVGhpcyB3aWxs
IGVtaXQgY29kZSB0byBidWlsZCB0aGUgbmV3IGZyYW1lIG92ZXIgdGhlIG9sZCBvbmUuCisgICAg
dm9pZCBwcmVwYXJlRm9yVGFpbENhbGwoKTsKKworICAgIC8vIFRoaXMgd2lsbCBlbWl0IGNvZGUg
dG8gYnVpbGQgdGhlIG5ldyBmcmFtZSBhcyBpZiBwZXJmb3JtaW5nIGEKKyAgICAvLyByZWd1bGFy
IGNhbGwuIEhvd2V2ZXIsIHRoZSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMgd2lsbCBiZQorICAgIC8v
IHJlc3RvcmVkLCBhbmQgYW55IGxvY2FscyAobm90IHRoZSBoZWFkZXIgb3IgYXJndW1lbnRzKSBv
ZiB0aGUKKyAgICAvLyBjdXJyZW50IGZyYW1lIGNhbiBiZSBvdmVyd3JpdHRlbi4KKyAgICAvLwor
ICAgIC8vIEEgZnJhbWUgYnVpbHQgdXNpbmcgcHJlcGFyZUZvclNsb3dQYXRoKCkgc2hvdWxkIGJl
IHVzZWQgZWl0aGVyCisgICAgLy8gdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGluLCBvciBkZXN0cm95
ZWQgdXNpbmcKKyAgICAvLyBDQ2FsbEhlbHBlcnM6OnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKSBm
b2xsb3dlZCBieSBhIHRhaWwgY2FsbC4KKyAgICB2b2lkIHByZXBhcmVGb3JTbG93UGF0aCgpOwor
Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKworICAg
IENDYWxsSGVscGVycyYgbV9qaXQ7CisKKyAgICB2b2lkIHByZXBhcmVBbnkoKTsKKworICAgIHZv
aWQgc3BpbGwoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIC8vICJib3giIGlzIGFyZ3VhYmx5IGEg
YmFkIG5hbWUgaGVyZS4gVGhlIG1lYW5pbmcgaXMgdGhhdCBhZnRlcgorICAgIC8vIGNhbGxpbmcg
ZW1pdEJveCgpLCB5b3VyIGVuc3VyZSB0aGF0IHN1YnNlcXVlbnRseSBjYWxsaW5nCisgICAgLy8g
ZW1pdFN0b3JlKCkgd2lsbCBiZSBhYmxlIHRvIHN0b3JlIHRoZSB2YWx1ZSB3aXRob3V0IGFkZGl0
aW9uYWwKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbi4gSW4gcGFydGljdWxhciwgdGhpcyBpcyBhIG5v
LW9wIGZvciBjb25zdGFudHMsCisgICAgLy8gYW5kIGlzIGEgY29tcGxldGUgbm8tb3Agb24gMzJi
aXRzIHNpbmNlIGFueSB1bmJveGVkIHZhbHVlIGNhbgorICAgIC8vIHN0aWxsIGJlIHN0b3JlZCBi
eSBzdG9yaW5nIHRoZSBwYXlsb2FkIGFuZCBhIHN0YXRpY2FsbHkga25vd24KKyAgICAvLyB0YWcu
CisgICAgdm9pZCBlbWl0Qm94KENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICBib29sIGNhbkJveChD
YWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoY2FjaGVk
UmVjb3ZlcnkuYm94aW5nUmVxdWlyZXNHUFIoKSAmJiBnZXRGcmVlR1BSKCkgPT0gSW52YWxpZEdQ
UlJlZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoY2FjaGVkUmVj
b3ZlcnkuYm94aW5nUmVxdWlyZXNGUFIoKSAmJiBnZXRGcmVlRlBSKCkgPT0gSW52YWxpZEZQUlJl
ZykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICB2b2lkIGVuc3VyZUJveChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3Zlcnkp
CisgICAgeworICAgICAgICBpZiAoY2FuQm94KGNhY2hlZFJlY292ZXJ5KSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkuYm94aW5nUmVxdWlyZXNHUFIo
KSkKKyAgICAgICAgICAgIGVuc3VyZUdQUigpOworCisgICAgICAgIGlmIChjYWNoZWRSZWNvdmVy
eS5ib3hpbmdSZXF1aXJlc0ZQUigpKQorICAgICAgICAgICAgZW5zdXJlRlBSKCk7CisgICAgfQor
CisgICAgdm9pZCBlbWl0TG9hZChDYWNoZWRSZWNvdmVyeSYpOworCisgICAgYm9vbCBjYW5Mb2Fk
KENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICB2b2lkIGVuc3VyZUxvYWQoQ2FjaGVkUmVjb3Zlcnkm
IGNhY2hlZFJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgaWYgKGNhbkxvYWQoY2FjaGVkUmVjb3Zl
cnkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEFTU0VSVChjYWNoZWRSZWNvdmVy
eS5sb2Fkc0ludG9HUFIoKSB8fCBjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSk7CisKKyAg
ICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpKSB7CisgICAgICAgICAgICBp
ZiAoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpCisgICAgICAgICAgICAgICAgZW5zdXJl
UmVnaXN0ZXIoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbnN1cmVGUFIo
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBlbnN1cmVHUFIoKTsKKyAgICB9CisKKyAg
ICBib29sIGNhbkxvYWRBbmRCb3goQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQorICAg
IHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBpbnRlcmZlcmluZyBsb2FkcyAmIGJveGVzCisg
ICAgICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvRlBSKCkgfHwgIWNhY2hlZFJl
Y292ZXJ5LmJveGluZ1JlcXVpcmVzRlBSKCkpOworICAgICAgICBBU1NFUlQoIWNhY2hlZFJlY292
ZXJ5LmxvYWRzSW50b0dQUigpIHx8ICFjYWNoZWRSZWNvdmVyeS5ib3hpbmdSZXF1aXJlc0dQUigp
KTsKKworICAgICAgICByZXR1cm4gY2FuTG9hZChjYWNoZWRSZWNvdmVyeSkgJiYgY2FuQm94KGNh
Y2hlZFJlY292ZXJ5KTsKKyAgICB9CisKKyAgICBEYXRhRm9ybWF0IGVtaXRTdG9yZShDYWNoZWRS
ZWNvdmVyeSYsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKTsKKworICAgIHZvaWQgZW1pdERpc3Bs
YWNlKENhY2hlZFJlY292ZXJ5Jik7CisKKyAgICB2b2lkIGVtaXREZWx0YUNoZWNrKCk7CisKKyAg
ICBCYWc8Q2FjaGVkUmVjb3Zlcnk+IG1fY2FjaGVkUmVjb3ZlcmllczsKKworICAgIHZvaWQgdXBk
YXRlUmVjb3ZlcnkoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5LCBWYWx1ZVJlY292ZXJ5
IHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgY2xlYXJDYWNoZWRSZWNvdmVyeShjYWNoZWRSZWNv
dmVyeS5yZWNvdmVyeSgpKTsKKyAgICAgICAgY2FjaGVkUmVjb3Zlcnkuc2V0UmVjb3ZlcnkocmVj
b3ZlcnkpOworICAgICAgICBzZXRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSwgJmNhY2hlZFJlY292
ZXJ5KTsKKyAgICB9CisKKyAgICBDYWNoZWRSZWNvdmVyeSogZ2V0Q2FjaGVkUmVjb3ZlcnkoVmFs
dWVSZWNvdmVyeSk7CisKKyAgICBDYWNoZWRSZWNvdmVyeSogc2V0Q2FjaGVkUmVjb3ZlcnkoVmFs
dWVSZWNvdmVyeSwgQ2FjaGVkUmVjb3ZlcnkqKTsKKworICAgIHZvaWQgY2xlYXJDYWNoZWRSZWNv
dmVyeShWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFyZWNvdmVy
eS5pc0NvbnN0YW50KCkpCisgICAgICAgICAgICBzZXRDYWNoZWRSZWNvdmVyeShyZWNvdmVyeSwg
bnVsbHB0cik7CisgICAgfQorCisgICAgQ2FjaGVkUmVjb3ZlcnkqIGFkZENhY2hlZFJlY292ZXJ5
KFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAocmVjb3ZlcnkuaXND
b25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVkUmVjb3Zlcmllcy5hZGQocmVj
b3ZlcnkpOworICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgPSBnZXRDYWNo
ZWRSZWNvdmVyeShyZWNvdmVyeSk7CisgICAgICAgIGlmICghY2FjaGVkUmVjb3ZlcnkpCisgICAg
ICAgICAgICByZXR1cm4gc2V0Q2FjaGVkUmVjb3ZlcnkocmVjb3ZlcnksIG1fY2FjaGVkUmVjb3Zl
cmllcy5hZGQocmVjb3ZlcnkpKTsKKyAgICAgICAgcmV0dXJuIGNhY2hlZFJlY292ZXJ5OworICAg
IH0KKworICAgIC8vIFRoaXMgaXMgdGhlIGN1cnJlbnQgcmVjb3ZlcmllcyBwcmVzZW50IGluIHRo
ZSBvbGQgZnJhbWUncworICAgIC8vIHNsb3RzLiBBIG51bGwgQ2FjaGVkUmVjb3ZlcnkgbWVhbnMg
d2UgY2FuIHRyYXNoIHRoZSBjdXJyZW50CisgICAgLy8gdmFsdWUgYXMgd2UgZG9uJ3QgY2FyZSBh
Ym91dCBpdC4KKyAgICBWZWN0b3I8Q2FjaGVkUmVjb3ZlcnkqPiBtX29sZEZyYW1lOworCisgICAg
aW50IG51bUxvY2FscygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vbGRGcmFtZS5z
aXplKCkgLSBKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZTsKKyAgICB9CisKKyAgICBDYWNo
ZWRSZWNvdmVyeSogZ2V0T2xkKFZpcnR1YWxSZWdpc3RlciByZWcpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vbGRGcmFtZVtKU1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSAtIHJl
Zy5vZmZzZXQoKSAtIDFdOworICAgIH0KKworICAgIHZvaWQgc2V0T2xkKFZpcnR1YWxSZWdpc3Rl
ciByZWcsIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7CisgICAgICAgIG1f
b2xkRnJhbWVbSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUgLSByZWcub2Zmc2V0KCkgLSAx
XSA9IGNhY2hlZFJlY292ZXJ5OworICAgIH0KKworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdE9s
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyIHsgc3RhdGlj
X2Nhc3Q8aW50PigtbnVtTG9jYWxzKCkpIH07CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVy
IGxhc3RPbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7
IEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplIC0gMSB9OworICAgIH0KKworICAgIGJvb2wg
aXNWYWxpZE9sZChWaXJ0dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHJlZyA+PSBmaXJzdE9sZCgpICYmIHJlZyA8PSBsYXN0T2xkKCk7CisgICAgfQorCisgICAg
Ly8gVGhpcyBzdG9yZXMsIGZvciBlYWNoIHNsb3QgaW4gdGhlIG5ldyBmcmFtZSwgaW5mb3JtYXRp
b24gYWJvdXQKKyAgICAvLyB0aGUgcmVjb3ZlcnkgZm9yIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBl
dmVudHVhbGx5IGdvIGludG8gdGhhdAorICAgIC8vIHNsb3QuCisgICAgLy8KKyAgICAvLyBPbmNl
IHRoZSBzbG90IGhhcyBiZWVuIHdyaXR0ZW4sIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluCisg
ICAgLy8gbV9uZXdGcmFtZSB3aWxsIGJlIGVtcHR5LgorICAgIFZlY3RvcjxDYWNoZWRSZWNvdmVy
eSo+IG1fbmV3RnJhbWU7CisKKyAgICBzaXplX3QgYXJnQ291bnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fbmV3RnJhbWUuc2l6ZSgpIC0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKKyAgICB9CisKKyAgICBDYWNoZWRSZWNvdmVyeSogZ2V0TmV3KFZpcnR1YWxSZWdpc3Rl
ciBuZXdSZWdpc3RlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25ld0ZyYW1lW25l
d1JlZ2lzdGVyLm9mZnNldCgpXTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5ldyhWaXJ0dWFsUmVn
aXN0ZXIgbmV3UmVnaXN0ZXIsIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSkKKyAgICB7
CisgICAgICAgIG1fbmV3RnJhbWVbbmV3UmVnaXN0ZXIub2Zmc2V0KCldID0gY2FjaGVkUmVjb3Zl
cnk7CisgICAgfQorCisgICAgdm9pZCBhZGROZXcoVmlydHVhbFJlZ2lzdGVyIG5ld1JlZ2lzdGVy
LCBWYWx1ZVJlY292ZXJ5IHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgQ2FjaGVkUmVjb3Zlcnkq
IGNhY2hlZFJlY292ZXJ5ID0gYWRkQ2FjaGVkUmVjb3ZlcnkocmVjb3ZlcnkpOworICAgICAgICBj
YWNoZWRSZWNvdmVyeS0+YWRkVGFyZ2V0KG5ld1JlZ2lzdGVyKTsKKyAgICAgICAgc2V0TmV3KG5l
d1JlZ2lzdGVyLCBjYWNoZWRSZWNvdmVyeSk7CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVy
IGZpcnN0TmV3KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIg
eyAwIH07CisgICAgfQorCisgICAgVmlydHVhbFJlZ2lzdGVyIGxhc3ROZXcoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlciB7IHN0YXRpY19jYXN0PGludD4obV9u
ZXdGcmFtZS5zaXplKCkpIC0gMSB9OworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZE5ldyhWaXJ0
dWFsUmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlZyA+PSBmaXJz
dE5ldygpICYmIHJlZyA8PSBsYXN0TmV3KCk7CisgICAgfQorCisKKyAgICBpbnQgbV9hbGlnbmVk
T2xkRnJhbWVTaXplOworICAgIGludCBtX2FsaWduZWROZXdGcmFtZVNpemU7CisKKyAgICAvLyBU
aGlzIGlzIHRoZSBkaXN0YW5jZSwgaW4gc2xvdHMsIGJldHdlZW4gdGhlIGJhc2Ugb2YgdGhlIG5l
dworICAgIC8vIGZyYW1lIGFuZCB0aGUgYmFzZSBvZiB0aGUgb2xkIGZyYW1lLiBJdCBjb3VsZCBi
ZSBuZWdhdGl2ZSB3aGVuCisgICAgLy8gcHJlcGFyaW5nIGZvciBhIHRhaWwgY2FsbCB0byBhIGZ1
bmN0aW9uIHdpdGggc21hbGxlciBhcmd1bWVudAorICAgIC8vIGNvdW50LgorICAgIC8vCisgICAg
Ly8gV2Ugd2lsbCBvdmVyd3JpdGUgdGhpcyBhcHByb3ByaWF0ZWx5IGZvciBzbG93IHBhdGggY2Fs
bHMsIGJ1dAorICAgIC8vIHdlIGluaXRpYWxpemUgaXQgYXMgaWYgZG9pbmcgYSBmYXN0IHBhdGgg
Zm9yIHRoZSBzcGlsbHMgd2UKKyAgICAvLyBjb3VsZCBkbyB3aGlsZSB1bmRlY2lkZWQgKHR5cGlj
YWxseSB3aGlsZSBjYWxsaW5nIGFjcXVpcmVHUFIoKQorICAgIC8vIGZvciBhIHBvbHltb3JwaGlj
IGNhbGwpLgorICAgIGludCBtX2ZyYW1lRGVsdGE7CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbmV3
QXNPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWcgLSBtX2ZyYW1lRGVsdGE7CisgICAgfQorCisgICAgLy8gVGhpcyBzdG9yZXMgdGhlIHNldCBv
ZiBsb2NrZWQgcmVnaXN0ZXJzLCBpLmUuIHJlZ2lzdGVycyBmb3IKKyAgICAvLyB3aGljaCB3ZSBo
YXZlIGFuIGltcGxpY2l0IHJlcXVpcmVtZW50IHRoYXQgdGhleSBhcmUgbm90IGNoYW5nZWQuCisg
ICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgdXN1YWxseSBjb250YWlucyB0aGUgbGluayByZWdpc3Rl
ciBvbiBhcmNoaXRlY3R1cmVzCisgICAgLy8gdGhhdCBoYXZlIG9uZSwgYW55IHNjcmF0Y2ggcmVn
aXN0ZXIgdXNlZCBieSB0aGUgbWFjcm8gYXNzZW1ibGVyCisgICAgLy8gKGUuZy4gcjExIG9uIFg4
Nl82NCksIGFzIHdlbGwgYXMgYW55IHJlZ2lzdGVyIHRoYXQgd2UgdXNlIGZvcgorICAgIC8vIGFk
ZHJlc3NpbmcgKHNlZSBtX29sZEZyYW1lQmFzZSBhbmQgbV9uZXdGcmFtZUJhc2UpLgorICAgIC8v
CisgICAgLy8gV2UgYWxzbyB1c2UgdGhpcyB0byBsb2NrIHJlZ2lzdGVycyB0ZW1wb3JhcmlseSwg
Zm9yIGluc3RhbmNlIHRvCisgICAgLy8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCAyIGF2
YWlsYWJsZSByZWdpc3RlcnMgZm9yIGxvYWRpbmcKKyAgICAvLyBhIHBhaXIgb24gMzJiaXRzLgor
ICAgIFJlZ2lzdGVyU2V0IG1fbG9ja2VkUmVnaXN0ZXJzOworCisgICAgLy8gVGhpcyBzdG9yZXMg
dGhlIGN1cnJlbnQgcmVjb3ZlcmllcyBwcmVzZW50IGluIHJlZ2lzdGVycy4gQSBudWxsCisgICAg
Ly8gQ2FjaGVkUmVjb3ZlcnkgbWVhbnMgd2UgY2FuIHRyYXNoIHRoZSBjdXJyZW50IHZhbHVlIGFz
IHdlIGRvbid0CisgICAgLy8gY2FyZSBhYm91dCBpdC4gCisgICAgUmVnaXN0ZXJNYXA8Q2FjaGVk
UmVjb3ZlcnkqPiBtX3JlZ2lzdGVyczsKKworICAgIC8vIFRoaXMgc3RvcmVzLCBmb3IgZWFjaCBy
ZWdpc3RlciwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY292ZXJ5CisgICAgLy8gZm9yIHRoZSB2
YWx1ZSB0aGF0IHNob3VsZCBldmVudHVhbGx5IGdvIGludG8gdGhhdCByZWdpc3Rlci4gVGhlCisg
ICAgLy8gb25seSByZWdpc3RlcnMgdGhhdCBoYXZlIGEgdGFyZ2V0IHJlY292ZXJ5IHdpbGwgYmUg
Y2FsbGVlLXNhdmUKKyAgICAvLyByZWdpc3RlcnMsIGFzIHdlbGwgYXMgcG9zc2libHkgb25lIEpT
VmFsdWVSZWdzIGZvciBob2xkaW5nIHRoZQorICAgIC8vIGNhbGxlZS4KKyAgICAvLworICAgIC8v
IE9uY2UgdGhlIGNvcnJlY3QgdmFsdWUgaGFzIGJlZW4gcHV0IGludG8gdGhlIHJlZ2lzdGVycywg
YW5kCisgICAgLy8gY29udHJhcnkgdG8gd2hhdCB3ZSBkbyB3aXRoIG1fbmV3RnJhbWUsIHdlIGtl
ZXAgdGhlIGVudHJ5IGluCisgICAgLy8gbV9uZXdSZWdpc3RlcnMgdG8gc2ltcGxpZnkgc3BpbGxp
bmcuCisgICAgLy8KKyAgICAvLyBGSVhNRTogQ29udHJhcnkgdG8gd2hhdCB0aGUgbmFtZSBzdWdn
ZXN0cywgd2Ugb25seSBzdXBwb3J0IEdQUnMKKyAgICAvLyBmb3Igbm93LgorICAgIFJlZ2lzdGVy
TWFwPENhY2hlZFJlY292ZXJ5Kj4gbV9uZXdSZWdpc3RlcnM7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDaGVja0Z1bmN0b3I+CisgICAgUmVnIGdldEZyZWVSZWdpc3Rlcihjb25zdCBDaGVja0Z1
bmN0b3ImIGNoZWNrKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVnIG5vblRlbXAgeyB9OworICAg
ICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVn
ID0gcmVnLm5leHQoKSkgeworICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJzLmdldChy
ZWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIWNoZWNr
KHJlZykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghbV9y
ZWdpc3RlcnNbcmVnXSkgeworICAgICAgICAgICAgICAgIGlmICghbV9uZXdSZWdpc3RlcnNbcmVn
XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICAgICAgICAgICAgICBpZiAo
IW5vblRlbXApCisgICAgICAgICAgICAgICAgICAgIG5vblRlbXAgPSByZWc7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vblRlbXA7CisgICAgfQorCisgICAgR1BS
UmVnIGdldEZyZWVHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVnIGZyZWVHUFIgeyBnZXRG
cmVlUmVnaXN0ZXIoW10gKFJlZyByZWcpIHsgcmV0dXJuIHJlZy5pc0dQUigpOyB9KSB9OworICAg
ICAgICBpZiAoIWZyZWVHUFIpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKKyAg
ICAgICAgcmV0dXJuIGZyZWVHUFIuZ3ByKCk7CisgICAgfQorCisgICAgRlBSUmVnIGdldEZyZWVG
UFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgUmVnIGZyZWVGUFIgeyBnZXRGcmVlUmVnaXN0ZXIo
W10gKFJlZyByZWcpIHsgcmV0dXJuIHJlZy5pc0ZQUigpOyB9KSB9OworICAgICAgICBpZiAoIWZy
ZWVGUFIpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEZQUlJlZzsKKyAgICAgICAgcmV0dXJu
IGZyZWVGUFIuZnByKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNGcmVlUmVnaXN0ZXIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KGdldEZyZWVSZWdpc3Rl
cihbXSAoUmVnKSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgfQorCisgICAgLy8gVGhpcyBmcmVl
cyB1cCBhIHJlZ2lzdGVyIHNhdGlzZnlpbmcgdGhlIGNoZWNrIGZ1bmN0b3IgKHRoaXMKKyAgICAv
LyBmdW5jdG9yIGNvdWxkIHRoZW9yZXRpY2FsbHkgaGF2ZSBhbnkga2luZCBvZiBsb2dpYywgYnV0
IGl0IG11c3QKKyAgICAvLyBlbnN1cmUgdGhhdCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRydWUgZm9y
IHJlZ2lzdGVycyAtIHNwaWxsCisgICAgLy8gYXNzdW1lcyBhbmQgYXNzZXJ0cyB0aGF0IGl0IGlz
IHBhc3NlZCBhIGNhY2hlZFJlY292ZXJ5IHN0b3JlZCBpbiBhCisgICAgLy8gcmVnaXN0ZXIpLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoZWNrRnVuY3Rvcj4KKyAgICB2b2lkIGVuc3VyZVJlZ2lz
dGVyKGNvbnN0IENoZWNrRnVuY3RvciYgY2hlY2spCisgICAgeworICAgICAgICAvLyBJZiB3ZSBj
YW4gc3BpbGwgYSBjYWxsZWUtc2F2ZSwgdGhhdCdzIGJlc3QsIGJlY2F1c2UgaXQgd2lsbAorICAg
ICAgICAvLyBmcmVlIHVwIGEgcmVnaXN0ZXIgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmVlbiB0YWtl
biBmb3IgdGhlCisgICAgICAgIC8vIGxvbmdlc3QgYW1vdW50IG9mIHRpbWUuCisgICAgICAgIC8v
CisgICAgICAgIC8vIFdlIGNvdWxkIHRyeSB0byBiaWFzIHRvd2FyZHMgdGhvc2UgdGhhdCBhcmUg
bm90IGluIHRoZWlyCisgICAgICAgIC8vIHRhcmdldCByZWdpc3RlcnMgeWV0LCBidXQgdGhlIGdh
aW4gaXMgcHJvYmFibHkgc3VwZXIKKyAgICAgICAgLy8gc21hbGwuIFVubGVzcyB5b3UgaGF2ZSBh
IGh1Z2UgbnVtYmVyIG9mIGFyZ3VtZW50IChhdCBsZWFzdAorICAgICAgICAvLyBhcm91bmQgdHdp
Y2UgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgcmVnaXN0ZXJzIG9uIHlvdXIKKyAgICAgICAgLy8g
YXJjaGl0ZWN0dXJlKSwgbm8gc3BpbGxpbmcgaXMgZ29pbmcgdG8gdGFrZSBwbGFjZSBhbnl3YXlz
LgorICAgICAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3Qo
KTsgcmVnID0gcmVnLm5leHQoKSkgeworICAgICAgICAgICAgaWYgKG1fbG9ja2VkUmVnaXN0ZXJz
LmdldChyZWcpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBDYWNo
ZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBtX25ld1JlZ2lzdGVyc1tyZWddIH07CisgICAg
ICAgICAgICBpZiAoIWNhY2hlZFJlY292ZXJ5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBpZiAoY2hlY2soKmNhY2hlZFJlY292ZXJ5KSkgeworICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICIsIGNhY2hl
ZFJlY292ZXJ5LT5yZWNvdmVyeSgpLCAiIGxvb2tzIGxpa2UgYSBnb29kIHNwaWxsIGNhbmRpZGF0
ZVxuIik7CisgICAgICAgICAgICAgICAgc3BpbGwoKmNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBX
ZSB1c2UgdGhlIGNhY2hlZFJlY292ZXJ5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlyc3QgbmV3IHNs
b3Qgd2UKKyAgICAgICAgLy8gY2FuLCBiZWNhdXNlIHRoYXQgaXMgdGhlIG9uZSBmb3Igd2hpY2gg
YSB3cml0ZSB3aWxsIGJlCisgICAgICAgIC8vIHBvc3NpYmxlIHRoZSBsYXRlc3QsIGkuZS4gdGhh
dCBpcyB0aGUgb25lIHRoYXQgd2Ugd291bGQKKyAgICAgICAgLy8gaGF2ZSBoYWQgdG8gcmV0YWlu
IGluIHJlZ2lzdGVycyBmb3IgdGhlIGxvbmdlc3QuCisgICAgICAgIGZvciAoVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IGZpcnN0TmV3KCk7IHJlZyA8PSBsYXN0TmV3KCk7IHJlZyArPSAxKSB7CisgICAg
ICAgICAgICBDYWNoZWRSZWNvdmVyeSogY2FjaGVkUmVjb3ZlcnkgeyBnZXROZXcocmVnKSB9Owor
ICAgICAgICAgICAgaWYgKCFjYWNoZWRSZWNvdmVyeSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgaWYgKGNoZWNrKCpjYWNoZWRSZWNvdmVyeSkpIHsKKyAgICAgICAg
ICAgICAgICBzcGlsbCgqY2FjaGVkUmVjb3ZlcnkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVSZWdpc3RlcigpCisgICAgeworICAg
ICAgICBpZiAoaGFzRnJlZVJlZ2lzdGVyKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcgYSByZWdpc3Rl
ciB0byBzcGlsbFxuIik7CisgICAgICAgIGVuc3VyZVJlZ2lzdGVyKAorICAgICAgICAgICAgW3Ro
aXNdIChjb25zdCBDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luR1BSKCkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmlzSW5GUFIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2xvY2tlZFJl
Z2lzdGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSk7CisjaWYgVVNFKEpT
VkFMVUUzMl82NCkKKyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KS50ZWNobmlxdWUoKSA9PSBJblBhaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFt
X2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50YWdHUFIoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIH0KKyNl
bmRpZgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KKworICAgIHZvaWQgZW5zdXJlR1BSKCkKKyAgICB7CisgICAgICAgIGlmIChnZXRGcmVlR1BS
KCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgRmluZGluZyBhIEdQUiB0byBzcGlsbFxu
Iik7CisgICAgICAgIGVuc3VyZVJlZ2lzdGVyKAorICAgICAgICAgICAgW3RoaXNdIChjb25zdCBD
YWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luR1BSKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3By
KCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgICAgICAgICAgaWYgKGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkudGFnR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9sb2NrZWRSZWdp
c3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAg
ICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZUZQUigpCisgICAgeworICAgICAg
ICBpZiAoZ2V0RnJlZUZQUigpICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgIEZpbmRpbmcg
YW4gRlBSIHRvIHNwaWxsXG4iKTsKKyAgICAgICAgZW5zdXJlUmVnaXN0ZXIoCisgICAgICAgICAg
ICBbdGhpc10gKGNvbnN0IENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkgeworICAgICAg
ICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5GUFIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5mcHIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfSk7CisgICAgfQorCisgICAgQ2FjaGVkUmVjb3ZlcnkqIGdldE5ldyhKU1ZhbHVl
UmVncyBqc1ZhbHVlUmVncykgY29uc3QKKyAgICB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgcmV0dXJuIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLmdwcigpXTsKKyNlbHNlCisgICAg
ICAgIEFTU0VSVCgKKyAgICAgICAgICAgIGpzVmFsdWVSZWdzLnRhZ0dQUigpID09IEludmFsaWRH
UFJSZWcgfHwganNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpID09IEludmFsaWRHUFJSZWcKKyAgICAg
ICAgICAgIHx8IG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnBheWxvYWRHUFIoKV0gPT0gbV9u
ZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MudGFnR1BSKCldKTsKKyAgICAgICAgaWYgKGpzVmFsdWVS
ZWdzLnBheWxvYWRHUFIoKSA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuIG1f
bmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRhZ0dQUigpXTsKKyAgICAgICAgcmV0dXJuIG1fbmV3
UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnBheWxvYWRHUFIoKV07CisjZW5kaWYKKyAgICB9CisKKyAg
ICB2b2lkIGFkZE5ldyhKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgVmFsdWVSZWNvdmVyeSByZWNv
dmVyeSkKKyAgICB7CisgICAgICAgIEFTU0VSVChqc1ZhbHVlUmVncyAmJiAhZ2V0TmV3KGpzVmFs
dWVSZWdzKSk7CisgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENh
Y2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKKyAgICAgICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS0+
d2FudGVkSlNWYWx1ZVJlZ3MoKSk7CisgICAgICAgIGNhY2hlZFJlY292ZXJ5LT5zZXRXYW50ZWRK
U1ZhbHVlUmVncyhqc1ZhbHVlUmVncyk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9u
ZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MuZ3ByKCldID0gY2FjaGVkUmVjb3Zlcnk7CisjZWxzZQor
ICAgICAgICBpZiAoanNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpICE9IEludmFsaWRHUFJSZWcpCisg
ICAgICAgICAgICBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldID0gY2Fj
aGVkUmVjb3Zlcnk7CisgICAgICAgIGlmIChqc1ZhbHVlUmVncy50YWdHUFIoKSAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MudGFnR1BSKCld
ID0gY2FjaGVkUmVjb3Zlcnk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBtX29sZEZyYW1lQmFz
ZSBpcyB0aGUgcmVnaXN0ZXIgcmVsYXRpdmUgdG8gd2hpY2ggd2UgYWNjZXNzCisgICAgLy8gc2xv
dHMgaW4gdGhlIG9sZCBjYWxsIGZyYW1lLCB3aXRoIGFuIGFkZGl0aW9uYWwgb2Zmc2V0IG9mCisg
ICAgLy8gbV9vbGRGcmFtZU9mZnNldC4KKyAgICAvLworICAgIC8vICAtIEZvciBhbiBhY3R1YWwg
dGFpbCBjYWxsLCBtX29sZEZyYW1lQmFzZSBpcyB0aGUgc3RhY2sKKyAgICAvLyAgICBwb2ludGVy
LCBhbmQgbV9vbGRGcmFtZU9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIGxvY2FscyBvZiB0aGUKKyAg
ICAvLyAgICB0YWlsIGNhbGxlcidzIGZyYW1lLiBXZSB1c2Ugc3VjaCBzdGFjayBwb2ludGVyLWJh
c2VkCisgICAgLy8gICAgYWRkcmVzc2luZyBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byBsb2FkIHRo
ZSB0YWlsIGNhbGxlcidzCisgICAgLy8gICAgY2FsbGVyJ3MgZnJhbWUgcG9pbnRlciBpbiB0aGUg
ZnJhbWUgcG9pbnRlciByZWdpc3RlcgorICAgIC8vICAgIGltbWVkaWF0ZWx5IGluc3RlYWQgb2Yg
YXdrd2FyZGx5IGtlZXBpbmcgaXQgYXJvdW5kIG9uIHRoZQorICAgIC8vICAgIHN0YWNrLgorICAg
IC8vCisgICAgLy8gIC0gRm9yIGEgc2xvdyBwYXRoIGNhbGwsIG1fb2xkRnJhbWVCYXNlIGlzIGp1
c3QgdGhlIGZyYW1lCisgICAgLy8gICAgcG9pbnRlciwgYW5kIG1fb2xkRnJhbWVPZmZzZXQgaXMg
MC4KKyAgICBHUFJSZWcgbV9vbGRGcmFtZUJhc2UgeyBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2lu
dGVyUmVnaXN0ZXIgfTsKKyAgICBpbnQgbV9vbGRGcmFtZU9mZnNldCB7IDAgfTsKKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3NGb3JPbGQoVmlydHVhbFJlZ2lzdGVyIHJlZykg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX29s
ZEZyYW1lQmFzZSwKKyAgICAgICAgICAgIChtX29sZEZyYW1lT2Zmc2V0ICsgcmVnLm9mZnNldCgp
KSAqIHNpemVvZihSZWdpc3RlcikpOworICAgIH0KKworICAgIC8vIG1fbmV3RnJhbWVCYXNlIGlz
IHRoZSByZWdpc3RlciByZWxhdGl2ZSB0byB3aGljaCB3ZSBhY2Nlc3MKKyAgICAvLyBzbG90cyBp
biB0aGUgbmV3IGNhbGwgZnJhbWUsIGFuZCB3ZSBhbHdheXMgbWFrZSBpdCBwb2ludCB0bworICAg
IC8vIHdoZXJldmVyIHRoZSBzdGFjayBwb2ludGVyIHdpbGwgYmUgcmlnaHQgYmVmb3JlIG1ha2lu
ZyB0aGUKKyAgICAvLyBhY3R1YWwgY2FsbC9qdW1wLiBUaGUgYWN0dWFsIGJhc2Ugb2YgdGhlIG5l
dyBmcmFtZSBpcyBhdCBvZmZzZXQKKyAgICAvLyBtX25ld0ZyYW1lT2Zmc2V0IHJlbGF0aXZlIHRv
IG1fbmV3RnJhbWVCYXNlLgorICAgIC8vCisgICAgLy8gIC0gRm9yIGFuIGFjdHVhbCB0YWlsIGNh
bGwsIG1fbmV3RnJhbWVCYXNlIGlzIGNvbXB1dGVkCisgICAgLy8gICAgZHluYW1pY2FsbHksIGFu
ZCBtX25ld0ZyYW1lT2Zmc2V0IHZhcmllcyBiZXR3ZWVuIDAgYW5kIC0yCisgICAgLy8gICAgZGVw
ZW5kaW5nIG9uIHRoZSBhcmNoaXRlY3R1cmUncyBjYWxsaW5nIGNvbnZlbnRpb24gKHNlZQorICAg
IC8vICAgIHByZXBhcmVGb3JUYWlsQ2FsbCkuCisgICAgLy8KKyAgICAvLyAgLSBGb3IgYSBzbG93
IHBhdGggY2FsbCwgbV9uZXdGcmFtZUJhc2UgaXMgdGhlIGFjdHVhbCBzdGFjaworICAgIC8vICAg
IHBvaW50ZXIsIGFuZCBtX25ld0ZyYW1lT2Zmc2V0IGlzIC0gQ2FsbGVyRnJhbWVBbmRQQ1NpemUs
CisgICAgLy8gICAgZm9sbG93aW5nIHRoZSBjb252ZW50aW9uIGZvciBhIHJlZ3VsYXIgY2FsbC4K
KyAgICBHUFJSZWcgbV9uZXdGcmFtZUJhc2UgeyBJbnZhbGlkR1BSUmVnIH07CisgICAgaW50IG1f
bmV3RnJhbWVPZmZzZXQgeyAwfTsKKworICAgIGJvb2wgaXNVbmRlY2lkZWQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbmV3RnJhbWVCYXNlID09IEludmFsaWRHUFJSZWc7CisgICAg
fQorCisgICAgYm9vbCBpc1Nsb3dQYXRoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X25ld0ZyYW1lQmFzZSA9PSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXI7Cisg
ICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzc0Zvck5ldyhWaXJ0dWFs
UmVnaXN0ZXIgcmVnKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG1fbmV3RnJhbWVCYXNlLAorICAgICAgICAgICAgKG1fbmV3RnJhbWVPZmZzZXQg
KyByZWcub2Zmc2V0KCkpICogc2l6ZW9mKFJlZ2lzdGVyKSk7CisgICAgfQorCisgICAgLy8gV2Ug
dXNlIGEgY29uY2VwdCBvZiAiZGFuZ2VyIHpvbmUiLiBUaGUgZGFuZ2VyIHpvbmUgY29uc2lzdHMg
b2YKKyAgICAvLyBhbGwgdGhlIHdyaXRlcyBpbiB0aGUgbmV3IGZyYW1lIHRoYXQgY291bGQgb3Zl
cmxhcCB3aXRoIHJlYWRzCisgICAgLy8gaW4gdGhlIG9sZCBmcmFtZS4KKyAgICAvLworICAgIC8v
IEJlY2F1c2Ugd2UgY291bGQgaGF2ZSBhIGhpZ2hlciBhY3R1YWwgbnVtYmVyIG9mIGFyZ3VtZW50
cyB0aGFuCisgICAgLy8gcGFyYW1ldGVycywgd2hlbiBwcmVwYXJpbmcgYSB0YWlsIGNhbGwsIHdl
IG5lZWQgdG8gYXNzdW1lIHRoYXQKKyAgICAvLyB3cml0aW5nIHRvIGEgc2xvdCBvbiB0aGUgbmV3
IGZyYW1lIGNvdWxkIG92ZXJsYXAgbm90IG9ubHkgd2l0aAorICAgIC8vIHRoZSBjb3JyZXNwb25k
aW5nIHNsb3QgaW4gdGhlIG9sZCBmcmFtZSwgYnV0IGFsc28gd2l0aCBhbnkgc2xvdAorICAgIC8v
IGFib3ZlIGl0LiBUaHVzLCB0aGUgZGFuZ2VyIHpvbmUgY29uc2lzdHMgb2YgYWxsIHdyaXRlcyBi
ZXR3ZWVuCisgICAgLy8gdGhlIGZpcnN0IHdyaXRlIGFuZCB3aGF0IEkgY2FsbCB0aGUgImRhbmdl
ciBmcm9udGllciI6IHRoZQorICAgIC8vIGhpZ2hlc3Qgc2xvdCBpbiB0aGUgb2xkIGZyYW1lIHdl
IHN0aWxsIGNhcmUgYWJvdXQuIFRodXMsIHRoZQorICAgIC8vIGRhbmdlciB6b25lIGNvbnRhaW5z
IGFsbCB0aGUgc2xvdHMgYmV0d2VlbiB0aGUgZmlyc3Qgc2xvdCBvZgorICAgIC8vIHRoZSBuZXcg
ZnJhbWUgYW5kIHRoZSBkYW5nZXIgZnJvbnRpZXIuIEJlY2F1c2UgdGhlIGRhbmdlcgorICAgIC8v
IGZyb250aWVyIGlzIHJlbGF0ZWQgdG8gdGhlIG5ldyBmcmFtZSwgaXQgaXMgc3RvcmVkIGFzIGEg
dmlydHVhbAorICAgIC8vIHJlZ2lzdGVyICppbiB0aGUgbmV3IGZyYW1lKi4KKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV9kYW5nZXJGcm9udGllcjsKKworICAgIFZpcnR1YWxSZWdpc3RlciBkYW5nZXJG
cm9udGllcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkpOwor
CisgICAgICAgIHJldHVybiBtX2RhbmdlckZyb250aWVyOworICAgIH0KKworICAgIGJvb2wgaXNE
YW5nZXJOZXcoVmlydHVhbFJlZ2lzdGVyIHJlZykgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VCghaXNVbmRlY2lkZWQoKSAmJiBpc1ZhbGlkTmV3KHJlZykpOworICAgICAgICByZXR1cm4gcmVn
IDw9IGRhbmdlckZyb250aWVyKCk7CisgICAgfQorCisgICAgdm9pZCB1cGRhdGVEYW5nZXJGcm9u
dGllcigpCisgICAgeworICAgICAgICBBU1NFUlQoIWlzVW5kZWNpZGVkKCkpOworCisgICAgICAg
IG1fZGFuZ2VyRnJvbnRpZXIgPSBmaXJzdE5ldygpIC0gMTsKKyAgICAgICAgZm9yIChWaXJ0dWFs
UmVnaXN0ZXIgcmVnID0gbGFzdE5ldygpOyByZWcgPj0gZmlyc3ROZXcoKTsgcmVnIC09IDEpIHsK
KyAgICAgICAgICAgIGlmICghZ2V0TmV3KHJlZykgfHwgIWlzVmFsaWRPbGQobmV3QXNPbGQocmVn
KSkgfHwgIWdldE9sZChuZXdBc09sZChyZWcpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgbV9kYW5nZXJGcm9udGllciA9IHJlZzsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgRGFuZ2VyIGZyb250aWVyIG5vdyBh
dCBORVcgIiwgbV9kYW5nZXJGcm9udGllciwgIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgQWxs
IGNsZWFyISBEYW5nZXIgem9uZSBpcyBlbXB0eS5cbiIpOworICAgIH0KKworICAgIC8vIEEgc2Fm
ZSB3cml0ZSBpcyBhIHdyaXRlIHRoYXQgbmV2ZXIgd3JpdGVzIGludG8gdGhlIGRhbmdlciB6b25l
LgorICAgIGJvb2wgaGFzT25seVNhZmVXcml0ZXMoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292
ZXJ5KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChWaXJ0dWFsUmVnaXN0ZXIgdGFyZ2V0IDog
Y2FjaGVkUmVjb3ZlcnkudGFyZ2V0cygpKSB7CisgICAgICAgICAgICBpZiAoaXNEYW5nZXJOZXco
dGFyZ2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gWW91IG11c3QgZW5zdXJlIHRoYXQgdGhl
cmUgaXMgbm8gZGFuZ2Vyb3VzIHdyaXRlcyBiZWZvcmUKKyAgICAvLyBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24uCisgICAgYm9vbCB0cnlXcml0ZXMoQ2FjaGVkUmVjb3ZlcnkmKTsKKworICAgIC8vIFRo
aXMgZnVuY3Rpb24gdHJpZXMgdG8gZW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gbG9uZ2VyIGFueQor
ICAgIC8vIHBvc3NpYmxlIHNhZmUgd3JpdGUsIGkuZS4gYWxsIHJlbWFpbmluZyB3cml0ZXMgYXJl
IGVpdGhlciB0bworICAgIC8vIHRoZSBkYW5nZXIgem9uZSBvciBjYWxsZWUgc2F2ZSByZXN0b3Jh
dGlvbnMuCisgICAgLy8KKyAgICAvLyBJdCByZXR1cm5zIGZhbHNlIGlmIGl0IHdhcyB1bmFibGUg
dG8gcGVyZm9ybSBzb21lIHNhZmUgd3JpdGVzCisgICAgLy8gZHVlIHRvIGhpZ2ggcmVnaXN0ZXIg
cHJlc3N1cmUuCisgICAgYm9vbCBwZXJmb3JtU2FmZVdyaXRlcygpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCisjZW5kaWYgLy8gQ2FsbEZyYW1l
U2h1ZmZsZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJh
bWVTaHVmZmxlcjMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIzMl82NC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZhOGU0OGM4OTEwMGFkOTk5YTlkZTM0ZjE1
MGMwNDRjMjBhNDNkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAKQEAgLTAsMCArMSwzMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKKworI2lmIEVOQUJMRShKSVQpICYmIFVT
RShKU1ZBTFVFMzJfNjQpCisKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJE
YXRhRm9ybWF0LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworRGF0YUZvcm1hdCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdFN0b3JlKENhY2hlZFJlY292ZXJ5
JiBsb2NhdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcykKK3sKKyAgICBBU1NF
UlQoIWxvY2F0aW9uLnJlY292ZXJ5KCkuaXNJbkpTU3RhY2soKSk7CisKKyAgICBzd2l0Y2ggKGxv
Y2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIFVuYm94ZWRJbnQzMklu
R1BSOgorICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpLAorICAgICAgICAgICAgYWRkcmVzcy53aXRoT2Zmc2V0KFRhZ09m
ZnNldCkpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGxvY2F0aW9uLnJlY292ZXJ5KCkuZ3ByKCks
IGFkZHJlc3Mud2l0aE9mZnNldChQYXlsb2FkT2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBEYXRh
Rm9ybWF0SW50MzI7CisgICAgY2FzZSBVbmJveGVkQ2VsbEluR1BSOgorICAgICAgICBtX2ppdC5z
dG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksCisg
ICAgICAgICAgICBhZGRyZXNzLndpdGhPZmZzZXQoVGFnT2Zmc2V0KSk7CisgICAgICAgIG1faml0
LnN0b3JlMzIobG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBh
eWxvYWRPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOworICAgIGNhc2Ug
Q29uc3RhbnQ6CisgICAgICAgIG1faml0LnN0b3JlVHJ1c3RlZFZhbHVlKGxvY2F0aW9uLnJlY292
ZXJ5KCkuY29uc3RhbnQoKSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0SlM7
CisgICAgY2FzZSBJblBhaXI6CisgICAgICAgIG1faml0LnN0b3JlVmFsdWUobG9jYXRpb24ucmVj
b3ZlcnkoKS5qc1ZhbHVlUmVncygpLCBhZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3Jt
YXRKUzsKKyAgICBjYXNlIFVuYm94ZWRCb29sZWFuSW5HUFI6CisgICAgICAgIG1faml0LnN0b3Jl
MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwKKyAg
ICAgICAgICAgIGFkZHJlc3Mud2l0aE9mZnNldChUYWdPZmZzZXQpKTsKKyAgICAgICAgbV9qaXQu
c3RvcmUzMihsb2NhdGlvbi5yZWNvdmVyeSgpLmdwcigpLCBhZGRyZXNzLndpdGhPZmZzZXQoUGF5
bG9hZE9mZnNldCkpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEJvb2xlYW47CisgICAgY2Fz
ZSBJbkZQUjoKKyAgICBjYXNlIFVuYm94ZWREb3VibGVJbkZQUjoKKyAgICAgICAgbV9qaXQuc3Rv
cmVEb3VibGUobG9jYXRpb24ucmVjb3ZlcnkoKS5mcHIoKSwgYWRkcmVzcyk7CisgICAgICAgIHJl
dHVybiBEYXRhRm9ybWF0SlM7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRC
b3goQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9uKQoreworICAgIC8vIE5vdGhpbmcgdG8gZG8sIHdl
J3JlIGdvb2QhIEpTVmFsdWVzIGFuZCBkb3VibGVzIGNhbiBiZSBzdG9yZWQKKyAgICAvLyBpbW1l
ZGlhdGVseSwgYW5kIG90aGVyIGZvcm1hdHMgZG9uJ3QgbmVlZCBhbnkgdHJhbnNmb3JtYXRpb24g
LQorICAgIC8vIGp1c3Qgc3RvcmluZyBhIGNvbnN0YW50IHRhZyBzZXBhcmF0ZWx5LgorICAgIEFT
U0VSVChjYW5Cb3gobG9jYXRpb24pKTsKK30KKwordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1p
dExvYWQoQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9uKQoreworICAgIGlmICghbG9jYXRpb24ucmVj
b3ZlcnkoKS5pc0luSlNTdGFjaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZygiICAgKiBMb2FkaW5nICIsIGxvY2F0aW9uLnJlY292ZXJ5KCks
ICIgaW50byAiKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnIHsgbG9jYXRpb24ucmVjb3Zlcnko
KS52aXJ0dWFsUmVnaXN0ZXIoKSB9OworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJl
c3MgeyBhZGRyZXNzRm9yT2xkKHJlZykgfTsKKworICAgIGJvb2wgdHJ5RlBSIHsgdHJ1ZSB9Owor
ICAgIEpTVmFsdWVSZWdzIHdhbnRlZEpTVmFsdWVSZWdzIHsgbG9jYXRpb24ud2FudGVkSlNWYWx1
ZVJlZ3MoKSB9OworICAgIGlmICh3YW50ZWRKU1ZhbHVlUmVncykgeworICAgICAgICBpZiAod2Fu
dGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpICE9IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAg
ICYmICFtX3JlZ2lzdGVyc1t3YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCldCisgICAgICAg
ICAgICAmJiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRH
UFIoKSkpCisgICAgICAgICAgICB0cnlGUFIgPSBmYWxzZTsKKyAgICAgICAgaWYgKHdhbnRlZEpT
VmFsdWVSZWdzLnRhZ0dQUigpICE9IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAgICYmICFtX3Jl
Z2lzdGVyc1t3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKV0KKyAgICAgICAgICAgICYmICFtX2xv
Y2tlZFJlZ2lzdGVycy5nZXQod2FudGVkSlNWYWx1ZVJlZ3MudGFnR1BSKCkpKQorICAgICAgICAg
ICAgdHJ5RlBSID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHRyeUZQUiAmJiBsb2NhdGlvbi5s
b2Fkc0ludG9GUFIoKSkgeworICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gZ2V0RnJlZUZQUigp
OworICAgICAgICBpZiAocmVzdWx0RlBSICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoYWRkcmVzcywgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIERhdGFG
b3JtYXQgZGF0YUZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAgICAgICAgIGlmIChsb2NhdGlv
bi5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAg
ICAgICAgIGRhdGFGb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOworICAgICAgICAgICAgdXBkYXRl
UmVjb3ZlcnkobG9jYXRpb24sIAorICAgICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluRlBS
KHJlc3VsdEZQUiwgZGF0YUZvcm1hdCkpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgZGF0YUxvZyhsb2NhdGlvbi5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAg
ICAgIGlmIChyZWcgPT0gbmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisgICAgICAgICAgICAg
ICAgdXBkYXRlRGFuZ2VyRnJvbnRpZXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChsb2NhdGlvbi5sb2Fkc0ludG9HUFIoKSkgeworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSIHsgd2FudGVkSlNWYWx1ZVJlZ3MucGF5bG9hZEdQUigpIH07CisgICAg
ICAgIGlmIChyZXN1bHRHUFIgPT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1tyZXN1bHRH
UFJdIHx8IG1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZXN1bHRHUFIpKQorICAgICAgICAgICAgcmVz
dWx0R1BSID0gZ2V0RnJlZUdQUigpOworICAgICAgICBBU1NFUlQocmVzdWx0R1BSICE9IEludmFs
aWRHUFJSZWcpOworICAgICAgICBtX2ppdC5sb2FkUHRyKGFkZHJlc3Mud2l0aE9mZnNldChQYXls
b2FkT2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24s
IAorICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVzdWx0R1BSLCBsb2NhdGlvbi5y
ZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2cobG9jYXRpb24ucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgIGlmIChyZWcg
PT0gbmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisgICAgICAgICAgICB1cGRhdGVEYW5nZXJG
cm9udGllcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGxvY2F0aW9u
LnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gRGlzcGxhY2VkSW5KU1N0YWNrKTsKKyAgICBHUFJS
ZWcgcGF5bG9hZEdQUiB7IHdhbnRlZEpTVmFsdWVSZWdzLnBheWxvYWRHUFIoKSB9OworICAgIEdQ
UlJlZyB0YWdHUFIgeyB3YW50ZWRKU1ZhbHVlUmVncy50YWdHUFIoKSB9OworICAgIGlmIChwYXls
b2FkR1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbcGF5bG9hZEdQUl0gfHwgbV9s
b2NrZWRSZWdpc3RlcnMuZ2V0KHBheWxvYWRHUFIpKQorICAgICAgICBwYXlsb2FkR1BSID0gZ2V0
RnJlZUdQUigpOworICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldChwYXlsb2FkR1BSKTsKKyAgICBp
ZiAodGFnR1BSID09IEludmFsaWRHUFJSZWcgfHwgbV9yZWdpc3RlcnNbdGFnR1BSXSB8fCBtX2xv
Y2tlZFJlZ2lzdGVycy5nZXQodGFnR1BSKSkKKyAgICAgICAgdGFnR1BSID0gZ2V0RnJlZUdQUigp
OworICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKHBheWxvYWRHUFIpOworICAgIEFTU0VSVChw
YXlsb2FkR1BSICE9IEludmFsaWRHUFJSZWcgJiYgdGFnR1BSICE9IEludmFsaWRHUFJSZWcgJiYg
dGFnR1BSICE9IHBheWxvYWRHUFIpOworICAgIG1faml0LmxvYWRQdHIoYWRkcmVzcy53aXRoT2Zm
c2V0KFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkR1BSKTsKKyAgICBtX2ppdC5sb2FkUHRyKGFkZHJl
c3Mud2l0aE9mZnNldChUYWdPZmZzZXQpLCB0YWdHUFIpOworICAgIHVwZGF0ZVJlY292ZXJ5KGxv
Y2F0aW9uLCAKKyAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5QYWlyKHRhZ0dQUiwgcGF5bG9hZEdQ
UikpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKGxvY2F0aW9uLnJlY292ZXJ5
KCksICJcbiIpOworICAgIGlmIChyZWcgPT0gbmV3QXNPbGQoZGFuZ2VyRnJvbnRpZXIoKSkpCisg
ICAgICAgIHVwZGF0ZURhbmdlckZyb250aWVyKCk7Cit9CisKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZs
ZXI6OmNhbkxvYWQoQ2FjaGVkUmVjb3ZlcnkmIGxvY2F0aW9uKQoreworICAgIGlmICghbG9jYXRp
b24ucmVjb3ZlcnkoKS5pc0luSlNTdGFjaygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChsb2NhdGlvbi5sb2Fkc0ludG9GUFIoKSAmJiBnZXRGcmVlRlBSKCkgIT0gSW52YWxpZEZQ
UlJlZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobG9jYXRpb24ubG9hZHNJbnRv
R1BSKCkgJiYgZ2V0RnJlZUdQUigpICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gRGlzcGxh
Y2VkSW5KU1N0YWNrKSB7CisgICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSIHsgZ2V0RnJlZUdQUigp
IH07CisgICAgICAgIGlmIChwYXlsb2FkR1BSID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldChwYXlsb2FkR1BS
KTsKKyAgICAgICAgR1BSUmVnIHRhZ0dQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAgICBtX2xv
Y2tlZFJlZ2lzdGVycy5jbGVhcihwYXlsb2FkR1BSKTsKKyAgICAgICAgcmV0dXJuIHRhZ0dQUiAh
PSBJbnZhbGlkR1BSUmVnOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gV2Ug
cHJlZmVyIGxvYWRpbmcgZG91YmxlcyBhbmQgdW5kZXRlcm1pbmVkIEpTVmFsdWVzIGludG8gRlBS
cworLy8gYmVjYXVzZSBpdCB3b3VsZCBvdGhlcndpc2UgdXNlIHVwIHR3byBHUFJzLgorYm9vbCBD
YWNoZWRSZWNvdmVyeTo6bG9hZHNJbnRvRlBSKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHJlY292
ZXJ5KCkudGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIERvdWJsZURpc3BsYWNlZEluSlNTdGFjazoK
KyAgICBjYXNlIERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCisvLyBJbnRlZ2Vy
cywgYm9vbGVhbnMgYW5kIGNlbGxzIGNhbiBiZSBsb2FkZWQgaW50byBhIHNpbmdsZSBHUFIKK2Jv
b2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0dQUigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChy
ZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFj
azoKKyAgICBjYXNlIEJvb2xlYW5EaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBDZWxsRGlz
cGxhY2VkSW5KU1N0YWNrOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6
OmVtaXREaXNwbGFjZShDYWNoZWRSZWNvdmVyeSYgbG9jYXRpb24pCit7CisgICAgQVNTRVJUKGxv
Y2F0aW9uLnJlY292ZXJ5KCkuaXNJblJlZ2lzdGVycygpKTsKKyAgICBKU1ZhbHVlUmVncyB3YW50
ZWRKU1ZhbHVlUmVncyB7IGxvY2F0aW9uLndhbnRlZEpTVmFsdWVSZWdzKCkgfTsKKyAgICBBU1NF
UlQod2FudGVkSlNWYWx1ZVJlZ3MpOworCisgICAgR1BSUmVnIHdhbnRlZFRhZ0dQUiB7IHdhbnRl
ZEpTVmFsdWVSZWdzLnRhZ0dQUigpIH07CisgICAgR1BSUmVnIHdhbnRlZFBheWxvYWRHUFIgeyB3
YW50ZWRKU1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkgfTsKKyAgICAKKyAgICBpZiAod2FudGVkVGFn
R1BSICE9IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgQVNTRVJUKCFtX2xvY2tlZFJlZ2lzdGVy
cy5nZXQod2FudGVkVGFnR1BSKSk7CisgICAgICAgIGlmIChDYWNoZWRSZWNvdmVyeSogY3VycmVu
dFRhZyB7IG1fcmVnaXN0ZXJzW3dhbnRlZFRhZ0dQUl0gfSkgeworICAgICAgICAgICAgaWYgKGN1
cnJlbnRUYWcgPT0gJmxvY2F0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICsgIiwgd2FudGVkVGFnR1BSLCAiIGlzIE9L
XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4g
bmV2ZXIgaGFwcGVuIG9uIDMyYml0IHBsYXRmb3JtcyBzaW5jZSB3ZQorICAgICAgICAgICAgICAg
IC8vIGhhdmUgYXQgbW9zdCBvbmUgd2FudGVkIEpTVmFsdWVSZWdzLCBmb3IgdGhlCisgICAgICAg
ICAgICAgICAgLy8gY2FsbGVlLCBhbmQgbm8gY2FsbGVlLXNhdmUgcmVnaXN0ZXJzLgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAod2FudGVkUGF5bG9hZEdQUiAhPSBJbnZhbGlkR1BS
UmVnKSB7CisgICAgICAgIEFTU0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZFBheWxv
YWRHUFIpKTsKKyAgICAgICAgaWYgKENhY2hlZFJlY292ZXJ5KiBjdXJyZW50UGF5bG9hZCB7IG1f
cmVnaXN0ZXJzW3dhbnRlZFBheWxvYWRHUFJdIH0pIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50
UGF5bG9hZCA9PSAmbG9jYXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKyAiLCB3YW50ZWRQYXlsb2FkR1BSLCAiIGlz
IE9LXG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gU2VlIGFi
b3ZlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsb2NhdGlvbi5yZWNvdmVyeSgp
LnRlY2huaXF1ZSgpID09IEluUGFpcgorICAgICAgICB8fCBsb2NhdGlvbi5yZWNvdmVyeSgpLmlz
SW5HUFIoKSkgeworICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUjsKKyAgICAgICAgaWYgKGxvY2F0
aW9uLnJlY292ZXJ5KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyKQorICAgICAgICAgICAgcGF5bG9h
ZEdQUiA9IGxvY2F0aW9uLnJlY292ZXJ5KCkucGF5bG9hZEdQUigpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBwYXlsb2FkR1BSID0gbG9jYXRpb24ucmVjb3ZlcnkoKS5ncHIoKTsKKworICAg
ICAgICBpZiAod2FudGVkUGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAg
d2FudGVkUGF5bG9hZEdQUiA9IHBheWxvYWRHUFI7CisKKyAgICAgICAgaWYgKHBheWxvYWRHUFIg
IT0gd2FudGVkUGF5bG9hZEdQUikgeworICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnJlY292ZXJ5
KCkudGVjaG5pcXVlKCkgPT0gSW5QYWlyCisgICAgICAgICAgICAgICAgJiYgd2FudGVkUGF5bG9h
ZEdQUiA9PSBsb2NhdGlvbi5yZWNvdmVyeSgpLnRhZ0dQUigpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICogU3dhcHBpbmcg
IiwgcGF5bG9hZEdQUiwgIiBhbmQgIiwgd2FudGVkUGF5bG9hZEdQUiwgIlxuIik7CisgICAgICAg
ICAgICAgICAgbV9qaXQuc3dhcChwYXlsb2FkR1BSLCB3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICAg
ICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgCisgICAgICAgICAgICAgICAgICAg
IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihwYXlsb2FkR1BSLCB3YW50ZWRQYXlsb2FkR1BSKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyAiLCBwYXlsb2FkR1BSLCAiIGludG8g
Iiwgd2FudGVkUGF5bG9hZEdQUiwgIlxuIik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShw
YXlsb2FkR1BSLCB3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAobG9jYXRp
b24ucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1
ZVJlY292ZXJ5OjppblBhaXIobG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3YW50ZWRQYXlsb2FkR1BSKSk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkobG9jYXRpb24sIAor
ICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIod2FudGVkUGF5bG9h
ZEdQUiwgbG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAod2FudGVkVGFnR1BS
ID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICB3YW50ZWRUYWdHUFIgPSBnZXRGcmVlR1BS
KCk7CisgICAgICAgIHN3aXRjaCAobG9jYXRpb24ucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpIHsK
KyAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyBpbnQzMiB0YWcgaW50byAiLCB3
YW50ZWRUYWdHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwKKyAgICAgICAgICAgICAgICB3YW50
ZWRUYWdHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdENl
bGw6CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAqIE1vdmluZyBjZWxsIHRhZyBpbnRvICIsIHdhbnRlZFRhZ0dQUiwgIlxuIik7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZyksCisgICAgICAgICAgICAgICAgd2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBNb3ZpbmcgYm9vbGVhbiB0YWcgaW50
byAiLCB3YW50ZWRUYWdHUFIsICJcbiIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpLAorICAgICAgICAgICAg
ICAgIHdhbnRlZFRhZ0dQUik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0SlM6CisgICAgICAgICAgICBBU1NFUlQod2FudGVkVGFnR1BSICE9IGxvY2F0aW9uLnJl
Y292ZXJ5KCkucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgIGlmICh3YW50ZWRUYWdHUFIgIT0g
bG9jYXRpb24ucmVjb3ZlcnkoKS50YWdHUFIoKSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAqIE1vdmluZyAiLCBsb2NhdGlv
bi5yZWNvdmVyeSgpLnRhZ0dQUigpLCAiIGludG8gIiwgd2FudGVkVGFnR1BSLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGxvY2F0aW9uLnJlY292ZXJ5KCkudGFnR1BSKCksIHdh
bnRlZFRhZ0dQUik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChsb2NhdGlvbi5yZWNvdmVyeSgp
LmlzSW5GUFIoKSk7CisgICAgICAgIGlmICh3YW50ZWRUYWdHUFIgPT0gSW52YWxpZEdQUlJlZykg
eworICAgICAgICAgICAgQVNTRVJUKHdhbnRlZFBheWxvYWRHUFIgIT0gSW52YWxpZEdQUlJlZyk7
CisgICAgICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXQod2FudGVkUGF5bG9hZEdQUik7Cisg
ICAgICAgICAgICB3YW50ZWRUYWdHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBtX2xv
Y2tlZFJlZ2lzdGVycy5jbGVhcih3YW50ZWRQYXlsb2FkR1BSKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAod2FudGVkUGF5bG9hZEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBt
X2xvY2tlZFJlZ2lzdGVycy5zZXQod2FudGVkVGFnR1BSKTsKKyAgICAgICAgICAgIHdhbnRlZFBh
eWxvYWRHUFIgPSBnZXRGcmVlR1BSKCk7CisgICAgICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5j
bGVhcih3YW50ZWRUYWdHUFIpOworICAgICAgICB9CisgICAgICAgIG1faml0LmJveERvdWJsZShs
b2NhdGlvbi5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRUYWdHUFIsIHdhbnRlZFBheWxvYWRHUFIp
OworICAgIH0KKyAgICB1cGRhdGVSZWNvdmVyeShsb2NhdGlvbiwgVmFsdWVSZWNvdmVyeTo6aW5Q
YWlyKHdhbnRlZFRhZ0dQUiwgd2FudGVkUGF5bG9hZEdQUikpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNjY4ZDdkZGNmOGFkYjViZDE1M2YwN2M4MjhkM2JlOGMxOGM4NjFjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0
LmNwcApAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1
ZmZsZXIuaCIKKworI2lmIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCisKKyNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJEYXRhRm9ybWF0LmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitEYXRhRm9ybWF0IENhbGxGcmFtZVNodWZmbGVyOjplbWl0U3RvcmUoCisgICAgQ2Fj
aGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRy
ZXNzKQoreworICAgIEFTU0VSVCghY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luSlNTdGFj
aygpKTsKKworICAgIHN3aXRjaCAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUo
KSkgeworICAgIGNhc2UgSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1h
dEpTOworICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlMzIo
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRkcmVzcy53aXRoT2Zmc2V0KFBheWxv
YWRPZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRJbnQzMjsKKyAgICBjYXNlIFVu
Ym94ZWRJbnQ1MkluR1BSOgorICAgICAgICBtX2ppdC5yc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLAorICAgICAgICAgICAgY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAg
IGNhc2UgVW5ib3hlZFN0cmljdEludDUySW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4g
RGF0YUZvcm1hdFN0cmljdEludDUyOworICAgIGNhc2UgVW5ib3hlZEJvb2xlYW5JbkdQUjoKKyAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgYWRk
cmVzcyk7CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIFVuYm94
ZWRDZWxsSW5HUFI6CisgICAgICAgIG1faml0LnN0b3JlUHRyKGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZ3ByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENlbGw7Cisg
ICAgY2FzZSBVbmJveGVkRG91YmxlSW5GUFI6CisgICAgICAgIG1faml0LnN0b3JlRG91YmxlKGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCksIGFkZHJlc3MpOworICAgICAgICByZXR1cm4g
RGF0YUZvcm1hdERvdWJsZTsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBtX2ppdC5zdG9yZURv
dWJsZShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCBhZGRyZXNzKTsKKyAgICAgICAg
cmV0dXJuIERhdGFGb3JtYXRKUzsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBtX2ppdC5z
dG9yZVRydXN0ZWRWYWx1ZShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmNvbnN0YW50KCksIGFk
ZHJlc3MpOworICAgICAgICByZXR1cm4gRGF0YUZvcm1hdEpTOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIENhbGxG
cmFtZVNodWZmbGVyOjplbWl0Qm94KENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVyeSkKK3sK
KyAgICBBU1NFUlQoY2FuQm94KGNhY2hlZFJlY292ZXJ5KSk7CisgICAgaWYgKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0luR1BSKCkpIHsKKyAgICAgICAgc3dpdGNoIChj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkgeworICAgICAgICBjYXNlIERh
dGFGb3JtYXRJbnQzMjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAg
ICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoCisgICAgICAgICAgICAgICAgY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyB0
aGUgaGFyZCB3YXkuCisgICAgICAgICAgICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoVGFnVHlwZU51bWJlciksCisgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5zZXRSZWNvdmVy
eSgKKyAgICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmdwcigpLCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCksICJcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIERhdGFGb3Jt
YXRJbnQ1MjoKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFM
b2coIiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkpOworICAgICAgICAg
ICAgbV9qaXQucnNoaWZ0NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpp
bnQ1MlNoaWZ0QW1vdW50KSwKKyAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmdwcigpKTsKKyAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAorICAg
ICAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuZ3ByKCksIERhdGFGb3JtYXRTdHJpY3RJbnQ1MikpOworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgY2FzZSBE
YXRhRm9ybWF0U3RyaWN0SW50NTI6IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICogQm94aW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IGdldEZyZWVGUFIoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHRGUFIgIT0gSW52YWxpZEZQUlJlZyk7CisgICAgICAgICAgICBt
X2ppdC5jb252ZXJ0SW50NjRUb0RvdWJsZShjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigp
LCByZXN1bHRGUFIpOworICAgICAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3Zlcnks
IFZhbHVlUmVjb3Zlcnk6OmluRlBSKHJlc3VsdEZQUiwgRGF0YUZvcm1hdERvdWJsZSkpOworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiIGludG8gIiwg
Y2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hpbmcgIiwgY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLAorICAgICAgICAgICAgICAgIGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnkuc2V0
UmVjb3ZlcnkoCisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgRGF0YUZvcm1hdEpTKSk7CisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgaW50byAiLCBjYWNoZWRSZWNvdmVy
eS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjYWNo
ZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5GUFIoKSkgeworICAgICAgICBpZiAoY2FjaGVkUmVj
b3ZlcnkucmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgKiBCb3hp
bmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSk7CisgICAgICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gY2FjaGVkUmVjb3Zlcnkud2FudGVkSlNWYWx1ZVJlZ3MoKS5ncHIoKTsKKyAgICAg
ICAgICAgIGlmIChyZXN1bHRHUFIgPT0gSW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1tyZXN1
bHRHUFJdKQorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiA9IGdldEZyZWVHUFIoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChyZXN1bHRHUFIgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgICAgICBt
X2ppdC5wdXJpZnlOYU4oY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9qaXQuc3ViNjQoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHVwZGF0
ZVJlY292ZXJ5KGNhY2hlZFJlY292ZXJ5LCBWYWx1ZVJlY292ZXJ5OjppbkdQUihyZXN1bHRHUFIs
IERhdGFGb3JtYXRKUykpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiIGludG8gIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0TG9hZChDYWNoZWRSZWNvdmVyeSYgY2FjaGVkUmVj
b3ZlcnkpCit7CisgICAgaWYgKCFjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5KU1N0YWNr
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
KCIgICAqIExvYWRpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKSwgIiBpbnRvICIpOwor
CisgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkudmly
dHVhbFJlZ2lzdGVyKCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcyB7IGFk
ZHJlc3NGb3JPbGQocmVnKSB9OworICAgIGJvb2wgdHJ5RlBSIHsgdHJ1ZSB9OworICAgIEdQUlJl
ZyByZXN1bHRHUFIgeyBjYWNoZWRSZWNvdmVyeS53YW50ZWRKU1ZhbHVlUmVncygpLmdwcigpIH07
CisKKyAgICAvLyBJZiB3ZSB3YW50IGEgR1BSIGFuZCBpdCdzIGF2YWlsYWJsZSwgdGhhdCdzIGJl
dHRlciB0aGFuIGxvYWRpbmcKKyAgICAvLyBpbnRvIGFuIEZQUi4KKyAgICBpZiAocmVzdWx0R1BS
ICE9IEludmFsaWRHUFJSZWcgJiYgIW1fcmVnaXN0ZXJzW3Jlc3VsdEdQUl0KKyAgICAgICAgJiYg
IW1fbG9ja2VkUmVnaXN0ZXJzLmdldChyZXN1bHRHUFIpICYmIGNhY2hlZFJlY292ZXJ5LmxvYWRz
SW50b0dQUigpKQorICAgICAgICB0cnlGUFIgPSBmYWxzZTsKKworICAgIC8vIE90aGVyd2lzZSwg
d2UgcHJlZmVyIGxvYWRpbmcgaW50byBGUFJzIGlmIHBvc3NpYmxlCisgICAgaWYgKHRyeUZQUiAm
JiBjYWNoZWRSZWNvdmVyeS5sb2Fkc0ludG9GUFIoKSkgeworICAgICAgICBGUFJSZWcgcmVzdWx0
RlBSID0gZ2V0RnJlZUZQUigpOworICAgICAgICBpZiAocmVzdWx0RlBSICE9IEludmFsaWRGUFJS
ZWcpIHsKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoYWRkcmVzcywgcmVzdWx0RlBSKTsK
KyAgICAgICAgICAgIERhdGFGb3JtYXQgZGF0YUZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKyAgICAg
ICAgICAgIC8vIFdlIGNvdWxkIGJlIHRyYW5zZm9ybWluZyBhIERhdGFGb3JtYXRDZWxsIGludG8g
YQorICAgICAgICAgICAgLy8gRGF0YUZvcm1hdEpTIGhlcmUgLSBidXQgdGhhdCdzIE9LLgorICAg
ICAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERh
dGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgZGF0YUZvcm1hdCA9IERhdGFGb3JtYXRE
b3VibGU7CisgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwKKyAgICAg
ICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkZQUihyZXN1bHRGUFIsIGRhdGFGb3JtYXQpKTsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKSwgIlxuIik7CisgICAgICAgICAgICBpZiAocmVnID09IG5ld0Fz
T2xkKGRhbmdlckZyb250aWVyKCkpKQorICAgICAgICAgICAgICAgIHVwZGF0ZURhbmdlckZyb250
aWVyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NF
UlQoY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpOworICAgIGlmIChyZXN1bHRHUFIgPT0g
SW52YWxpZEdQUlJlZyB8fCBtX3JlZ2lzdGVyc1tyZXN1bHRHUFJdIHx8IG1fbG9ja2VkUmVnaXN0
ZXJzLmdldChyZXN1bHRHUFIpKQorICAgICAgICByZXN1bHRHUFIgPSBnZXRGcmVlR1BSKCk7Cisg
ICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKKyAgICBtX2ppdC5sb2FkUHRy
KGFkZHJlc3MsIHJlc3VsdEdQUik7CisgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3Zlcnks
CisgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKHJlc3VsdEdQUiwgY2FjaGVkUmVjb3Zlcnku
cmVjb3ZlcnkoKS5kYXRhRm9ybWF0KCkpKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZyhjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLCAiXG4iKTsKKyAgICBpZiAocmVnID09IG5l
d0FzT2xkKGRhbmdlckZyb250aWVyKCkpKQorICAgICAgICB1cGRhdGVEYW5nZXJGcm9udGllcigp
OworfQorCitib29sIENhbGxGcmFtZVNodWZmbGVyOjpjYW5Mb2FkKENhY2hlZFJlY292ZXJ5JiBj
YWNoZWRSZWNvdmVyeSkKK3sKKyAgICBpZiAoIWNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJ
bkpTU3RhY2soKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBBU1NFUlQoY2FjaGVkUmVj
b3ZlcnkubG9hZHNJbnRvRlBSKCkgfHwgY2FjaGVkUmVjb3ZlcnkubG9hZHNJbnRvR1BSKCkpOwor
CisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LmxvYWRzSW50b0ZQUigpICYmIGdldEZyZWVGUFIoKSAh
PSBJbnZhbGlkRlBSUmVnKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChjYWNoZWRS
ZWNvdmVyeS5sb2Fkc0ludG9HUFIoKSAmJiBnZXRGcmVlR1BSKCkgIT0gSW52YWxpZEdQUlJlZykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ2Fj
aGVkUmVjb3Zlcnk6OmxvYWRzSW50b0ZQUigpIGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVy
eSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBEb3VibGVEaXNwbGFjZWRJbkpTU3RhY2s6Cisg
ICAgY2FzZSBEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBDZWxsRGlzcGxhY2VkSW5KU1N0
YWNrOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgQ2FjaGVkUmVjb3Zlcnk6OmxvYWRzSW50b0dQUigp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChyZWNvdmVyeSgpLnRlY2huaXF1ZSgpKSB7CisgICAgY2Fz
ZSBJbnQzMkRpc3BsYWNlZEluSlNTdGFjazoKKyAgICBjYXNlIEludDUyRGlzcGxhY2VkSW5KU1N0
YWNrOgorICAgIGNhc2UgU3RyaWN0SW50NTJEaXNwbGFjZWRJbkpTU3RhY2s6CisgICAgY2FzZSBC
b29sZWFuRGlzcGxhY2VkSW5KU1N0YWNrOgorICAgIGNhc2UgRGlzcGxhY2VkSW5KU1N0YWNrOgor
ICAgIGNhc2UgQ2VsbERpc3BsYWNlZEluSlNTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIENh
bGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292
ZXJ5KQoreworICAgIEFTU0VSVChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3Rl
cnMoKSk7CisgICAgR1BSUmVnIHdhbnRlZEdQUiB7IGNhY2hlZFJlY292ZXJ5LndhbnRlZEpTVmFs
dWVSZWdzKCkuZ3ByKCkgfTsKKyAgICBBU1NFUlQod2FudGVkR1BSICE9IEludmFsaWRHUFJSZWcp
OworICAgIEFTU0VSVCghbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KHdhbnRlZEdQUikpOworCisgICAg
aWYgKENhY2hlZFJlY292ZXJ5KiBjdXJyZW50ID0gbV9yZWdpc3RlcnNbd2FudGVkR1BSXSkgewor
ICAgICAgICBpZiAoY3VycmVudCA9PSAmY2FjaGVkUmVjb3ZlcnkpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICsgIiwgd2FudGVkR1BSLCAi
IGlzIE9LXG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAvLyBX
ZSBjb3VsZCBkbyBhIG1vcmUgY29tcGxleCB0aGluZyBieSBmaW5kaW5nIGN5Y2xlcworICAgICAg
ICAvLyBldGMuIGluIHRoYXQgY2FzZS4KKyAgICAgICAgLy8gSG93ZXZlciwgZW5kaW5nIHVwIGlu
IHRoaXMgc2l0dWF0aW9uIHdpbGwgYmUgc3VwZXIKKyAgICAgICAgLy8gcmFyZSwgYW5kIHNob3Vs
ZCBhY3R1YWxseSBiZSBvdXRyaWdodCBpbXBvc3NpYmxlIGZvcgorICAgICAgICAvLyBub24tRlRM
IHRpZXJzLCBzaW5jZToKKyAgICAgICAgLy8gIChhKSBBbGwgZG91YmxlcyBoYXZlIGJlZW4gY29u
dmVydGVkIGludG8gSlNWYWx1ZXMgd2l0aAorICAgICAgICAvLyAgICAgIFZhbHVlUmVwIG5vZGVz
LCBzbyBGUFJzIGFyZSBpbml0aWFsbHkgZnJlZQorICAgICAgICAvLworICAgICAgICAvLyAgKGIp
IFRoZSBvbmx5IHJlY292ZXJpZXMgd2l0aCB3YW50ZWQgcmVnaXN0ZXJzIGFyZSB0aGUKKyAgICAg
ICAgLy8gICAgICBjYWxsZWUgKHdoaWNoIGFsd2F5cyBzdGFydHMgb3V0IGluIGEgcmVnaXN0ZXIp
IGFuZAorICAgICAgICAvLyAgICAgIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gIChjKSBUaGUgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGFyZSB0aGUgZmly
c3QgdGhpbmdzIHdlCisgICAgICAgIC8vICAgICAgbG9hZCAoYWZ0ZXIgdGhlIHJldHVybiBQQyks
IGFuZCB0aGV5IGFyZSBsb2FkZWQgYXMgSlNWYWx1ZXMKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
IChkKSBXZSBwcmVmZXIgbG9hZGluZyBKU1ZhbHVlcyBpbnRvIEZQUnMgaWYgdGhlaXIKKyAgICAg
ICAgLy8gICAgICB3YW50ZWQgR1BSIGlzIG5vdCBhdmFpbGFibGUKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gIChlKSBJZiB3ZSBlbmQgdXAgc3BpbGxpbmcgc29tZSByZWdpc3RlcnMgd2l0aCBhCisg
ICAgICAgIC8vICAgICAgdGFyZ2V0LCB3ZSB3b24ndCBsb2FkIHRoZW0gYWdhaW4gYmVmb3JlIHRo
ZSB2ZXJ5CisgICAgICAgIC8vICAgICAgZW5kIG9mIHRoZSBhbGdvcml0aG0KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQ29tYmluZWQsIHRoaXMgbWVhbnMgdGhhdCB3ZSB3aWxsIG5ldmVyIGxvYWQg
YSByZWNvdmVyeQorICAgICAgICAvLyB3aXRoIGEgd2FudGVkIEdQUiBpbnRvIGFueSBHUFIgb3Ro
ZXIgdGhhbiBpdHMgd2FudGVkCisgICAgICAgIC8vIEdQUi4gVGhlIGNhbGxlZSBjb3VsZCBob3dl
dmVyIGhhdmUgYmVlbiBpbml0aWFsbHkgaW4KKyAgICAgICAgLy8gb25lIG9mIHRoZSBjYWxsZWUt
c2F2ZSByZWdpc3RlcnMgLSBidXQgc2luY2UgdGhlIHdhbnRlZAorICAgICAgICAvLyBHUFIgZm9y
IHRoZSBjYWxsZWUgaXMgYWx3YXlzIHJlZ1QwLCBpdCB3aWxsIGJlIHRoZQorICAgICAgICAvLyBm
aXJzdCBvbmUgdG8gYmUgZGlzcGxhY2VkLCBhbmQgd2Ugd29uJ3Qgc2VlIGl0IHdoZW4KKyAgICAg
ICAgLy8gaGFuZGxpbmcgYW55IG9mIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMuCisgICAgICAg
IC8vCisgICAgICAgIC8vIFRodXMsIHRoZSBvbmx5IHdheSB3ZSBjb3VsZCBldmVyIHJlYWNoIHRo
aXMgcGF0aCBpcyBpbgorICAgICAgICAvLyB0aGUgRlRMLCB3aGVuIHRoZXJlIGlzIHNvIG11Y2gg
cHJlc3N1cmUgdGhhdCB3ZQorICAgICAgICAvLyBhYnNvbHV0ZWx5IG5lZWQgdG8gbG9hZCB0aGUg
Y2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGludG8KKyAgICAgICAgLy8gZGlmZmVyZW50IEdQUnMgaW5p
dGlhbGx5IGJ1dCBub3QgZW5vdWdoIHByZXNzdXJlIHRvCisgICAgICAgIC8vIHRoZW4gaGF2ZSB0
byBzcGlsbCBhbGwgb2YgdGhlbS4gQW5kIGV2ZW4gaW4gdGhhdCBjYXNlLAorICAgICAgICAvLyBk
ZXBlbmRpbmcgb24gdGhlIG9yZGVyIGluIHdoaWNoIExMVk0gc2F2ZXMgdGhlCisgICAgICAgIC8v
IGNhbGxlZS1zYXZlcywgd2Ugd2lsbCBwcm9iYWJseSBzdGlsbCBiZSBzYWZlLiBBbnl3YXksCisg
ICAgICAgIC8vIHRoZSBjb3VwbGUgZXh0cmEgbW92ZSBpbnN0cnVjdGlvbnMgY29tcGFyZWQgdG8g
YW4KKyAgICAgICAgLy8gZWZmaWNpZW50IGN5Y2xlLWJhc2VkIGFsZ29yaXRobSBhcmUgbm90IGdv
aW5nIHRvIGh1cnQKKyAgICAgICAgLy8gdXMuCisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gZ2V0
RnJlZUdQUigpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
KiBNb3ZpbmcgIiwgd2FudGVkR1BSLCAiIGludG8gIiwgdGVtcEdQUiwgIlxuIik7CisgICAgICAg
IG1faml0Lm1vdmUod2FudGVkR1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgdXBkYXRlUmVjb3Zlcnko
KmN1cnJlbnQsCisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUih0ZW1wR1BSLCBjdXJy
ZW50LT5yZWNvdmVyeSgpLmRhdGFGb3JtYXQoKSkpOworICAgIH0KKyAgICBBU1NFUlQoIW1fcmVn
aXN0ZXJzW3dhbnRlZEdQUl0pOworCisgICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCku
aXNJbkdQUigpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygi
ICAgKiBNb3ZpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwgIiBpbnRvICIs
IHdhbnRlZEdQUiwgIlxuIik7CisgICAgICAgIG1faml0Lm1vdmUoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5ncHIoKSwgd2FudGVkR1BSKTsKKyAgICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVk
UmVjb3ZlcnksCisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjppbkdQUih3YW50ZWRHUFIsIGNh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkZQUigpKTsKKyAgICAg
ICAgaWYgKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZGF0YUZvcm1hdCgpID09IERhdGFGb3Jt
YXREb3VibGUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgd2lsbCBhdXRvbWF0aWNhbGx5IHBpY2sg
dGhlIHdhbnRlZCBHUFIKKyAgICAgICAgICAgIGVtaXRCb3goY2FjaGVkUmVjb3ZlcnkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgKiBNb3ZpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5mcHIoKSwg
IiBpbnRvICIsIHdhbnRlZEdQUiwgIlxuIik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91Ymxl
VG82NChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpLCB3YW50ZWRHUFIpOworICAgICAg
ICAgICAgdXBkYXRlUmVjb3ZlcnkoY2FjaGVkUmVjb3ZlcnksCisgICAgICAgICAgICAgICAgVmFs
dWVSZWNvdmVyeTo6aW5HUFIod2FudGVkR1BSLCBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmRh
dGFGb3JtYXQoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKG1fcmVnaXN0ZXJz
W3dhbnRlZEdQUl0gPT0gJmNhY2hlZFJlY292ZXJ5KTsKKyAgICBBU1NFUlQoY2FjaGVkUmVjb3Zl
cnkucmVjb3ZlcnkoKS5ncHIoKSA9PSB3YW50ZWRHUFIpOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKKworI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIFVTRShKU1ZBTFVFNjQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCBkZTM3OWU4YWQyMWJkMzUzNWRhYjY1ZGM0YTY3
OTJjYzFkOTBkYzU4Li4zNDJhYzhjMjdiNjNlNGY0ZmRkOWFjOTEyZGQ1NTFhY2Q5ODJlYzkxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
ZiBVU0UoSlNWQUxVRTY0KQogI2luY2x1ZGUgIkpJVC5oIgogCisjaW5jbHVkZSAiQ2FsbEZyYW1l
U2h1ZmZsZXIuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJKSVRJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgpAQCAtMTgxLDkgKzE4Miw2IEBAIHZvaWQgSklUOjpj
b21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IHVuc2lnbmVkIGNhCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQotICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0KICAgICBEYXRhTGFiZWxQdHIgYWRkcmVz
c09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBKdW1wIHNsb3dDYXNlID0gYnJhbmNoUHRyV2l0
aFBhdGNoKE5vdEVxdWFsLCByZWdUMCwgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjaywgVHJ1
c3RlZEltbVB0cigwKSk7CiAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOwpAQCAtMTk0LDcgKzE5
MiwyOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVzc09mTGlua2VkRnVuY3Rp
b25DaGVjazsKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxMaW5rSW5mbyA9IGluZm87CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgaWYgKG9wY29kZUlEID09
IG9wX3RhaWxfY2FsbCkgeworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0
YTsKKyAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KKyAgICAgICAgICAgIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdp
c3Rlcik7CisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOyArK2kpIHsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPQorICAgICAg
ICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjaygKKyAgICAgICAgICAg
ICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkgLSBpbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgICAgIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0K
KyAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0KKyAgICAgICAgICAgIFZhbHVlUmVjb3Zlcnk6
OmluR1BSKHJlZ1QwLCBEYXRhRm9ybWF0SlMpOworICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENh
bGxlZVNhdmVSZWdpc3RlcnMobV9jb2RlQmxvY2spOworICAgICAgICBpbmZvLT5zZXRGcmFtZVNo
dWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoKnRoaXMs
IHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgbV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoT3RoZXIgPSBlbWl0TmFrZWRUYWls
Q2FsbCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG9wY29kZUlEID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
ICAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwogICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZFRhaWxD
YWxsKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTIxOSw2ICsyMzgsOSBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlYwogCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCisgICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKKyAg
ICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworCiAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvKSwg
cmVnVDIpOwogCiAgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0Nh
bGxUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJNYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJNYXAuaAppbmRleCA3NDdlOGJkMjIzMDUzNjU3MzRiYjY0MTU3OTZkNTk4NzVlMjgwMzBkLi5l
ODJmOTk0ZjY3NzU5NjllOGRjNzJjZGJmNjcwNTZlMDc3MzdmZTU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyTWFwLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3Rlck1hcC5oCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUo
SklUKQogCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIlJlZy5oIgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZXBhdGNoLmNwcAppbmRleCBkMjFmY2QzZTNhMDA3MWRjODhlOWU4ODE4MmNlMDEw
MGU1YjE4M2MyLi43NGQ4MDM3NzZhZjhiYzk0ZTI2MTgwOTU1NDhjNzY1YjRhZjBlYzk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJBY2Nlc3NvckNhbGxKSVRTdHViUm91dGluZS5oIgogI2luY2x1ZGUgIkJpbmFyeVN3aXRj
aC5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNhbGxGcmFtZVNodWZm
bGVyLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0
aXZlSklULmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCkBAIC0xNzg3LDI2ICsxNzg4LDMyIEBA
IHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAKICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0IHNsb3dQYXRoOwogICAgIAotICAgIHB0cmRpZmZfdCBvZmZzZXRUb0ZyYW1lID0gLXNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKTsKLQotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBva0FyZ3VtZW50Q291bnQgPSBzdHViSml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCZWxvdywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKFJlZ2lzdGVyKSAqIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpICsgb2Zmc2V0VG9G
cmFtZSArIFBheWxvYWRPZmZzZXQpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxMDAwMDAw
MCkpOwotICAgICAgICBzdHViSml0LmFib3J0V2l0aFJlYXNvbihSZXBhdGNoSW5zYW5lQXJndW1l
bnRDb3VudCk7Ci0gICAgICAgIG9rQXJndW1lbnRDb3VudC5saW5rKCZzdHViSml0KTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsbEZyYW1lU2h1ZmZsZXI+IGZyYW1lU2h1ZmZsZXI7CisgICAgaWYg
KGNhbGxMaW5rSW5mby5mcmFtZVNodWZmbGVEYXRhKCkpIHsKKyAgICAgICAgQVNTRVJUKGNhbGxM
aW5rSW5mby5pc1RhaWxDYWxsKCkpOworICAgICAgICBmcmFtZVNodWZmbGVyID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsRnJhbWVTaHVmZmxlcj4oc3R1YkppdCwgKmNhbGxMaW5rSW5mby5mcmFtZVNo
dWZmbGVEYXRhKCkpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIC8vIFdlIHdvdWxk
IGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGNhbGxlZSBpcyBhIGNlbGwsIGFuZCB3ZSBj
YW4KKyAgICAgICAgLy8gdXNlIHRoZSBhZGRpdGlvbmFsIHJlZ2lzdGVyIHRoaXMgYnV5cyB1cy4K
KyAgICAgICAgZnJhbWVTaHVmZmxlci0+YXNzdW1lQ2FsbGVlSXNDZWxsKCk7CisjZW5kaWYKKyAg
ICAgICAgZnJhbWVTaHVmZmxlci0+bG9ja0dQUihjYWxsZWVHUFIpOwogICAgIH0KLSAgICAKLSAg
ICBHUFJSZWcgc2NyYXRjaCA9IEFzc2VtYmx5SGVscGVyczo6c2VsZWN0U2NyYXRjaEdQUihjYWxs
ZWVHUFIpOwogICAgIEdQUlJlZyBjb21wYXJpc29uVmFsdWVHUFI7CiAgICAgCiAgICAgaWYgKGlz
Q2xvc3VyZUNhbGwpIHsKLSAgICAgICAgLy8gVmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIGZ1bmN0aW9u
IGFuZCBzdGFzaCB0aGUgZXhlY3V0YWJsZSBpbiBzY3JhdGNoLgorICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUjsKKyAgICAgICAgaWYgKGZyYW1lU2h1ZmZsZXIpCisgICAgICAgICAgICBzY3JhdGNo
R1BSID0gZnJhbWVTaHVmZmxlci0+YWNxdWlyZUdQUigpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzY3JhdGNoR1BSID0gQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxl
ZUdQUik7CisgICAgICAgIC8vIFZlcmlmeSB0aGF0IHdlIGhhdmUgYSBmdW5jdGlvbiBhbmQgc3Rh
c2ggdGhlIGV4ZWN1dGFibGUgaW4gc2NyYXRjaEdQUi4KIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgICAgIC8vIFdlIGNhbiBzYWZlbHkgY2xvYmJlciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY2Fs
bGVlR1BSLiBXZSBjYW4ndCByZWx5IG9uIHRhZ01hc2tSZWdpc3RlcgotICAgICAgICAvLyBiZWlu
ZyBzZXQuIFNvIHdlIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgICAgICBzdHViSml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgc2NyYXRjaCk7Ci0gICAgICAg
IHNsb3dQYXRoLmFwcGVuZChzdHViSml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblpl
cm8sIGNhbGxlZUdQUiwgc2NyYXRjaCkpOworICAgICAgICAvLyBXZSBjYW4ndCByZWx5IG9uIHRh
Z01hc2tSZWdpc3RlciBiZWluZyBzZXQsIHNvIHdlIGRvIHRoaXMgdGhlIGhhcmQKKyAgICAgICAg
Ly8gd2F5LgorICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NChUYWdNYXNrKSwgc2NyYXRjaEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChzdHViSml0
LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIGNhbGxlZUdQUiwgc2NyYXRjaEdQ
UikpOwogI2Vsc2UKICAgICAgICAgLy8gV2Ugd291bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgdGhh
dCB0aGUgY2FsbGVlIGlzIGEgY2VsbC4KICNlbmRpZgpAQCAtMTgxOSw5ICsxODI2LDkgQEAgdm9p
ZCBsaW5rUG9seW1vcnBoaWNDYWxsKAogICAgIAogICAgICAgICBzdHViSml0LmxvYWRQdHIoCiAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZkV4ZWN1dGFibGUoKSksCi0gICAgICAgICAgICBzY3JhdGNoKTsKKyAgICAgICAgICAg
IHNjcmF0Y2hHUFIpOwogICAgICAgICAKLSAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2Ny
YXRjaDsKKyAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gc2NyYXRjaEdQUjsKICAgICB9IGVs
c2UKICAgICAgICAgY29tcGFyaXNvblZhbHVlR1BSID0gY2FsbGVlR1BSOwogICAgIApAQCAtMTg2
Myw4ICsxODcwLDEzIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAgICAgY2FzZVZh
bHVlc1tpXSA9IG5ld0Nhc2VWYWx1ZTsKICAgICB9CiAgICAgCi0gICAgR1BSUmVnIGZhc3RDb3Vu
dHNCYXNlR1BSID0KLSAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpzZWxlY3RTY3JhdGNoR1BSKGNh
bGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgR1BSUmVn
IGZhc3RDb3VudHNCYXNlR1BSOworICAgIGlmIChmcmFtZVNodWZmbGVyKQorICAgICAgICBmYXN0
Q291bnRzQmFzZUdQUiA9IGZyYW1lU2h1ZmZsZXItPmFjcXVpcmVHUFIoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgZmFzdENvdW50c0Jhc2VHUFIgPQorICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJz
OjpzZWxlY3RTY3JhdGNoR1BSKGNhbGxlZUdQUiwgY29tcGFyaXNvblZhbHVlR1BSLCBHUFJJbmZv
OjpyZWdUMyk7CisgICAgfQogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoZmFzdENvdW50cy5nZXQoKSksIGZhc3RDb3VudHNCYXNlR1BSKTsKICAgICAKICAgICBC
aW5hcnlTd2l0Y2ggYmluYXJ5U3dpdGNoKGNvbXBhcmlzb25WYWx1ZUdQUiwgY2FzZVZhbHVlcywg
QmluYXJ5U3dpdGNoOjpJbnRQdHIpOwpAQCAtMTg4NCw3ICsxODk2LDEwIEBAIHZvaWQgbGlua1Bv
bHltb3JwaGljQ2FsbCgKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwKICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoZmFzdENvdW50c0Jh
c2VHUFIsIGNhc2VJbmRleCAqIHNpemVvZih1aW50MzJfdCkpKTsKICAgICAgICAgfQotICAgICAg
ICBpZiAoY2FsbExpbmtJbmZvLmlzVGFpbENhbGwoKSkgeworICAgICAgICBpZiAoZnJhbWVTaHVm
ZmxlcikgeworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoc3R1YkppdCwgZnJhbWVTaHVm
Zmxlci0+c25hcHNob3QoKSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgICAgICBjYWxs
c1tjYXNlSW5kZXhdLmNhbGwgPSBzdHViSml0Lm5lYXJUYWlsQ2FsbCgpOworICAgICAgICB9IGVs
c2UgaWYgKGNhbGxMaW5rSW5mby5pc1RhaWxDYWxsKCkpIHsKICAgICAgICAgICAgIHN0dWJKaXQu
ZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgICAgICAgICAgc3R1YkppdC5wcmVwYXJlRm9y
VGFpbENhbGxTbG93KCk7CiAgICAgICAgICAgICBjYWxsc1tjYXNlSW5kZXhdLmNhbGwgPSBzdHVi
Sml0Lm5lYXJUYWlsQ2FsbCgpOwpAQCAtMTg5NiwxMCArMTkxMSwyMyBAQCB2b2lkIGxpbmtQb2x5
bW9ycGhpY0NhbGwoCiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmc3R1YkppdCk7CiAgICAgYmlu
YXJ5U3dpdGNoLmZhbGxUaHJvdWdoKCkubGluaygmc3R1YkppdCk7Ci0gICAgc3R1YkppdC5tb3Zl
KGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOworCisgICAgaWYgKGZyYW1lU2h1ZmZsZXIpIHsK
KyAgICAgICAgZnJhbWVTaHVmZmxlci0+cmVsZWFzZUdQUihjYWxsZWVHUFIpOworICAgICAgICBm
cmFtZVNodWZmbGVyLT5yZWxlYXNlR1BSKGNvbXBhcmlzb25WYWx1ZUdQUik7CisgICAgICAgIGZy
YW1lU2h1ZmZsZXItPnJlbGVhc2VHUFIoZmFzdENvdW50c0Jhc2VHUFIpOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgIGZyYW1lU2h1ZmZsZXIt
PnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZv
OjpyZWdUMCkpOworI2Vsc2UKKyAgICAgICAgZnJhbWVTaHVmZmxlci0+c2V0Q2FsbGVlSlNWYWx1
ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKICNlbmRpZgorICAgICAgICBmcmFt
ZVNodWZmbGVyLT5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
dHViSml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKKyAgICAgICAgc3R1YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCBHUFJJbmZvOjpyZWdUMSk7CisjZW5kaWYKKyAgICB9CiAgICAgc3R1
YkppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigmY2FsbExpbmtJbmZvKSwgR1BS
SW5mbzo6cmVnVDIpOwogICAgIHN0dWJKaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
LCBHUFJJbmZvOjpyZWdUNCk7CiAgICAgCg==
</data>
<flag name="review"
          id="285003"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>