<?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>210944</bug_id>
          
          <creation_ts>2020-04-23 16:40:58 -0700</creation_ts>
          <short_desc>Reduce use of WebPageProxy::VoidCallback</short_desc>
          <delta_ts>2020-04-27 10:14:14 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1645008</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-23 16:40:58 -0700</bug_when>
    <thetext>Reduce use of WebPageProxy::VoidCallback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645013</commentid>
    <comment_count>1</comment_count>
      <attachid>397401</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-23 16:51:16 -0700</bug_when>
    <thetext>Created attachment 397401
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645286</commentid>
    <comment_count>2</comment_count>
      <attachid>397401</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-24 11:17:19 -0700</bug_when>
    <thetext>Comment on attachment 397401
Patch

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

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:2176
&gt; +    sendWithAsyncReply(Messages::WebPage::SetInitialFocus(forward, isKeyboardEventValid, keyboardEvent), [callbackFunction = WTFMove(callbackFunction), backgroundActivity = m_process-&gt;throttler().backgroundActivity(&quot;WebPageProxy::setInitialFocus&quot;_s)] () mutable {

Why does this need to be &quot;mutable&quot;? Same question about the various other similar cases below.

&gt; Source/WebKit/UIProcess/WebPageProxy.h:782
&gt; +    void focusNextFocusedElement(bool isForward, CompletionHandler&lt;void()&gt;&amp;&amp; = []() { });

I believe our coding style is to omit the () here. There are 10 or more other cases of this in this patch. I suggest removing them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645371</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-24 13:49:06 -0700</bug_when>
    <thetext>Calling a CompletionHandler deletes its callable immediately after calling, which requires it to be non-const.
Will remove unnecessary ().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645373</commentid>
    <comment_count>4</comment_count>
      <attachid>397503</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-24 13:56:19 -0700</bug_when>
    <thetext>Created attachment 397503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645625</commentid>
    <comment_count>5</comment_count>
      <attachid>397503</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-25 11:23:14 -0700</bug_when>
    <thetext>Comment on attachment 397503
Patch

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

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:2314
&gt; +    sendWithAsyncReply(Messages::WebPage::ExecuteEditCommandWithCallback(commandName, argument), [callbackFunction = WTFMove(callbackFunction), backgroundActivity = m_process-&gt;throttler().backgroundActivity(&quot;WebPageProxy::executeEditCommand&quot;_s)] () mutable {

One last case of () that you didn&apos;t delete yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646074</commentid>
    <comment_count>6</comment_count>
      <attachid>397503</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2020-04-27 10:08:38 -0700</bug_when>
    <thetext>Comment on attachment 397503
Patch

That is unfortunately necessary because of the mutable in C++ until http://wg21.link/P1102 is accepted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646079</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-27 10:13:22 -0700</bug_when>
    <thetext>Committed r260764: &lt;https://trac.webkit.org/changeset/260764&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 397503.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646080</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-27 10:14:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/62457381&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397401</attachid>
            <date>2020-04-23 16:51:16 -0700</date>
            <delta_ts>2020-04-24 13:56:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210944-20200423165115.patch</filename>
            <type>text/plain</type>
            <size>40530</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA2MDQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA0LTIzICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIHVzZSBv
ZiBXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXNlIHNlbmRXaXRoQXN5bmNSZXBseSBhbmQgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiBpbnN0ZWFkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZXhlY3V0ZUVkaXRDb21tYW5k
OmFyZ3VtZW50OmNvbXBsZXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZp
ZXdJbXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RSZXNw
b25kZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9jdXNOZXh0
Rm9jdXNlZEVsZW1lbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHBhc3RlV2l0aENvbXBsZXRp
b25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1vdmVCeU9mZnNldDpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2VsZWN0UG9zaXRpb25BdFBvaW50OnN0YXlpbmdX
aXRoaW5Gb2N1c2VkRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnk6aW5EaXJlY3Rpb246ZnJvbVBvaW50
OmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1vdmVTZWxl
Y3Rpb25BdEJvdW5kYXJ5OmluRGlyZWN0aW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAg
ICAoLVtXS0NvbnRlbnRWaWV3IHNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHk6YXRQb2ludDpjb21w
bGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYmVjb21lRmlyc3RS
ZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDpjb21wbGV0aW9uSGFuZGxlcjpdKToK
KyAgICAgICAgKC1bV0tDb250ZW50VmlldyBhY2Nlc3NvcnlUYWI6XSk6CisgICAgICAgICgtW1dL
Q29udGVudFZpZXcgZXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrOl0pOgorICAgICAgICAq
IFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0aW9uQXRCb3VuZGFy
eVdpdGhEaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbGVjdFBv
c2l0aW9uQXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bW92ZVNlbGVj
dGlvbkJ5T2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpmb2N1c05leHRG
b2N1c2VkRWxlbWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRJbml0aWFsRm9jdXMpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjptb3ZlU2VsZWN0
aW9uQnlPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0
UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRh
cnlXaXRoRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6bW92ZVNlbGVjdGlv
bkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2Vs
ZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Ojpmb2N1c05leHRGb2N1c2VkRWxlbWVudCk6CisKIDIwMjAtMDQtMjMgIEJyZW50IEZ1bGdoYW0g
IDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgImtlcm4ub3N2ZXJzaW9uIiBz
eXNjdGwgcmVhZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CShyZXZpc2lvbiAyNjA1NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY2LDE1ICsyMTY2LDE2IEBAIEludFNpemUgV2Vi
UGFnZVByb3h5Ojp2aWV3U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2VDbGllbnQoKS52aWV3
U2l6ZSgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9y
d2FyZCwgYm9vbCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYg
a2V5Ym9hcmRFdmVudCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyhi
b29sIGZvcndhcmQsIGJvb2wgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGNvbnN0IFdlYktleWJvYXJk
RXZlbnQmIGtleWJvYXJkRXZlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFj
a0Z1bmN0aW9uKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewotICAgICAgICBj
YWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQp
OworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1
bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBh
Z2VQcm94eTo6c2V0SW5pdGlhbEZvY3VzIl9zKSk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6U2V0SW5pdGlhbEZvY3VzKGZvcndhcmQsIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCBrZXlib2Fy
ZEV2ZW50LCBjYWxsYmFja0lEKSk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZXRJbml0aWFsRm9jdXMoZm9yd2FyZCwgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGtl
eWJvYXJkRXZlbnQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
biksIGJhY2tncm91bmRBY3Rpdml0eSA9IG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3Vu
ZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyJfcyldICgpIG11dGFibGUg
eworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZVByb3h5OjpjbGVhclNlbGVjdGlvbigpCkBAIC0yMzAwLDE4ICsyMzAxLDE5IEBAIHN0YXRpYyBi
b29sIGlzUGFzdGVDb21tYW5kTmFtZShjb25zdCBTdHIKICAgICByZXR1cm4gcGFzdGVDb21tYW5k
TmFtZXMtPmNvbnRhaW5zKGNvbW1hbmROYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmV4
ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcm
IGFyZ3VtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlRWRpdENvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFoYXNSdW5u
aW5nUHJvY2VzcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpF
cnJvcjo6VW5rbm93bik7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChpc1Bhc3RlQ29tbWFuZE5hbWUoY29tbWFuZE5hbWUpKQog
ICAgICAgICB3aWxsUGVyZm9ybVBhc3RlQ29tbWFuZCgpOwogCi0gICAgYXV0byBjYWxsYmFja0lE
ID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+
dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0
Q29tbWFuZCJfcykpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVFZGl0Q29t
bWFuZFdpdGhDYWxsYmFjayhjb21tYW5kTmFtZSwgYXJndW1lbnQsIGNhbGxiYWNrSUQpKTsKKyAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVFZGl0Q29tbWFu
ZFdpdGhDYWxsYmFjayhjb21tYW5kTmFtZSwgYXJndW1lbnQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9
IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGJhY2tncm91bmRBY3Rpdml0eSA9IG1fcHJvY2Vz
cy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmV4ZWN1dGVF
ZGl0Q29tbWFuZCJfcyldICgpIG11dGFibGUgeworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7
CisgICAgfSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5k
KGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjYwNTQyKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0Miw3ICs2NDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aWV3V2lsbFN0YXJ0TGl2ZVJl
c2l6ZSgpOwogICAgIHZvaWQgdmlld1dpbGxFbmRMaXZlUmVzaXplKCk7CiAKLSAgICB2b2lkIHNl
dEluaXRpYWxGb2N1cyhib29sIGZvcndhcmQsIGJvb2wgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGNv
bnN0IFdlYktleWJvYXJkRXZlbnQmLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmKTsKKyAgICB2b2lkIHNldEluaXRpYWxGb2N1cyhib29sIGZvcndhcmQsIGJvb2wg
aXNLZXlib2FyZEV2ZW50VmFsaWQsIGNvbnN0IFdlYktleWJvYXJkRXZlbnQmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIAogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICAg
ICB2b2lkIHJlc3RvcmVTZWxlY3Rpb25JbkZvY3VzZWRFZGl0YWJsZUVsZW1lbnQoKTsKQEAgLTY3
NSw2ICs2NzUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNlbGVjdEFsbCgpOwogICAgIHZvaWQg
ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmlu
ZyYgYXJndW1lbnQgPSBTdHJpbmcoKSk7CisgICAgdm9pZCBleGVjdXRlRWRpdENvbW1hbmQoY29u
c3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHZhbGlkYXRlQ29tbWFuZChjb25zdCBTdHJp
bmcmIGNvbW1hbmROYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGJvb2ws
IGludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKIAogICAgIGNvbnN0IEVkaXRvclN0
YXRlJiBlZGl0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yU3RhdGU7IH0KQEAgLTcw
Miw4ICs3MDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhY3RpdmF0ZU1lZGlhU3RyZWFtQ2FwdHVy
ZUluUGFnZSgpOwogICAgIGJvb2wgaXNNZWRpYVN0cmVhbUNhcHR1cmVNdXRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fbXV0ZWRTdGF0ZSAmIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RyZWFt
Q2FwdHVyZUlzTXV0ZWQ7IH0KICAgICB2b2lkIHNldE1lZGlhU3RyZWFtQ2FwdHVyZU11dGVkKGJv
b2wpOwotICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJik7Ci0gICAgICAgIAorCiAgICAgdm9pZCByZXF1ZXN0Rm9udEF0dHJpYnV0
ZXNBdFNlbGVjdGlvblN0YXJ0KEZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6Rm9udEF0dHJp
YnV0ZXMmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBmb250QXR0cmlidXRl
c0NhbGxiYWNrKGNvbnN0IFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVzJiwgQ2FsbGJhY2tJRCk7CiAK
QEAgLTc1NywxMSArNzU3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3Vj
aGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50
IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90
LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgZXh0ZW5kU2Vs
ZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSk7CiAgICAgdm9pZCBzZWxlY3RXb3JkQmFj
a3dhcmQoKTsKLSAgICB2b2lkIG1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwg
V1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCBz
ZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwg
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVs
ZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAg
dm9pZCBzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIGJvb2wg
aXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxi
YWNrQmFzZTo6RXJyb3IpPiYmKTsKLSAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdp
dGhEaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxh
cml0eSwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdXaXRo
Rm9jdXNlZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4m
Jik7Ci0gICAgdm9pZCBtb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29y
ZTo6VGV4dEdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24sIFdURjo6RnVu
Y3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBtb3ZlU2VsZWN0
aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7
CisgICAgdm9pZCBzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdX
aXRoRm9jdXNlZEVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9p
ZCBzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIGJvb2wgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
KTsKKyAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgV2ViQ29yZTo6U2Vs
ZWN0aW9uRGlyZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBtb3ZlU2VsZWN0aW9uQXRCb3Vu
ZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxl
Y3Rpb25EaXJlY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBi
ZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiwgV1RG
OjpGdW5jdGlvbjx2b2lkICh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAg
IHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFJlc3BlY3RTZWxlY3Rp
b25BbmNob3IsIFdURjo6RnVuY3Rpb248dm9pZCh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYpOwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRh
cnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgYm9v
bCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQodWlu
dDY0X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKQEAgLTc3OSw3ICs3NzksNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzdG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25P
bkVsZW1lbnQodWludDMyX3QgYWN0aW9uKTsKICAgICB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShj
b25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIHVpbnQ2NF90IGltYWdlU2l6
ZSk7Ci0gICAgdm9pZCBmb2N1c05leHRGb2N1c2VkRWxlbWVudChib29sIGlzRm9yd2FyZCwgV1RG
OjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiA9IFtdIChhdXRvKSB7IH0p
OworICAgIHZvaWQgZm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoYm9vbCBpc0ZvcndhcmQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdKCkgeyB9KTsKICAgICB2b2lkIHNldEZvY3VzZWRF
bGVtZW50VmFsdWUoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudFZh
bHVlQXNOdW1iZXIoZG91YmxlKTsKICAgICB2b2lkIHNldEZvY3VzZWRFbGVtZW50U2VsZWN0ZWRJ
bmRleCh1aW50MzJfdCBpbmRleCwgYm9vbCBhbGxvd011bHRpcGxlU2VsZWN0aW9uID0gZmFsc2Up
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3
Lm1tCShyZXZpc2lvbiAyNjA1NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjI2LDkgKzE2MjYsOSBAQCAtICh2
b2lkKV9zZXRFZGl0YWJsZTooQk9PTCllZGl0YWJsZQogCiAtICh2b2lkKV9leGVjdXRlRWRpdENv
bW1hbmQ6KE5TU3RyaW5nICopY29tbWFuZCBhcmd1bWVudDooTlNTdHJpbmcgKilhcmd1bWVudCBj
b21wbGV0aW9uOih2b2lkICheKShCT09MKSljb21wbGV0aW9uCiB7Ci0gICAgX3BhZ2UtPmV4ZWN1
dGVFZGl0Q29tbWFuZChjb21tYW5kLCBhcmd1bWVudCwgW2NhcHR1cmVkQ29tcGxldGlvbkJsb2Nr
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3Ig
ZXJyb3IpIHsKKyAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmQsIGFyZ3VtZW50
LCBbY2FwdHVyZWRDb21wbGV0aW9uQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbildICgp
IHsKICAgICAgICAgaWYgKGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKQotICAgICAgICAgICAgY2Fw
dHVyZWRDb21wbGV0aW9uQmxvY2soZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9y
OjpOb25lKTsKKyAgICAgICAgICAgIGNhcHR1cmVkQ29tcGxldGlvbkJsb2NrKFlFUyk7CiAgICAg
fSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBs
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCShyZXZpc2lvbiAyNjA1NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2Nv
YS9XZWJWaWV3SW1wbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMTU4MSw3ICsxNTgxLDcgQEAgYm9v
bCBXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RSZXNwb25kZXIoKQogICAgICAgICBOU0V2ZW50ICpr
ZXlib2FyZEV2ZW50ID0gbmlsOwogICAgICAgICBpZiAoW2V2ZW50IHR5cGVdID09IE5TRXZlbnRU
eXBlS2V5RG93biB8fCBbZXZlbnQgdHlwZV0gPT0gTlNFdmVudFR5cGVLZXlVcCkKICAgICAgICAg
ICAgIGtleWJvYXJkRXZlbnQgPSBldmVudDsKLSAgICAgICAgbV9wYWdlLT5zZXRJbml0aWFsRm9j
dXMoZGlyZWN0aW9uID09IE5TU2VsZWN0aW5nTmV4dCwga2V5Ym9hcmRFdmVudCAhPSBuaWwsIE5h
dGl2ZVdlYktleWJvYXJkRXZlbnQoa2V5Ym9hcmRFdmVudCwgZmFsc2UsIGZhbHNlLCB7IH0pLCBb
XShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsgfSk7CisgICAgICAgIG1fcGFnZS0+c2V0
SW5pdGlhbEZvY3VzKGRpcmVjdGlvbiA9PSBOU1NlbGVjdGluZ05leHQsIGtleWJvYXJkRXZlbnQg
IT0gbmlsLCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQsIGZhbHNlLCBmYWxz
ZSwgeyB9KSwgW10oKSB7IH0pOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQkocmV2aXNpb24gMjYwNTQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtMjgzMiw3
ICsyODMyLDcgQEAgLSAodm9pZClzZXRVcFRleHRTZWxlY3Rpb25Bc3Npc3RhbnQKIAogLSAodm9p
ZClwYXN0ZVdpdGhDb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikodm9pZCkpY29tcGxldGlvbkhh
bmRsZXIKIHsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKCJQYXN0ZSJfcywgeyB9LCBb
Y29tcGxldGlvbiA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChhdXRvKSB7Cisg
ICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZCgiUGFzdGUiX3MsIHsgfSwgW2NvbXBsZXRpb24g
PSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoKSB7CiAgICAgICAgIGlmIChjb21w
bGV0aW9uKQogICAgICAgICAgICAgY29tcGxldGlvbigpOwogICAgIH0pOwpAQCAtMzkyMCw3ICsz
OTIwLDcgQEAgLSAodm9pZCltb3ZlQnlPZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQKICAgICAKICAg
ICBbc2VsZiBiZWdpblNlbGVjdGlvbkNoYW5nZV07CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZp
ZXc+IHZpZXcgPSBzZWxmOwotICAgIF9wYWdlLT5tb3ZlU2VsZWN0aW9uQnlPZmZzZXQob2Zmc2V0
LCBbdmlld10oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgX3BhZ2UtPm1vdmVT
ZWxlY3Rpb25CeU9mZnNldChvZmZzZXQsIFt2aWV3XSgpIHsKICAgICAgICAgW3ZpZXcgZW5kU2Vs
ZWN0aW9uQ2hhbmdlXTsKICAgICB9KTsKIH0KQEAgLTQwMTEsNyArNDAxMSw3IEBAIC0gKHZvaWQp
X3NlbGVjdFBvc2l0aW9uQXRQb2ludDooQ0dQb2ludCkKICAgICBVSVdLU2VsZWN0aW9uQ29tcGxl
dGlvbkhhbmRsZXIgc2VsZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsK
ICAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gdmlldyA9IHNlbGY7CiAKLSAgICBfcGFnZS0+
c2VsZWN0UG9zaXRpb25BdFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgc3RheWluZ1dp
dGhpbkZvY3VzZWRFbGVtZW50LCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0oV2ViS2l0OjpDYWxs
YmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgX3BhZ2UtPnNlbGVjdFBvc2l0aW9uQXRQb2lu
dChXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIHN0YXlpbmdXaXRoaW5Gb2N1c2VkRWxlbWVudCwg
W3ZpZXcsIHNlbGVjdGlvbkhhbmRsZXJdKCkgewogICAgICAgICBzZWxlY3Rpb25IYW5kbGVyKCk7
CiAgICAgICAgIHZpZXctPl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKICAgICAgICAg
W3NlbGVjdGlvbkhhbmRsZXIgcmVsZWFzZV07CkBAIC00MDI0LDcgKzQwMjQsNyBAQCAtICh2b2lk
KXNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeTooVUlUZXh0CiAgICAgVUlXS1NlbGVjdGlvbkNvbXBs
ZXRpb25IYW5kbGVyIHNlbGVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07
CiAgICAgUmV0YWluUHRyPFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwogICAgIAotICAgIF9w
YWdlLT5zZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6OkludFBv
aW50KHBvaW50KSwgdG9XS1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHRvV0tTZWxlY3Rp
b25EaXJlY3Rpb24oZGlyZWN0aW9uKSwgc2VsZi5faGFzRm9jdXNlZEVsZW1lbnQsIFt2aWV3LCBz
ZWxlY3Rpb25IYW5kbGVyXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAg
ICBfcGFnZS0+c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihXZWJDb3JlOjpJ
bnRQb2ludChwb2ludCksIHRvV0tUZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1dLU2Vs
ZWN0aW9uRGlyZWN0aW9uKGRpcmVjdGlvbiksIHNlbGYuX2hhc0ZvY3VzZWRFbGVtZW50LCBbdmll
dywgc2VsZWN0aW9uSGFuZGxlcl0oKSB7CiAgICAgICAgIHNlbGVjdGlvbkhhbmRsZXIoKTsKICAg
ICAgICAgdmlldy0+X3VzaW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IE5POwogICAgICAgICBbc2Vs
ZWN0aW9uSGFuZGxlciByZWxlYXNlXTsKQEAgLTQwMzcsNyArNDAzNyw3IEBAIC0gKHZvaWQpbW92
ZVNlbGVjdGlvbkF0Qm91bmRhcnk6KFVJVGV4dEcKICAgICBVSVdLU2VsZWN0aW9uQ29tcGxldGlv
bkhhbmRsZXIgc2VsZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKICAg
ICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gdmlldyA9IHNlbGY7CiAgICAgCi0gICAgX3BhZ2Ut
Pm1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbih0b1dLVGV4dEdyYW51bGFyaXR5
KGdyYW51bGFyaXR5KSwgdG9XS1NlbGVjdGlvbkRpcmVjdGlvbihkaXJlY3Rpb24pLCBbdmlldywg
c2VsZWN0aW9uSGFuZGxlcl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7Cisg
ICAgX3BhZ2UtPm1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbih0b1dLVGV4dEdy
YW51bGFyaXR5KGdyYW51bGFyaXR5KSwgdG9XS1NlbGVjdGlvbkRpcmVjdGlvbihkaXJlY3Rpb24p
LCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0oKSB7CiAgICAgICAgIHNlbGVjdGlvbkhhbmRsZXIo
KTsKICAgICAgICAgdmlldy0+X3VzaW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IE5POwogICAgICAg
ICBbc2VsZWN0aW9uSGFuZGxlciByZWxlYXNlXTsKQEAgLTQwNTEsNyArNDA1MSw3IEBAIC0gKHZv
aWQpc2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eTooVUlUZXgKICAgICBVSVdLU2VsZWN0aW9uQ29t
cGxldGlvbkhhbmRsZXIgc2VsZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5
XTsKICAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gdmlldyA9IHNlbGY7CiAKLSAgICBfcGFn
ZS0+c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQocG9p
bnQpLCB0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwgc2VsZi5faGFzRm9jdXNlZEVs
ZW1lbnQsIFt2aWV3LCBzZWxlY3Rpb25IYW5kbGVyXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJy
b3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQo
V2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCB0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5
KSwgc2VsZi5faGFzRm9jdXNlZEVsZW1lbnQsIFt2aWV3LCBzZWxlY3Rpb25IYW5kbGVyXSgpIHsK
ICAgICAgICAgc2VsZWN0aW9uSGFuZGxlcigpOwogICAgICAgICB2aWV3LT5fdXNpbmdHZXN0dXJl
Rm9yU2VsZWN0aW9uID0gTk87CiAgICAgICAgIC0tdmlldy0+X3N1cHByZXNzTm9uRWRpdGFibGVT
aW5nbGVUYXBUZXh0SW50ZXJhY3Rpb25Db3VudDsKQEAgLTQyNzIsNyArNDI3Miw3IEBAIC0gKHZv
aWQpX3ByZXZpb3VzQWNjZXNzb3J5VGFiRm9yV2ViVmlldzoKIC0gKHZvaWQpX2JlY29tZUZpcnN0
UmVzcG9uZGVyV2l0aFNlbGVjdGlvbk1vdmluZ0ZvcndhcmQ6KEJPT0wpc2VsZWN0aW5nRm9yd2Fy
ZCBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoQk9PTCBkaWRCZWNvbWVGaXJzdFJlc3BvbmRl
cikpY29tcGxldGlvbkhhbmRsZXIKIHsKICAgICBjb25zdGV4cHIgYm9vbCBpc0tleWJvYXJkRXZl
bnRWYWxpZCA9IGZhbHNlOwotICAgIF9wYWdlLT5zZXRJbml0aWFsRm9jdXMoc2VsZWN0aW5nRm9y
d2FyZCwgaXNLZXlib2FyZEV2ZW50VmFsaWQsIHsgfSwgW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5Q
dHIoc2VsZiksIGNvbXBsZXRpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5k
bGVyKV0gKGF1dG8pIHsKKyAgICBfcGFnZS0+c2V0SW5pdGlhbEZvY3VzKHNlbGVjdGluZ0Zvcndh
cmQsIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCB7IH0sIFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRy
KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildICgpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoW3Byb3RlY3RlZFNlbGYgYmVjb21l
Rmlyc3RSZXNwb25kZXJdKTsKICAgICB9KTsKIH0KQEAgLTQzMzYsNyArNDMzNiw3IEBAIC0gKHZv
aWQpYWNjZXNzb3J5VGFiOihCT09MKWlzTmV4dAogCiAgICAgX2lzQ2hhbmdpbmdGb2N1c1VzaW5n
QWNjZXNzb3J5VGFiID0gWUVTOwogICAgIFtzZWxmIGJlZ2luU2VsZWN0aW9uQ2hhbmdlXTsKLSAg
ICBfcGFnZS0+Zm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoaXNOZXh0LCBbcHJvdGVjdGVkU2VsZiA9
IHJldGFpblB0cihzZWxmKV0gKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcikgeworICAgIF9w
YWdlLT5mb2N1c05leHRGb2N1c2VkRWxlbWVudChpc05leHQsIFtwcm90ZWN0ZWRTZWxmID0gcmV0
YWluUHRyKHNlbGYpXSAoKSB7CiAgICAgICAgIFtwcm90ZWN0ZWRTZWxmIGVuZFNlbGVjdGlvbkNo
YW5nZV07CiAgICAgICAgIFtwcm90ZWN0ZWRTZWxmIHJlbG9hZElucHV0Vmlld3NdOwogICAgICAg
ICBwcm90ZWN0ZWRTZWxmLT5faXNDaGFuZ2luZ0ZvY3VzVXNpbmdBY2Nlc3NvcnlUYWIgPSBOTzsK
QEAgLTU0MDcsNyArNTQwNyw3IEBAIC0gKHZvaWQpZXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxi
YWNrOigKICAgICAvLyBvciBub3QgdG8ga25vdyB3aGV0aGVyIHRvIHRlbGwgV2ViS2l0IHRvIHRy
ZWF0IHRoaXMgY29tbWFuZCBhcyB1c2VyIGluaXRpYXRlZCBvciBub3QuCiAgICAgW3NlbGYgYmVn
aW5TZWxlY3Rpb25DaGFuZ2VdOwogICAgIFJldGFpblB0cjxXS0NvbnRlbnRWaWV3PiB2aWV3ID0g
c2VsZjsKLSAgICBfcGFnZS0+ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbW1hbmROYW1lLCB7IH0sIFt2
aWV3XShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICBfcGFnZS0+ZXhlY3V0ZUVk
aXRDb21tYW5kKGNvbW1hbmROYW1lLCB7IH0sIFt2aWV3XSAoKSB7CiAgICAgICAgIFt2aWV3IGVu
ZFNlbGVjdGlvbkNoYW5nZV07CiAgICAgfSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDI2MDU0MikKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTUwNSw0OCArNTA1LDUyIEBAIGJvb2wgV2ViUGFnZVByb3h5OjphcHBseUF1dG9jb3Jy
ZWN0aW9uKGMKICAgICByZXR1cm4gYXV0b2NvcnJlY3Rpb25BcHBsaWVkOwogfQogCi12b2lkIFdl
YlBhZ2VQcm94eTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwg
Ym9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQo
Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGlz
SW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewot
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOwor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQ
YWdlUHJveHk6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50Il9zKSk7Ci0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5
QXRQb2ludChwb2ludCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGdyYW51bGFyaXR5KSwgaXNJbnRl
cmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAg
ICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFRleHRXaXRoR3Jh
bnVsYXJpdHlBdFBvaW50KHBvaW50LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ3JhbnVsYXJpdHkp
LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBX
VEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBiYWNrZ3JvdW5kQWN0aXZpdHkgPSBtX3Byb2Nlc3Mt
PnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpzZWxlY3RUZXh0
V2l0aEdyYW51bGFyaXR5QXRQb2ludCJfcyldICgpIG11dGFibGUgeworICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RQb3Np
dGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50
LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFdlYkNvcmU6OlNlbGVjdGlv
bkRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVu
dCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVu
Y3Rpb24pCit2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERp
cmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkgewotICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6OlVu
a25vd24pOworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5KCJXZWJQYWdlUHJveHk6OnNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24i
X3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFBvc2l0
aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24ocG9pbnQsIHN0YXRpY19jYXN0PHVpbnQzMl90Pihn
cmFudWxhcml0eSksIHN0YXRpY19jYXN0PHVpbnQzMl90PihkaXJlY3Rpb24pLCBpc0ludGVyYWN0
aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0UG9zaXRpb25BdEJvdW5k
YXJ5V2l0aERpcmVjdGlvbihwb2ludCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGdyYW51bGFyaXR5
KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpcmVjdGlvbiksIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlv
biksIGJhY2tncm91bmRBY3Rpdml0eSA9IG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3Vu
ZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OnNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJl
Y3Rpb24iX3MpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOworICAg
IH0pOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRo
RGlyZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgV2ViQ29yZTo6
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNr
QmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2b2lkIFdlYlBhZ2VQcm94eTo6bW92
ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFo
YXNSdW5uaW5nUHJvY2VzcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tC
YXNlOjpFcnJvcjo6VW5rbm93bik7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNr
cy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5i
YWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlX
aXRoRGlyZWN0aW9uIl9zKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
OjpNb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpcmVjdGlvbiksIGNhbGxi
YWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJQYWdlOjpNb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGRpcmVjdGlvbikp
LCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGJhY2tncm91
bmRBY3Rpdml0eSA9IG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJX
ZWJQYWdlUHJveHk6Om1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbiJfcyldICgp
IG11dGFibGUgeworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CisgICAgfSk7CiB9CiAgICAg
Ci12b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50IHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdU
Rjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9u
KQordm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikKIHsKICAgICBpZiAo
IWhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFj
a0Jhc2U6OkVycm9yOjpVbmtub3duKTsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJh
Y2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigp
LmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQi
X3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNlbGVjdFBvc2l0
aW9uQXRQb2ludChwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgY2FsbGJh
Y2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6Oldl
YlBhZ2U6OlNlbGVjdFBvc2l0aW9uQXRQb2ludChwb2ludCwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1
c2VkRWxlbWVudCksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9u
KSwgYmFja2dyb3VuZEFjdGl2aXR5ID0gbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5k
QWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6c2VsZWN0UG9zaXRpb25BdFBvaW50Il9zKV0gKCkgbXV0
YWJsZSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKKyAgICB9KTsKIH0KIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmJlZ2luU2VsZWN0aW9uSW5EaXJlY3Rpb24oV2ViQ29yZTo6U2VsZWN0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiwgV1RGOjpGdW5jdGlvbjx2b2lkICh1aW50NjRfdCwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKQEAgLTc5NSwxNSArNzk5LDE2IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpjYW5jZWxBdXRvc2Nyb2xsKCkKICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkNhbmNlbEF1dG9zY3JvbGwoKSwgbV93ZWJQYWdlSUQpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zm
c2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNr
RnVuY3Rpb24pCit2b2lkIFdlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMy
X3Qgb2Zmc2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2tGdW5jdGlvbikK
IHsKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKLSAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKKyAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGF1dG8gY2FsbGJhY2tJ
RCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBtX3Byb2Nlc3Mt
PnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0
aW9uQnlPZmZzZXQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6
Ok1vdmVTZWxlY3Rpb25CeU9mZnNldChvZmZzZXQsIGNhbGxiYWNrSUQpLCBtX3dlYlBhZ2VJRCk7
CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQYWdlOjpNb3ZlU2VsZWN0aW9u
QnlPZmZzZXQob2Zmc2V0KSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVu
Y3Rpb24pLCBiYWNrZ3JvdW5kQWN0aXZpdHkgPSBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tn
cm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0aW9uQnlPZmZzZXQiX3MpXSAo
KSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbigpOworICAgIH0pOwogfQogCiB2
b2lkIFdlYlBhZ2VQcm94eTo6aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgRWRpdG9yU3RhdGUmIHN0
YXRlLCBib29sIGlzQ2hhckV2ZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQpAQCAtMTA1MCwxNSArMTA1NSwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94
eTo6ZGlzYWJsZUluc3BlY3Rvck5vZGVTCiAgICAgcGFnZUNsaWVudCgpLmRpc2FibGVJbnNwZWN0
b3JOb2RlU2VhcmNoKCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojpmb2N1c05leHRGb2N1c2Vk
RWxlbWVudChib29sIGlzRm9yd2FyZCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2b2lkIFdlYlBhZ2VQcm94eTo6Zm9jdXNOZXh0
Rm9jdXNlZEVsZW1lbnQoYm9vbCBpc0ZvcndhcmQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4m
JiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewot
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOwor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
Ci0gICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tG
dW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQ
YWdlUHJveHk6OmZvY3VzTmV4dEZvY3VzZWRFbGVtZW50Il9zKSk7Ci0gICAgcHJvY2VzcygpLnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OkZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGlzRm9yd2FyZCwg
Y2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2Fn
ZXM6OldlYlBhZ2U6OkZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGlzRm9yd2FyZCksIFtjYWxsYmFj
a0Z1bmN0aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYmFja2dyb3VuZEFjdGl2aXR5
ID0gbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94
eTo6Zm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQiX3MpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgY2Fs
bGJhY2tGdW5jdGlvbigpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0Rm9j
dXNlZEVsZW1lbnRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHJldmlzaW9uIDI2MDU0MikKKysr
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTIwLDEwICsxMTIwLDEwIEBAIHZvaWQgV2ViUGFnZTo6Y2hhbmdlRm9udChXZWJD
b3JlOjpGb250Q2gKICAgICAgICAgZnJhbWUuZWRpdG9yKCkuYXBwbHlTdHlsZVRvU2VsZWN0aW9u
KGNoYW5nZXMuY3JlYXRlRWRpdGluZ1N0eWxlKCksIEVkaXRBY3Rpb246OlNldEZvbnQsIEVkaXRv
cjo6Q29sb3JGaWx0ZXJNb2RlOjpJbnZlcnRDb2xvcik7CiB9CiAKLXZvaWQgV2ViUGFnZTo6ZXhl
Y3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNv
bnN0IFN0cmluZyYgYXJndW1lbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFn
ZTo6ZXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBleGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZE5hbWUs
IGFyZ3VtZW50KTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFj
ayhjYWxsYmFja0lEKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQ
YWdlOjpzZWxlY3RBbGwoKQpAQCAtMzE0MywxMCArMzE0MywxMCBAQCB2b2lkIFdlYlBhZ2U6OnZp
ZXdXaWxsRW5kTGl2ZVJlc2l6ZSgpCiAgICAgICAgIHZpZXctPndpbGxFbmRMaXZlUmVzaXplKCk7
CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9yd2FyZCwgYm9vbCBp
c0tleWJvYXJkRXZlbnRWYWxpZCwgY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZlbnQsIENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9y
d2FyZCwgYm9vbCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYg
ZXZlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoKTsKIAogICAgIFNldEZvclNjb3BlPGJvb2w+IHVzZXJJc0ludGVyYWN0aW5n
Q2hhbmdlIHsgbV91c2VySXNJbnRlcmFjdGluZywgdHJ1ZSB9OwogCkBAIC0zMTU3LDEzICszMTU3
LDEyIEBAIHZvaWQgV2ViUGFnZTo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9yd2EKICAgICAgICAg
UGxhdGZvcm1LZXlib2FyZEV2ZW50IHBsYXRmb3JtRXZlbnQocGxhdGZvcm0oZXZlbnQpKTsKICAg
ICAgICAgcGxhdGZvcm1FdmVudC5kaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoUGxhdGZvcm1FdmVu
dDo6UmF3S2V5RG93bik7CiAgICAgICAgIG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuc2V0SW5p
dGlhbEZvY3VzKGZvcndhcmQgPyBGb2N1c0RpcmVjdGlvbkZvcndhcmQgOiBGb2N1c0RpcmVjdGlv
bkJhY2t3YXJkLCAmS2V5Ym9hcmRFdmVudDo6Y3JlYXRlKHBsYXRmb3JtRXZlbnQsICZmcmFtZS53
aW5kb3dQcm94eSgpKS5nZXQoKSk7Ci0KLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpWb2lkQ2FsbGJhY2soY2FsbGJhY2tJRCkpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5zZXRJbml0aWFsRm9jdXMoZm9yd2FyZCA/IEZvY3VzRGlyZWN0aW9uRm9yd2FyZCA6IEZv
Y3VzRGlyZWN0aW9uQmFja3dhcmQsIG51bGxwdHIpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxl
cigpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldENhblN0YXJ0TWVkaWFUaW1lckZpcmVkKCkKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9u
IDI2MDU0MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjQ0LDcgKzY0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGlz
YWJsZWRBZGFwdGF0aW9uc0RpZENoYW5nZShjb25zdCBPcHRpb25TZXQ8V2ViQ29yZTo6RGlzYWJs
ZWRBZGFwdGF0aW9ucz4mKTsKICAgICB2b2lkIHZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpOwotICAgIHZvaWQgZXhlY3V0ZUVkaXRD
b21tYW5kV2l0aENhbGxiYWNrKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQs
IENhbGxiYWNrSUQpOworICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBzZWxlY3RBbGwoKTsKIAogICAgIHZvaWQgdGV4dElucHV0Q29u
dGV4dHNJblJlY3QoV2ViQ29yZTo6RmxvYXRSZWN0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpFbGVtZW50Q29udGV4dD4mKT4mJik7CkBAIC02OTIsMTEgKzY5
MiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvLCB1aW50MzJf
dCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBDYWxsYmFja0lEKTsKICAgICB2
b2lkIGV4dGVuZFNlbGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSk7CiAgICAgdm9pZCBzZWxl
Y3RXb3JkQmFja3dhcmQoKTsKLSAgICB2b2lkIG1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90
IG9mZnNldCwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5
QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBi
b29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQpOwotICAgIHZv
aWQgc2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJvb2wg
aXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBt
b3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHks
IHVpbnQzMl90IGRpcmVjdGlvbiwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBzZWxlY3RQb3NpdGlv
bkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIGlzSW50ZXJhY3RpbmdXaXRo
Rm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQpOworICAgIHZvaWQgbW92ZVNlbGVjdGlvbkJ5T2Zm
c2V0KGludDMyX3Qgb2Zmc2V0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZv
aWQgc2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRF
bGVtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgc2VsZWN0UG9z
aXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVp
bnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGlu
Z1dpdGhGb2N1c2VkRWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2
b2lkIG1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbih1aW50MzJfdCBncmFudWxh
cml0eSwgdWludDMyX3QgZGlyZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwor
ICAgIHZvaWQgc2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
Ym9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKCk+JiYpOwogICAgIHZvaWQgYmVnaW5TZWxlY3Rpb25JbkRpcmVjdGlvbih1aW50MzJfdCBk
aXJlY3Rpb24sIENhbGxiYWNrSUQpOwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVu
dFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZv
Y3VzZWRFbGVtZW50LCBSZXNwZWN0U2VsZWN0aW9uQW5jaG9yLCBDYWxsYmFja0lEKTsKICAgICB2
b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5kYXJ5KGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dp
dGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCk7CkBAIC03MTMsNyArNzEzLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50Q29udGV4dE9yUG9zaXRpb24o
T3B0aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+JiYsIFdlYkNvcmU6OkludFBvaW50JiYp
OwogICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25F
bGVtZW50KHVpbnQzMl90IGFjdGlvbik7Ci0gICAgdm9pZCBmb2N1c05leHRGb2N1c2VkRWxlbWVu
dChib29sIGlzRm9yd2FyZCwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBmb2N1c05leHRGb2N1c2Vk
RWxlbWVudChib29sIGlzRm9yd2FyZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAg
ICB2b2lkIGF1dG9maWxsTG9naW5DcmVkZW50aWFscyhjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKTsKICAgICB2b2lkIHNldEZvY3VzZWRFbGVtZW50VmFsdWUoY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNOdW1iZXIoZG91YmxlKTsKQEAgLTE0MzMs
NyArMTQzMyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWxvYWQodWludDY0X3QgbmF2aWdhdGlv
bklELCB1aW50MzJfdCByZWxvYWRPcHRpb25zLCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmJik7
CiAgICAgdm9pZCBnb1RvQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgY29u
c3QgV2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciYsIFdlYkNvcmU6OkZyYW1lTG9h
ZFR5cGUsIFdlYkNvcmU6OlNob3VsZFRyZWF0QXNDb250aW51aW5nTG9hZCwgT3B0aW9uYWw8V2Vi
c2l0ZVBvbGljaWVzRGF0YT4mJik7CiAgICAgdm9pZCB0cnlSZXN0b3JlU2Nyb2xsUG9zaXRpb24o
KTsKLSAgICB2b2lkIHNldEluaXRpYWxGb2N1cyhib29sIGZvcndhcmQsIGJvb2wgaXNLZXlib2Fy
ZEV2ZW50VmFsaWQsIGNvbnN0IFdlYktleWJvYXJkRXZlbnQmLCBDYWxsYmFja0lEKTsKKyAgICB2
b2lkIHNldEluaXRpYWxGb2N1cyhib29sIGZvcndhcmQsIGJvb2wgaXNLZXlib2FyZEV2ZW50VmFs
aWQsIGNvbnN0IFdlYktleWJvYXJkRXZlbnQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OwogICAgIHZvaWQgdXBkYXRlSXNJbldpbmRvdyhib29sIGlzSW5pdGlhbFN0YXRlID0gZmFsc2Up
OwogICAgIHZvaWQgdmlzaWJpbGl0eURpZENoYW5nZSgpOwogICAgIHZvaWQgc2V0QWN0aXZpdHlT
dGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0ZTo6RmxhZz4sIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VJRCwgY29uc3QgVmVjdG9yPENhbGxiYWNrSUQ+JiBjYWxsYmFja0lEcyk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4JKHJldmlzaW9uIDI2MDU0MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcg
QEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KIAogbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7
Ci0gICAgU2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9yd2FyZCwgYm9vbCBpc0tleWJvYXJkRXZlbnRW
YWxpZCwgV2ViS2l0OjpXZWJLZXlib2FyZEV2ZW50IGV2ZW50LCBXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKKyAgICBTZXRJbml0aWFsRm9jdXMoYm9vbCBmb3J3YXJkLCBib29sIGlzS2V5
Ym9hcmRFdmVudFZhbGlkLCBXZWJLaXQ6OldlYktleWJvYXJkRXZlbnQgZXZlbnQpIC0+ICgpIEFz
eW5jCiAgICAgU2V0QWN0aXZpdHlTdGF0ZShPcHRpb25TZXQ8V2ViQ29yZTo6QWN0aXZpdHlTdGF0
ZTo6RmxhZz4gYWN0aXZpdHlTdGF0ZSwgV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQgYWN0
aXZpdHlTdGF0ZUNoYW5nZUlELCBWZWN0b3I8V2ViS2l0OjpDYWxsYmFja0lEPiBjYWxsYmFja0lE
cykKICAgICBTZXRMYXllckhvc3RpbmdNb2RlKGVudW06dWludDhfdCBXZWJLaXQ6OkxheWVySG9z
dGluZ01vZGUgbGF5ZXJIb3N0aW5nTW9kZSkKIApAQCAtNDMsNyArNDMsNyBAQCBtZXNzYWdlcyAt
PiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBWaWV3V2lsbFN0YXJ0TGl2ZVJlc2l6ZSgp
CiAgICAgVmlld1dpbGxFbmRMaXZlUmVzaXplKCkKIAotICAgIEV4ZWN1dGVFZGl0Q29tbWFuZFdp
dGhDYWxsYmFjayhTdHJpbmcgbmFtZSwgU3RyaW5nIGFyZ3VtZW50LCBXZWJLaXQ6OkNhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKKyAgICBFeGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2soU3RyaW5n
IG5hbWUsIFN0cmluZyBhcmd1bWVudCkgLT4gKCkgQXN5bmMKICAgICBLZXlFdmVudChXZWJLaXQ6
OldlYktleWJvYXJkRXZlbnQgZXZlbnQpCiAgICAgTW91c2VFdmVudChXZWJLaXQ6OldlYk1vdXNl
RXZlbnQgZXZlbnQpCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTY4LDExICs2OCwxMSBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBTZWxlY3RXaXRoVHdv
VG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBXZWJDb3JlOjpJbnRQb2ludCB0bywgdWlu
dDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgV2ViS2l0OjpDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiAgICAgRXh0ZW5kU2VsZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5
KQogICAgIFNlbGVjdFdvcmRCYWNrd2FyZCgpCi0gICAgTW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGlu
dDMyX3Qgb2Zmc2V0LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICBTZWxlY3RU
ZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMy
X3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCi0gICAgU2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5
V2l0aERpcmVjdGlvbihXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJp
dHksIHVpbnQzMl90IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVt
ZW50LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKLSAgICBNb3ZlU2VsZWN0aW9uQXRC
b3VuZGFyeVdpdGhEaXJlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGRpcmVj
dGlvbiwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCi0gICAgU2VsZWN0UG9zaXRpb25B
dFBvaW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIE1vdmVTZWxl
Y3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCkgLT4gKCkgQXN5bmMKKyAgICBTZWxlY3RUZXh0
V2l0aEdyYW51bGFyaXR5QXRQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgdWludDMyX3Qg
Z3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCkgLT4gKCkg
QXN5bmMKKyAgICBTZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6
OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9u
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQpIC0+ICgpIEFzeW5jCisgICAg
TW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5
LCB1aW50MzJfdCBkaXJlY3Rpb24pIC0+ICgpIEFzeW5jCisgICAgU2VsZWN0UG9zaXRpb25BdFBv
aW50KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQpIC0+ICgpIEFzeW5jCiAgICAgQmVnaW5TZWxlY3Rpb25JbkRpcmVjdGlvbih1aW50
MzJfdCBkaXJlY3Rpb24sIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFVwZGF0
ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludChXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBlbnVtOmJvb2wgV2ViS2l0OjpSZXNwZWN0
U2VsZWN0aW9uQW5jaG9yIHJlc3BlY3RTZWxlY3Rpb25BbmNob3IsIFdlYktpdDo6Q2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogICAgIFVwZGF0ZVNlbGVjdGlvbldpdGhFeHRlbnRQb2ludEFuZEJvdW5k
YXJ5KFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKQEAgLTg5LDcgKzg5LDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgU3RhcnRJbnRlcmFjdGlvbldpdGhFbGVtZW50Q29udGV4dE9yUG9zaXRpb24oT3B0
aW9uYWw8V2ViQ29yZTo6RWxlbWVudENvbnRleHQ+IGVsZW1lbnRDb250ZXh0LCBXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludCkKICAgICBTdG9wSW50ZXJhY3Rpb24oKQogICAgIFBlcmZvcm1BY3Rpb25P
bkVsZW1lbnQodWludDMyX3QgYWN0aW9uKQotICAgIEZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJv
b2wgaXNGb3J3YXJkLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAgICBGb2N1c05l
eHRGb2N1c2VkRWxlbWVudChib29sIGlzRm9yd2FyZCkgLT4gKCkgQXN5bmMKICAgICBTZXRGb2N1
c2VkRWxlbWVudFZhbHVlKFN0cmluZyB2YWx1ZSkKICAgICBBdXRvZmlsbExvZ2luQ3JlZGVudGlh
bHMoU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFzc3dvcmQpCiAgICAgU2V0Rm9jdXNlZEVsZW1l
bnRWYWx1ZUFzTnVtYmVyKGRvdWJsZSB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAyNjA1NDIp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTgyNyw3ICsxODI3LDcgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RX
b3JkQmFja3dhcmQoKQogICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdl
KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9u
KS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogfQogCi12b2lkIFdlYlBhZ2U6
Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgQ2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQordm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBG
cmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOwogICAgIApAQCAtMTg0Myw3ICsxODQzLDcgQEAgdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0
aW9uQnlPZmZzZXQoaW50MwogICAgIH0KICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkgJiYg
c3RhcnRQb3NpdGlvbiAhPSBwb3NpdGlvbikKICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwg
cG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7Ci0gICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2soY2FsbGJhY2tJRCkpOworICAgIGNv
bXBsZXRpb25IYW5kbGVyKCk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9s
bEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb25JbldpbmRvdykK
QEAgLTIwNjQsNyArMjA2NCw3IEBAIFZpc2libGVQb3NpdGlvbiBXZWJQYWdlOjp2aXNpYmxlUG9z
aXRpb24KICAgICByZXR1cm4gZnJhbWUudmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoY29uc3RyYWlu
ZWRQb2ludCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRF
bGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0
aW9uQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIGJvb2wgaXNJbnRlcmFj
dGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewogICAgIFNldEZvclNjb3BlPGJvb2w+IHVzZXJJc0ludGVyYWN0aW5n
Q2hhbmdlIHsgbV91c2VySXNJbnRlcmFjdGluZywgdHJ1ZSB9OwogCkBAIC0yMDc1LDEwICsyMDc1
LDEwIEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnMKICAgICAKICAg
ICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCiAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24s
IHBvc2l0aW9uKS5wdHIoKSwgcG9zaXRpb24uYWZmaW5pdHkoKSwgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwotICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKKyAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogfQogCi12b2lkIFdlYlBhZ2U6OnNlbGVjdFBvc2l0aW9uQXRC
b3VuZGFyeVdpdGhEaXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50
MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdX
aXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6
c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJv
b2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoZnJhbWUs
IHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KTsKQEAgLTIwODgsMTAgKzIw
ODgsMTAgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaQogICAgICAg
ICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCiAgICAgICAgICAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0
aW9uLCBwb3NpdGlvbikucHRyKCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgfQotICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKKyAgICBj
b21wbGV0aW9uSGFuZGxlcigpOwogfQogCi12b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25BdEJv
dW5kYXJ5V2l0aERpcmVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0
aW9uLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25B
dEJvdW5kYXJ5V2l0aERpcmVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGly
ZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKICAgICAKQEAgLTIxMDIsNyArMjEwMiw3IEBAIHZvaWQgV2ViUGFnZTo6bW92
ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXQKICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTm90TnVsbCgp
KQogICAgICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBpc0Zv
cndhcmQ/IFVQU1RSRUFNIDogRE9XTlNUUkVBTSwgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwogICAgIH0KLSAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7CisgICAgY29t
cGxldGlvbkhhbmRsZXIoKTsKIH0KIAogUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpyYW5nZUZvckdy
YW51bGFyaXR5QXRQb2ludChGcmFtZSYgZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2Vk
RWxlbWVudCkKQEAgLTIxNDgsNyArMjE0OCw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0Rm9jdXNlZEZy
YW1lQmVmb3JlU2VsZWMKICAgICAgICAgbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRGb2N1
c2VkRnJhbWUocmVzdWx0LmlubmVyTm9kZUZyYW1lKCkpOwogfQogCi12b2lkIFdlYlBhZ2U6OnNl
bGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBw
b2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2Vk
RWxlbWVudCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjpzZWxlY3RUZXh0
V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVp
bnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBz
ZXRGb2N1c2VkRnJhbWVCZWZvcmVTZWxlY3RpbmdUZXh0QXRMb2NhdGlvbihwb2ludCk7CiAKQEAg
LTIxNTcsNyArMjE1Nyw3IEBAIHZvaWQgV2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0
eUEKICAgICBpZiAocmFuZ2UpCiAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UocmFuZ2UuZ2V0KCksIFVQU1RSRUFNLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hv
dWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgbV9pbml0aWFsU2VsZWN0
aW9uID0gcmFuZ2U7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJh
Y2soY2FsbGJhY2tJRCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2Vi
UGFnZTo6YmVnaW5TZWxlY3Rpb25JbkRpcmVjdGlvbih1aW50MzJfdCBkaXJlY3Rpb24sIENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKQEAgLTMwNTMsMTQgKzMwNTMsMTQgQEAgc3RhdGljIGlubGluZSBF
bGVtZW50KiBuZXh0QXNzaXN0YWJsZUVsZQogICAgIHJldHVybiBuZXh0RWxlbWVudDsKIH0KIAot
dm9pZCBXZWJQYWdlOjpmb2N1c05leHRGb2N1c2VkRWxlbWVudChib29sIGlzRm9yd2FyZCwgQ2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjpmb2N1c05leHRGb2N1c2VkRWxlbWVu
dChib29sIGlzRm9yd2FyZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewogICAgIEVsZW1lbnQqIG5leHRFbGVtZW50ID0gbmV4dEFzc2lzdGFibGVFbGVt
ZW50KG1fZm9jdXNlZEVsZW1lbnQuZ2V0KCksICptX3BhZ2UsIGlzRm9yd2FyZCk7CiAgICAgbV91
c2VySXNJbnRlcmFjdGluZyA9IHRydWU7CiAgICAgaWYgKG5leHRFbGVtZW50KQogICAgICAgICBu
ZXh0RWxlbWVudC0+Zm9jdXMoKTsKICAgICBtX3VzZXJJc0ludGVyYWN0aW5nID0gZmFsc2U7Ci0g
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2soY2FsbGJhY2tJRCkp
OworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z2V0Rm9jdXNl
ZEVsZW1lbnRJbmZvcm1hdGlvbihGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uJiBpbmZvcm1hdGlv
bikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397503</attachid>
            <date>2020-04-24 13:56:19 -0700</date>
            <delta_ts>2020-04-27 10:13:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210944-20200424135618.patch</filename>
            <type>text/plain</type>
            <size>40502</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjA2MDQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDIwLTA0LTI0ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIHVzZSBv
ZiBXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwOTQ0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgVXNlIHNlbmRXaXRoQXN5bmNSZXBseSBhbmQgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiBpbnN0ZWFkLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfZXhlY3V0ZUVkaXRDb21tYW5kOmFy
Z3VtZW50OmNvbXBsZXRpb246XSk6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YmVjb21lRmlyc3RSZXNwb25k
ZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Zm9jdXNOZXh0Rm9j
dXNlZEVsZW1lbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHBhc3RlV2l0aENvbXBsZXRpb25I
YW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1vdmVCeU9mZnNldDpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBfc2VsZWN0UG9zaXRpb25BdFBvaW50OnN0YXlpbmdXaXRo
aW5Gb2N1c2VkRWxlbWVudDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250
ZW50VmlldyBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnk6aW5EaXJlY3Rpb246ZnJvbVBvaW50OmNv
bXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IG1vdmVTZWxlY3Rp
b25BdEJvdW5kYXJ5OmluRGlyZWN0aW9uOmNvbXBsZXRpb25IYW5kbGVyOl0pOgorICAgICAgICAo
LVtXS0NvbnRlbnRWaWV3IHNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHk6YXRQb2ludDpjb21wbGV0
aW9uSGFuZGxlcjpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfYmVjb21lRmlyc3RSZXNw
b25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAg
ICAgICAgKC1bV0tDb250ZW50VmlldyBhY2Nlc3NvcnlUYWI6XSk6CisgICAgICAgICgtW1dLQ29u
dGVudFZpZXcgZXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrOl0pOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
UHJveHk6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdp
dGhEaXJlY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNlbGVjdFBvc2l0
aW9uQXRQb2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlv
bkJ5T2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpmb2N1c05leHRGb2N1
c2VkRWxlbWVudCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2sp
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRJbml0aWFsRm9jdXMpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjptb3ZlU2VsZWN0aW9u
QnlPZmZzZXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0UG9p
bnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlX
aXRoRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0
Qm91bmRhcnlXaXRoRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2VsZWN0
VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpm
b2N1c05leHRGb2N1c2VkRWxlbWVudCk6CisKIDIwMjAtMDQtMjMgIEJyZW50IEZ1bGdoYW0gIDxi
ZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgImtlcm4ub3N2ZXJzaW9uIiBzeXNj
dGwgcmVhZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCShy
ZXZpc2lvbiAyNjA1NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY2LDE1ICsyMTY2LDE2IEBAIEludFNpemUgV2ViUGFn
ZVByb3h5Ojp2aWV3U2l6ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2VDbGllbnQoKS52aWV3U2l6
ZSgpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6c2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9yd2Fy
ZCwgYm9vbCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYga2V5
Ym9hcmRFdmVudCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyhib29s
IGZvcndhcmQsIGJvb2wgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGNvbnN0IFdlYktleWJvYXJkRXZl
bnQmIGtleWJvYXJkRXZlbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewotICAgICAgICBjYWxs
YmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0
aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQ
cm94eTo6c2V0SW5pdGlhbEZvY3VzIl9zKSk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
U2V0SW5pdGlhbEZvY3VzKGZvcndhcmQsIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCBrZXlib2FyZEV2
ZW50LCBjYWxsYmFja0lEKSk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJQ
YWdlOjpTZXRJbml0aWFsRm9jdXMoZm9yd2FyZCwgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGtleWJv
YXJkRXZlbnQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiks
IGJhY2tncm91bmRBY3Rpdml0eSA9IG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFj
dGl2aXR5KCJXZWJQYWdlUHJveHk6OnNldEluaXRpYWxGb2N1cyJfcyldICgpIG11dGFibGUgewor
ICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpjbGVhclNlbGVjdGlvbigpCkBAIC0yMzAwLDE4ICsyMzAxLDE5IEBAIHN0YXRpYyBib29s
IGlzUGFzdGVDb21tYW5kTmFtZShjb25zdCBTdHIKICAgICByZXR1cm4gcGFzdGVDb21tYW5kTmFt
ZXMtPmNvbnRhaW5zKGNvbW1hbmROYW1lKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmV4ZWN1
dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBjb25zdCBTdHJpbmcmIGFy
Z3VtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJh
Y2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFnZVByb3h5OjpleGVjdXRlRWRpdENvbW1hbmQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAgaWYgKCFoYXNSdW5uaW5n
UHJvY2VzcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJv
cjo6VW5rbm93bik7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmIChpc1Bhc3RlQ29tbWFuZE5hbWUoY29tbWFuZE5hbWUpKQogICAg
ICAgICB3aWxsUGVyZm9ybVBhc3RlQ29tbWFuZCgpOwogCi0gICAgYXV0byBjYWxsYmFja0lEID0g
bV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhy
b3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0Q29t
bWFuZCJfcykpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVFZGl0Q29tbWFu
ZFdpdGhDYWxsYmFjayhjb21tYW5kTmFtZSwgYXJndW1lbnQsIGNhbGxiYWNrSUQpKTsKKyAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6OkV4ZWN1dGVFZGl0Q29tbWFuZFdp
dGhDYWxsYmFjayhjb21tYW5kTmFtZSwgYXJndW1lbnQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdU
Rk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGJhY2tncm91bmRBY3Rpdml0eSA9IG1fcHJvY2Vzcy0+
dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6OmV4ZWN1dGVFZGl0
Q29tbWFuZCJfcyldICgpIG11dGFibGUgeworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7Cisg
ICAgfSk7CiB9CiAgICAgCiB2b2lkIFdlYlBhZ2VQcm94eTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNv
bnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lbnQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjYwNTQyKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY0Miw3ICs2NDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aWV3V2lsbFN0YXJ0TGl2ZVJlc2l6
ZSgpOwogICAgIHZvaWQgdmlld1dpbGxFbmRMaXZlUmVzaXplKCk7CiAKLSAgICB2b2lkIHNldElu
aXRpYWxGb2N1cyhib29sIGZvcndhcmQsIGJvb2wgaXNLZXlib2FyZEV2ZW50VmFsaWQsIGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJy
b3IpPiYmKTsKKyAgICB2b2lkIHNldEluaXRpYWxGb2N1cyhib29sIGZvcndhcmQsIGJvb2wgaXNL
ZXlib2FyZEV2ZW50VmFsaWQsIGNvbnN0IFdlYktleWJvYXJkRXZlbnQmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOwogICAgIAogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICAgICB2
b2lkIHJlc3RvcmVTZWxlY3Rpb25JbkZvY3VzZWRFZGl0YWJsZUVsZW1lbnQoKTsKQEAgLTY3NSw2
ICs2NzUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNlbGVjdEFsbCgpOwogICAgIHZvaWQgZXhl
Y3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lbnQgPSBTdHJpbmcoKSk7CisgICAgdm9pZCBleGVjdXRlRWRpdENvbW1hbmQoY29uc3Qg
U3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHZhbGlkYXRlQ29tbWFuZChjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIGJvb2wsIGlu
dDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKIAogICAgIGNvbnN0IEVkaXRvclN0YXRl
JiBlZGl0b3JTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWRpdG9yU3RhdGU7IH0KQEAgLTcwMiw4
ICs3MDMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhY3RpdmF0ZU1lZGlhU3RyZWFtQ2FwdHVyZUlu
UGFnZSgpOwogICAgIGJvb2wgaXNNZWRpYVN0cmVhbUNhcHR1cmVNdXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbXV0ZWRTdGF0ZSAmIFdlYkNvcmU6Ok1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RyZWFtQ2Fw
dHVyZUlzTXV0ZWQ7IH0KICAgICB2b2lkIHNldE1lZGlhU3RyZWFtQ2FwdHVyZU11dGVkKGJvb2wp
OwotICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUs
IGNvbnN0IFN0cmluZyYgYXJndW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6
OkVycm9yKT4mJik7Ci0gICAgICAgIAorCiAgICAgdm9pZCByZXF1ZXN0Rm9udEF0dHJpYnV0ZXNB
dFNlbGVjdGlvblN0YXJ0KEZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6Rm9udEF0dHJpYnV0
ZXMmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBmb250QXR0cmlidXRlc0Nh
bGxiYWNrKGNvbnN0IFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVzJiwgQ2FsbGJhY2tJRCk7CiAKQEAg
LTc1NywxMSArNzU3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVz
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHRv
LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBXVEY6OkZ1bmN0
aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1
aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgZXh0ZW5kU2VsZWN0
aW9uKFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSk7CiAgICAgdm9pZCBzZWxlY3RXb3JkQmFja3dh
cmQoKTsKLSAgICB2b2lkIG1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgV1RG
OjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9pZCBzZWxl
Y3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgV2Vi
Q29yZTo6VGV4dEdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1l
bnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7Ci0gICAgdm9p
ZCBzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIGJvb2wgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNr
QmFzZTo6RXJyb3IpPiYmKTsKLSAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhE
aXJlY3Rpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0
eSwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7
Ci0gICAgdm9pZCBtb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6
VGV4dEdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24sIFdURjo6RnVuY3Rp
b248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBtb3ZlU2VsZWN0aW9u
QnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRo
Rm9jdXNlZEVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBz
ZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIGJvb2wgaXNJbnRl
cmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsK
KyAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgV2ViQ29yZTo6U2VsZWN0
aW9uRGlyZWN0aW9uLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBtb3ZlU2VsZWN0aW9uQXRCb3VuZGFy
eVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rp
b25EaXJlY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBiZWdp
blNlbGVjdGlvbkluRGlyZWN0aW9uKFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbiwgV1RGOjpG
dW5jdGlvbjx2b2lkICh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZv
aWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50
LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFJlc3BlY3RTZWxlY3Rpb25B
bmNob3IsIFdURjo6RnVuY3Rpb248dm9pZCh1aW50NjRfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+
JiYpOwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnko
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQodWludDY0
X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKQEAgLTc3OSw3ICs3NzksNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzdG9wSW50ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVs
ZW1lbnQodWludDMyX3QgYWN0aW9uKTsKICAgICB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShjb25z
dCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgaW1hZ2VIYW5kbGUsIHVpbnQ2NF90IGltYWdlU2l6ZSk7
Ci0gICAgdm9pZCBmb2N1c05leHRGb2N1c2VkRWxlbWVudChib29sIGlzRm9yd2FyZCwgV1RGOjpG
dW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiA9IFtdIChhdXRvKSB7IH0pOwor
ICAgIHZvaWQgZm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoYm9vbCBpc0ZvcndhcmQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJiA9IFtdIHsgfSk7CiAgICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVu
dFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0Rm9jdXNlZEVsZW1lbnRWYWx1ZUFz
TnVtYmVyKGRvdWJsZSk7CiAgICAgdm9pZCBzZXRGb2N1c2VkRWxlbWVudFNlbGVjdGVkSW5kZXgo
dWludDMyX3QgaW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBsZVNlbGVjdGlvbiA9IGZhbHNlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQko
cmV2aXNpb24gMjYwNTQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTYyNiw5ICsxNjI2LDkgQEAgLSAodm9pZClf
c2V0RWRpdGFibGU6KEJPT0wpZWRpdGFibGUKIAogLSAodm9pZClfZXhlY3V0ZUVkaXRDb21tYW5k
OihOU1N0cmluZyAqKWNvbW1hbmQgYXJndW1lbnQ6KE5TU3RyaW5nICopYXJndW1lbnQgY29tcGxl
dGlvbjoodm9pZCAoXikoQk9PTCkpY29tcGxldGlvbgogewotICAgIF9wYWdlLT5leGVjdXRlRWRp
dENvbW1hbmQoY29tbWFuZCwgYXJndW1lbnQsIFtjYXB0dXJlZENvbXBsZXRpb25CbG9jayA9IG1h
a2VCbG9ja1B0cihjb21wbGV0aW9uKV0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7CisgICAgX3BhZ2UtPmV4ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kLCBhcmd1bWVudCwgW2Nh
cHR1cmVkQ29tcGxldGlvbkJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb24pXSB7CiAgICAg
ICAgIGlmIChjYXB0dXJlZENvbXBsZXRpb25CbG9jaykKLSAgICAgICAgICAgIGNhcHR1cmVkQ29t
cGxldGlvbkJsb2NrKGVycm9yID09IFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSk7
CisgICAgICAgICAgICBjYXB0dXJlZENvbXBsZXRpb25CbG9jayhZRVMpOwogICAgIH0pOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQko
cmV2aXNpb24gMjYwNTQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1ODEsNyArMTU4MSw3IEBAIGJvb2wgV2ViVmll
d0ltcGw6OmJlY29tZUZpcnN0UmVzcG9uZGVyKCkKICAgICAgICAgTlNFdmVudCAqa2V5Ym9hcmRF
dmVudCA9IG5pbDsKICAgICAgICAgaWYgKFtldmVudCB0eXBlXSA9PSBOU0V2ZW50VHlwZUtleURv
d24gfHwgW2V2ZW50IHR5cGVdID09IE5TRXZlbnRUeXBlS2V5VXApCiAgICAgICAgICAgICBrZXli
b2FyZEV2ZW50ID0gZXZlbnQ7Ci0gICAgICAgIG1fcGFnZS0+c2V0SW5pdGlhbEZvY3VzKGRpcmVj
dGlvbiA9PSBOU1NlbGVjdGluZ05leHQsIGtleWJvYXJkRXZlbnQgIT0gbmlsLCBOYXRpdmVXZWJL
ZXlib2FyZEV2ZW50KGtleWJvYXJkRXZlbnQsIGZhbHNlLCBmYWxzZSwgeyB9KSwgW10oV2ViS2l0
OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7IH0pOworICAgICAgICBtX3BhZ2UtPnNldEluaXRpYWxG
b2N1cyhkaXJlY3Rpb24gPT0gTlNTZWxlY3RpbmdOZXh0LCBrZXlib2FyZEV2ZW50ICE9IG5pbCwg
TmF0aXZlV2ViS2V5Ym9hcmRFdmVudChrZXlib2FyZEV2ZW50LCBmYWxzZSwgZmFsc2UsIHsgfSks
IFtdIHsgfSk7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
CShyZXZpc2lvbiAyNjA1NDIpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yODMyLDcgKzI4MzIsNyBA
QCAtICh2b2lkKXNldFVwVGV4dFNlbGVjdGlvbkFzc2lzdGFudAogCiAtICh2b2lkKXBhc3RlV2l0
aENvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKSh2b2lkKSljb21wbGV0aW9uSGFuZGxlcgogewot
ICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoIlBhc3RlIl9zLCB7IH0sIFtjb21wbGV0aW9u
ID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8pIHsKKyAgICBfcGFnZS0+
ZXhlY3V0ZUVkaXRDb21tYW5kKCJQYXN0ZSJfcywgeyB9LCBbY29tcGxldGlvbiA9IG1ha2VCbG9j
a1B0cihjb21wbGV0aW9uSGFuZGxlcildIHsKICAgICAgICAgaWYgKGNvbXBsZXRpb24pCiAgICAg
ICAgICAgICBjb21wbGV0aW9uKCk7CiAgICAgfSk7CkBAIC0zOTIwLDcgKzM5MjAsNyBAQCAtICh2
b2lkKW1vdmVCeU9mZnNldDooTlNJbnRlZ2VyKW9mZnNldAogICAgIAogICAgIFtzZWxmIGJlZ2lu
U2VsZWN0aW9uQ2hhbmdlXTsKICAgICBSZXRhaW5QdHI8V0tDb250ZW50Vmlldz4gdmlldyA9IHNl
bGY7Ci0gICAgX3BhZ2UtPm1vdmVTZWxlY3Rpb25CeU9mZnNldChvZmZzZXQsIFt2aWV3XShXZWJL
aXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICBfcGFnZS0+bW92ZVNlbGVjdGlvbkJ5T2Zm
c2V0KG9mZnNldCwgW3ZpZXddIHsKICAgICAgICAgW3ZpZXcgZW5kU2VsZWN0aW9uQ2hhbmdlXTsK
ICAgICB9KTsKIH0KQEAgLTQwMTEsNyArNDAxMSw3IEBAIC0gKHZvaWQpX3NlbGVjdFBvc2l0aW9u
QXRQb2ludDooQ0dQb2ludCkKICAgICBVSVdLU2VsZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgc2Vs
ZWN0aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKICAgICBSZXRhaW5QdHI8
V0tDb250ZW50Vmlldz4gdmlldyA9IHNlbGY7CiAKLSAgICBfcGFnZS0+c2VsZWN0UG9zaXRpb25B
dFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgc3RheWluZ1dpdGhpbkZvY3VzZWRFbGVt
ZW50LCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9y
IGVycm9yKSB7CisgICAgX3BhZ2UtPnNlbGVjdFBvc2l0aW9uQXRQb2ludChXZWJDb3JlOjpJbnRQ
b2ludChwb2ludCksIHN0YXlpbmdXaXRoaW5Gb2N1c2VkRWxlbWVudCwgW3ZpZXcsIHNlbGVjdGlv
bkhhbmRsZXJdKCkgewogICAgICAgICBzZWxlY3Rpb25IYW5kbGVyKCk7CiAgICAgICAgIHZpZXct
Pl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKICAgICAgICAgW3NlbGVjdGlvbkhhbmRs
ZXIgcmVsZWFzZV07CkBAIC00MDI0LDcgKzQwMjQsNyBAQCAtICh2b2lkKXNlbGVjdFBvc2l0aW9u
QXRCb3VuZGFyeTooVUlUZXh0CiAgICAgVUlXS1NlbGVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIHNl
bGVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CiAgICAgUmV0YWluUHRy
PFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwogICAgIAotICAgIF9wYWdlLT5zZWxlY3RQb3Np
dGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgdG9X
S1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHRvV0tTZWxlY3Rpb25EaXJlY3Rpb24oZGly
ZWN0aW9uKSwgc2VsZi5faGFzRm9jdXNlZEVsZW1lbnQsIFt2aWV3LCBzZWxlY3Rpb25IYW5kbGVy
XShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBfcGFnZS0+c2VsZWN0
UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihXZWJDb3JlOjpJbnRQb2ludChwb2ludCks
IHRvV0tUZXh0R3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpLCB0b1dLU2VsZWN0aW9uRGlyZWN0aW9u
KGRpcmVjdGlvbiksIHNlbGYuX2hhc0ZvY3VzZWRFbGVtZW50LCBbdmlldywgc2VsZWN0aW9uSGFu
ZGxlcl0oKSB7CiAgICAgICAgIHNlbGVjdGlvbkhhbmRsZXIoKTsKICAgICAgICAgdmlldy0+X3Vz
aW5nR2VzdHVyZUZvclNlbGVjdGlvbiA9IE5POwogICAgICAgICBbc2VsZWN0aW9uSGFuZGxlciBy
ZWxlYXNlXTsKQEAgLTQwMzcsNyArNDAzNyw3IEBAIC0gKHZvaWQpbW92ZVNlbGVjdGlvbkF0Qm91
bmRhcnk6KFVJVGV4dEcKICAgICBVSVdLU2VsZWN0aW9uQ29tcGxldGlvbkhhbmRsZXIgc2VsZWN0
aW9uSGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciBjb3B5XTsKICAgICBSZXRhaW5QdHI8V0tD
b250ZW50Vmlldz4gdmlldyA9IHNlbGY7CiAgICAgCi0gICAgX3BhZ2UtPm1vdmVTZWxlY3Rpb25B
dEJvdW5kYXJ5V2l0aERpcmVjdGlvbih0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51bGFyaXR5KSwg
dG9XS1NlbGVjdGlvbkRpcmVjdGlvbihkaXJlY3Rpb24pLCBbdmlldywgc2VsZWN0aW9uSGFuZGxl
cl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgX3BhZ2UtPm1vdmVT
ZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbih0b1dLVGV4dEdyYW51bGFyaXR5KGdyYW51
bGFyaXR5KSwgdG9XS1NlbGVjdGlvbkRpcmVjdGlvbihkaXJlY3Rpb24pLCBbdmlldywgc2VsZWN0
aW9uSGFuZGxlcl0gewogICAgICAgICBzZWxlY3Rpb25IYW5kbGVyKCk7CiAgICAgICAgIHZpZXct
Pl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsKICAgICAgICAgW3NlbGVjdGlvbkhhbmRs
ZXIgcmVsZWFzZV07CkBAIC00MDUxLDcgKzQwNTEsNyBAQCAtICh2b2lkKXNlbGVjdFRleHRXaXRo
R3JhbnVsYXJpdHk6KFVJVGV4CiAgICAgVUlXS1NlbGVjdGlvbkNvbXBsZXRpb25IYW5kbGVyIHNl
bGVjdGlvbkhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgY29weV07CiAgICAgUmV0YWluUHRy
PFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwogCi0gICAgX3BhZ2UtPnNlbGVjdFRleHRXaXRo
R3JhbnVsYXJpdHlBdFBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgdG9XS1RleHRHcmFu
dWxhcml0eShncmFudWxhcml0eSksIHNlbGYuX2hhc0ZvY3VzZWRFbGVtZW50LCBbdmlldywgc2Vs
ZWN0aW9uSGFuZGxlcl0oV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAg
X3BhZ2UtPnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KFdlYkNvcmU6OkludFBvaW50
KHBvaW50KSwgdG9XS1RleHRHcmFudWxhcml0eShncmFudWxhcml0eSksIHNlbGYuX2hhc0ZvY3Vz
ZWRFbGVtZW50LCBbdmlldywgc2VsZWN0aW9uSGFuZGxlcl0gewogICAgICAgICBzZWxlY3Rpb25I
YW5kbGVyKCk7CiAgICAgICAgIHZpZXctPl91c2luZ0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBOTzsK
ICAgICAgICAgLS12aWV3LT5fc3VwcHJlc3NOb25FZGl0YWJsZVNpbmdsZVRhcFRleHRJbnRlcmFj
dGlvbkNvdW50OwpAQCAtNDI3Miw3ICs0MjcyLDcgQEAgLSAodm9pZClfcHJldmlvdXNBY2Nlc3Nv
cnlUYWJGb3JXZWJWaWV3OgogLSAodm9pZClfYmVjb21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0
aW9uTW92aW5nRm9yd2FyZDooQk9PTClzZWxlY3RpbmdGb3J3YXJkIGNvbXBsZXRpb25IYW5kbGVy
Oih2b2lkICheKShCT09MIGRpZEJlY29tZUZpcnN0UmVzcG9uZGVyKSljb21wbGV0aW9uSGFuZGxl
cgogewogICAgIGNvbnN0ZXhwciBib29sIGlzS2V5Ym9hcmRFdmVudFZhbGlkID0gZmFsc2U7Ci0g
ICAgX3BhZ2UtPnNldEluaXRpYWxGb2N1cyhzZWxlY3RpbmdGb3J3YXJkLCBpc0tleWJvYXJkRXZl
bnRWYWxpZCwgeyB9LCBbcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0bykgeworICAg
IF9wYWdlLT5zZXRJbml0aWFsRm9jdXMoc2VsZWN0aW5nRm9yd2FyZCwgaXNLZXlib2FyZEV2ZW50
VmFsaWQsIHsgfSwgW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZiksIGNvbXBsZXRpb25I
YW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihbcHJvdGVjdGVkU2VsZiBiZWNvbWVGaXJzdFJlc3BvbmRlcl0pOwogICAg
IH0pOwogfQpAQCAtNDMzNiw3ICs0MzM2LDcgQEAgLSAodm9pZClhY2Nlc3NvcnlUYWI6KEJPT0wp
aXNOZXh0CiAKICAgICBfaXNDaGFuZ2luZ0ZvY3VzVXNpbmdBY2Nlc3NvcnlUYWIgPSBZRVM7CiAg
ICAgW3NlbGYgYmVnaW5TZWxlY3Rpb25DaGFuZ2VdOwotICAgIF9wYWdlLT5mb2N1c05leHRGb2N1
c2VkRWxlbWVudChpc05leHQsIFtwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoV2Vi
S2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKSB7CisgICAgX3BhZ2UtPmZvY3VzTmV4dEZvY3VzZWRF
bGVtZW50KGlzTmV4dCwgW3Byb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildIHsKICAgICAg
ICAgW3Byb3RlY3RlZFNlbGYgZW5kU2VsZWN0aW9uQ2hhbmdlXTsKICAgICAgICAgW3Byb3RlY3Rl
ZFNlbGYgcmVsb2FkSW5wdXRWaWV3c107CiAgICAgICAgIHByb3RlY3RlZFNlbGYtPl9pc0NoYW5n
aW5nRm9jdXNVc2luZ0FjY2Vzc29yeVRhYiA9IE5POwpAQCAtNTQwNyw3ICs1NDA3LDcgQEAgLSAo
dm9pZClleGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2s6KAogICAgIC8vIG9yIG5vdCB0byBr
bm93IHdoZXRoZXIgdG8gdGVsbCBXZWJLaXQgdG8gdHJlYXQgdGhpcyBjb21tYW5kIGFzIHVzZXIg
aW5pdGlhdGVkIG9yIG5vdC4KICAgICBbc2VsZiBiZWdpblNlbGVjdGlvbkNoYW5nZV07CiAgICAg
UmV0YWluUHRyPFdLQ29udGVudFZpZXc+IHZpZXcgPSBzZWxmOwotICAgIF9wYWdlLT5leGVjdXRl
RWRpdENvbW1hbmQoY29tbWFuZE5hbWUsIHsgfSwgW3ZpZXddKFdlYktpdDo6Q2FsbGJhY2tCYXNl
OjpFcnJvcikgeworICAgIF9wYWdlLT5leGVjdXRlRWRpdENvbW1hbmQoY29tbWFuZE5hbWUsIHsg
fSwgW3ZpZXddIHsKICAgICAgICAgW3ZpZXcgZW5kU2VsZWN0aW9uQ2hhbmdlXTsKICAgICB9KTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQkocmV2aXNpb24gMjYwNTQyKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTA1LDQ4ICs1MDUsNTIgQEAgYm9v
bCBXZWJQYWdlUHJveHk6OmFwcGx5QXV0b2NvcnJlY3Rpb24oYwogICAgIHJldHVybiBhdXRvY29y
cmVjdGlvbkFwcGxpZWQ7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RUZXh0V2l0aEdy
YW51bGFyaXR5QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwgV2ViQ29yZTo6
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQsIFdURjo6RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxs
YmFja0Z1bmN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJp
dHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBXZWJDb3JlOjpUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVu
dCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAg
aWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2Fs
bGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2Nh
bGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6c2VsZWN0VGV4dFdpdGhHcmFu
dWxhcml0eUF0UG9pbnQiX3MpKTsKLSAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KHBvaW50LCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4oZ3JhbnVsYXJpdHkpLCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBj
YWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViUGFnZTo6U2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9pbnQocG9pbnQsIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihncmFudWxhcml0eSksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVs
ZW1lbnQpLCBbY2FsbGJhY2tGdW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGJh
Y2tncm91bmRBY3Rpdml0eSA9IG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5KCJXZWJQYWdlUHJveHk6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50Il9zKV0g
KCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKKyAgICB9KTsKIH0KIAot
dm9pZCBXZWJQYWdlUHJveHk6OnNlbGVjdFBvc2l0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24o
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFnZVByb3h5Ojpz
ZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50IHBvaW50LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIFdlYkNvcmU6
OlNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1
c2VkRWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7CiAgICAgaWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oQ2FsbGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CisgICAgICAgIGNhbGxiYWNrRnVu
Y3Rpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvIGNhbGxiYWNr
SUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNz
LT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6c2VsZWN0UG9z
aXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbiJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihw
b2ludCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGdyYW51bGFyaXR5KSwgc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KGRpcmVjdGlvbiksIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIGNhbGxi
YWNrSUQpLCBtX3dlYlBhZ2VJRCk7CisgICAgc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJQYWdlOjpTZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKHBvaW50LCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oZ3JhbnVsYXJpdHkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZGly
ZWN0aW9uKSwgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCksIFtjYWxsYmFja0Z1bmN0
aW9uID0gV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgYmFja2dyb3VuZEFjdGl2aXR5ID0gbV9w
cm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6c2Vs
ZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbiJfcyldICgpIG11dGFibGUgeworICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CisgICAgfSk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
Ojptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
LCBXVEY6OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5j
dGlvbikKK3ZvaWQgV2ViUGFnZVByb3h5Ojptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJl
Y3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBXZWJDb3JlOjpTZWxl
Y3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2Fs
bGJhY2tGdW5jdGlvbikKIHsKICAgICBpZiAoIWhhc1J1bm5pbmdQcm9jZXNzKCkpIHsKLSAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbihDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKKyAgICAg
ICAgY2FsbGJhY2tGdW5jdGlvbigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rp
b24pLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVBy
b3h5Ojptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhEaXJlY3Rpb24iX3MpKTsKLSAgICBtX3By
b2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Ok1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0
aERpcmVjdGlvbihzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ3JhbnVsYXJpdHkpLCBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oZGlyZWN0aW9uKSwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBz
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYlBhZ2U6Ok1vdmVTZWxlY3Rpb25BdEJvdW5k
YXJ5V2l0aERpcmVjdGlvbihzdGF0aWNfY2FzdDx1aW50MzJfdD4oZ3JhbnVsYXJpdHkpLCBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oZGlyZWN0aW9uKSksIFtjYWxsYmFja0Z1bmN0aW9uID0gV1RGTW92
ZShjYWxsYmFja0Z1bmN0aW9uKSwgYmFja2dyb3VuZEFjdGl2aXR5ID0gbV9wcm9jZXNzLT50aHJv
dHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlvbkF0
Qm91bmRhcnlXaXRoRGlyZWN0aW9uIl9zKV0gKCkgbXV0YWJsZSB7CisgICAgICAgIGNhbGxiYWNr
RnVuY3Rpb24oKTsKKyAgICB9KTsKIH0KICAgICAKLXZvaWQgV2ViUGFnZVByb3h5OjpzZWxlY3RQ
b3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIGJvb2wgaXNJbnRl
cmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV1RGOjpGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFz
ZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCit2b2lkIFdlYlBhZ2VQcm94eTo6c2VsZWN0
UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCBib29sIGlzSW50
ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nlc3MoKSkgewotICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6OlVua25vd24pOworICAg
ICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0g
ICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2tGdW5j
dGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdl
UHJveHk6OnNlbGVjdFBvc2l0aW9uQXRQb2ludCJfcykpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0UG9zaXRpb25BdFBvaW50KHBvaW50LCBpc0ludGVyYWN0
aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOworICAgIHNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6U2VsZWN0UG9zaXRpb25BdFBvaW50
KHBvaW50LCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KSwgW2NhbGxiYWNrRnVuY3Rp
b24gPSBXVEZNb3ZlKGNhbGxiYWNrRnVuY3Rpb24pLCBiYWNrZ3JvdW5kQWN0aXZpdHkgPSBtX3By
b2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5OjpzZWxl
Y3RQb3NpdGlvbkF0UG9pbnQiX3MpXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgY2FsbGJhY2tGdW5j
dGlvbigpOworICAgIH0pOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6YmVnaW5TZWxlY3Rpb25J
bkRpcmVjdGlvbihXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKHVpbnQ2NF90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQpAQCAtNzk1LDE1ICs3OTksMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNhbmNlbEF1
dG9zY3JvbGwoKQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Q2FuY2Vs
QXV0b3Njcm9sbCgpLCBtX3dlYlBhZ2VJRCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojptb3Zl
U2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIFdURjo6RnVuY3Rpb248dm9pZCAoQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikKK3ZvaWQgV2ViUGFnZVByb3h5
Ojptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlmICghaGFzUnVubmluZ1Byb2Nl
c3MoKSkgewotICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKENhbGxiYWNrQmFzZTo6RXJyb3I6OlVu
a25vd24pOworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0KFdURk1vdmUo
Y2FsbGJhY2tGdW5jdGlvbiksIG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2
aXR5KCJXZWJQYWdlUHJveHk6Om1vdmVTZWxlY3Rpb25CeU9mZnNldCJfcykpOwotICAgIG1fcHJv
Y2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6TW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KG9mZnNl
dCwgY2FsbGJhY2tJRCksIG1fd2ViUGFnZUlEKTsKKyAgICBzZW5kV2l0aEFzeW5jUmVwbHkoTWVz
c2FnZXM6OldlYlBhZ2U6Ok1vdmVTZWxlY3Rpb25CeU9mZnNldChvZmZzZXQpLCBbY2FsbGJhY2tG
dW5jdGlvbiA9IFdURk1vdmUoY2FsbGJhY2tGdW5jdGlvbiksIGJhY2tncm91bmRBY3Rpdml0eSA9
IG1fcHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5KCJXZWJQYWdlUHJveHk6
Om1vdmVTZWxlY3Rpb25CeU9mZnNldCJfcyldICgpIG11dGFibGUgeworICAgICAgICBjYWxsYmFj
a0Z1bmN0aW9uKCk7CisgICAgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjppbnRlcnByZXRL
ZXlFdmVudChjb25zdCBFZGl0b3JTdGF0ZSYgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCkBAIC0xMDUwLDE1
ICsxMDU1LDE2IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaXNhYmxlSW5zcGVjdG9yTm9kZVMKICAg
ICBwYWdlQ2xpZW50KCkuZGlzYWJsZUluc3BlY3Rvck5vZGVTZWFyY2goKTsKIH0KIAotdm9pZCBX
ZWJQYWdlUHJveHk6OmZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBXVEY6
OkZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2tGdW5jdGlvbikK
K3ZvaWQgV2ViUGFnZVByb3h5Ojpmb2N1c05leHRGb2N1c2VkRWxlbWVudChib29sIGlzRm9yd2Fy
ZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrRnVuY3Rpb24pCiB7CiAgICAg
aWYgKCFoYXNSdW5uaW5nUHJvY2VzcygpKSB7Ci0gICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oQ2Fs
bGJhY2tCYXNlOjpFcnJvcjo6VW5rbm93bik7CisgICAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvIGNhbGxiYWNrSUQgPSBtX2Nh
bGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSwgbV9wcm9jZXNzLT50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIldlYlBhZ2VQcm94eTo6Zm9jdXNOZXh0Rm9jdXNlZEVs
ZW1lbnQiX3MpKTsKLSAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZTo6Rm9jdXNO
ZXh0Rm9jdXNlZEVsZW1lbnQoaXNGb3J3YXJkLCBjYWxsYmFja0lEKSwgbV93ZWJQYWdlSUQpOwor
ICAgIHNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViUGFnZTo6Rm9jdXNOZXh0Rm9jdXNl
ZEVsZW1lbnQoaXNGb3J3YXJkKSwgW2NhbGxiYWNrRnVuY3Rpb24gPSBXVEZNb3ZlKGNhbGxiYWNr
RnVuY3Rpb24pLCBiYWNrZ3JvdW5kQWN0aXZpdHkgPSBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eSgiV2ViUGFnZVByb3h5Ojpmb2N1c05leHRGb2N1c2VkRWxlbWVudCJf
cyldICgpIG11dGFibGUgeworICAgICAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CisgICAgfSk7CiB9
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzZXRGb2N1c2VkRWxlbWVudFZhbHVlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAkocmV2aXNpb24gMjYwNTQyKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjAsMTAgKzExMjAsMTAgQEAg
dm9pZCBXZWJQYWdlOjpjaGFuZ2VGb250KFdlYkNvcmU6OkZvbnRDaAogICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5hcHBseVN0eWxlVG9TZWxlY3Rpb24oY2hhbmdlcy5jcmVhdGVFZGl0aW5nU3R5bGUo
KSwgRWRpdEFjdGlvbjo6U2V0Rm9udCwgRWRpdG9yOjpDb2xvckZpbHRlck1vZGU6OkludmVydENv
bG9yKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2so
Y29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgQ2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmRXaXRoQ2Fs
bGJhY2soY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGV4
ZWN1dGVFZGl0Q29tbWFuZChjb21tYW5kTmFtZSwgYXJndW1lbnQpOwotICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKKyAgICBjb21wbGV0
aW9uSGFuZGxlcigpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNlbGVjdEFsbCgpCkBAIC0zMTQzLDEw
ICszMTQzLDEwIEBAIHZvaWQgV2ViUGFnZTo6dmlld1dpbGxFbmRMaXZlUmVzaXplKCkKICAgICAg
ICAgdmlldy0+d2lsbEVuZExpdmVSZXNpemUoKTsKIH0KIAotdm9pZCBXZWJQYWdlOjpzZXRJbml0
aWFsRm9jdXMoYm9vbCBmb3J3YXJkLCBib29sIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCBjb25zdCBX
ZWJLZXlib2FyZEV2ZW50JiBldmVudCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQ
YWdlOjpzZXRJbml0aWFsRm9jdXMoYm9vbCBmb3J3YXJkLCBib29sIGlzS2V5Ym9hcmRFdmVudFZh
bGlkLCBjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIGlmICghbV9wYWdlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOwogCiAgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gdXNlcklzSW50ZXJhY3RpbmdDaGFuZ2UgeyBtX3VzZXJJc0ludGVyYWN0aW5n
LCB0cnVlIH07CiAKQEAgLTMxNTcsMTMgKzMxNTcsMTIgQEAgdm9pZCBXZWJQYWdlOjpzZXRJbml0
aWFsRm9jdXMoYm9vbCBmb3J3YQogICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgcGxhdGZv
cm1FdmVudChwbGF0Zm9ybShldmVudCkpOwogICAgICAgICBwbGF0Zm9ybUV2ZW50LmRpc2FtYmln
dWF0ZUtleURvd25FdmVudChQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKTsKICAgICAgICAgbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5zZXRJbml0aWFsRm9jdXMoZm9yd2FyZCA/IEZvY3VzRGly
ZWN0aW9uRm9yd2FyZCA6IEZvY3VzRGlyZWN0aW9uQmFja3dhcmQsICZLZXlib2FyZEV2ZW50Ojpj
cmVhdGUocGxhdGZvcm1FdmVudCwgJmZyYW1lLndpbmRvd1Byb3h5KCkpLmdldCgpKTsKLQotICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lE
KSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLnNldEluaXRpYWxGb2N1cyhmb3J3YXJk
ID8gRm9jdXNEaXJlY3Rpb25Gb3J3YXJkIDogRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCwgbnVsbHB0
cik7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2soY2FsbGJh
Y2tJRCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0
Q2FuU3RhcnRNZWRpYVRpbWVyRmlyZWQoKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjYwNTQyKQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NDQsNyArNjQ0
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkaXNhYmxlZEFkYXB0YXRpb25zRGlkQ2hhbmdlKGNv
bnN0IE9wdGlvblNldDxXZWJDb3JlOjpEaXNhYmxlZEFkYXB0YXRpb25zPiYpOwogICAgIHZvaWQg
dmlld3BvcnRQcm9wZXJ0aWVzRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzJik7Ci0gICAgdm9pZCBleGVjdXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2soY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudCwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCBleGVj
dXRlRWRpdENvbW1hbmRXaXRoQ2FsbGJhY2soY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBh
cmd1bWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKICAgICB2b2lkIHNlbGVjdEFs
bCgpOwogCiAgICAgdm9pZCB0ZXh0SW5wdXRDb250ZXh0c0luUmVjdChXZWJDb3JlOjpGbG9hdFJl
Y3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkVsZW1lbnRD
b250ZXh0PiYpPiYmKTsKQEAgLTY5MiwxMSArNjkyLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
bGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBmcm9tLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0
dXJlU3RhdGUsIENhbGxiYWNrSUQpOwogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKHVpbnQzMl90
IGdyYW51bGFyaXR5KTsKICAgICB2b2lkIHNlbGVjdFdvcmRCYWNrd2FyZCgpOwotICAgIHZvaWQg
bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zmc2V0LCBDYWxsYmFja0lEKTsKLSAgICB2
b2lkIHNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2Vk
RWxlbWVudCwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlX
aXRoRGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJp
dHksIHVpbnQzMl90IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVt
ZW50LCBDYWxsYmFja0lEKTsKLSAgICB2b2lkIG1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERp
cmVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9uLCBDYWxsYmFj
a0lEKTsKLSAgICB2b2lkIHNlbGVjdFBvc2l0aW9uQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJRCk7
CisgICAgdm9pZCBtb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5
QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCBi
b29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJik7CisgICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9u
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90
IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgbW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlX
aXRoRGlyZWN0aW9uKHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CisgICAgdm9pZCBzZWxlY3RQb3NpdGlvbkF0UG9p
bnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNl
ZEVsZW1lbnQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCBiZWdpblNl
bGVjdGlvbkluRGlyZWN0aW9uKHVpbnQzMl90IGRpcmVjdGlvbiwgQ2FsbGJhY2tJRCk7CiAgICAg
dm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoRXh0ZW50UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFJlc3BlY3RTZWxlY3Rp
b25BbmNob3IsIENhbGxiYWNrSUQpOwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVu
dFBvaW50QW5kQm91bmRhcnkoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFu
dWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lE
KTsKQEAgLTcxMyw3ICs3MTMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydEludGVyYWN0aW9u
V2l0aEVsZW1lbnRDb250ZXh0T3JQb3NpdGlvbihPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29u
dGV4dD4mJiwgV2ViQ29yZTo6SW50UG9pbnQmJik7CiAgICAgdm9pZCBzdG9wSW50ZXJhY3Rpb24o
KTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0aW9uKTsKLSAg
ICB2b2lkIGZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBDYWxsYmFja0lE
KTsKKyAgICB2b2lkIGZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRp
YWxzKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0Rm9jdXNlZEVs
ZW1lbnRWYWx1ZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldEZvY3VzZWRFbGVtZW50VmFs
dWVBc051bWJlcihkb3VibGUpOwpAQCAtMTQzMyw3ICsxNDMzLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlbG9hZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQzMl90IHJlbG9hZE9wdGlvbnMs
IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYmKTsKICAgICB2b2lkIGdvVG9CYWNrRm9yd2FyZEl0
ZW0odWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1J
ZGVudGlmaWVyJiwgV2ViQ29yZTo6RnJhbWVMb2FkVHlwZSwgV2ViQ29yZTo6U2hvdWxkVHJlYXRB
c0NvbnRpbnVpbmdMb2FkLCBPcHRpb25hbDxXZWJzaXRlUG9saWNpZXNEYXRhPiYmKTsKICAgICB2
b2lkIHRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOwotICAgIHZvaWQgc2V0SW5pdGlhbEZvY3Vz
KGJvb2wgZm9yd2FyZCwgYm9vbCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29uc3QgV2ViS2V5Ym9h
cmRFdmVudCYsIENhbGxiYWNrSUQpOworICAgIHZvaWQgc2V0SW5pdGlhbEZvY3VzKGJvb2wgZm9y
d2FyZCwgYm9vbCBpc0tleWJvYXJkRXZlbnRWYWxpZCwgY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9pZCB1cGRhdGVJc0luV2luZG93
KGJvb2wgaXNJbml0aWFsU3RhdGUgPSBmYWxzZSk7CiAgICAgdm9pZCB2aXNpYmlsaXR5RGlkQ2hh
bmdlKCk7CiAgICAgdm9pZCBzZXRBY3Rpdml0eVN0YXRlKE9wdGlvblNldDxXZWJDb3JlOjpBY3Rp
dml0eVN0YXRlOjpGbGFnPiwgQWN0aXZpdHlTdGF0ZUNoYW5nZUlELCBjb25zdCBWZWN0b3I8Q2Fs
bGJhY2tJRD4mIGNhbGxiYWNrSURzKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjYwNTQyKQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCiBtZXNzYWdl
cyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKLSAgICBTZXRJbml0aWFsRm9jdXMoYm9vbCBm
b3J3YXJkLCBib29sIGlzS2V5Ym9hcmRFdmVudFZhbGlkLCBXZWJLaXQ6OldlYktleWJvYXJkRXZl
bnQgZXZlbnQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIFNldEluaXRpYWxG
b2N1cyhib29sIGZvcndhcmQsIGJvb2wgaXNLZXlib2FyZEV2ZW50VmFsaWQsIFdlYktpdDo6V2Vi
S2V5Ym9hcmRFdmVudCBldmVudCkgLT4gKCkgQXN5bmMKICAgICBTZXRBY3Rpdml0eVN0YXRlKE9w
dGlvblNldDxXZWJDb3JlOjpBY3Rpdml0eVN0YXRlOjpGbGFnPiBhY3Rpdml0eVN0YXRlLCBXZWJL
aXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCBhY3Rpdml0eVN0YXRlQ2hhbmdlSUQsIFZlY3RvcjxX
ZWJLaXQ6OkNhbGxiYWNrSUQ+IGNhbGxiYWNrSURzKQogICAgIFNldExheWVySG9zdGluZ01vZGUo
ZW51bTp1aW50OF90IFdlYktpdDo6TGF5ZXJIb3N0aW5nTW9kZSBsYXllckhvc3RpbmdNb2RlKQog
CkBAIC00Myw3ICs0Myw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewog
ICAgIFZpZXdXaWxsU3RhcnRMaXZlUmVzaXplKCkKICAgICBWaWV3V2lsbEVuZExpdmVSZXNpemUo
KQogCi0gICAgRXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrKFN0cmluZyBuYW1lLCBTdHJp
bmcgYXJndW1lbnQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIEV4ZWN1dGVF
ZGl0Q29tbWFuZFdpdGhDYWxsYmFjayhTdHJpbmcgbmFtZSwgU3RyaW5nIGFyZ3VtZW50KSAtPiAo
KSBBc3luYwogICAgIEtleUV2ZW50KFdlYktpdDo6V2ViS2V5Ym9hcmRFdmVudCBldmVudCkKICAg
ICBNb3VzZUV2ZW50KFdlYktpdDo6V2ViTW91c2VFdmVudCBldmVudCkKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpAQCAtNjgsMTEgKzY4LDExIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5
UmVjZWl2ZXIgewogICAgIFNlbGVjdFdpdGhUd29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50IGZy
b20sIFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3Qg
Z2VzdHVyZVN0YXRlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBFeHRlbmRT
ZWxlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHkpCiAgICAgU2VsZWN0V29yZEJhY2t3YXJkKCkK
LSAgICBNb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MzJfdCBvZmZzZXQsIFdlYktpdDo6Q2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQotICAgIFNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KFdl
YkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVy
YWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
LSAgICBTZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKFdlYkNvcmU6OkludFBv
aW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9uLCBib29s
IGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxs
YmFja0lEKQotICAgIE1vdmVTZWxlY3Rpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbih1aW50MzJf
dCBncmFudWxhcml0eSwgdWludDMyX3QgZGlyZWN0aW9uLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2Fs
bGJhY2tJRCkKLSAgICBTZWxlY3RQb3NpdGlvbkF0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9p
bnQsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgV2ViS2l0OjpDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCisgICAgTW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zmc2V0
KSAtPiAoKSBBc3luYworICAgIFNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KFdlYkNv
cmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0
aW5nV2l0aEZvY3VzZWRFbGVtZW50KSAtPiAoKSBBc3luYworICAgIFNlbGVjdFBvc2l0aW9uQXRC
b3VuZGFyeVdpdGhEaXJlY3Rpb24oV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IGdy
YW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1
c2VkRWxlbWVudCkgLT4gKCkgQXN5bmMKKyAgICBNb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdGhE
aXJlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGRpcmVjdGlvbikgLT4gKCkg
QXN5bmMKKyAgICBTZWxlY3RQb3NpdGlvbkF0UG9pbnQoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQs
IGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCkgLT4gKCkgQXN5bmMKICAgICBC
ZWdpblNlbGVjdGlvbkluRGlyZWN0aW9uKHVpbnQzMl90IGRpcmVjdGlvbiwgV2ViS2l0OjpDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCiAgICAgVXBkYXRlU2VsZWN0aW9uV2l0aEV4dGVudFBvaW50KFdl
YkNvcmU6OkludFBvaW50IHBvaW50LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1l
bnQsIGVudW06Ym9vbCBXZWJLaXQ6OlJlc3BlY3RTZWxlY3Rpb25BbmNob3IgcmVzcGVjdFNlbGVj
dGlvbkFuY2hvciwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgVXBkYXRlU2Vs
ZWN0aW9uV2l0aEV4dGVudFBvaW50QW5kQm91bmRhcnkoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQs
IHVpbnQzMl90IGdyYW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1l
bnQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODksNyArODksNyBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBTdGFydEludGVyYWN0aW9uV2l0
aEVsZW1lbnRDb250ZXh0T3JQb3NpdGlvbihPcHRpb25hbDxXZWJDb3JlOjpFbGVtZW50Q29udGV4
dD4gZWxlbWVudENvbnRleHQsIFdlYkNvcmU6OkludFBvaW50IHBvaW50KQogICAgIFN0b3BJbnRl
cmFjdGlvbigpCiAgICAgUGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24pCi0g
ICAgRm9jdXNOZXh0Rm9jdXNlZEVsZW1lbnQoYm9vbCBpc0ZvcndhcmQsIFdlYktpdDo6Q2FsbGJh
Y2tJRCBjYWxsYmFja0lEKQorICAgIEZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3
YXJkKSAtPiAoKSBBc3luYwogICAgIFNldEZvY3VzZWRFbGVtZW50VmFsdWUoU3RyaW5nIHZhbHVl
KQogICAgIEF1dG9maWxsTG9naW5DcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBw
YXNzd29yZCkKICAgICBTZXRGb2N1c2VkRWxlbWVudFZhbHVlQXNOdW1iZXIoZG91YmxlIHZhbHVl
KQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0JKHJldmlzaW9uIDI2MDU0MikKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODI3LDcgKzE4
MjcsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVjdFdvcmRCYWNrd2FyZCgpCiAgICAgICAgIGZyYW1l
LnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1l
bnQoKSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgp
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMy
X3Qgb2Zmc2V0LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6Om1vdmVTZWxl
Y3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgCkBAIC0xODQzLDcgKzE4NDMs
NyBAQCB2b2lkIFdlYlBhZ2U6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzCiAgICAgfQogICAg
IGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSAmJiBzdGFydFBvc2l0aW9uICE9IHBvc2l0aW9uKQog
ICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUo
KmZyYW1lLmRvY3VtZW50KCksIHBvc2l0aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFm
ZmluaXR5KCksIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
LCBVc2VyVHJpZ2dlcmVkKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRD
YWxsYmFjayhjYWxsYmFja0lEKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KICAgICAK
IHZvaWQgV2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50JiBwb3NpdGlvbkluV2luZG93KQpAQCAtMjA2NCw3ICsyMDY0LDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIFdlYlBhZ2U6OnZpc2libGVQb3NpdGlvbgogICAgIHJldHVybiBmcmFtZS52aXNp
YmxlUG9zaXRpb25Gb3JQb2ludChjb25zdHJhaW5lZFBvaW50KTsKIH0KIAotdm9pZCBXZWJQYWdl
OjpzZWxlY3RQb3NpdGlvbkF0UG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBi
b29sIGlzSW50ZXJhY3RpbmdXaXRoRm9jdXNlZEVsZW1lbnQsIENhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKK3ZvaWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdFBvaW50KGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBwb2ludCwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gdXNlcklzSW50ZXJhY3RpbmdDaGFuZ2UgeyBtX3VzZXJJc0ludGVyYWN0aW5n
LCB0cnVlIH07CiAKQEAgLTIwNzUsMTAgKzIwNzUsMTAgQEAgdm9pZCBXZWJQYWdlOjpzZWxlY3RQ
b3NpdGlvbkF0UG9pbnQoY29ucwogICAgIAogICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkK
ICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5h
ZmZpbml0eSgpLCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lk
Q2FsbGJhY2soY2FsbGJhY2tJRCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKLXZv
aWQgV2ViUGFnZTo6c2VsZWN0UG9zaXRpb25BdEJvdW5kYXJ5V2l0aERpcmVjdGlvbihjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBk
aXJlY3Rpb24sIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjpzZWxlY3RQb3NpdGlvbkF0Qm91bmRhcnlXaXRo
RGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVs
YXJpdHksIHVpbnQzMl90IGRpcmVjdGlvbiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRF
bGVtZW50LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
CiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkluRm9jdXNlZE5vZGVGb3JQb2ludChmcmFtZSwgcG9pbnQsIGlzSW50ZXJhY3RpbmdXaXRoRm9j
dXNlZEVsZW1lbnQpOwpAQCAtMjA4OCwxMCArMjA4OCwxMCBAQCB2b2lkIFdlYlBhZ2U6OnNlbGVj
dFBvc2l0aW9uQXRCb3VuZGFyeVdpCiAgICAgICAgIGlmIChwb3NpdGlvbi5pc05vdE51bGwoKSkK
ICAgICAgICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoUmFuZ2U6OmNy
ZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgcG9zaXRpb24sIHBvc2l0aW9uKS5wdHIoKSwgVVBTVFJF
QU0sIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2Vy
VHJpZ2dlcmVkKTsKICAgICB9Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lk
Q2FsbGJhY2soY2FsbGJhY2tJRCkpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKLXZv
aWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKHVpbnQzMl90
IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
K3ZvaWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkF0Qm91bmRhcnlXaXRoRGlyZWN0aW9uKHVpbnQz
Ml90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBkaXJlY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIApAQCAtMjEwMiw3
ICsyMTAyLDcgQEAgdm9pZCBXZWJQYWdlOjptb3ZlU2VsZWN0aW9uQXRCb3VuZGFyeVdpdAogICAg
ICAgICBpZiAocG9zaXRpb24uaXNOb3ROdWxsKCkpCiAgICAgICAgICAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBv
c2l0aW9uLCBwb3NpdGlvbikucHRyKCksIGlzRm9yd2FyZD8gVVBTVFJFQU0gOiBET1dOU1RSRUFN
LCBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiAgICAgfQotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENh
bGxiYWNrKGNhbGxiYWNrSUQpKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogfQogCiBSZWZQ
dHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KEZyYW1lJiBmcmFt
ZSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwg
Ym9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50KQpAQCAtMjE0OCw3ICsyMTQ4LDcg
QEAgdm9pZCBXZWJQYWdlOjpzZXRGb2N1c2VkRnJhbWVCZWZvcmVTZWxlYwogICAgICAgICBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLnNldEZvY3VzZWRGcmFtZShyZXN1bHQuaW5uZXJOb2RlRnJh
bWUoKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6c2VsZWN0VGV4dFdpdGhHcmFudWxhcml0eUF0UG9p
bnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwg
Ym9vbCBpc0ludGVyYWN0aW5nV2l0aEZvY3VzZWRFbGVtZW50LCBDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCit2b2lkIFdlYlBhZ2U6OnNlbGVjdFRleHRXaXRoR3JhbnVsYXJpdHlBdFBvaW50KGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIGJvb2wgaXNJ
bnRlcmFjdGluZ1dpdGhGb2N1c2VkRWxlbWVudCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHNldEZvY3VzZWRGcmFtZUJlZm9yZVNlbGVjdGlu
Z1RleHRBdExvY2F0aW9uKHBvaW50KTsKIApAQCAtMjE1Nyw3ICsyMTU3LDcgQEAgdm9pZCBXZWJQ
YWdlOjpzZWxlY3RUZXh0V2l0aEdyYW51bGFyaXR5QQogICAgIGlmIChyYW5nZSkKICAgICAgICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShyYW5nZS5nZXQoKSwgVVBTVFJFQU0s
IFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJp
Z2dlcmVkKTsKICAgICBtX2luaXRpYWxTZWxlY3Rpb24gPSByYW5nZTsKLSAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7CisgICAgY29tcGxl
dGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpiZWdpblNlbGVjdGlvbkluRGlyZWN0
aW9uKHVpbnQzMl90IGRpcmVjdGlvbiwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtMzA1Mywx
NCArMzA1MywxNCBAQCBzdGF0aWMgaW5saW5lIEVsZW1lbnQqIG5leHRBc3Npc3RhYmxlRWxlCiAg
ICAgcmV0dXJuIG5leHRFbGVtZW50OwogfQogCi12b2lkIFdlYlBhZ2U6OmZvY3VzTmV4dEZvY3Vz
ZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdl
YlBhZ2U6OmZvY3VzTmV4dEZvY3VzZWRFbGVtZW50KGJvb2wgaXNGb3J3YXJkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgRWxlbWVudCogbmV4
dEVsZW1lbnQgPSBuZXh0QXNzaXN0YWJsZUVsZW1lbnQobV9mb2N1c2VkRWxlbWVudC5nZXQoKSwg
Km1fcGFnZSwgaXNGb3J3YXJkKTsKICAgICBtX3VzZXJJc0ludGVyYWN0aW5nID0gdHJ1ZTsKICAg
ICBpZiAobmV4dEVsZW1lbnQpCiAgICAgICAgIG5leHRFbGVtZW50LT5mb2N1cygpOwogICAgIG1f
dXNlcklzSW50ZXJhY3RpbmcgPSBmYWxzZTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoKTsK
IH0KIAogdm9pZCBXZWJQYWdlOjpnZXRGb2N1c2VkRWxlbWVudEluZm9ybWF0aW9uKEZvY3VzZWRF
bGVtZW50SW5mb3JtYXRpb24mIGluZm9ybWF0aW9uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>