<?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>19041</bug_id>
          
          <creation_ts>2008-05-13 20:57:29 -0700</creation_ts>
          <short_desc>[wx] Frames support</short_desc>
          <delta_ts>2009-09-03 14:22:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit wx</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Wx</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kevin Ollivier">kevino</reporter>
          <assigned_to name="Kevin Ollivier">kevino</assigned_to>
          <cc>robin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>80320</commentid>
    <comment_count>0</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-05-13 20:57:29 -0700</bug_when>
    <thetext>This is a bug for putting all the patches related to Frames support. I think in the end, it will require three major steps:

1. Rename wxWebFrame to wxWebBrowserShell, to allow us to create a wxWebFrame that is roughly analogous with WebFrame.

2. Implement wxWebFrame to encapsulate frame creation and load.

3. Implement support for PlatformScrollbar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80331</commentid>
    <comment_count>1</comment_count>
      <attachid>21119</attachid>
    <who name="Robin Dunn">robin</who>
    <bug_when>2008-05-14 00:43:11 -0700</bug_when>
    <thetext>Created attachment 21119
first pass at PltformScrollbar

Here&apos;s a first try at PlatformScrollbar for you to play with.  Not sure if it&apos;s doing what it is supposed to yet, but it at least compiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80676</commentid>
    <comment_count>2</comment_count>
      <attachid>21210</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-05-16 23:24:56 -0700</bug_when>
    <thetext>Created attachment 21210
wxWebFrame rename to enable us to work on next steps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80903</commentid>
    <comment_count>3</comment_count>
      <attachid>21210</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-05-19 10:52:40 -0700</bug_when>
    <thetext>Comment on attachment 21210
wxWebFrame rename to enable us to work on next steps

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81084</commentid>
    <comment_count>4</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-05-20 22:49:04 -0700</bug_when>
    <thetext>wxWebFrame rename landed in r33957, thanks! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81721</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-05-28 07:12:22 -0700</bug_when>
    <thetext>Can this bug be marked as RESOLVED/FIXED, or does Attachment #21119 still need to be reviewed?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81767</commentid>
    <comment_count>6</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-05-28 11:23:53 -0700</bug_when>
    <thetext>This still needs to be reviewed. I&apos;ve finally got some extra time to work on clearing the backlog of patches, so hopefully we should have things worked out by tomorrow or so. (I would have done it yesterday, but the addition of SquirrelFish, and the recurrence of an old FontPlatformData crash which I thought we had fixed had me playing catchup for a while. ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82655</commentid>
    <comment_count>7</comment_count>
      <attachid>21210</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-06-08 13:35:50 -0700</bug_when>
    <thetext>Comment on attachment 21210
wxWebFrame rename to enable us to work on next steps

Clearing the review flag on this already-landed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84884</commentid>
    <comment_count>8</comment_count>
      <attachid>21119</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-07-01 08:30:48 -0700</bug_when>
    <thetext>Comment on attachment 21119
first pass at PltformScrollbar

Thanks for the patch, Robin!

r- since this patch needs ChangeLog entries.  See this page for more details:

http://webkit.org/coding/contributing.html

Also note that it may have bit-rotted since the rename patch landed (and due to other renames in the WebKit source tree).  

Overall the style and formatting of the code in the patch looks good.  You might consider adding your own copyright statement to the modified files (or at least the brand new file, even though it&apos;s based on an existing file).

Please update the patch and resubmit!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88005</commentid>
    <comment_count>9</comment_count>
      <attachid>22689</attachid>
    <who name="Kevin Watters">kevinwatters</who>
    <bug_when>2008-08-06 17:02:10 -0700</bug_when>
    <thetext>Created attachment 22689
Revised wxWebFrame patch

Revised version of the above patch implementing wxWebFrame, with ChangeLog entries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88014</commentid>
    <comment_count>10</comment_count>
      <attachid>22689</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-08-06 20:48:18 -0700</bug_when>
    <thetext>Comment on attachment 22689
Revised wxWebFrame patch

This looks good to me, and as discussed, we really can use the leak fix. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88015</commentid>
    <comment_count>11</comment_count>
      <attachid>22689</attachid>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2008-08-06 20:52:38 -0700</bug_when>
    <thetext>Comment on attachment 22689
Revised wxWebFrame patch

Patch landed in r35620, thanks! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144531</commentid>
    <comment_count>12</comment_count>
      <attachid>38994</attachid>
    <who name="Kevin Watters">kevinwatters</who>
    <bug_when>2009-09-03 08:44:16 -0700</bug_when>
    <thetext>Created attachment 38994
finishes wx port frames support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144566</commentid>
    <comment_count>13</comment_count>
      <attachid>39001</attachid>
    <who name="Kevin Watters">kevinwatters</who>
    <bug_when>2009-09-03 12:15:27 -0700</bug_when>
    <thetext>Created attachment 39001
finishes wx port frames support (revised)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144601</commentid>
    <comment_count>14</comment_count>
    <who name="Kevin Ollivier">kevino</who>
    <bug_when>2009-09-03 14:22:18 -0700</bug_when>
    <thetext>Landed in r48029, thanks! :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21119</attachid>
            <date>2008-05-14 00:43:11 -0700</date>
            <delta_ts>2008-07-01 08:30:48 -0700</delta_ts>
            <desc>first pass at PltformScrollbar</desc>
            <filename>webkit-platformscrollbar.patch</filename>
            <type>text/plain</type>
            <size>9696</size>
            <attacher name="Robin Dunn">robin</attacher>
            
              <data encoding="base64">SW5kZXg6IC9wcm9qZWN0cy93ay9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvcHJvamVjdHMvd2svV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJ
KHJldmlzaW9uIDMzMDM3KQorKysgL3Byb2plY3RzL3drL1dlYktpdC9XZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNiArMjE0LDggQEAKICAgICAgICAgV2lk
Z2V0KHd4V2luZG93Kik7CiAgICAgICAgIHd4V2luZG93KiBuYXRpdmVXaW5kb3coKSBjb25zdDsK
ICAgICAgICAgdmlydHVhbCB2b2lkIHNldE5hdGl2ZVdpbmRvdyh3eFdpbmRvdyopOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKyAgICAgICAgU2Nyb2xsVmll
dyogcGFyZW50KCkgY29uc3Q7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6CkluZGV4OiAvcHJvamVj
dHMvd2svV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vd3gvUGxhdGZvcm1TY3JvbGxCYXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSAvcHJvamVjdHMvd2svV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vd3gvUGxhdGZv
cm1TY3JvbGxCYXIuaAkocmV2aXNpb24gMzMwMzcpCisrKyAvcHJvamVjdHMvd2svV2ViS2l0L1dl
YkNvcmUvcGxhdGZvcm0vd3gvUGxhdGZvcm1TY3JvbGxCYXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsOSArNDQsMTEgQEAKICAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdl
UmVjdCk7CiAKLSAgICBzdGF0aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSB7IHJl
dHVybiAxNzsgfQotICAgIHN0YXRpYyBpbnQgdmVydGljYWxTY3JvbGxiYXJXaWR0aCgpIHsgcmV0
dXJuIDE3OyB9CisgICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CiAKKyAg
ICBzdGF0aWMgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKKyAgICBzdGF0aWMgaW50
IHZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKTsKKwogcHJvdGVjdGVkOiAgICAKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVt
YlByb3BvcnRpb24oKTsKSW5kZXg6IC9wcm9qZWN0cy93ay9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9y
bS93eC9QbGF0Zm9ybVNjcm9sbEJhcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvcHJvamVjdHMvd2sv
V2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vd3gvUGxhdGZvcm1TY3JvbGxCYXJXeC5jcHAJKHJldmlz
aW9uIDApCisrKyAvcHJvamVjdHMvd2svV2ViS2l0L1dlYkNvcmUvcGxhdGZvcm0vd3gvUGxhdGZv
cm1TY3JvbGxCYXJXeC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxm
aXNoLm9yZworICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPHd4L3d4Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitjbGFzcyBQbGF0ZnJvbVNjcm9sbGJhckV2dEhhbmRs
ZXIgOiBwdWJsaWMgd3hFdnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBQbGF0ZnJvbVNjcm9sbGJh
ckV2dEhhbmRsZXIoUGxhdGZvcm1TY3JvbGxiYXIqIHNjcm9sbGJhcikKKyAgICAgICAgOiBtX3Nj
cm9sbGJhcihzY3JvbGxiYXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgT25TY3JvbGwod3hT
Y3JvbGxFdmVudCYgZXZlbnQpOworICAgIAorcHJpdmF0ZToKKyAgICBQbGF0Zm9ybVNjcm9sbGJh
ciogbV9zY3JvbGxiYXI7CisgICAgCisgICAgREVDTEFSRV9FVkVOVF9UQUJMRSgpCit9OworCitC
RUdJTl9FVkVOVF9UQUJMRShQbGF0ZnJvbVNjcm9sbGJhckV2dEhhbmRsZXIsIHd4RXZ0SGFuZGxl
cikKKyAgICBFVlRfU0NST0xMKFBsYXRmcm9tU2Nyb2xsYmFyRXZ0SGFuZGxlcjo6T25TY3JvbGwp
CitFTkRfRVZFTlRfVEFCTEUoKQorCisKK3ZvaWQgUGxhdGZyb21TY3JvbGxiYXJFdnRIYW5kbGVy
OjpPblNjcm9sbCh3eFNjcm9sbEV2ZW50JiBldmVudCkKK3sKKyAgICBtX3Njcm9sbGJhci0+c2V0
VmFsdWUoZXZlbnQuR2V0UG9zaXRpb24oKSk7Cit9CisKKworUGxhdGZvcm1TY3JvbGxiYXI6OlBs
YXRmb3JtU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKQorICAgIDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIGNvbnRy
b2xTaXplKQoreworfQorCitQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkK
K3sKKyAgICBpZiAoIG5hdGl2ZVdpbmRvdygpICkgeworICAgICAgICBkZWxldGUgbmF0aXZlV2lu
ZG93KCktPlBvcEV2ZW50SGFuZGxlcigpOworICAgICAgICBuYXRpdmVXaW5kb3coKS0+RGVzdHJv
eSgpOworICAgIH0KK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIFdpZGdldDo6d2lkdGgoKTsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFy
OjpoZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OmhlaWdodCgpOworfQorCit2
b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBX
aWRnZXQ6OnNldEVuYWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBk
YW1hZ2VSZWN0KQoreworICAgIFdpZGdldDo6cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBkYW1hZ2VS
ZWN0KTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UGFyZW50KFNjcm9sbFZpZXcq
IHBhcmVudCkKK3sKKyAgICBXaWRnZXQ6OnNldFBhcmVudChwYXJlbnQpOworCisgICAgLy8gbm93
IHRoYXQgd2UgaGF2ZSBhIHBhcmVudCB3ZSBjYW4gY3JlYXRlIHRoZSByZWFsIHdpZGdldAorICAg
IHd4U2Nyb2xsQmFyKiBzYiA9IG5ldyB3eFNjcm9sbEJhciggcGFyZW50LT5uYXRpdmVXaW5kb3co
KSwgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eERlZmF1bHRQ
b3NpdGlvbiwgd3hEZWZhdWx0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eFNCX0hPUklaT05UQUwgOiB3eFNCX1ZFUlRJ
Q0FMICk7CisKKyAgICBzYi0+UHVzaEV2ZW50SGFuZGxlcihuZXcgUGxhdGZyb21TY3JvbGxiYXJF
dnRIYW5kbGVyKHRoaXMpKTsKKyAgICBzZXROYXRpdmVXaW5kb3coc2IpOworCisgICAgcmVzaXpl
KFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCksCisgICAgICAg
ICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkpOworfQorCit2
b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkKK3sKKyAgICBpZiAo
IG5hdGl2ZVdpbmRvdygpICkgeworICAgICAgICBpbnQgcG9zID0gbV9jdXJyZW50UG9zIC8gbV9s
aW5lU3RlcDsKKyAgICAgICAgKCh3eFNjcm9sbEJhciopbmF0aXZlV2luZG93KCkpLT5TZXRUaHVt
YlBvc2l0aW9uKHBvcyk7CisgICAgfQorfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlByb3BvcnRpb24oKQoreworICAgIGlmICggbmF0aXZlV2luZG93KCkgKSB7CisgICAg
ICAgIGludCBwb3MgPSBtX2N1cnJlbnRQb3MgLyBtX2xpbmVTdGVwOworICAgICAgICBpbnQgdGh1
bWJTaXplID0gbV92aXNpYmxlU2l6ZSAvIG1fbGluZVN0ZXA7CisgICAgICAgIGludCByYW5nZSA9
IG1fdG90YWxTaXplIC8gbV9saW5lU3RlcDs7CisgICAgICAgIGludCBwYWdlU2l6ZSA9IG1fdmlz
aWJsZVNpemUgLyBtX2xpbmVTdGVwIC0gMTsKKyAgICAKKyAgICAgICAgKCh3eFNjcm9sbEJhciop
bmF0aXZlV2luZG93KCkpLT5TZXRTY3JvbGxiYXIocG9zLCB0aHVtYlNpemUsIHJhbmdlLCBwYWdl
U2l6ZSk7CisgICAgfQorfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgc2V0RnJhbWVHZW9tZXRyeShyZWN0KTsKK30KKworaW50
IFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCkKK3sKKyAgICBy
ZXR1cm4gd3hTeXN0ZW1TZXR0aW5nczo6R2V0TWV0cmljKHd4U1lTX0hTQ1JPTExfWSk7Cit9CisK
K2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpCit7CisgICAg
cmV0dXJuIHd4U3lzdGVtU2V0dGluZ3M6OkdldE1ldHJpYyh3eFNZU19WU0NST0xMX1gpOworfQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogL3Byb2plY3RzL3drL1dlYktpdC9XZWJDb3JlL3BsYXRmb3Jt
L3d4L1BsYXRmb3JtU2Nyb2xsQmFyV3guY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlw
ZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5kZXg6
IC9wcm9qZWN0cy93ay9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIC9wcm9qZWN0cy93ay9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS93eC9T
Y3JvbGxWaWV3V3guY3BwCShyZXZpc2lvbiAzMzAzNykKKysrIC9wcm9qZWN0cy93ay9XZWJLaXQv
V2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxWaWV3V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjAsNyArMzYwLDYgQEAKIAogICAgIGlmIChtX2RhdGEtPnZTY3JvbGxiYXJNb2RlICE9IG5ld01v
ZGUpIHsKICAgICAgICAgbV9kYXRhLT52U2Nyb2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAg
IGFkanVzdFNjcm9sbGJhcnMoKTsKICAgICAgICAgbmVlZHNBZGp1c3QgPSB0cnVlOwogICAgIH0K
IApAQCAtNDMxLDEwICs0MzAsOCBAQAogewogICAgIG1fZGF0YS0+bV9jaGlsZHJlbi5hZGQod2lk
Z2V0KTsKIAotICAgIC8vIE5COiBJbiBhbGwgY2FzZXMgSSdtIGF3YXJlIG9mLAotICAgIC8vIGJ5
IHRoZSB0aW1lIHRoaXMgaXMgY2FsbGVkIHRoZSBTY3JvbGxWaWV3IGlzIGFscmVhZHkgYSBjaGls
ZAotICAgIC8vIG9mIGl0cyBwYXJlbnQgV2lkZ2V0IGJ5IHd4IHBvcnQgQVBJcywgc28gSSBkb24n
dCB0aGluawotICAgIC8vIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KKyAgICAvLyBOb3cg
c2V0IHRoZSBjaGlsZCB3aWRnZXQncyBwYXJlbnQgdG8gdGhpcworICAgIHdpZGdldC0+c2V0UGFy
ZW50KHRoaXMpOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCogd2lk
Z2V0KQpJbmRleDogL3Byb2plY3RzL3drL1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBv
cmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL3Byb2plY3RzL3drL1dlYktpdC9XZWJD
b3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDMzMDM3KQor
KysgL3Byb2plY3RzL3drL1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NSwxNiArMTQ1LDYgQEAKIAogdm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkg
eyBub3RJbXBsZW1lbnRlZCgpOyB9IAogCi1QbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3Jv
bGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgOiBTY3JvbGxiYXIoY2xp
ZW50LCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotUGxh
dGZvcm1TY3JvbGxiYXI6On5QbGF0Zm9ybVNjcm9sbGJhcigpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQotaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KLWludCBQbGF0Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkgY29uc3QgeyBu
b3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gMDsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0
RW5hYmxlZChib29sKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KLXZvaWQgUGxhdGZvcm1TY3JvbGxi
YXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpIHsg
bm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQ
b3NpdGlvbigpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6
dXBkYXRlVGh1bWJQcm9wb3J0aW9uKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9Ci12b2lkIFBsYXRm
b3JtU2Nyb2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmKSB7IG5vdEltcGxlbWVudGVkKCk7
IH0KLQogdm9pZCBGaWxlQ2hvb3Nlcjo6b3BlbkZpbGVDaG9vc2VyKERvY3VtZW50KikgeyBub3RJ
bXBsZW1lbnRlZCgpOyB9CiBTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29u
c3QgRm9udCYsIGludCB3aWR0aCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3Ry
aW5nKCk7IH0KIApJbmRleDogL3Byb2plY3RzL3drL1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL3d4
L1dpZGdldFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvcHJvamVjdHMvd2svV2ViS2l0L1dlYkNvcmUv
cGxhdGZvcm0vd3gvV2lkZ2V0V3guY3BwCShyZXZpc2lvbiAzMzAzNykKKysrIC9wcm9qZWN0cy93
ay9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS93eC9XaWRnZXRXeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDYgKzQxLDcgQEAKICAgICB3eFdpbmRvdyogbmF0aXZlV2luZG93OwogICAgIEZvbnQg
Zm9udDsKICAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKKyAgICBTY3JvbGxWaWV3KiBwYXJlbnQ7
CiB9OwogCiBXaWRnZXQ6OldpZGdldCgpCkBAIC00OCw2ICs0OSw3IEBACiB7CiAgICAgZGF0YS0+
bmF0aXZlV2luZG93ID0gMDsKICAgICBkYXRhLT5jbGllbnQgPSAwOworICAgIGRhdGEtPnBhcmVu
dCA9IDA7CiB9CiAKIFdpZGdldDo6V2lkZ2V0KHd4V2luZG93KiB3aW4pCkBAIC03MSw2ICs3Mywx
NiBAQAogICAgIGRhdGEtPm5hdGl2ZVdpbmRvdyA9IHdpbjsKIH0KIAordm9pZCBXaWRnZXQ6OnNl
dFBhcmVudChTY3JvbGxWaWV3KiBwYXJlbnQpCit7CisgICAgZGF0YS0+cGFyZW50ID0gcGFyZW50
OworfQorICAgIAorU2Nyb2xsVmlldyogV2lkZ2V0OjpwYXJlbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBkYXRhLT5wYXJlbnQ7Cit9CisKIHZvaWQgV2lkZ2V0OjpzZXRDbGllbnQoV2lkZ2V0Q2xp
ZW50KiBjKQogewogICAgIGRhdGEtPmNsaWVudCA9IGM7CkBAIC0xNTIsNCArMTY0LDQgQEAKICAg
ICAgICAgZGF0YS0+bmF0aXZlV2luZG93LT5VcGRhdGUoKTsKIH0KIAotfQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKK30KSW5kZXg6IC9wcm9qZWN0cy93ay9XZWJLaXQvV2ViQ29yZS93ZWJj
b3JlLXd4LmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvcHJvamVjdHMvd2svV2ViS2l0L1dlYkNvcmUvd2Vi
Y29yZS13eC5ia2wJKHJldmlzaW9uIDMzMDM3KQorKysgL3Byb2plY3RzL3drL1dlYktpdC9XZWJD
b3JlL3dlYmNvcmUtd3guYmtsCSh3b3JraW5nIGNvcHkpCkBAIC04MSw2ICs4MSw3IEBACiAgICAg
ICAgICAgICBwbGF0Zm9ybS93eC9Nb3VzZUV2ZW50V3guY3BwCiAgICAgICAgICAgICBwbGF0Zm9y
bS93eC9Nb3VzZVdoZWVsRXZlbnRXeC5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL3d4L1Bhc3Rl
Ym9hcmRXeC5jcHAKKwkgICAgcGxhdGZvcm0vd3gvUGxhdGZvcm1TY3JvbGxiYXJXeC5jcHAKICAg
ICAgICAgICAgIHBsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCiAgICAgICAgICAgICBwbGF0
Zm9ybS93eC9TY3JlZW5XeC5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL3d4L1Njcm9sbFZpZXdX
eC5jcHAK
</data>
<flag name="review"
          id="9229"
          type_id="1"
          status="-"
          setter="ddkilzer"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21210</attachid>
            <date>2008-05-16 23:24:56 -0700</date>
            <delta_ts>2008-06-08 13:35:50 -0700</delta_ts>
            <desc>wxWebFrame rename to enable us to work on next steps</desc>
            <filename>wxwebframe-rename.patch</filename>
            <type>text/plain</type>
            <size>27673</size>
            <attacher name="Kevin Ollivier">kevino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAJKHJldmlz
aW9uIDMzNTQ4KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDx3eC90
ZXh0ZGxnLmg+CiAKLSNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkJyb3dzZXJT
aGVsbC5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlICJXZWJWaWV3UHJpdmF0ZS5o
IgogCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAvLyB3aGVuIHRoYXQgZXZlbnQgaXMgbm90IGhh
bmRsZWQuCiAgICAgCiAgICAgUGFnZSogbXlQYWdlID0gMDsKLSAgICB3eFdlYkZyYW1lKiBuZXdG
cmFtZSA9IG5ldyB3eFdlYkZyYW1lKHd4VGhlQXBwLT5HZXRBcHBOYW1lKCkpOworICAgIHd4V2Vi
QnJvd3NlclNoZWxsKiBuZXdGcmFtZSA9IG5ldyB3eFdlYkJyb3dzZXJTaGVsbCh3eFRoZUFwcC0+
R2V0QXBwTmFtZSgpKTsKICAgICAKICAgICBpZiAobmV3RnJhbWUtPndlYnZpZXcpIHsKICAgICAg
ICAgbmV3RnJhbWUtPndlYnZpZXctPkxvYWRVUkwocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKSk7CkluZGV4OiBXZWJLaXQvd3gvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC93eC9DaGFuZ2VMb2cJKHJldmlzaW9uIDMzNTQ4KQorKysgV2ViS2l0L3d4L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDA4LTA1LTE2ICBLZXZpbiBP
bGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgUmVuYW1lIHd4V2ViRnJhbWUgLT4g
d3hXZWJCcm93c2VyU2hlbGwgaW4gcHJlcGFyYXRpb24gdG8gaW50cm9kdWNlIGEgV2ViRnJhbWUK
KyAgICAgICAgY291bnRlcnBhcnQgaW4gd3ggcG9ydC4gKEZyYW1lIHR5cGljYWxseSBtZWFucyAn
dG9wIGxldmVsIHdpbmRvdycgaW4gd3ggdGVybXMuKQorICAgICAgICAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDQxCisKKyAgICAgICAgKiBXZWJC
cm93c2VyU2hlbGwuY3BwOiBDb3BpZWQgZnJvbSBXZWJLaXQvd3gvV2ViRnJhbWUuY3BwLgorICAg
ICAgICAod3hXZWJCcm93c2VyU2hlbGw6Ond4V2ViQnJvd3NlclNoZWxsKToKKyAgICAgICAgKHd4
V2ViQnJvd3NlclNoZWxsOjp+d3hXZWJCcm93c2VyU2hlbGwpOgorICAgICAgICAod3hXZWJCcm93
c2VyU2hlbGw6OlNob3dEZWJ1Z01lbnUpOgorICAgICAgICAod3hXZWJCcm93c2VyU2hlbGw6Ok9u
UXVpdCk6CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVsbDo6T25BYm91dCk6CisgICAgICAgICh3
eFdlYkJyb3dzZXJTaGVsbDo6T25Mb2FkRmlsZSk6CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVs
bDo6T25Mb2FkRXZlbnQpOgorICAgICAgICAod3hXZWJCcm93c2VyU2hlbGw6Ok9uQmVmb3JlTG9h
ZCk6CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVsbDo6T25BZGRyZXNzQmFyRW50ZXIpOgorICAg
ICAgICAod3hXZWJCcm93c2VyU2hlbGw6Ok9uU2VhcmNoQ3RybEVudGVyKToKKyAgICAgICAgKHd4
V2ViQnJvd3NlclNoZWxsOjpPbkJhY2spOgorICAgICAgICAod3hXZWJCcm93c2VyU2hlbGw6Ok9u
Rm9yd2FyZCk6CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVsbDo6T25TdG9wKToKKyAgICAgICAg
KHd4V2ViQnJvd3NlclNoZWxsOjpPblJlbG9hZCk6CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVs
bDo6T25NYWtlVGV4dExhcmdlcik6CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVsbDo6T25NYWtl
VGV4dFNtYWxsZXIpOgorICAgICAgICAod3hXZWJCcm93c2VyU2hlbGw6Ok9uR2V0U291cmNlKToK
KyAgICAgICAgKHd4V2ViQnJvd3NlclNoZWxsOjpPblNldFNvdXJjZSk6CisgICAgICAgICh3eFdl
YkJyb3dzZXJTaGVsbDo6T25Ccm93c2UpOgorICAgICAgICAod3hXZWJCcm93c2VyU2hlbGw6Ok9u
RWRpdCk6CisgICAgICAgICh3eFdlYkJyb3dzZXJTaGVsbDo6T25SdW5TY3JpcHQpOgorICAgICAg
ICAqIFdlYkJyb3dzZXJTaGVsbC5oOiBDb3BpZWQgZnJvbSBXZWJLaXQvd3gvV2ViRnJhbWUuaC4K
KyAgICAgICAgKiBXZWJGcmFtZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogV2ViRnJhbWUuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OjpjcmVhdGVXaW5kb3cpOgorICAgICAgICAq
IGJpbmRpbmdzL3B5dGhvbi93ZWJ2aWV3Lmk6CisgICAgICAgICogd3h3ZWJraXQuYmtsOgorCiAy
MDA4LTA1LTE1ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAg
ICAgICAgIHd4IGJ1aWxkIGZpeC4gQWRkIHJlbmRlcmluZy9zdHlsZSB0byBpbmNsdWRlcyBkaXIu
CkluZGV4OiBXZWJLaXQvd3gvV2ViQnJvd3NlclNoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvd3gvV2ViQnJvd3NlclNoZWxsLmNwcAkocmV2aXNpb24gMzMwNTApCisrKyBXZWJLaXQvd3gv
V2ViQnJvd3NlclNoZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2lu
Y2x1ZGUgInd4L2FydHByb3YuaCIKIAogI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlICJX
ZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkJyb3dzZXJTaGVsbC5oIgogI2luY2x1ZGUgIldlYlZp
ZXdQcml2YXRlLmgiCiAKIHd4UGFnZVNvdXJjZVZpZXdGcmFtZTo6d3hQYWdlU291cmNlVmlld0Zy
YW1lKGNvbnN0IHd4U3RyaW5nJiBzb3VyY2UpCkBAIC02NiwyOSArNjYsMjkgQEAKICAgICBJRF9X
RUJWSUVXID0gd3hJRF9ISUdIRVNUICsgMTgKIH07CiAKLUJFR0lOX0VWRU5UX1RBQkxFKHd4V2Vi
RnJhbWUsIHd4RnJhbWUpCi0gICAgRVZUX01FTlUod3hJRF9FWElULCAgd3hXZWJGcmFtZTo6T25R
dWl0KQotICAgIEVWVF9NRU5VKHd4SURfQUJPVVQsIHd4V2ViRnJhbWU6Ok9uQWJvdXQpCi0gICAg
RVZUX01FTlUoSURfTE9BREZJTEUsIHd4V2ViRnJhbWU6Ok9uTG9hZEZpbGUpCi0gICAgRVZUX1RF
WFRfRU5URVIoSURfVEVYVENUUkwsIHd4V2ViRnJhbWU6Ok9uQWRkcmVzc0JhckVudGVyKQotICAg
IEVWVF9URVhUX0VOVEVSKElEX1NFQVJDSENUUkwsIHd4V2ViRnJhbWU6Ok9uU2VhcmNoQ3RybEVu
dGVyKQotICAgIEVWVF9XRUJWSUVXX0xPQUQoSURfV0VCVklFVywgd3hXZWJGcmFtZTo6T25Mb2Fk
RXZlbnQpCi0gICAgRVZUX1dFQlZJRVdfQkVGT1JFX0xPQUQoSURfV0VCVklFVywgd3hXZWJGcmFt
ZTo6T25CZWZvcmVMb2FkKQotICAgIEVWVF9NRU5VKElEX0JBQ0ssIHd4V2ViRnJhbWU6Ok9uQmFj
aykKLSAgICBFVlRfTUVOVShJRF9GT1JXQVJELCB3eFdlYkZyYW1lOjpPbkZvcndhcmQpCi0gICAg
RVZUX01FTlUoSURfU1RPUCwgd3hXZWJGcmFtZTo6T25TdG9wKQotICAgIEVWVF9NRU5VKElEX1JF
TE9BRCwgd3hXZWJGcmFtZTo6T25SZWxvYWQpCi0gICAgRVZUX01FTlUoSURfTUFLRV9URVhUX0xB
UkdFUiwgd3hXZWJGcmFtZTo6T25NYWtlVGV4dExhcmdlcikKLSAgICBFVlRfTUVOVShJRF9NQUtF
X1RFWFRfU01BTExFUiwgd3hXZWJGcmFtZTo6T25NYWtlVGV4dFNtYWxsZXIpCi0gICAgRVZUX01F
TlUoSURfR0VUX1NPVVJDRSwgd3hXZWJGcmFtZTo6T25HZXRTb3VyY2UpCi0gICAgRVZUX01FTlUo
SURfU0VUX1NPVVJDRSwgd3hXZWJGcmFtZTo6T25TZXRTb3VyY2UpCi0gICAgRVZUX01FTlUoSURf
QlJPV1NFLCB3eFdlYkZyYW1lOjpPbkJyb3dzZSkKLSAgICBFVlRfTUVOVShJRF9FRElULCB3eFdl
YkZyYW1lOjpPbkVkaXQpCi0gICAgRVZUX01FTlUoSURfUlVOX1NDUklQVCwgd3hXZWJGcmFtZTo6
T25SdW5TY3JpcHQpCitCRUdJTl9FVkVOVF9UQUJMRSh3eFdlYkJyb3dzZXJTaGVsbCwgd3hGcmFt
ZSkKKyAgICBFVlRfTUVOVSh3eElEX0VYSVQsICB3eFdlYkJyb3dzZXJTaGVsbDo6T25RdWl0KQor
ICAgIEVWVF9NRU5VKHd4SURfQUJPVVQsIHd4V2ViQnJvd3NlclNoZWxsOjpPbkFib3V0KQorICAg
IEVWVF9NRU5VKElEX0xPQURGSUxFLCB3eFdlYkJyb3dzZXJTaGVsbDo6T25Mb2FkRmlsZSkKKyAg
ICBFVlRfVEVYVF9FTlRFUihJRF9URVhUQ1RSTCwgd3hXZWJCcm93c2VyU2hlbGw6Ok9uQWRkcmVz
c0JhckVudGVyKQorICAgIEVWVF9URVhUX0VOVEVSKElEX1NFQVJDSENUUkwsIHd4V2ViQnJvd3Nl
clNoZWxsOjpPblNlYXJjaEN0cmxFbnRlcikKKyAgICBFVlRfV0VCVklFV19MT0FEKElEX1dFQlZJ
RVcsIHd4V2ViQnJvd3NlclNoZWxsOjpPbkxvYWRFdmVudCkKKyAgICBFVlRfV0VCVklFV19CRUZP
UkVfTE9BRChJRF9XRUJWSUVXLCB3eFdlYkJyb3dzZXJTaGVsbDo6T25CZWZvcmVMb2FkKQorICAg
IEVWVF9NRU5VKElEX0JBQ0ssIHd4V2ViQnJvd3NlclNoZWxsOjpPbkJhY2spCisgICAgRVZUX01F
TlUoSURfRk9SV0FSRCwgd3hXZWJCcm93c2VyU2hlbGw6Ok9uRm9yd2FyZCkKKyAgICBFVlRfTUVO
VShJRF9TVE9QLCB3eFdlYkJyb3dzZXJTaGVsbDo6T25TdG9wKQorICAgIEVWVF9NRU5VKElEX1JF
TE9BRCwgd3hXZWJCcm93c2VyU2hlbGw6Ok9uUmVsb2FkKQorICAgIEVWVF9NRU5VKElEX01BS0Vf
VEVYVF9MQVJHRVIsIHd4V2ViQnJvd3NlclNoZWxsOjpPbk1ha2VUZXh0TGFyZ2VyKQorICAgIEVW
VF9NRU5VKElEX01BS0VfVEVYVF9TTUFMTEVSLCB3eFdlYkJyb3dzZXJTaGVsbDo6T25NYWtlVGV4
dFNtYWxsZXIpCisgICAgRVZUX01FTlUoSURfR0VUX1NPVVJDRSwgd3hXZWJCcm93c2VyU2hlbGw6
Ok9uR2V0U291cmNlKQorICAgIEVWVF9NRU5VKElEX1NFVF9TT1VSQ0UsIHd4V2ViQnJvd3NlclNo
ZWxsOjpPblNldFNvdXJjZSkKKyAgICBFVlRfTUVOVShJRF9CUk9XU0UsIHd4V2ViQnJvd3NlclNo
ZWxsOjpPbkJyb3dzZSkKKyAgICBFVlRfTUVOVShJRF9FRElULCB3eFdlYkJyb3dzZXJTaGVsbDo6
T25FZGl0KQorICAgIEVWVF9NRU5VKElEX1JVTl9TQ1JJUFQsIHd4V2ViQnJvd3NlclNoZWxsOjpP
blJ1blNjcmlwdCkKIEVORF9FVkVOVF9UQUJMRSgpCiAKIAotd3hXZWJGcmFtZTo6d3hXZWJGcmFt
ZShjb25zdCB3eFN0cmluZyYgdGl0bGUpIDogCit3eFdlYkJyb3dzZXJTaGVsbDo6d3hXZWJCcm93
c2VyU2hlbGwoY29uc3Qgd3hTdHJpbmcmIHRpdGxlKSA6IAogICAgICAgICB3eEZyYW1lKE5VTEws
IHd4SURfQU5ZLCB0aXRsZSwgd3hEZWZhdWx0UG9zaXRpb24sIHd4U2l6ZSg2MDAsIDUwMCkpLAog
ICAgICAgICBtX2NoZWNrQmVmb3JlTG9hZChmYWxzZSkKIHsKQEAgLTE2MSwxMyArMTYxLDEzIEBA
CiAgICAgQ3JlYXRlU3RhdHVzQmFyKDIpOwogfQogCi13eFdlYkZyYW1lOjp+d3hXZWJGcmFtZSgp
Cit3eFdlYkJyb3dzZXJTaGVsbDo6fnd4V2ViQnJvd3NlclNoZWxsKCkKIHsKICAgICBpZiAobV9k
ZWJ1Z01lbnUgJiYgR2V0TWVudUJhcigpLT5GaW5kTWVudShfKCImRGVidWciKSkgPT0gd3hOT1Rf
Rk9VTkQpCiAgICAgICAgIGRlbGV0ZSBtX2RlYnVnTWVudTsKIH0KIAotdm9pZCB3eFdlYkZyYW1l
OjpTaG93RGVidWdNZW51KGJvb2wgc2hvdykKK3ZvaWQgd3hXZWJCcm93c2VyU2hlbGw6OlNob3dE
ZWJ1Z01lbnUoYm9vbCBzaG93KQogewogICAgIGludCBkZWJ1Z01lbnUgPSBHZXRNZW51QmFyKCkt
PkZpbmRNZW51KF8oIiZEZWJ1ZyIpKTsKICAgICBpZiAoc2hvdyAmJiBkZWJ1Z01lbnUgPT0gd3hO
T1RfRk9VTkQpIHsKQEAgLTE4MiwxMyArMTgyLDEzIEBACiAKIC8vIGV2ZW50IGhhbmRsZXJzCiAK
LXZvaWQgd3hXZWJGcmFtZTo6T25RdWl0KHd4Q29tbWFuZEV2ZW50JiBXWFVOVVNFRChldmVudCkp
Cit2b2lkIHd4V2ViQnJvd3NlclNoZWxsOjpPblF1aXQod3hDb21tYW5kRXZlbnQmIFdYVU5VU0VE
KGV2ZW50KSkKIHsKICAgICAvLyB0cnVlIGlzIHRvIGZvcmNlIHRoZSBmcmFtZSB0byBjbG9zZQog
ICAgIENsb3NlKHRydWUpOwogfQogCi12b2lkIHd4V2ViRnJhbWU6Ok9uQWJvdXQod3hDb21tYW5k
RXZlbnQmIFdYVU5VU0VEKGV2ZW50KSkKK3ZvaWQgd3hXZWJCcm93c2VyU2hlbGw6Ok9uQWJvdXQo
d3hDb21tYW5kRXZlbnQmIFdYVU5VU0VEKGV2ZW50KSkKIHsKICAgICB3eFN0cmluZyBtc2c7CiAg
ICAgbXNnLlByaW50ZihfVCgiVGhpcyBpcyB0aGUgQWJvdXQgZGlhbG9nIG9mIHRoZSB3eFdlYktp
dCBzYW1wbGUuXG4iKQpAQCAtMTk4LDcgKzE5OCw3IEBACiAKIH0KIAotdm9pZCB3eFdlYkZyYW1l
OjpPbkxvYWRGaWxlKHd4Q29tbWFuZEV2ZW50JiBXWFVOVVNFRChldmVudCkpCit2b2lkIHd4V2Vi
QnJvd3NlclNoZWxsOjpPbkxvYWRGaWxlKHd4Q29tbWFuZEV2ZW50JiBXWFVOVVNFRChldmVudCkp
CiB7CiAgICAgd3hGaWxlRGlhbG9nKiBkaWFsb2cgPSBuZXcgd3hGaWxlRGlhbG9nKHRoaXMsIHd4
VCgiQ2hvb3NlIGEgZmlsZSIpKTsKICAgICBpZiAoZGlhbG9nLT5TaG93TW9kYWwoKSA9PSB3eElE
X09LKSB7ICAKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgIH0KIH0KIAotdm9pZCB3eFdlYkZyYW1l
OjpPbkxvYWRFdmVudCh3eFdlYlZpZXdMb2FkRXZlbnQmIGV2ZW50KQordm9pZCB3eFdlYkJyb3dz
ZXJTaGVsbDo6T25Mb2FkRXZlbnQod3hXZWJWaWV3TG9hZEV2ZW50JiBldmVudCkKIHsKICAgICBp
ZiAoR2V0U3RhdHVzQmFyKCkgIT0gTlVMTCl7CiAgICAgICAgIGlmIChldmVudC5HZXRTdGF0ZSgp
ID09IHd4V0VCVklFV19MT0FEX05FR09USUFUSU5HKSB7CkBAIC0yMjksNyArMjI5LDcgQEAKICAg
ICB9CiB9CiAKLXZvaWQgd3hXZWJGcmFtZTo6T25CZWZvcmVMb2FkKHd4V2ViVmlld0JlZm9yZUxv
YWRFdmVudCYgbXlFdmVudCkKK3ZvaWQgd3hXZWJCcm93c2VyU2hlbGw6Ok9uQmVmb3JlTG9hZCh3
eFdlYlZpZXdCZWZvcmVMb2FkRXZlbnQmIG15RXZlbnQpCiB7CiAgICAgaWYgKG1fY2hlY2tCZWZv
cmVMb2FkKSB7CiAgICAgICAgIGludCByZXBseSA9IHd4TWVzc2FnZUJveChfKCJXb3VsZCB5b3Ug
bGlrZSB0byBjb250aW51ZSBsb2FkaW5nICIpICsgbXlFdmVudC5HZXRVUkwoKSArIHd4VCgiPyIp
LCBfKCJDb250aW51ZSBMb2FkaW5nPyIpLCB3eFlFU19OTyk7IApAQCAtMjM5LDQ0ICsyMzksNDQg
QEAKICAgICB9CiB9CiAKLXZvaWQgd3hXZWJGcmFtZTo6T25BZGRyZXNzQmFyRW50ZXIod3hDb21t
YW5kRXZlbnQmIGV2ZW50KQordm9pZCB3eFdlYkJyb3dzZXJTaGVsbDo6T25BZGRyZXNzQmFyRW50
ZXIod3hDb21tYW5kRXZlbnQmIGV2ZW50KQogewogICAgIGlmICh3ZWJ2aWV3KQogICAgICAgICB3
ZWJ2aWV3LT5Mb2FkVVJMKGFkZHJlc3NCYXItPkdldFZhbHVlKCkpOwogfQogCi12b2lkIHd4V2Vi
RnJhbWU6Ok9uU2VhcmNoQ3RybEVudGVyKHd4Q29tbWFuZEV2ZW50JiBldmVudCkKK3ZvaWQgd3hX
ZWJCcm93c2VyU2hlbGw6Ok9uU2VhcmNoQ3RybEVudGVyKHd4Q29tbWFuZEV2ZW50JiBldmVudCkK
IHsKICAgICBpZiAod2VidmlldykgewogICAgICAgICB3ZWJ2aWV3LT5Mb2FkVVJMKHd4U3RyaW5n
OjpGb3JtYXQod3hUKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3Jscz1lbiZxPSVzJmll
PVVURi04Jm9lPVVURi04IiksIHNlYXJjaEN0cmwtPkdldFZhbHVlKCkud2Nfc3RyKCkpKTsKICAg
ICB9CiB9CiAKLXZvaWQgd3hXZWJGcmFtZTo6T25CYWNrKHd4Q29tbWFuZEV2ZW50JiBldmVudCkK
K3ZvaWQgd3hXZWJCcm93c2VyU2hlbGw6Ok9uQmFjayh3eENvbW1hbmRFdmVudCYgZXZlbnQpCiB7
CiAgICAgaWYgKHdlYnZpZXcpCiAgICAgICAgIHdlYnZpZXctPkdvQmFjaygpOwogfQogCi12b2lk
IHd4V2ViRnJhbWU6Ok9uRm9yd2FyZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpCit2b2lkIHd4V2Vi
QnJvd3NlclNoZWxsOjpPbkZvcndhcmQod3hDb21tYW5kRXZlbnQmIGV2ZW50KQogewogICAgIGlm
ICh3ZWJ2aWV3KQogICAgICAgICB3ZWJ2aWV3LT5Hb0ZvcndhcmQoKTsKIH0KIAotdm9pZCB3eFdl
YkZyYW1lOjpPblN0b3Aod3hDb21tYW5kRXZlbnQmIG15RXZlbnQpCit2b2lkIHd4V2ViQnJvd3Nl
clNoZWxsOjpPblN0b3Aod3hDb21tYW5kRXZlbnQmIG15RXZlbnQpCiB7CiAgICAgaWYgKHdlYnZp
ZXcpCiAgICAgICAgIHdlYnZpZXctPlN0b3AoKTsKIH0KIAotdm9pZCB3eFdlYkZyYW1lOjpPblJl
bG9hZCh3eENvbW1hbmRFdmVudCYgbXlFdmVudCkKK3ZvaWQgd3hXZWJCcm93c2VyU2hlbGw6Ok9u
UmVsb2FkKHd4Q29tbWFuZEV2ZW50JiBteUV2ZW50KQogewogICAgIGlmICh3ZWJ2aWV3KQogICAg
ICAgICB3ZWJ2aWV3LT5SZWxvYWQoKTsKIH0KIAotdm9pZCB3eFdlYkZyYW1lOjpPbk1ha2VUZXh0
TGFyZ2VyKHd4Q29tbWFuZEV2ZW50JiBteUV2ZW50KQordm9pZCB3eFdlYkJyb3dzZXJTaGVsbDo6
T25NYWtlVGV4dExhcmdlcih3eENvbW1hbmRFdmVudCYgbXlFdmVudCkKIHsKICAgICBpZiAod2Vi
dmlldykgewogICAgICAgICBpZiAod2Vidmlldy0+Q2FuSW5jcmVhc2VUZXh0U2l6ZSgpKQpAQCAt
Mjg0LDcgKzI4NCw3IEBACiAgICAgfQogfQogCi12b2lkIHd4V2ViRnJhbWU6Ok9uTWFrZVRleHRT
bWFsbGVyKHd4Q29tbWFuZEV2ZW50JiBteUV2ZW50KQordm9pZCB3eFdlYkJyb3dzZXJTaGVsbDo6
T25NYWtlVGV4dFNtYWxsZXIod3hDb21tYW5kRXZlbnQmIG15RXZlbnQpCiB7CiAgICAgaWYgKHdl
YnZpZXcpIHsKICAgICAgICAgaWYgKHdlYnZpZXctPkNhbkRlY3JlYXNlVGV4dFNpemUoKSkKQEAg
LTI5MiwzMyArMjkyLDMzIEBACiAgICAgfQogfQogCi12b2lkIHd4V2ViRnJhbWU6Ok9uR2V0U291
cmNlKHd4Q29tbWFuZEV2ZW50JiBteUV2ZW50KQordm9pZCB3eFdlYkJyb3dzZXJTaGVsbDo6T25H
ZXRTb3VyY2Uod3hDb21tYW5kRXZlbnQmIG15RXZlbnQpCiB7CiAgICAgaWYgKHdlYnZpZXcpIHsK
LSAgICAgICAgd3hQYWdlU291cmNlVmlld0ZyYW1lKiB3eFdlYkZyYW1lID0gbmV3IHd4UGFnZVNv
dXJjZVZpZXdGcmFtZSh3ZWJ2aWV3LT5HZXRQYWdlU291cmNlKCkpOwotICAgICAgICB3eFdlYkZy
YW1lLT5TaG93KCk7CisgICAgICAgIHd4UGFnZVNvdXJjZVZpZXdGcmFtZSogcGFnZVNvdXJjZUZy
YW1lID0gbmV3IHd4UGFnZVNvdXJjZVZpZXdGcmFtZSh3ZWJ2aWV3LT5HZXRQYWdlU291cmNlKCkp
OworICAgICAgICBwYWdlU291cmNlRnJhbWUtPlNob3coKTsKICAgICB9CiB9CiAKLXZvaWQgd3hX
ZWJGcmFtZTo6T25TZXRTb3VyY2Uod3hDb21tYW5kRXZlbnQmIGV2ZW50KQordm9pZCB3eFdlYkJy
b3dzZXJTaGVsbDo6T25TZXRTb3VyY2Uod3hDb21tYW5kRXZlbnQmIGV2ZW50KQogewogICAgIGlm
ICh3ZWJ2aWV3KQogICAgICAgICB3ZWJ2aWV3LT5TZXRQYWdlU291cmNlKHd4U3RyaW5nKHd4VCgi
PHA+SGVsbG8gV29ybGQhPC9wPiIpKSk7CiB9CiAKLXZvaWQgd3hXZWJGcmFtZTo6T25Ccm93c2Uo
d3hDb21tYW5kRXZlbnQmIGV2ZW50KQordm9pZCB3eFdlYkJyb3dzZXJTaGVsbDo6T25Ccm93c2Uo
d3hDb21tYW5kRXZlbnQmIGV2ZW50KQogewogICAgIGlmICh3ZWJ2aWV3KQogICAgICAgICB3ZWJ2
aWV3LT5NYWtlRWRpdGFibGUoIWV2ZW50LklzQ2hlY2tlZCgpKTsKIH0KIAotdm9pZCB3eFdlYkZy
YW1lOjpPbkVkaXQod3hDb21tYW5kRXZlbnQmIGV2ZW50KQordm9pZCB3eFdlYkJyb3dzZXJTaGVs
bDo6T25FZGl0KHd4Q29tbWFuZEV2ZW50JiBldmVudCkKIHsKICAgICBpZiAod2VidmlldykKICAg
ICAgICAgd2Vidmlldy0+TWFrZUVkaXRhYmxlKGV2ZW50LklzQ2hlY2tlZCgpKTsKIH0KIAotdm9p
ZCB3eFdlYkZyYW1lOjpPblJ1blNjcmlwdCh3eENvbW1hbmRFdmVudCYgbXlFdmVudCl7Cit2b2lk
IHd4V2ViQnJvd3NlclNoZWxsOjpPblJ1blNjcmlwdCh3eENvbW1hbmRFdmVudCYgbXlFdmVudCl7
CiAgICAgaWYgKHdlYnZpZXcpIHsKICAgICAgICAgd3hUZXh0RW50cnlEaWFsb2cqIGRpYWxvZyA9
IG5ldyB3eFRleHRFbnRyeURpYWxvZyh0aGlzLCBfKCJUeXBlIGluIGEgSmF2YVNjcmlwdCB0byBl
eGVjdHV0ZS4iKSk7CiAgICAgICAgIGlmIChkaWFsb2ctPlNob3dNb2RhbCgpID09IHd4SURfT0sp
CkluZGV4OiBXZWJLaXQvd3gvYmluZGluZ3MvcHl0aG9uL3dlYnZpZXcuaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvd3gvYmluZGluZ3MvcHl0aG9uL3dlYnZpZXcuaQkocmV2aXNpb24gMzM1NDgpCisr
KyBXZWJLaXQvd3gvYmluZGluZ3MvcHl0aG9uL3dlYnZpZXcuaQkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogI2luY2x1ZGUgInd4L3d4UHl0aG9uL3d4UHl0aG9uLmgiCiAjaW5jbHVk
ZSAid3gvd3hQeXRob24vcHljbGFzc2VzLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1
ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViQnJvd3NlclNoZWxsLmgiCiAlfQogCiAvLy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQpAQCAtMzgsMTAgKzM4LDEwIEBACiAlaW1wb3J0IHdpbmRvd3MuaQog
CiBNdXN0SGF2ZUFwcCh3eFdlYlZpZXcpOwotTXVzdEhhdmVBcHAod3hXZWJGcmFtZSk7CitNdXN0
SGF2ZUFwcCh3eFdlYkJyb3dzZXJTaGVsbCk7CiAKICVpbmNsdWRlIFdlYlZpZXcuaAotJWluY2x1
ZGUgV2ViRnJhbWUuaAorJWluY2x1ZGUgV2ViQnJvd3NlclNoZWxsLmgKIAogJWNvbnN0YW50IHd4
RXZlbnRUeXBlIHd4RVZUX1dFQlZJRVdfQkVGT1JFX0xPQUQ7CiAlY29uc3RhbnQgd3hFdmVudFR5
cGUgd3hFVlRfV0VCVklFV19MT0FEOwpJbmRleDogV2ViS2l0L3d4L1dlYkJyb3dzZXJTaGVsbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJCcm93c2VyU2hlbGwuaAkocmV2aXNpb24gMzMw
NTApCisrKyBXZWJLaXQvd3gvV2ViQnJvd3NlclNoZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDggKzI1LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KICAKLSNpZm5kZWYgV1hXRUJGUkFNRV9I
Ci0jZGVmaW5lIFdYV0VCRlJBTUVfSAorI2lmbmRlZiBXWFdFQkJST1dTRVJTSEVMTF9ICisjZGVm
aW5lIFdYV0VCQlJPV1NFUlNIRUxMX0gKIAogI2luY2x1ZGUgInd4L3d4cHJlYy5oIgogI2lmbmRl
ZiBXWF9QUkVDT01QCkBAIC0zNiwxNyArMzYsMTcgQEAKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAj
aW5jbHVkZSA8d3gvc3JjaGN0cmwuaD4KIAotY2xhc3MgV1hETExJTVBFWFBfV0VCS0lUIHd4V2Vi
RnJhbWUgOiBwdWJsaWMgd3hGcmFtZQorY2xhc3MgV1hETExJTVBFWFBfV0VCS0lUIHd4V2ViQnJv
d3NlclNoZWxsIDogcHVibGljIHd4RnJhbWUKIHsKIHB1YmxpYzoKICAgICAvLyBjdG9yKHMpCiAj
aWYgU1dJRwotICAgICVweXRob25BcHBlbmQgd3hXZWJGcmFtZSAic2VsZi5fc2V0T09SSW5mbyhz
ZWxmKSIKKyAgICAlcHl0aG9uQXBwZW5kIHd4V2ViQnJvd3NlclNoZWxsICJzZWxmLl9zZXRPT1JJ
bmZvKHNlbGYpIgogI2VuZGlmCi0gICAgd3hXZWJGcmFtZShjb25zdCB3eFN0cmluZyYgdGl0bGUp
OworICAgIHd4V2ViQnJvd3NlclNoZWxsKGNvbnN0IHd4U3RyaW5nJiB0aXRsZSk7CiAKICNpZm5k
ZWYgU1dJRwotICAgIH53eFdlYkZyYW1lKCk7CisgICAgfnd4V2ViQnJvd3NlclNoZWxsKCk7CiAj
ZW5kaWYKIAogICAgIHZvaWQgU2hvd0RlYnVnTWVudShib29sIHNob3cgPSB0cnVlKTsKQEAgLTk1
LDQgKzk1LDQgQEAKICAgICB3eFBhZ2VTb3VyY2VWaWV3RnJhbWUoY29uc3Qgd3hTdHJpbmcmIHNv
dXJjZSk7CiB9OwogCi0jZW5kaWYgLy8gaWZuZGVmIFdYV0VCRlJBTUVfSAorI2VuZGlmIC8vIGlm
bmRlZiBXWFdFQkJST1dTRVJTSEVMTF9ICkluZGV4OiBXZWJLaXQvd3gvV2ViRnJhbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDMzNTQ4KQorKysg
V2ViS2l0L3d4L1dlYkZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMjkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKgotICogVGhpcyBjbGFzcyBwcm92aWRlcyBhIGRlZmF1bHQgbmV3IHdpbmRvdyBp
bXBsZW1lbnRhdGlvbiBmb3Igd3hXZWJWaWV3IGNsaWVudHMKLSAqIHdobyBkb24ndCB3YW50L25l
ZWQgdG8gcm9sbCB0aGVpciBvd24gYnJvd3NlciBmcmFtZSBVSS4KLSAqLwotIAotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAid3gvd3hwcmVjLmgiCi0jaWZuZGVmIFdYX1BSRUNPTVAK
LSAgICAjaW5jbHVkZSAid3gvd3guaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAid3gvYXJ0cHJvdi5o
IgotCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIldlYkZyYW1lLmgiCi0jaW5jbHVk
ZSAiV2ViVmlld1ByaXZhdGUuaCIKLQotd3hQYWdlU291cmNlVmlld0ZyYW1lOjp3eFBhZ2VTb3Vy
Y2VWaWV3RnJhbWUoY29uc3Qgd3hTdHJpbmcmIHNvdXJjZSkKLSAgICAgICAgOiB3eEZyYW1lKE5V
TEwsIHd4SURfQU5ZLCBfKCJQYWdlIFNvdXJjZSBWaWV3IiksIHd4RGVmYXVsdFBvc2l0aW9uLCB3
eFNpemUoNjAwLCA1MDApKQotewotICAgIHd4VGV4dEN0cmwqIGNvbnRyb2wgPSBuZXcgd3hUZXh0
Q3RybCh0aGlzLCAtMSwgc291cmNlLCB3eERlZmF1bHRQb3NpdGlvbiwgd3hEZWZhdWx0U2l6ZSwg
d3hURV9NVUxUSUxJTkUpOwotfQotCi1lbnVtIHsKLSAgICBJRF9MT0FERklMRSA9IHd4SURfSElH
SEVTVCArIDEsCi0gICAgSURfVEVYVENUUkwgPSB3eElEX0hJR0hFU1QgKyAyLAotICAgIElEX0JB
Q0sgPSB3eElEX0hJR0hFU1QgKyAzLAotICAgIElEX0ZPUldBUkQgPSB3eElEX0hJR0hFU1QgKyA0
LAotICAgIElEX1RPR0dMRV9CRUZPUkVfTE9BRCA9IHd4SURfSElHSEVTVCArIDUsCi0gICAgSURf
TUFLRV9URVhUX0xBUkdFUiA9IHd4SURfSElHSEVTVCArIDYsCi0gICAgSURfTUFLRV9URVhUX1NN
QUxMRVIgPSB3eElEX0hJR0hFU1QgKyA3LAotICAgIElEX1NUT1AgPSB3eElEX0hJR0hFU1QgKyA4
LAotICAgIElEX1JFTE9BRCA9IHd4SURfSElHSEVTVCArIDksCi0gICAgSURfR0VUX1NPVVJDRSA9
IHd4SURfSElHSEVTVCArIDEwLAotICAgIElEX1NFVF9TT1VSQ0UgPSB3eElEX0hJR0hFU1QgKyAx
MSwKLSAgICBJRF9TRUFSQ0hDVFJMID0gd3hJRF9ISUdIRVNUICsgMTIsCi0gICAgSURfTE9BRFVS
TCA9IHd4SURfSElHSEVTVCArIDEzLAotICAgIElEX05FV19XSU5ET1cgPSB3eElEX0hJR0hFU1Qg
KyAxNCwKLSAgICBJRF9CUk9XU0UgPSB3eElEX0hJR0hFU1QgKyAxNSwKLSAgICBJRF9FRElUID0g
d3hJRF9ISUdIRVNUICsgMTYsCi0gICAgSURfUlVOX1NDUklQVCA9IHd4SURfSElHSEVTVCArIDE3
LAotICAgIElEX1dFQlZJRVcgPSB3eElEX0hJR0hFU1QgKyAxOAotfTsKLQotQkVHSU5fRVZFTlRf
VEFCTEUod3hXZWJGcmFtZSwgd3hGcmFtZSkKLSAgICBFVlRfTUVOVSh3eElEX0VYSVQsICB3eFdl
YkZyYW1lOjpPblF1aXQpCi0gICAgRVZUX01FTlUod3hJRF9BQk9VVCwgd3hXZWJGcmFtZTo6T25B
Ym91dCkKLSAgICBFVlRfTUVOVShJRF9MT0FERklMRSwgd3hXZWJGcmFtZTo6T25Mb2FkRmlsZSkK
LSAgICBFVlRfVEVYVF9FTlRFUihJRF9URVhUQ1RSTCwgd3hXZWJGcmFtZTo6T25BZGRyZXNzQmFy
RW50ZXIpCi0gICAgRVZUX1RFWFRfRU5URVIoSURfU0VBUkNIQ1RSTCwgd3hXZWJGcmFtZTo6T25T
ZWFyY2hDdHJsRW50ZXIpCi0gICAgRVZUX1dFQlZJRVdfTE9BRChJRF9XRUJWSUVXLCB3eFdlYkZy
YW1lOjpPbkxvYWRFdmVudCkKLSAgICBFVlRfV0VCVklFV19CRUZPUkVfTE9BRChJRF9XRUJWSUVX
LCB3eFdlYkZyYW1lOjpPbkJlZm9yZUxvYWQpCi0gICAgRVZUX01FTlUoSURfQkFDSywgd3hXZWJG
cmFtZTo6T25CYWNrKQotICAgIEVWVF9NRU5VKElEX0ZPUldBUkQsIHd4V2ViRnJhbWU6Ok9uRm9y
d2FyZCkKLSAgICBFVlRfTUVOVShJRF9TVE9QLCB3eFdlYkZyYW1lOjpPblN0b3ApCi0gICAgRVZU
X01FTlUoSURfUkVMT0FELCB3eFdlYkZyYW1lOjpPblJlbG9hZCkKLSAgICBFVlRfTUVOVShJRF9N
QUtFX1RFWFRfTEFSR0VSLCB3eFdlYkZyYW1lOjpPbk1ha2VUZXh0TGFyZ2VyKQotICAgIEVWVF9N
RU5VKElEX01BS0VfVEVYVF9TTUFMTEVSLCB3eFdlYkZyYW1lOjpPbk1ha2VUZXh0U21hbGxlcikK
LSAgICBFVlRfTUVOVShJRF9HRVRfU09VUkNFLCB3eFdlYkZyYW1lOjpPbkdldFNvdXJjZSkKLSAg
ICBFVlRfTUVOVShJRF9TRVRfU09VUkNFLCB3eFdlYkZyYW1lOjpPblNldFNvdXJjZSkKLSAgICBF
VlRfTUVOVShJRF9CUk9XU0UsIHd4V2ViRnJhbWU6Ok9uQnJvd3NlKQotICAgIEVWVF9NRU5VKElE
X0VESVQsIHd4V2ViRnJhbWU6Ok9uRWRpdCkKLSAgICBFVlRfTUVOVShJRF9SVU5fU0NSSVBULCB3
eFdlYkZyYW1lOjpPblJ1blNjcmlwdCkKLUVORF9FVkVOVF9UQUJMRSgpCi0KLQotd3hXZWJGcmFt
ZTo6d3hXZWJGcmFtZShjb25zdCB3eFN0cmluZyYgdGl0bGUpIDogCi0gICAgICAgIHd4RnJhbWUo
TlVMTCwgd3hJRF9BTlksIHRpdGxlLCB3eERlZmF1bHRQb3NpdGlvbiwgd3hTaXplKDYwMCwgNTAw
KSksCi0gICAgICAgIG1fY2hlY2tCZWZvcmVMb2FkKGZhbHNlKQotewotCi0gICAgLy8gY3JlYXRl
IGEgbWVudSBiYXIKLSAgICB3eE1lbnUgKmZpbGVNZW51ID0gbmV3IHd4TWVudTsKLSAgICBmaWxl
TWVudS0+QXBwZW5kKElEX05FV19XSU5ET1csIF9UKCJOZXcgV2luZG93XHRDVFJMK04iKSk7Ci0g
ICAgZmlsZU1lbnUtPkFwcGVuZChJRF9MT0FERklMRSwgX1QoIk9wZW4gRmlsZS4uLlx0Q1RSTCtP
IikpOwotICAgIGZpbGVNZW51LT5BcHBlbmQoSURfTE9BRFVSTCwgXygiT3BlbiBMb2NhdGlvbi4u
Llx0Q1RSTCtMIikpOwotICAgIGZpbGVNZW51LT5BcHBlbmQod3hJRF9FWElULCBfVCgiRSZ4aXRc
dEFsdC1YIiksIF9UKCJRdWl0IHRoaXMgcHJvZ3JhbSIpKTsKLSAgICAKLSAgICB3eE1lbnUgKmVk
aXRNZW51ID0gbmV3IHd4TWVudTsKLSAgICBlZGl0TWVudS0+QXBwZW5kKHd4SURfQ1VULCBfVCgi
Q3V0XHRDVFJMK1giKSk7Ci0gICAgZWRpdE1lbnUtPkFwcGVuZCh3eElEX0NPUFksIF9UKCJDb3B5
XHRDVFJMK0MiKSk7Ci0gICAgZWRpdE1lbnUtPkFwcGVuZCh3eElEX1BBU1RFLCBfVCgiUGFzdGVc
dENUUkwrViIpKTsKLSAgICAKLSAgICB3eE1lbnUqIHZpZXdNZW51ID0gbmV3IHd4TWVudTsKLSAg
ICB2aWV3TWVudS0+QXBwZW5kUmFkaW9JdGVtKElEX0JST1dTRSwgXygiQnJvd3NlIikpOwotICAg
IHZpZXdNZW51LT5BcHBlbmRSYWRpb0l0ZW0oSURfRURJVCwgXygiRWRpdCIpKTsKLSAgICB2aWV3
TWVudS0+QXBwZW5kU2VwYXJhdG9yKCk7Ci0gICAgdmlld01lbnUtPkFwcGVuZChJRF9TVE9QLCBf
KCJTdG9wIikpOwotICAgIHZpZXdNZW51LT5BcHBlbmQoSURfUkVMT0FELCBfKCJSZWxvYWQgUGFn
ZSIpKTsKLSAgICB2aWV3TWVudS0+QXBwZW5kKElEX01BS0VfVEVYVF9TTUFMTEVSLCBfKCJNYWtl
IFRleHQgU21hbGxlclx0Q1RSTCstIikpOwotICAgIHZpZXdNZW51LT5BcHBlbmQoSURfTUFLRV9U
RVhUX0xBUkdFUiwgXygiTWFrZSBUZXh0IEJpZ2dlclx0Q1RSTCsrIikpOwotICAgIHZpZXdNZW51
LT5BcHBlbmRTZXBhcmF0b3IoKTsKLSAgICB2aWV3TWVudS0+QXBwZW5kKElEX0dFVF9TT1VSQ0Us
IF8oIlZpZXcgUGFnZSBTb3VyY2UiKSk7Ci0gICAgdmlld01lbnUtPkFwcGVuZFNlcGFyYXRvcigp
OwotICAgIAotICAgIG1fZGVidWdNZW51ID0gbmV3IHd4TWVudTsKLSAgICBtX2RlYnVnTWVudS0+
QXBwZW5kKElEX1NFVF9TT1VSQ0UsIF8oIlRlc3QgU2V0UGFnZVNvdXJjZSIpKTsKLSAgICBtX2Rl
YnVnTWVudS0+QXBwZW5kKElEX1JVTl9TQ1JJUFQsIF8oIlRlc3QgUnVuU2NyaXB0IikpOwotCi0g
ICAgLy8gdGhlICJBYm91dCIgaXRlbSBzaG91bGQgYmUgaW4gdGhlIGhlbHAgbWVudQotICAgIHd4
TWVudSAqaGVscE1lbnUgPSBuZXcgd3hNZW51OwotICAgIGhlbHBNZW51LT5BcHBlbmQod3hJRF9B
Qk9VVCwgX1QoIiZBYm91dC4uLlx0RjEiKSwgX1QoIlNob3cgYWJvdXQgZGlhbG9nIikpOwotCi0g
ICAgLy8gbm93IGFwcGVuZCB0aGUgZnJlc2hseSBjcmVhdGVkIG1lbnUgdG8gdGhlIG1lbnUgYmFy
Li4uCi0gICAgd3hNZW51QmFyICptZW51QmFyID0gbmV3IHd4TWVudUJhcigpOwotICAgIG1lbnVC
YXItPkFwcGVuZChmaWxlTWVudSwgX1QoIiZGaWxlIikpOwotICAgIG1lbnVCYXItPkFwcGVuZChl
ZGl0TWVudSwgX1QoIiZFZGl0IikpOwotICAgIG1lbnVCYXItPkFwcGVuZCh2aWV3TWVudSwgX1Qo
IiZWaWV3IikpOwotICAgIG1lbnVCYXItPkFwcGVuZChoZWxwTWVudSwgX1QoIiZIZWxwIikpOwot
Ci0gICAgLy8gLi4uIGFuZCBhdHRhY2ggdGhpcyBtZW51IGJhciB0byB0aGUgZnJhbWUKLSAgICBT
ZXRNZW51QmFyKG1lbnVCYXIpOwotICAgIAotICAgIHd4VG9vbEJhciogdG9vbGJhciA9IENyZWF0
ZVRvb2xCYXIoKTsKLSAgICB0b29sYmFyLT5TZXRUb29sQml0bWFwU2l6ZSh3eFNpemUoMzIsIDMy
KSk7Ci0gICAgCi0gICAgd3hCaXRtYXAgYmFjayA9IHd4QXJ0UHJvdmlkZXI6OkdldEJpdG1hcCh3
eEFSVF9HT19CQUNLLCB3eEFSVF9UT09MQkFSLCB3eFNpemUoMzIsMzIpKTsKLSAgICB0b29sYmFy
LT5BZGRUb29sKElEX0JBQ0ssIGJhY2ssIHd4VCgiQmFjayIpKTsKLSAgICAKLSAgICB3eEJpdG1h
cCBmb3J3YXJkID0gd3hBcnRQcm92aWRlcjo6R2V0Qml0bWFwKHd4QVJUX0dPX0ZPUldBUkQsIHd4
QVJUX1RPT0xCQVIsIHd4U2l6ZSgzMiwzMikpOwotICAgIHRvb2xiYXItPkFkZFRvb2woSURfRk9S
V0FSRCwgZm9yd2FyZCwgd3hUKCJOZXh0IikpOwotCi0gICAgYWRkcmVzc0JhciA9IG5ldyB3eFRl
eHRDdHJsKHRvb2xiYXIsIElEX1RFWFRDVFJMLCBfVCgiIiksIHd4RGVmYXVsdFBvc2l0aW9uLCB3
eFNpemUoNDAwLCAtMSksIHd4VEVfUFJPQ0VTU19FTlRFUik7Ci0gICAgdG9vbGJhci0+QWRkQ29u
dHJvbChhZGRyZXNzQmFyKTsKLSAgICAKLSAgICBzZWFyY2hDdHJsID0gbmV3IHd4U2VhcmNoQ3Ry
bCh0b29sYmFyLCBJRF9TRUFSQ0hDVFJMLCBfKCJTZWFyY2giKSwgd3hEZWZhdWx0UG9zaXRpb24s
IHd4U2l6ZSgyMDAsIC0xKSwgd3hURV9QUk9DRVNTX0VOVEVSKTsKLSAgICB0b29sYmFyLT5BZGRD
b250cm9sKHNlYXJjaEN0cmwpOwotICAgIHRvb2xiYXItPlJlYWxpemUoKTsKLSAgICAKLSAgICBT
ZXRUb29sQmFyKHRvb2xiYXIpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSB3eFdlYlZpZXcgV2luZG93
Ci0gICAgd2VidmlldyA9IG5ldyB3eFdlYlZpZXcoKHd4V2luZG93Kil0aGlzLCBJRF9XRUJWSUVX
LCB3eERlZmF1bHRQb3NpdGlvbiwgd3hTaXplKDIwMCwgMjAwKSk7Ci0gICAgd2Vidmlldy0+U2V0
QmFja2dyb3VuZENvbG91cigqd3hXSElURSk7Ci0KLSAgICAvLyBjcmVhdGUgYSBzdGF0dXMgYmFy
IGp1c3QgZm9yIGZ1biAoYnkgZGVmYXVsdCB3aXRoIDEgcGFuZSBvbmx5KQotICAgIENyZWF0ZVN0
YXR1c0JhcigyKTsKLX0KLQotd3hXZWJGcmFtZTo6fnd4V2ViRnJhbWUoKQotewotICAgIGlmICht
X2RlYnVnTWVudSAmJiBHZXRNZW51QmFyKCktPkZpbmRNZW51KF8oIiZEZWJ1ZyIpKSA9PSB3eE5P
VF9GT1VORCkKLSAgICAgICAgZGVsZXRlIG1fZGVidWdNZW51OwotfQotCi12b2lkIHd4V2ViRnJh
bWU6OlNob3dEZWJ1Z01lbnUoYm9vbCBzaG93KQotewotICAgIGludCBkZWJ1Z01lbnUgPSBHZXRN
ZW51QmFyKCktPkZpbmRNZW51KF8oIiZEZWJ1ZyIpKTsKLSAgICBpZiAoc2hvdyAmJiBkZWJ1Z01l
bnUgPT0gd3hOT1RfRk9VTkQpIHsKLSAgICAgICAgaW50IHByZXZNZW51ID0gR2V0TWVudUJhcigp
LT5GaW5kTWVudShfKCImVmlldyIpKTsKLSAgICAgICAgaWYgKHByZXZNZW51ICE9IHd4Tk9UX0ZP
VU5EKQotICAgICAgICAgICAgR2V0TWVudUJhcigpLT5JbnNlcnQoKHNpemVfdClwcmV2TWVudSsx
LCBtX2RlYnVnTWVudSwgXygiJkRlYnVnIikpOwotICAgIH0KLSAgICBlbHNlIGlmICghc2hvdyAm
JiBkZWJ1Z01lbnUgIT0gd3hOT1RfRk9VTkQpIHsKLSAgICAgICAgR2V0TWVudUJhcigpLT5SZW1v
dmUoZGVidWdNZW51KTsKLSAgICB9Ci19Ci0KLS8vIGV2ZW50IGhhbmRsZXJzCi0KLXZvaWQgd3hX
ZWJGcmFtZTo6T25RdWl0KHd4Q29tbWFuZEV2ZW50JiBXWFVOVVNFRChldmVudCkpCi17Ci0gICAg
Ly8gdHJ1ZSBpcyB0byBmb3JjZSB0aGUgZnJhbWUgdG8gY2xvc2UKLSAgICBDbG9zZSh0cnVlKTsK
LX0KLQotdm9pZCB3eFdlYkZyYW1lOjpPbkFib3V0KHd4Q29tbWFuZEV2ZW50JiBXWFVOVVNFRChl
dmVudCkpCi17Ci0gICAgd3hTdHJpbmcgbXNnOwotICAgIG1zZy5QcmludGYoX1QoIlRoaXMgaXMg
dGhlIEFib3V0IGRpYWxvZyBvZiB0aGUgd3hXZWJLaXQgc2FtcGxlLlxuIikKLSAgICAgICAgICAg
ICAgIF9UKCJXZWxjb21lIHRvICVzIiksIHd4VkVSU0lPTl9TVFJJTkcpOwotCi0gICAgd3hNZXNz
YWdlQm94KG1zZywgX1QoIkFib3V0IHd4V2ViS2l0IFNhbXBsZSIpLCB3eE9LIHwgd3hJQ09OX0lO
Rk9STUFUSU9OLCB0aGlzKTsKLQotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9uTG9hZEZpbGUod3hD
b21tYW5kRXZlbnQmIFdYVU5VU0VEKGV2ZW50KSkKLXsKLSAgICB3eEZpbGVEaWFsb2cqIGRpYWxv
ZyA9IG5ldyB3eEZpbGVEaWFsb2codGhpcywgd3hUKCJDaG9vc2UgYSBmaWxlIikpOwotICAgIGlm
IChkaWFsb2ctPlNob3dNb2RhbCgpID09IHd4SURfT0spIHsgIAotICAgICAgICB3eFN0cmluZyBw
YXRoID0gZGlhbG9nLT5HZXRQYXRoKCkuUHJlcGVuZCh3eFQoImZpbGU6Ly8iKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAod2VidmlldykKLSAgICAgICAgICAgIHdlYnZpZXctPkxvYWRVUkwocGF0
aCk7Ci0gICAgfQotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9uTG9hZEV2ZW50KHd4V2ViVmlld0xv
YWRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKEdldFN0YXR1c0JhcigpICE9IE5VTEwpewotICAg
ICAgICBpZiAoZXZlbnQuR2V0U3RhdGUoKSA9PSB3eFdFQlZJRVdfTE9BRF9ORUdPVElBVElORykg
ewotICAgICAgICAgICAgR2V0U3RhdHVzQmFyKCktPlNldFN0YXR1c1RleHQoXygiQ29udGFjdGlu
ZyAiKSArIGV2ZW50LkdldFVSTCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChldmVu
dC5HZXRTdGF0ZSgpID09IHd4V0VCVklFV19MT0FEX1RSQU5TRkVSUklORykgewotICAgICAgICAg
ICAgR2V0U3RhdHVzQmFyKCktPlNldFN0YXR1c1RleHQoXygiTG9hZGluZyAiKSArIGV2ZW50Lkdl
dFVSTCgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChldmVudC5HZXRTdGF0ZSgpID09
IHd4V0VCVklFV19MT0FEX09OTE9BRF9IQU5ETEVEKSB7Ci0gICAgICAgICAgICBHZXRTdGF0dXNC
YXIoKS0+U2V0U3RhdHVzVGV4dChfKCJMb2FkIGNvbXBsZXRlLiIpKTsKLSAgICAgICAgICAgIGFk
ZHJlc3NCYXItPlNldFZhbHVlKGV2ZW50LkdldFVSTCgpKTsKLSAgICAgICAgICAgIFNldFRpdGxl
KHdlYnZpZXctPkdldFBhZ2VUaXRsZSgpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChl
dmVudC5HZXRTdGF0ZSgpID09IHd4V0VCVklFV19MT0FEX0ZBSUxFRCkgewotICAgICAgICAgICAg
R2V0U3RhdHVzQmFyKCktPlNldFN0YXR1c1RleHQoXygiRmFpbGVkIHRvIGxvYWQgIikgKyBldmVu
dC5HZXRVUkwoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgd3hXZWJGcmFtZTo6T25C
ZWZvcmVMb2FkKHd4V2ViVmlld0JlZm9yZUxvYWRFdmVudCYgbXlFdmVudCkKLXsKLSAgICBpZiAo
bV9jaGVja0JlZm9yZUxvYWQpIHsKLSAgICAgICAgaW50IHJlcGx5ID0gd3hNZXNzYWdlQm94KF8o
IldvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlIGxvYWRpbmcgIikgKyBteUV2ZW50LkdldFVSTCgp
ICsgd3hUKCI/IiksIF8oIkNvbnRpbnVlIExvYWRpbmc/IiksIHd4WUVTX05PKTsgCi0gICAgICAg
IGlmIChyZXBseSA9PSB3eE5PKSB7Ci0gICAgICAgICAgICBteUV2ZW50LkNhbmNlbCgpOwotICAg
ICAgICB9Ci0gICAgfQotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9uQWRkcmVzc0JhckVudGVyKHd4
Q29tbWFuZEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAod2VidmlldykKLSAgICAgICAgd2Vidmll
dy0+TG9hZFVSTChhZGRyZXNzQmFyLT5HZXRWYWx1ZSgpKTsKLX0KLQotdm9pZCB3eFdlYkZyYW1l
OjpPblNlYXJjaEN0cmxFbnRlcih3eENvbW1hbmRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKHdl
YnZpZXcpIHsKLSAgICAgICAgd2Vidmlldy0+TG9hZFVSTCh3eFN0cmluZzo6Rm9ybWF0KHd4VCgi
aHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9ybHM9ZW4mcT0lcyZpZT1VVEYtOCZvZT1VVEYt
OCIpLCBzZWFyY2hDdHJsLT5HZXRWYWx1ZSgpLndjX3N0cigpKSk7Ci0gICAgfQotfQotCi12b2lk
IHd4V2ViRnJhbWU6Ok9uQmFjayh3eENvbW1hbmRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKHdl
YnZpZXcpCi0gICAgICAgIHdlYnZpZXctPkdvQmFjaygpOwotfQotCi12b2lkIHd4V2ViRnJhbWU6
Ok9uRm9yd2FyZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKHdlYnZpZXcpCi0g
ICAgICAgIHdlYnZpZXctPkdvRm9yd2FyZCgpOwotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9uU3Rv
cCh3eENvbW1hbmRFdmVudCYgbXlFdmVudCkKLXsKLSAgICBpZiAod2VidmlldykKLSAgICAgICAg
d2Vidmlldy0+U3RvcCgpOwotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9uUmVsb2FkKHd4Q29tbWFu
ZEV2ZW50JiBteUV2ZW50KQotewotICAgIGlmICh3ZWJ2aWV3KQotICAgICAgICB3ZWJ2aWV3LT5S
ZWxvYWQoKTsKLX0KLQotdm9pZCB3eFdlYkZyYW1lOjpPbk1ha2VUZXh0TGFyZ2VyKHd4Q29tbWFu
ZEV2ZW50JiBteUV2ZW50KQotewotICAgIGlmICh3ZWJ2aWV3KSB7Ci0gICAgICAgIGlmICh3ZWJ2
aWV3LT5DYW5JbmNyZWFzZVRleHRTaXplKCkpCi0gICAgICAgICAgICB3ZWJ2aWV3LT5JbmNyZWFz
ZVRleHRTaXplKCk7Ci0gICAgfQotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9uTWFrZVRleHRTbWFs
bGVyKHd4Q29tbWFuZEV2ZW50JiBteUV2ZW50KQotewotICAgIGlmICh3ZWJ2aWV3KSB7Ci0gICAg
ICAgIGlmICh3ZWJ2aWV3LT5DYW5EZWNyZWFzZVRleHRTaXplKCkpCi0gICAgICAgICAgICB3ZWJ2
aWV3LT5EZWNyZWFzZVRleHRTaXplKCk7Ci0gICAgfQotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9u
R2V0U291cmNlKHd4Q29tbWFuZEV2ZW50JiBteUV2ZW50KQotewotICAgIGlmICh3ZWJ2aWV3KSB7
Ci0gICAgICAgIHd4UGFnZVNvdXJjZVZpZXdGcmFtZSogd3hXZWJGcmFtZSA9IG5ldyB3eFBhZ2VT
b3VyY2VWaWV3RnJhbWUod2Vidmlldy0+R2V0UGFnZVNvdXJjZSgpKTsKLSAgICAgICAgd3hXZWJG
cmFtZS0+U2hvdygpOwotICAgIH0KLX0KLQotdm9pZCB3eFdlYkZyYW1lOjpPblNldFNvdXJjZSh3
eENvbW1hbmRFdmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKHdlYnZpZXcpCi0gICAgICAgIHdlYnZp
ZXctPlNldFBhZ2VTb3VyY2Uod3hTdHJpbmcod3hUKCI8cD5IZWxsbyBXb3JsZCE8L3A+IikpKTsK
LX0KLQotdm9pZCB3eFdlYkZyYW1lOjpPbkJyb3dzZSh3eENvbW1hbmRFdmVudCYgZXZlbnQpCi17
Ci0gICAgaWYgKHdlYnZpZXcpCi0gICAgICAgIHdlYnZpZXctPk1ha2VFZGl0YWJsZSghZXZlbnQu
SXNDaGVja2VkKCkpOwotfQotCi12b2lkIHd4V2ViRnJhbWU6Ok9uRWRpdCh3eENvbW1hbmRFdmVu
dCYgZXZlbnQpCi17Ci0gICAgaWYgKHdlYnZpZXcpCi0gICAgICAgIHdlYnZpZXctPk1ha2VFZGl0
YWJsZShldmVudC5Jc0NoZWNrZWQoKSk7Ci19Ci0KLXZvaWQgd3hXZWJGcmFtZTo6T25SdW5TY3Jp
cHQod3hDb21tYW5kRXZlbnQmIG15RXZlbnQpewotICAgIGlmICh3ZWJ2aWV3KSB7Ci0gICAgICAg
IHd4VGV4dEVudHJ5RGlhbG9nKiBkaWFsb2cgPSBuZXcgd3hUZXh0RW50cnlEaWFsb2codGhpcywg
XygiVHlwZSBpbiBhIEphdmFTY3JpcHQgdG8gZXhlY3R1dGUuIikpOwotICAgICAgICBpZiAoZGlh
bG9nLT5TaG93TW9kYWwoKSA9PSB3eElEX09LKQotICAgICAgICAgICAgd3hNZXNzYWdlQm94KHd4
VCgiUmVzdWx0IGlzOiAiKSArIHdlYnZpZXctPlJ1blNjcmlwdChkaWFsb2ctPkdldFZhbHVlKCkp
KTsKLSAgICAKLSAgICAgICAgZGlhbG9nLT5EZXN0cm95KCk7Ci0gICAgfQotfQpJbmRleDogV2Vi
S2l0L3d4L3d4d2Via2l0LmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvd3h3ZWJraXQuYmts
CShyZXZpc2lvbiAzMzU0OCkKKysrIFdlYktpdC93eC93eHdlYmtpdC5ia2wJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDcgKzc1LDcgQEAKICAgICAgICAgICAgIFdlYktpdFN1cHBvcnQvSW5zcGVjdG9y
Q2xpZW50V3guY3BwCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFdlYlZpZXcuY3BwCi0gICAg
ICAgICAgICBXZWJGcmFtZS5jcHAKKyAgICAgICAgICAgIFdlYkJyb3dzZXJTaGVsbC5jcHAKICAg
ICAgICAgPC9zb3VyY2VzPiAgIAogICAgIDwvZGxsPgogCkluZGV4OiBXZWJLaXQvd3gvV2ViRnJh
bWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViRnJhbWUuaAkocmV2aXNpb24gMzM1NDgp
CisrKyBXZWJLaXQvd3gvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5OCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEtldmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xs
aXZpZXJzLmNvbT4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0gCi0jaWZuZGVm
IFdYV0VCRlJBTUVfSAotI2RlZmluZSBXWFdFQkZSQU1FX0gKLQotI2luY2x1ZGUgInd4L3d4cHJl
Yy5oIgotI2lmbmRlZiBXWF9QUkVDT01QCi0gICAgI2luY2x1ZGUgInd4L3d4LmgiCi0jZW5kaWYK
LQotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlIDx3eC9zcmNoY3RybC5oPgotCi1jbGFz
cyBXWERMTElNUEVYUF9XRUJLSVQgd3hXZWJGcmFtZSA6IHB1YmxpYyB3eEZyYW1lCi17Ci1wdWJs
aWM6Ci0gICAgLy8gY3RvcihzKQotI2lmIFNXSUcKLSAgICAlcHl0aG9uQXBwZW5kIHd4V2ViRnJh
bWUgInNlbGYuX3NldE9PUkluZm8oc2VsZikiCi0jZW5kaWYKLSAgICB3eFdlYkZyYW1lKGNvbnN0
IHd4U3RyaW5nJiB0aXRsZSk7Ci0KLSNpZm5kZWYgU1dJRwotICAgIH53eFdlYkZyYW1lKCk7Ci0j
ZW5kaWYKLQotICAgIHZvaWQgU2hvd0RlYnVnTWVudShib29sIHNob3cgPSB0cnVlKTsKLSAgICB3
eFdlYlZpZXcqIHdlYnZpZXc7Ci0KLXByb3RlY3RlZDoKLQotICAgIC8vIGV2ZW50IGhhbmRsZXJz
ICh0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIF9ub3RfIGJlIHZpcnR1YWwpCi0gICAgdm9pZCBPblF1
aXQod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsKLSAgICB2b2lkIE9uQWJvdXQod3hDb21tYW5kRXZl
bnQmIGV2ZW50KTsKLSAgICB2b2lkIE9uTG9hZEZpbGUod3hDb21tYW5kRXZlbnQmIGV2ZW50KTsK
LSAgICB2b2lkIE9uQWRkcmVzc0JhckVudGVyKHd4Q29tbWFuZEV2ZW50JiBldmVudCk7Ci0gICAg
dm9pZCBPblNlYXJjaEN0cmxFbnRlcih3eENvbW1hbmRFdmVudCYgZXZlbnQpOwotICAgIHZvaWQg
T25Mb2FkRXZlbnQod3hXZWJWaWV3TG9hZEV2ZW50JiBldmVudCk7Ci0gICAgdm9pZCBPbkJlZm9y
ZUxvYWQod3hXZWJWaWV3QmVmb3JlTG9hZEV2ZW50JiBldmVudCk7Ci0gICAgdm9pZCBPbkJhY2so
d3hDb21tYW5kRXZlbnQmIGV2ZW50KTsKLSAgICB2b2lkIE9uRm9yd2FyZCh3eENvbW1hbmRFdmVu
dCYgZXZlbnQpOwotICAgIHZvaWQgT25TdG9wKHd4Q29tbWFuZEV2ZW50JiBldmVudCk7Ci0gICAg
dm9pZCBPblJlbG9hZCh3eENvbW1hbmRFdmVudCYgZXZlbnQpOwotICAgIHZvaWQgT25Ccm93c2Uo
d3hDb21tYW5kRXZlbnQmIGV2ZW50KTsKLSAgICB2b2lkIE9uRWRpdCh3eENvbW1hbmRFdmVudCYg
ZXZlbnQpOwotICAgIAotICAgIHZvaWQgT25NYWtlVGV4dExhcmdlcih3eENvbW1hbmRFdmVudCYg
ZXZlbnQpOwotICAgIHZvaWQgT25NYWtlVGV4dFNtYWxsZXIod3hDb21tYW5kRXZlbnQmIGV2ZW50
KTsKLSAgICB2b2lkIE9uR2V0U291cmNlKHd4Q29tbWFuZEV2ZW50JiBldmVudCk7Ci0gICAgCi0g
ICAgLy8gZGVidWcgbWVudSBpdGVtcwotICAgIHZvaWQgT25TZXRTb3VyY2Uod3hDb21tYW5kRXZl
bnQmIGV2ZW50KTsKLSAgICB2b2lkIE9uUnVuU2NyaXB0KHd4Q29tbWFuZEV2ZW50JiBteUV2ZW50
KTsKLQotcHJpdmF0ZToKLSAgICB3eFRleHRDdHJsKiBhZGRyZXNzQmFyOwotICAgIHd4U2VhcmNo
Q3RybCogc2VhcmNoQ3RybDsKLQotICAgIGJvb2wgbV9jaGVja0JlZm9yZUxvYWQ7Ci0gICAgd3hN
ZW51KiBtX2RlYnVnTWVudTsKLSAgICAvLyBhbnkgY2xhc3Mgd2lzaGluZyB0byBwcm9jZXNzIHd4
V2luZG93cyBldmVudHMgbXVzdCB1c2UgdGhpcyBtYWNybwotI2lmbmRlZiBTV0lHCi0gICAgREVD
TEFSRV9FVkVOVF9UQUJMRSgpCi0jZW5kaWYKLX07Ci0KLWNsYXNzIFdYRExMSU1QRVhQX1dFQktJ
VCB3eFBhZ2VTb3VyY2VWaWV3RnJhbWUgOiBwdWJsaWMgd3hGcmFtZQotewotcHVibGljOgotICAg
IHd4UGFnZVNvdXJjZVZpZXdGcmFtZShjb25zdCB3eFN0cmluZyYgc291cmNlKTsKLX07Ci0KLSNl
bmRpZiAvLyBpZm5kZWYgV1hXRUJGUkFNRV9ICg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22689</attachid>
            <date>2008-08-06 17:02:10 -0700</date>
            <delta_ts>2008-08-06 20:52:38 -0700</delta_ts>
            <desc>Revised wxWebFrame patch</desc>
            <filename>wxwebframe.patch</filename>
            <type>text/plain</type>
            <size>33778</size>
            <attacher name="Kevin Watters">kevinwatters</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5n
ZUxvZwkocmV2aXNpb24gMzU2MTEpCisrKyBXZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsNzUgQEAKKzIwMDgtMDgtMDYgIEtldmluIFdhdHRlcnMgIDxrZXZpbndh
dHRlcnNAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgQ3JlYXRlIGEgd3hXZWJGcmFtZSBBUEkgdG8gbWF0Y2ggb3RoZXIg
cG9ydHMgYW5kIHRvIHByZXBhcmUgZm9yIGZyYW1lcyBzdXBwb3J0LgorICAgICAgICBBbHNvIGZp
eGVzIGEgZnJhbWUgbGVhayBpbiB3eCBwb3J0IG9uIHRydW5rLgorCisgICAgICAgICogV2ViRnJh
bWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKHd4V2ViRnJhbWU6Ond4V2ViRnJhbWUpOgorICAgICAg
ICAod3hXZWJGcmFtZTo6fnd4V2ViRnJhbWUpOgorICAgICAgICAod3hXZWJGcmFtZTo6R2V0RnJh
bWUpOgorICAgICAgICAod3hXZWJGcmFtZTo6U3RvcCk6CisgICAgICAgICh3eFdlYkZyYW1lOjpS
ZWxvYWQpOgorICAgICAgICAod3hXZWJGcmFtZTo6R2V0UGFnZVNvdXJjZSk6CisgICAgICAgICh3
eFdlYkZyYW1lOjpTZXRQYWdlU291cmNlKToKKyAgICAgICAgKHd4V2ViRnJhbWU6OkdldElubmVy
VGV4dCk6CisgICAgICAgICh3eFdlYkZyYW1lOjpHZXRBc01hcmt1cCk6CisgICAgICAgICh3eFdl
YkZyYW1lOjpHZXRFeHRlcm5hbFJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKHd4V2ViRnJhbWU6
OlJ1blNjcmlwdCk6CisgICAgICAgICh3eFdlYkZyYW1lOjpMb2FkVVJMKToKKyAgICAgICAgKHd4
V2ViRnJhbWU6OkdvQmFjayk6CisgICAgICAgICh3eFdlYkZyYW1lOjpHb0ZvcndhcmQpOgorICAg
ICAgICAod3hXZWJGcmFtZTo6Q2FuR29CYWNrKToKKyAgICAgICAgKHd4V2ViRnJhbWU6OkNhbkdv
Rm9yd2FyZCk6CisgICAgICAgICh3eFdlYkZyYW1lOjpDYW5JbmNyZWFzZVRleHRTaXplKToKKyAg
ICAgICAgKHd4V2ViRnJhbWU6OkluY3JlYXNlVGV4dFNpemUpOgorICAgICAgICAod3hXZWJGcmFt
ZTo6Q2FuRGVjcmVhc2VUZXh0U2l6ZSk6CisgICAgICAgICh3eFdlYkZyYW1lOjpEZWNyZWFzZVRl
eHRTaXplKToKKyAgICAgICAgKHd4V2ViRnJhbWU6Ok1ha2VFZGl0YWJsZSk6CisgICAgICAgICh3
eFdlYkZyYW1lOjpDYW5Db3B5KToKKyAgICAgICAgKHd4V2ViRnJhbWU6OkNvcHkpOgorICAgICAg
ICAod3hXZWJGcmFtZTo6Q2FuQ3V0KToKKyAgICAgICAgKHd4V2ViRnJhbWU6OkN1dCk6CisgICAg
ICAgICh3eFdlYkZyYW1lOjpDYW5QYXN0ZSk6CisgICAgICAgICh3eFdlYkZyYW1lOjpQYXN0ZSk6
CisgICAgICAgICogV2ViRnJhbWUuaDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy5jcHA6Cisg
ICAgICAgICh3eFdlYlZpZXc6Ond4V2ViVmlldyk6CisgICAgICAgICh3eFdlYlZpZXc6OkNyZWF0
ZSk6CisgICAgICAgICh3eFdlYlZpZXc6On53eFdlYlZpZXcpOgorICAgICAgICAod3hXZWJWaWV3
OjpTdG9wKToKKyAgICAgICAgKHd4V2ViVmlldzo6UmVsb2FkKToKKyAgICAgICAgKHd4V2ViVmll
dzo6R2V0UGFnZVNvdXJjZSk6CisgICAgICAgICh3eFdlYlZpZXc6OlNldFBhZ2VTb3VyY2UpOgor
ICAgICAgICAod3hXZWJWaWV3OjpHZXRJbm5lclRleHQpOgorICAgICAgICAod3hXZWJWaWV3OjpH
ZXRBc01hcmt1cCk6CisgICAgICAgICh3eFdlYlZpZXc6OkdldEV4dGVybmFsUmVwcmVzZW50YXRp
b24pOgorICAgICAgICAod3hXZWJWaWV3OjpSdW5TY3JpcHQpOgorICAgICAgICAod3hXZWJWaWV3
OjpMb2FkVVJMKToKKyAgICAgICAgKHd4V2ViVmlldzo6R29CYWNrKToKKyAgICAgICAgKHd4V2Vi
Vmlldzo6R29Gb3J3YXJkKToKKyAgICAgICAgKHd4V2ViVmlldzo6Q2FuR29CYWNrKToKKyAgICAg
ICAgKHd4V2ViVmlldzo6Q2FuR29Gb3J3YXJkKToKKyAgICAgICAgKHd4V2ViVmlldzo6Q2FuSW5j
cmVhc2VUZXh0U2l6ZSk6CisgICAgICAgICh3eFdlYlZpZXc6OkluY3JlYXNlVGV4dFNpemUpOgor
ICAgICAgICAod3hXZWJWaWV3OjpDYW5EZWNyZWFzZVRleHRTaXplKToKKyAgICAgICAgKHd4V2Vi
Vmlldzo6RGVjcmVhc2VUZXh0U2l6ZSk6CisgICAgICAgICh3eFdlYlZpZXc6Ok9uUGFpbnQpOgor
ICAgICAgICAod3hXZWJWaWV3OjpPblNpemUpOgorICAgICAgICAod3hXZWJWaWV3OjpPbk1vdXNl
RXZlbnRzKToKKyAgICAgICAgKHd4V2ViVmlldzo6Q2FuQ29weSk6CisgICAgICAgICh3eFdlYlZp
ZXc6OkNvcHkpOgorICAgICAgICAod3hXZWJWaWV3OjpDYW5DdXQpOgorICAgICAgICAod3hXZWJW
aWV3OjpDdXQpOgorICAgICAgICAod3hXZWJWaWV3OjpDYW5QYXN0ZSk6CisgICAgICAgICh3eFdl
YlZpZXc6OlBhc3RlKToKKyAgICAgICAgKHd4V2ViVmlldzo6T25LZXlFdmVudHMpOgorICAgICAg
ICAod3hXZWJWaWV3OjpPblNldEZvY3VzKToKKyAgICAgICAgKHd4V2ViVmlldzo6T25LaWxsRm9j
dXMpOgorICAgICAgICAqIFdlYlZpZXcuaDoKKyAgICAgICAgKiB3eHdlYmtpdC5ia2w6CisKIDIw
MDgtMDctMjcgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQvd3gvV2ViRnJhbWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViRnJhbWUuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC93eC9XZWJGcmFtZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworIAorI2lmbmRlZiBXWFdFQkZSQU1F
X0gKKyNkZWZpbmUgV1hXRUJGUkFNRV9ICisKKyNpbmNsdWRlICJ3eC93eHByZWMuaCIKKyNpZm5k
ZWYgV1hfUFJFQ09NUAorICAgICNpbmNsdWRlICJ3eC93eC5oIgorI2VuZGlmCisKK2NsYXNzIFdl
YlZpZXdQcml2YXRlOworY2xhc3MgV2ViVmlld0ZyYW1lRGF0YTsKK2NsYXNzIHd4V2ViVmlldzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIGNsYXNzIENocm9tZUNsaWVudFd4OworICAgIGNs
YXNzIEZyYW1lTG9hZGVyQ2xpZW50V3g7CisgICAgY2xhc3MgRnJhbWU7Cit9CisKKyNpZm5kZWYg
U1dJRworCisjaWYgV1hNQUtJTkdETExfV0VCS0lUCisjZGVmaW5lIFdYRExMSU1QRVhQX1dFQktJ
VCBXWEVYUE9SVAorI2VsaWYgZGVmaW5lZChXWFVTSU5HRExMX1dFQktJVCkKKyNkZWZpbmUgV1hE
TExJTVBFWFBfV0VCS0lUIFdYSU1QT1JUCisjZWxzZQorI2RlZmluZSBXWERMTElNUEVYUF9XRUJL
SVQKKyNlbmRpZgorCisjZWxzZSAKKyNkZWZpbmUgV1hETExJTVBFWFBfV0VCS0lUCisjZW5kaWYg
Ly8gU1dJRworCitjbGFzcyBXWERMTElNUEVYUF9XRUJLSVQgd3hXZWJGcmFtZQoreworICAgIC8v
IENocm9tZUNsaWVudFd4IG5lZWRzIHRvIGdldCB0aGUgUGFnZSogc3RvcmVkIGJ5IHRoZSB3eFdl
YlZpZXcKKyAgICAvLyBmb3IgdGhlIGNyZWF0ZVdpbmRvdyBmdW5jdGlvbi4gCisgICAgZnJpZW5k
IGNsYXNzIFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OworICAgIGZyaWVuZCBjbGFzcyBXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudFd4OworICAgIGZyaWVuZCBjbGFzcyB3eFdlYlZpZXc7CisKKyAg
ICB3eFdlYkZyYW1lKHd4V2ViVmlldyogY29udGFpbmVyLCB3eFdlYkZyYW1lKiBwYXJlbnQgPSBO
VUxMLCBXZWJWaWV3RnJhbWVEYXRhKiBkYXRhID0gTlVMTCk7CisgICAgCisgICAgfnd4V2ViRnJh
bWUoKTsKKyAgICAKKyAgICB2b2lkIExvYWRVUkwoY29uc3Qgd3hTdHJpbmcmIHVybCk7CisgICAg
Ym9vbCBHb0JhY2soKTsKKyAgICBib29sIEdvRm9yd2FyZCgpOworICAgIHZvaWQgU3RvcCgpOwor
ICAgIHZvaWQgUmVsb2FkKCk7CisgICAgCisgICAgYm9vbCBDYW5Hb0JhY2soKTsKKyAgICBib29s
IENhbkdvRm9yd2FyZCgpOworICAgIAorICAgIGJvb2wgQ2FuQ3V0KCk7CisgICAgYm9vbCBDYW5D
b3B5KCk7CisgICAgYm9vbCBDYW5QYXN0ZSgpOworICAgIAorICAgIHZvaWQgQ3V0KCk7CisgICAg
dm9pZCBDb3B5KCk7CisgICAgdm9pZCBQYXN0ZSgpOworICAgIAorICAgIHd4U3RyaW5nIEdldFBh
Z2VTb3VyY2UoKTsKKyAgICB2b2lkIFNldFBhZ2VTb3VyY2UoY29uc3Qgd3hTdHJpbmcmIHNvdXJj
ZSwgY29uc3Qgd3hTdHJpbmcmIGJhc2VVcmwgPSB3eEVtcHR5U3RyaW5nKTsKKyAgICAKKyAgICB3
eFN0cmluZyBHZXRJbm5lclRleHQoKTsKKyAgICB3eFN0cmluZyBHZXRBc01hcmt1cCgpOworICAg
IHd4U3RyaW5nIEdldEV4dGVybmFsUmVwcmVzZW50YXRpb24oKTsKKyAgICAKKyAgICB3eFN0cmlu
ZyBSdW5TY3JpcHQoY29uc3Qgd3hTdHJpbmcmIGphdmFzY3JpcHQpOworICAgIAorICAgIGJvb2wg
Q2FuSW5jcmVhc2VUZXh0U2l6ZSgpIGNvbnN0OworICAgIHZvaWQgSW5jcmVhc2VUZXh0U2l6ZSgp
OworICAgIGJvb2wgQ2FuRGVjcmVhc2VUZXh0U2l6ZSgpIGNvbnN0OworICAgIHZvaWQgRGVjcmVh
c2VUZXh0U2l6ZSgpOworICAgIHZvaWQgTWFrZUVkaXRhYmxlKGJvb2wgZW5hYmxlKTsKKyAgICBi
b29sIElzRWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzRWRpdGFibGU7IH0KKworICAgIHd4
U3RyaW5nIEdldFBhZ2VUaXRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGl0bGU7IH0KKyAgICB2b2lk
IFNldFBhZ2VUaXRsZShjb25zdCB3eFN0cmluZyYgdGl0bGUpIHsgbV90aXRsZSA9IHRpdGxlOyB9
CisgICAgCisgICAgV2ViQ29yZTo6RnJhbWUqIEdldEZyYW1lKCk7CisgICAgCitwcml2YXRlOgor
ICAgIGZsb2F0IG1fdGV4dE1hZ25pZmllcjsKKyAgICBib29sIG1faXNFZGl0YWJsZTsKKyAgICBi
b29sIG1faXNJbml0aWFsaXplZDsKKyAgICBib29sIG1fYmVpbmdEZXN0cm95ZWQ7CisgICAgV2Vi
Vmlld1ByaXZhdGUqIG1faW1wbDsKKyAgICB3eFN0cmluZyBtX3RpdGxlOworICAgIAorfTsKKwor
I2VuZGlmIC8vIGlmbmRlZiBXWFdFQkZSQU1FX0gKSW5kZXg6IFdlYktpdC93eC9XZWJWaWV3LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYlZpZXcuaAkocmV2aXNpb24gMzU2MDUpCisrKyBX
ZWJLaXQvd3gvV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKIGNs
YXNzIFdlYlZpZXdQcml2YXRlOwogY2xhc3MgV2ViVmlld0ZyYW1lRGF0YTsKK2NsYXNzIHd4V2Vi
RnJhbWU7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBDaHJvbWVDbGllbnRXeDsK
QEAgLTc1LDggKzc2LDcgQEAKICAgICAgICAgICAgICAgY29uc3Qgd3hQb2ludCYgcG9pbnQgPSB3
eERlZmF1bHRQb3NpdGlvbiwKICAgICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBzaXplID0gd3hE
ZWZhdWx0U2l6ZSwKICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9IDAsCi0gICAgICAgICAgICAg
IGNvbnN0IHd4U3RyaW5nJiBuYW1lID0gd3hXZWJWaWV3TmFtZVN0ciwKLSAgICAgICAgICAgICAg
V2ViVmlld0ZyYW1lRGF0YSogZGF0YSA9IE5VTEwpOyAvLyBGb3Igd3hXZWJWaWV3IGludGVybmFs
IGRhdGEgcGFzc2luZworICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9IHd4V2Vi
Vmlld05hbWVTdHIpOyAvLyBGb3Igd3hXZWJWaWV3IGludGVybmFsIGRhdGEgcGFzc2luZwogI2lm
IFNXSUcKICAgICAlcmVuYW1lKFByZVdlYlZpZXcpIHd4V2ViVmlldygpOwogI2Vsc2UKQEAgLTg3
LDggKzg3LDcgQEAKICAgICAgICAgICAgICAgICBjb25zdCB3eFBvaW50JiBwb2ludCA9IHd4RGVm
YXVsdFBvc2l0aW9uLAogICAgICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSA9IHd4RGVm
YXVsdFNpemUsCiAgICAgICAgICAgICAgICAgbG9uZyBzdHlsZSA9IDAsCi0gICAgICAgICAgICAg
ICAgY29uc3Qgd3hTdHJpbmcmIG5hbWUgPSB3eFdlYlZpZXdOYW1lU3RyLAotICAgICAgICAgICAg
ICAgIFdlYlZpZXdGcmFtZURhdGEqIGRhdGEgPSBOVUxMKTsgLy8gRm9yIHd4V2ViVmlldyBpbnRl
cm5hbCBkYXRhIHBhc3NpbmcKKyAgICAgICAgICAgICAgICBjb25zdCB3eFN0cmluZyYgbmFtZSA9
IHd4V2ViVmlld05hbWVTdHIpOyAvLyBGb3Igd3hXZWJWaWV3IGludGVybmFsIGRhdGEgcGFzc2lu
ZwogICAgIAogI2lmbmRlZiBTV0lHCiAgICAgfnd4V2ViVmlldygpOwpAQCAtMTMwLDYgKzEyOSw4
IEBACiAKICAgICB3eFN0cmluZyBHZXRQYWdlVGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxl
OyB9CiAgICAgdm9pZCBTZXRQYWdlVGl0bGUoY29uc3Qgd3hTdHJpbmcmIHRpdGxlKSB7IG1fdGl0
bGUgPSB0aXRsZTsgfQorICAgIAorICAgIHd4V2ViRnJhbWUqIEdldE1haW5GcmFtZSgpIHsgcmV0
dXJuIG1fbWFpbkZyYW1lOyB9CiAKIHByb3RlY3RlZDoKIApAQCAtMTUzLDYgKzE1NCw3IEBACiAg
ICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7CiAgICAgYm9vbCBtX2JlaW5nRGVzdHJveWVkOwogICAg
IFdlYlZpZXdQcml2YXRlKiBtX2ltcGw7CisgICAgd3hXZWJGcmFtZSogbV9tYWluRnJhbWU7CiAg
ICAgd3hTdHJpbmcgbV90aXRsZTsKICAgICAKIH07CkluZGV4OiBXZWJLaXQvd3gvV2ViRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJLaXQvd3gvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBLZXZpbiBPbGxpdmllciAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVkaXRvci5oIgorI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRl
clRyZWVBc1RleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCisKKyNpbmNsdWRlICJFZGl0b3JDbGllbnRXeC5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50V3guaCIKKworI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlIDxranMvSlNWYWx1ZS5oPgorI2luY2x1ZGUg
PGtqcy91c3RyaW5nLmg+CisKKyNpbmNsdWRlICJ3eC93eHByZWMuaCIKKyNpZm5kZWYgV1hfUFJF
Q09NUAorICAgICNpbmNsdWRlICJ3eC93eC5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3UHJpdmF0ZS5oIgor
CisjaW5jbHVkZSA8d3gvZGVmcy5oPgorI2luY2x1ZGUgPHd4L2RjYnVmZmVyLmg+CisKKy8vIE1h
dGNoIFNhZmFyaSdzIG1pbi9tYXggem9vbSBzaXplcyBieSBkZWZhdWx0CisjZGVmaW5lIE1pbmlt
dW1UZXh0U2l6ZU11bHRpcGxpZXIgICAgICAgMC41ZgorI2RlZmluZSBNYXhpbXVtVGV4dFNpemVN
dWx0aXBsaWVyICAgICAgIDMuMGYKKyNkZWZpbmUgVGV4dFNpemVNdWx0aXBsaWVyUmF0aW8gICAg
ICAgICAxLjJmCisKK3d4V2ViRnJhbWU6Ond4V2ViRnJhbWUod3hXZWJWaWV3KiBjb250YWluZXIs
IHd4V2ViRnJhbWUqIHBhcmVudCwgV2ViVmlld0ZyYW1lRGF0YSogZGF0YSkgOgorICAgIG1fdGV4
dE1hZ25pZmllcigxLjApLAorICAgIG1faXNFZGl0YWJsZShmYWxzZSksCisgICAgbV9pc0luaXRp
YWxpemVkKGZhbHNlKSwKKyAgICBtX2JlaW5nRGVzdHJveWVkKGZhbHNlKSwKKyAgICBtX3RpdGxl
KHd4RW1wdHlTdHJpbmcpCit7CisKKyAgICBtX2ltcGwgPSBuZXcgV2ViVmlld1ByaXZhdGUoKTsK
KyAKKyAgICBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIHBhcmVudEZyYW1lID0gMDsK
KyAgICAKKyAgICBpZiAoZGF0YSkgeworICAgICAgICBwYXJlbnRGcmFtZSA9IGRhdGEtPm93bmVy
RWxlbWVudDsKKyAgICB9CisgICAgCisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeCog
bG9hZGVyQ2xpZW50ID0gbmV3IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3goKTsKKyAgICAK
KyAgICBtX2ltcGwtPmZyYW1lID0gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShjb250YWluZXItPm1f
aW1wbC0+cGFnZSwgcGFyZW50RnJhbWUsIGxvYWRlckNsaWVudCk7CisgICAgbV9pbXBsLT5mcmFt
ZS0+ZGVyZWYoKTsKKworICAgIGxvYWRlckNsaWVudC0+c2V0RnJhbWUobV9pbXBsLT5mcmFtZS5n
ZXQoKSk7CisgICAgbG9hZGVyQ2xpZW50LT5zZXRXZWJWaWV3KGNvbnRhaW5lcik7CisgICAgCisg
ICAgbV9pbXBsLT5mcmFtZS0+aW5pdCgpOworICAgICAgICAKKyAgICBtX2lzSW5pdGlhbGl6ZWQg
PSB0cnVlOworfQorCit3eFdlYkZyYW1lOjp+d3hXZWJGcmFtZSgpCit7CisgICAgbV9pbXBsLT5m
cmFtZS0+bG9hZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKK30KKworV2ViQ29yZTo6RnJhbWUq
IHd4V2ViRnJhbWU6OkdldEZyYW1lKCkKK3sKKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1
cm4gbV9pbXBsLT5mcmFtZS5nZXQoKTsKKyAgICAgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgd3hXZWJGcmFtZTo6U3RvcCgpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBs
LT5mcmFtZS0+bG9hZGVyKCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpLT5zdG9w
KCk7Cit9CisKK3ZvaWQgd3hXZWJGcmFtZTo6UmVsb2FkKCkKK3sKKyAgICBpZiAobV9pbXBsLT5m
cmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5sb2FkZXIoKSkKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+
bG9hZGVyKCktPnJlbG9hZCgpOworfQorCit3eFN0cmluZyB3eFdlYkZyYW1lOjpHZXRQYWdlU291
cmNlKCkKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSkgeworICAgICAgICBpZiAobV9pbXBsLT5m
cmFtZS0+dmlldygpICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+bGF5b3V0UGVuZGluZygpKQor
ICAgICAgICAgICAgbV9pbXBsLT5mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKKyAgICAKKyAgICAg
ICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYyA9IG1faW1wbC0+ZnJhbWUtPmRvY3VtZW50KCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoZG9jKSB7CisgICAgICAgICAgICB3eFN0cmluZyBzb3VyY2Ug
PSBjcmVhdGVNYXJrdXAoZG9jKTsKKyAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHd4RW1wdHlTdHJpbmc7Cit9CisKK3ZvaWQgd3hXZWJGcmFt
ZTo6U2V0UGFnZVNvdXJjZShjb25zdCB3eFN0cmluZyYgc291cmNlLCBjb25zdCB3eFN0cmluZyYg
YmFzZVVybCkKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5sb2Fk
ZXIoKSkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlciogbG9hZGVyID0gbV9pbXBsLT5m
cmFtZS0+bG9hZGVyKCk7CisgICAgICAgIGxvYWRlci0+YmVnaW4oV2ViQ29yZTo6S1VSTChzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oYmFzZVVybC5tYl9zdHIod3hDb252VVRGOCkpKSk7CisgICAg
ICAgIGxvYWRlci0+d3JpdGUoc291cmNlKTsKKyAgICAgICAgbG9hZGVyLT5lbmQoKTsKKyAgICB9
Cit9CisKK3d4U3RyaW5nIHd4V2ViRnJhbWU6OkdldElubmVyVGV4dCgpCit7CisgICAgaWYgKG1f
aW1wbC0+ZnJhbWUtPnZpZXcoKSAmJiBtX2ltcGwtPmZyYW1lLT52aWV3KCktPmxheW91dFBlbmRp
bmcoKSkKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKKyAgICAgICAg
CisgICAgV2ViQ29yZTo6RWxlbWVudCAqZG9jdW1lbnRFbGVtZW50ID0gbV9pbXBsLT5mcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVu
dC0+aW5uZXJUZXh0KCk7Cit9CisKK3d4U3RyaW5nIHd4V2ViRnJhbWU6OkdldEFzTWFya3VwKCkK
K3sKKyAgICBpZiAoIW1faW1wbC0+ZnJhbWUgfHwgIW1faW1wbC0+ZnJhbWUtPmRvY3VtZW50KCkp
CisgICAgICAgIHJldHVybiB3eEVtcHR5U3RyaW5nOworCisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1
cChtX2ltcGwtPmZyYW1lLT5kb2N1bWVudCgpKTsKK30KKword3hTdHJpbmcgd3hXZWJGcmFtZTo6
R2V0RXh0ZXJuYWxSZXByZXNlbnRhdGlvbigpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUtPnZp
ZXcoKSAmJiBtX2ltcGwtPmZyYW1lLT52aWV3KCktPmxheW91dFBlbmRpbmcoKSkKKyAgICAgICAg
bV9pbXBsLT5mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKKworICAgIHJldHVybiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKG1faW1wbC0+ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKTsKK30KKword3hT
dHJpbmcgd3hXZWJGcmFtZTo6UnVuU2NyaXB0KGNvbnN0IHd4U3RyaW5nJiBqYXZhc2NyaXB0KQor
eworICAgIHd4U3RyaW5nIHJldHVyblZhbHVlID0gd3hFbXB0eVN0cmluZzsKKyAgICBpZiAobV9p
bXBsLT5mcmFtZSkgeworICAgICAgICBLSlM6OkpTVmFsdWUqIHJlc3VsdCA9IG1faW1wbC0+ZnJh
bWUtPmxvYWRlcigpLT5leGVjdXRlU2NyaXB0KGphdmFzY3JpcHQsIHRydWUpOworICAgICAgICBp
ZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB3eFN0cmluZyhyZXN1bHQtPnRv
U3RyaW5nKG1faW1wbC0+ZnJhbWUtPnNjcmlwdCgpLT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgd3hDb252VVRGOCk7ICAgICAgICAKKyAgICB9Cisg
ICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCit2b2lkIHd4V2ViRnJhbWU6OkxvYWRVUkwoY29u
c3Qgd3hTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZy
YW1lLT5sb2FkZXIoKSkgeworICAgICAgICBXZWJDb3JlOjpLVVJMIGt1cmwgPSBXZWJDb3JlOjpL
VVJMKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPih1cmwubWJfc3RyKHd4Q29udlVURjgpKSk7Cisg
ICAgICAgIC8vIE5COiBUaGlzIGlzIGFuIHVnbHkgZml4LCBidXQgQ1VSTCB3b24ndCBsb2FkIHN1
Yi1yZXNvdXJjZXMgaWYgdGhlCisgICAgICAgIC8vIHByb3RvY29sIGlzIG9taXR0ZWQ7IHNhZGx5
LCBpdCB3aWxsIG5vdCBlbWl0IGFuIGVycm9yLCBlaXRoZXIsIHNvCisgICAgICAgIC8vIHRoZXJl
J3Mgbm8gd2F5IGZvciB1cyB0byBjYXRjaCB0aGlzIHByb2JsZW0gdGhlIGNvcnJlY3Qgd2F5IHll
dC4KKyAgICAgICAgaWYgKGt1cmwucHJvdG9jb2woKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IC8vIGlzIGl0IGEgZmlsZSBvbiBkaXNrPworICAgICAgICAgICAgaWYgKHd4RmlsZUV4aXN0cyh1
cmwpKSB7CisgICAgICAgICAgICAgICAga3VybC5zZXRQcm90b2NvbCgiZmlsZSIpOworICAgICAg
ICAgICAgICAgIGt1cmwuc2V0UGF0aCgiLy8iICsga3VybC5wYXRoKCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAga3VybC5zZXRQcm90b2NvbCgi
aHR0cCIpOworICAgICAgICAgICAgICAgIGt1cmwuc2V0UGF0aCgiLy8iICsga3VybC5wYXRoKCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1faW1wbC0+ZnJhbWUtPmxvYWRl
cigpLT5sb2FkKGt1cmwpOworICAgIH0KK30KKworYm9vbCB3eFdlYkZyYW1lOjpHb0JhY2soKQor
eworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKS0+Z29CYWNrKCk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Jvb2wgd3hXZWJGcmFtZTo6R29Gb3J3YXJkKCkKK3sKKyAgICBpZiAobV9p
bXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5wYWdlKCkpCisgICAgICAgIHJldHVybiBtX2lt
cGwtPmZyYW1lLT5wYWdlKCktPmdvRm9yd2FyZCgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIHd4V2ViRnJhbWU6OkNhbkdvQmFjaygpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUg
JiYgbV9pbXBsLT5mcmFtZS0+cGFnZSgpICYmIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKS0+YmFja0Zv
cndhcmRMaXN0KCkpCisgICAgICAgIHJldHVybiBtX2ltcGwtPmZyYW1lLT5wYWdlKCktPmJhY2tG
b3J3YXJkTGlzdCgpLT5iYWNrSXRlbSgpICE9IE5VTEw7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgd3hXZWJGcmFtZTo6Q2FuR29Gb3J3YXJkKCkKK3sKKyAgICBpZiAobV9pbXBsLT5m
cmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5wYWdlKCkgJiYgbV9pbXBsLT5mcmFtZS0+cGFnZSgpLT5i
YWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKS0+
YmFja0ZvcndhcmRMaXN0KCktPmZvcndhcmRJdGVtKCkgIT0gTlVMTDsKKworICAgIHJldHVybiBm
YWxzZTsKK30KK2Jvb2wgd3hXZWJGcmFtZTo6Q2FuSW5jcmVhc2VUZXh0U2l6ZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1faW1wbC0+ZnJhbWUpIHsKKyAgICAgICAgaWYgKG1fdGV4dE1hZ25pZmllcipU
ZXh0U2l6ZU11bHRpcGxpZXJSYXRpbyA8PSBNYXhpbXVtVGV4dFNpemVNdWx0aXBsaWVyKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCB3eFdlYkZyYW1lOjpJbmNyZWFzZVRleHRTaXplKCkKK3sKKyAgICBpZiAoQ2FuSW5jcmVhc2VU
ZXh0U2l6ZSgpKSB7CisgICAgICAgIG1fdGV4dE1hZ25pZmllciA9IG1fdGV4dE1hZ25pZmllcipU
ZXh0U2l6ZU11bHRpcGxpZXJSYXRpbzsKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+c2V0Wm9vbUZh
Y3RvcihtX3RleHRNYWduaWZpZXIsIHRydWUpOworICAgIH0KK30KKworYm9vbCB3eFdlYkZyYW1l
OjpDYW5EZWNyZWFzZVRleHRTaXplKCkgY29uc3QKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSkg
eworICAgICAgICBpZiAobV90ZXh0TWFnbmlmaWVyL1RleHRTaXplTXVsdGlwbGllclJhdGlvID49
IE1pbmltdW1UZXh0U2l6ZU11bHRpcGxpZXIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHd4V2ViRnJhbWU6OkRlY3JlYXNlVGV4
dFNpemUoKQoreyAgICAgICAgCisgICAgaWYgKENhbkRlY3JlYXNlVGV4dFNpemUoKSkgeworICAg
ICAgICBtX3RleHRNYWduaWZpZXIgPSBtX3RleHRNYWduaWZpZXIvVGV4dFNpemVNdWx0aXBsaWVy
UmF0aW87CisgICAgICAgIG1faW1wbC0+ZnJhbWUtPnNldFpvb21GYWN0b3IobV90ZXh0TWFnbmlm
aWVyLCB0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgd3hXZWJGcmFtZTo6TWFrZUVkaXRhYmxlKGJv
b2wgZW5hYmxlKQoreworICAgIG1faXNFZGl0YWJsZSA9IGVuYWJsZTsKK30KKworCisKK2Jvb2wg
d3hXZWJGcmFtZTo6Q2FuQ29weSgpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBs
LT5mcmFtZS0+dmlldygpKQorICAgICAgICByZXR1cm4gKG1faW1wbC0+ZnJhbWUtPmVkaXRvcigp
LT5jYW5Db3B5KCkgfHwgbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCktPmNhbkRIVE1MQ29weSgpKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCB3eFdlYkZyYW1lOjpDb3B5KCkKK3sKKyAg
ICBpZiAoQ2FuQ29weSgpKQorICAgICAgICBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y29weSgp
OworfQorCitib29sIHd4V2ViRnJhbWU6OkNhbkN1dCgpCit7CisgICAgaWYgKG1faW1wbC0+ZnJh
bWUgJiYgbV9pbXBsLT5mcmFtZS0+dmlldygpKQorICAgICAgICByZXR1cm4gKG1faW1wbC0+ZnJh
bWUtPmVkaXRvcigpLT5jYW5DdXQoKSB8fCBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y2FuREhU
TUxDdXQoKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgd3hXZWJGcmFtZTo6Q3V0
KCkKK3sKKyAgICBpZiAoQ2FuQ3V0KCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigp
LT5jdXQoKTsKK30KKworYm9vbCB3eFdlYkZyYW1lOjpDYW5QYXN0ZSgpCit7CisgICAgaWYgKG1f
aW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+dmlldygpKQorICAgICAgICByZXR1cm4gKG1f
aW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpIHx8IG1faW1wbC0+ZnJhbWUtPmVkaXRv
cigpLT5jYW5ESFRNTFBhc3RlKCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIHd4
V2ViRnJhbWU6OlBhc3RlKCkKK3sKKyAgICBpZiAoQ2FuUGFzdGUoKSkKKyAgICAgICAgbV9pbXBs
LT5mcmFtZS0+ZWRpdG9yKCktPnBhc3RlKCk7CisKK30KSW5kZXg6IFdlYktpdC93eC9XZWJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJldmlzaW9uIDM1NjA1
KQorKysgV2ViS2l0L3d4L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2
IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1l
bnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgpAQCAtNDMsNyArNDIsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0
LmgiCi0jaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcu
aCIKICNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKQEAgLTY2LDE4ICs2NCwxMyBAQAogICAgICNpbmNsdWRlICJ3eC93eC5oIgogI2VuZGlmCiAK
KyNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlICJX
ZWJWaWV3UHJpdmF0ZS5oIgogCiAjaW5jbHVkZSA8d3gvZGVmcy5oPgogI2luY2x1ZGUgPHd4L2Rj
YnVmZmVyLmg+CiAKLS8vIE1hdGNoIFNhZmFyaSdzIG1pbi9tYXggem9vbSBzaXplcyBieSBkZWZh
dWx0Ci0jZGVmaW5lIE1pbmltdW1UZXh0U2l6ZU11bHRpcGxpZXIgICAgICAgMC41ZgotI2RlZmlu
ZSBNYXhpbXVtVGV4dFNpemVNdWx0aXBsaWVyICAgICAgIDMuMGYKLSNkZWZpbmUgVGV4dFNpemVN
dWx0aXBsaWVyUmF0aW8gICAgICAgICAxLjJmCi0KLQogI2lmIGRlZmluZWQoX01TQ19WRVIpCiBp
bnQgcmludChkb3VibGUgdmFsKQogewpAQCAtMjAxLDIwICsxOTQsMTggQEAKIH0KIAogd3hXZWJW
aWV3Ojp3eFdlYlZpZXcod3hXaW5kb3cqIHBhcmVudCwgaW50IGlkLCBjb25zdCB3eFBvaW50JiBw
b3NpdGlvbiwgCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFNpemUmIHNpemUsIGxvbmcg
c3R5bGUsIGNvbnN0IHd4U3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgV2ViVmll
d0ZyYW1lRGF0YSogZGF0YSkgOgorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hTaXplJiBz
aXplLCBsb25nIHN0eWxlLCBjb25zdCB3eFN0cmluZyYgbmFtZSkgOgogICAgIG1fdGV4dE1hZ25p
ZmllcigxLjApLAogICAgIG1faXNFZGl0YWJsZShmYWxzZSksCiAgICAgbV9pc0luaXRpYWxpemVk
KGZhbHNlKSwKICAgICBtX2JlaW5nRGVzdHJveWVkKGZhbHNlKSwKICAgICBtX3RpdGxlKHd4RW1w
dHlTdHJpbmcpCiB7Ci0gICAgQ3JlYXRlKHBhcmVudCwgaWQsIHBvc2l0aW9uLCBzaXplLCBzdHls
ZSwgbmFtZSwgZGF0YSk7CisgICAgQ3JlYXRlKHBhcmVudCwgaWQsIHBvc2l0aW9uLCBzaXplLCBz
dHlsZSwgbmFtZSk7CiB9CiAKIGJvb2wgd3hXZWJWaWV3OjpDcmVhdGUod3hXaW5kb3cqIHBhcmVu
dCwgaW50IGlkLCBjb25zdCB3eFBvaW50JiBwb3NpdGlvbiwgCi0gICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSwgbG9uZyBzdHlsZSwgY29uc3Qgd3hTdHJpbmcmIG5hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgIFdlYlZpZXdGcmFtZURhdGEqIGRhdGEpCisgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHd4U2l6ZSYgc2l6ZSwgbG9uZyBzdHlsZSwgY29uc3Qgd3hT
dHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCAoc3R5bGUgJiB3eEJPUkRFUl9NQVNLKSA9PSAwKQog
ICAgICAgICBzdHlsZSB8PSB3eEJPUkRFUl9OT05FOwpAQCAtMjM4LDIyICsyMjksMTMgQEAKICAg
ICBXZWJDb3JlOjpJbml0aWFsaXplTG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKTsgICAgCiAg
ICAgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBwYXJlbnRGcmFtZSA9IDA7CiAKLSAg
ICAvLyBGSVhNRTogVGhpcyBjYXN0IGlzIG9idmlvdXNseSBub3QgYXMgc2FmZSBhcyBhIGR5bmFt
aWMKLSAgICAvLyBjYXN0LCBidXQgdGhpcyBhbGxvd3MgdXMgdG8gZ2V0IGFyb3VuZCByZXF1aXJp
bmcgUlRUSQotICAgIC8vIHN1cHBvcnQgZm9yIHRoZSBtb21lbnQuIFRoaXMgaXMgb25seSB1c2Vk
IGZvciBzdWJmcmFtZXMKLSAgICAvLyBpbiBhbnkgY2FzZSwgd2hpY2ggYXJlbid0IGN1cnJlbnRs
eSBzdXBwb3J0ZWQuCi0gICAgd3hXZWJWaWV3KiBwYXJlbnRXZWJWaWV3ID0gc3RhdGljX2Nhc3Q8
d3hXZWJWaWV3Kj4ocGFyZW50KTsKKyAgICBXZWJDb3JlOjpFZGl0b3JDbGllbnRXeCogZWRpdG9y
Q2xpZW50ID0gbmV3IFdlYkNvcmU6OkVkaXRvckNsaWVudFd4KCk7CisgICAgbV9pbXBsLT5wYWdl
ID0gbmV3IFdlYkNvcmU6OlBhZ2UobmV3IFdlYkNvcmU6OkNocm9tZUNsaWVudFd4KHRoaXMpLCBu
ZXcgV2ViQ29yZTo6Q29udGV4dE1lbnVDbGllbnRXeCgpLCBlZGl0b3JDbGllbnQsIG5ldyBXZWJD
b3JlOjpEcmFnQ2xpZW50V3goKSwgbmV3IFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFd4KCkpOwor
ICAgIGVkaXRvckNsaWVudC0+c2V0UGFnZShtX2ltcGwtPnBhZ2UpOwogICAgIAotICAgIGlmIChk
YXRhKSB7Ci0gICAgICAgIHBhcmVudEZyYW1lID0gZGF0YS0+b3duZXJFbGVtZW50OwotICAgICAg
ICBtX2ltcGwtPnBhZ2UgPSBwYXJlbnRXZWJWaWV3LT5tX2ltcGwtPmZyYW1lLT5wYWdlKCk7Ci0g
ICAgfQotICAgIGVsc2UgewotICAgICAgICBXZWJDb3JlOjpFZGl0b3JDbGllbnRXeCogZWRpdG9y
Q2xpZW50ID0gbmV3IFdlYkNvcmU6OkVkaXRvckNsaWVudFd4KCk7Ci0gICAgICAgIG1faW1wbC0+
cGFnZSA9IG5ldyBXZWJDb3JlOjpQYWdlKG5ldyBXZWJDb3JlOjpDaHJvbWVDbGllbnRXeCh0aGlz
KSwgbmV3IFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50V3goKSwgZWRpdG9yQ2xpZW50LCBuZXcg
V2ViQ29yZTo6RHJhZ0NsaWVudFd4KCksIG5ldyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRXeCgp
KTsKLSAgICAgICAgZWRpdG9yQ2xpZW50LT5zZXRQYWdlKG1faW1wbC0+cGFnZSk7Ci0gICAgfQor
ICAgIG1fbWFpbkZyYW1lID0gbmV3IHd4V2ViRnJhbWUodGhpcyk7CiAgICAgCisgICAgLyoKICAg
ICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4KiBsb2FkZXJDbGllbnQgPSBuZXcgV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRXeCgpOwogICAgIAogICAgIG1faW1wbC0+ZnJhbWUgPSBXZWJD
b3JlOjpGcmFtZTo6Y3JlYXRlKG1faW1wbC0+cGFnZSwgcGFyZW50RnJhbWUsIGxvYWRlckNsaWVu
dCk7CkBAIC0yNjIsNyArMjQ0LDcgQEAKICAgICBsb2FkZXJDbGllbnQtPnNldFdlYlZpZXcodGhp
cyk7CiAgICAgCiAgICAgbV9pbXBsLT5mcmFtZS0+aW5pdCgpOwotICAgICAgICAKKyAgICAqLwog
ICAgIC8vIERlZmF1bHQgc2V0dGluZ3MgLSB3ZSBzaG91bGQgaGF2ZSB3eFdlYlZpZXdTZXR0aW5n
cyBjbGFzcyBmb3IgdGhpcwogICAgIC8vIGV2ZW50dWFsbHkKICAgICBXZWJDb3JlOjpTZXR0aW5n
cyogc2V0dGluZ3MgPSBtX2ltcGwtPnBhZ2UtPnNldHRpbmdzKCk7CkBAIC0yODQsNyArMjY2LDgg
QEAKIHsKICAgICBtX2JlaW5nRGVzdHJveWVkID0gdHJ1ZTsKICAgICAKLSAgICBtX2ltcGwtPmZy
YW1lLT5sb2FkZXIoKS0+ZGV0YWNoRnJvbVBhcmVudCgpOworICAgIGRlbGV0ZSBtX21haW5GcmFt
ZTsKKyAgICAvL21faW1wbC0+ZnJhbWUtPmxvYWRlcigpLT5kZXRhY2hGcm9tUGFyZW50KCk7CiAg
ICAgCiAgICAgZGVsZXRlIG1faW1wbC0+cGFnZTsKICAgICBtX2ltcGwtPnBhZ2UgPSAwOyAgIApA
QCAtMjkyLDE2NCArMjc1LDEyNiBAQAogCiB2b2lkIHd4V2ViVmlldzo6U3RvcCgpCiB7Ci0gICAg
aWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+bG9hZGVyKCkpCi0gICAgICAgIG1f
aW1wbC0+ZnJhbWUtPmxvYWRlcigpLT5zdG9wKCk7CisgICAgaWYgKG1fbWFpbkZyYW1lKQorICAg
ICAgICBtX21haW5GcmFtZS0+U3RvcCgpOwogfQogCiB2b2lkIHd4V2ViVmlldzo6UmVsb2FkKCkK
IHsKLSAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5sb2FkZXIoKSkKLSAg
ICAgICAgbV9pbXBsLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOworICAgIGlmIChtX21haW5G
cmFtZSkKKyAgICAgICAgbV9tYWluRnJhbWUtPlJlbG9hZCgpOwogfQogCiB3eFN0cmluZyB3eFdl
YlZpZXc6OkdldFBhZ2VTb3VyY2UoKQogewotICAgIGlmIChtX2ltcGwtPmZyYW1lKSB7Ci0gICAg
ICAgIGlmIChtX2ltcGwtPmZyYW1lLT52aWV3KCkgJiYgbV9pbXBsLT5mcmFtZS0+dmlldygpLT5s
YXlvdXRQZW5kaW5nKCkpCi0gICAgICAgICAgICBtX2ltcGwtPmZyYW1lLT52aWV3KCktPmxheW91
dCgpOwotICAgIAotICAgICAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jID0gbV9pbXBsLT5mcmFt
ZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChkb2MpIHsKLSAgICAgICAgICAg
IHd4U3RyaW5nIHNvdXJjZSA9IGNyZWF0ZU1hcmt1cChkb2MpOwotICAgICAgICAgICAgcmV0dXJu
IHNvdXJjZTsKLSAgICAgICAgfQotICAgIH0KKyAgICBpZiAobV9tYWluRnJhbWUpCisgICAgICAg
IHJldHVybiBtX21haW5GcmFtZS0+R2V0UGFnZVNvdXJjZSgpOworCiAgICAgcmV0dXJuIHd4RW1w
dHlTdHJpbmc7CiB9CiAKIHZvaWQgd3hXZWJWaWV3OjpTZXRQYWdlU291cmNlKGNvbnN0IHd4U3Ry
aW5nJiBzb3VyY2UsIGNvbnN0IHd4U3RyaW5nJiBiYXNlVXJsKQogewotICAgIGlmIChtX2ltcGwt
PmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZy
YW1lTG9hZGVyKiBsb2FkZXIgPSBtX2ltcGwtPmZyYW1lLT5sb2FkZXIoKTsKLSAgICAgICAgbG9h
ZGVyLT5iZWdpbihXZWJDb3JlOjpLVVJMKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihiYXNlVXJs
Lm1iX3N0cih3eENvbnZVVEY4KSkpKTsKLSAgICAgICAgbG9hZGVyLT53cml0ZShzb3VyY2UpOwot
ICAgICAgICBsb2FkZXItPmVuZCgpOwotICAgIH0KKyAgICBpZiAobV9tYWluRnJhbWUpCisgICAg
ICAgIG1fbWFpbkZyYW1lLT5TZXRQYWdlU291cmNlKHNvdXJjZSwgYmFzZVVybCk7CiB9CiAKIHd4
U3RyaW5nIHd4V2ViVmlldzo6R2V0SW5uZXJUZXh0KCkKIHsKLSAgICBpZiAobV9pbXBsLT5mcmFt
ZS0+dmlldygpICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+bGF5b3V0UGVuZGluZygpKQotICAg
ICAgICBtX2ltcGwtPmZyYW1lLT52aWV3KCktPmxheW91dCgpOworICAgIGlmIChtX21haW5GcmFt
ZSkKKyAgICAgICAgcmV0dXJuIG1fbWFpbkZyYW1lLT5HZXRJbm5lclRleHQoKTsKICAgICAgICAg
Ci0gICAgV2ViQ29yZTo6RWxlbWVudCAqZG9jdW1lbnRFbGVtZW50ID0gbV9pbXBsLT5mcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVu
dC0+aW5uZXJUZXh0KCk7CisgICAgcmV0dXJuIHd4RW1wdHlTdHJpbmc7CiB9CiAKIHd4U3RyaW5n
IHd4V2ViVmlldzo6R2V0QXNNYXJrdXAoKQogewotICAgIGlmICghbV9pbXBsLT5mcmFtZSB8fCAh
bV9pbXBsLT5mcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHd4RW1wdHlTdHJpbmc7
Ci0KLSAgICByZXR1cm4gY3JlYXRlTWFya3VwKG1faW1wbC0+ZnJhbWUtPmRvY3VtZW50KCkpOwor
ICAgIGlmIChtX21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fbWFpbkZyYW1lLT5HZXRBc01h
cmt1cCgpOworICAgICAgICAKKyAgICByZXR1cm4gd3hFbXB0eVN0cmluZzsKIH0KIAogd3hTdHJp
bmcgd3hXZWJWaWV3OjpHZXRFeHRlcm5hbFJlcHJlc2VudGF0aW9uKCkKIHsKLSAgICBpZiAobV9p
bXBsLT5mcmFtZS0+dmlldygpICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+bGF5b3V0UGVuZGlu
ZygpKQotICAgICAgICBtX2ltcGwtPmZyYW1lLT52aWV3KCktPmxheW91dCgpOwotCi0gICAgcmV0
dXJuIGV4dGVybmFsUmVwcmVzZW50YXRpb24obV9pbXBsLT5mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCkpOworICAgIGlmIChtX21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fbWFpbkZyYW1lLT5H
ZXRFeHRlcm5hbFJlcHJlc2VudGF0aW9uKCk7CisgICAgICAgIAorICAgIHJldHVybiB3eEVtcHR5
U3RyaW5nOwogfQogCiB3eFN0cmluZyB3eFdlYlZpZXc6OlJ1blNjcmlwdChjb25zdCB3eFN0cmlu
ZyYgamF2YXNjcmlwdCkKIHsKLSAgICB3eFN0cmluZyByZXR1cm5WYWx1ZSA9IHd4RW1wdHlTdHJp
bmc7Ci0gICAgaWYgKG1faW1wbC0+ZnJhbWUpIHsKLSAgICAgICAgS0pTOjpKU1ZhbHVlKiByZXN1
bHQgPSBtX2ltcGwtPmZyYW1lLT5sb2FkZXIoKS0+ZXhlY3V0ZVNjcmlwdChqYXZhc2NyaXB0LCB0
cnVlKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVyblZhbHVlID0gd3hT
dHJpbmcocmVzdWx0LT50b1N0cmluZyhtX2ltcGwtPmZyYW1lLT5zY3JpcHQoKS0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKSkuVVRGOFN0cmluZygpLmNfc3RyKCksIHd4Q29udlVURjgpOyAg
ICAgICAgCi0gICAgfQotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKKyAgICBpZiAobV9tYWluRnJh
bWUpCisgICAgICAgIHJldHVybiBtX21haW5GcmFtZS0+UnVuU2NyaXB0KGphdmFzY3JpcHQpOwor
ICAgIAorICAgIHJldHVybiB3eEVtcHR5U3RyaW5nOwogfQogCiB2b2lkIHd4V2ViVmlldzo6TG9h
ZFVSTChjb25zdCB3eFN0cmluZyYgdXJsKQogewotICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1f
aW1wbC0+ZnJhbWUtPmxvYWRlcigpKSB7Ci0gICAgICAgIFdlYkNvcmU6OktVUkwga3VybCA9IFdl
YkNvcmU6OktVUkwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHVybC5tYl9zdHIod3hDb252VVRG
OCkpKTsKLSAgICAgICAgLy8gTkI6IFRoaXMgaXMgYW4gdWdseSBmaXgsIGJ1dCBDVVJMIHdvbid0
IGxvYWQgc3ViLXJlc291cmNlcyBpZiB0aGUKLSAgICAgICAgLy8gcHJvdG9jb2wgaXMgb21pdHRl
ZDsgc2FkbHksIGl0IHdpbGwgbm90IGVtaXQgYW4gZXJyb3IsIGVpdGhlciwgc28KLSAgICAgICAg
Ly8gdGhlcmUncyBubyB3YXkgZm9yIHVzIHRvIGNhdGNoIHRoaXMgcHJvYmxlbSB0aGUgY29ycmVj
dCB3YXkgeWV0LgotICAgICAgICBpZiAoa3VybC5wcm90b2NvbCgpLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgLy8gaXMgaXQgYSBmaWxlIG9uIGRpc2s/Ci0gICAgICAgICAgICBpZiAod3hGaWxl
RXhpc3RzKHVybCkpIHsKLSAgICAgICAgICAgICAgICBrdXJsLnNldFByb3RvY29sKCJmaWxlIik7
Ci0gICAgICAgICAgICAgICAga3VybC5zZXRQYXRoKCIvLyIgKyBrdXJsLnBhdGgoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBrdXJsLnNldFBy
b3RvY29sKCJodHRwIik7Ci0gICAgICAgICAgICAgICAga3VybC5zZXRQYXRoKCIvLyIgKyBrdXJs
LnBhdGgoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9pbXBsLT5mcmFt
ZS0+bG9hZGVyKCktPmxvYWQoa3VybCk7Ci0gICAgfQorICAgIGlmIChtX21haW5GcmFtZSkKKyAg
ICAgICAgbV9tYWluRnJhbWUtPkxvYWRVUkwodXJsKTsKIH0KIAogYm9vbCB3eFdlYlZpZXc6Okdv
QmFjaygpCiB7Ci0gICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+cGFnZSgp
KQotICAgICAgICByZXR1cm4gbV9pbXBsLT5mcmFtZS0+cGFnZSgpLT5nb0JhY2soKTsKKyAgICBp
ZiAobV9tYWluRnJhbWUpCisgICAgICAgIHJldHVybiBtX21haW5GcmFtZS0+R29CYWNrKCk7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgd3hXZWJWaWV3OjpHb0ZvcndhcmQoKQogewot
ICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAg
cmV0dXJuIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKS0+Z29Gb3J3YXJkKCk7CisgICAgaWYgKG1fbWFp
bkZyYW1lKQorICAgICAgICByZXR1cm4gbV9tYWluRnJhbWUtPkdvRm9yd2FyZCgpOwogCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBib29sIHd4V2ViVmlldzo6Q2FuR29CYWNrKCkKIHsKLSAgICBp
ZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5wYWdlKCkgJiYgbV9pbXBsLT5mcmFt
ZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKSkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJh
bWUtPnBhZ2UoKS0+YmFja0ZvcndhcmRMaXN0KCktPmJhY2tJdGVtKCkgIT0gTlVMTDsKKyAgICBp
ZiAobV9tYWluRnJhbWUpCisgICAgICAgIHJldHVybiBtX21haW5GcmFtZS0+Q2FuR29CYWNrKCk7
CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgd3hXZWJWaWV3OjpDYW5Hb0ZvcndhcmQo
KQogewotICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKSAmJiBt
X2ltcGwtPmZyYW1lLT5wYWdlKCktPmJhY2tGb3J3YXJkTGlzdCgpKQotICAgICAgICByZXR1cm4g
bV9pbXBsLT5mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKS0+Zm9yd2FyZEl0ZW0oKSAh
PSBOVUxMOworICAgIGlmIChtX21haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuIG1fbWFpbkZyYW1l
LT5DYW5Hb0ZvcndhcmQoKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCB3eFdlYlZp
ZXc6OkNhbkluY3JlYXNlVGV4dFNpemUoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwtPmZyYW1l
KSB7Ci0gICAgICAgIGlmIChtX3RleHRNYWduaWZpZXIqVGV4dFNpemVNdWx0aXBsaWVyUmF0aW8g
PD0gTWF4aW11bVRleHRTaXplTXVsdGlwbGllcikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KKyAgICBpZiAobV9tYWluRnJhbWUpCisgICAgICAgIHJldHVybiBtX21haW5GcmFtZS0+
Q2FuSW5jcmVhc2VUZXh0U2l6ZSgpOworCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIHd4
V2ViVmlldzo6SW5jcmVhc2VUZXh0U2l6ZSgpCiB7Ci0gICAgaWYgKENhbkluY3JlYXNlVGV4dFNp
emUoKSkgewotICAgICAgICBtX3RleHRNYWduaWZpZXIgPSBtX3RleHRNYWduaWZpZXIqVGV4dFNp
emVNdWx0aXBsaWVyUmF0aW87Ci0gICAgICAgIG1faW1wbC0+ZnJhbWUtPnNldFpvb21GYWN0b3Io
bV90ZXh0TWFnbmlmaWVyLCB0cnVlKTsKLSAgICB9CisgICAgaWYgKG1fbWFpbkZyYW1lKQorICAg
ICAgICBtX21haW5GcmFtZS0+SW5jcmVhc2VUZXh0U2l6ZSgpOwogfQogCiBib29sIHd4V2ViVmll
dzo6Q2FuRGVjcmVhc2VUZXh0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbC0+ZnJhbWUp
IHsKLSAgICAgICAgaWYgKG1fdGV4dE1hZ25pZmllci9UZXh0U2l6ZU11bHRpcGxpZXJSYXRpbyA+
PSBNaW5pbXVtVGV4dFNpemVNdWx0aXBsaWVyKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQorICAgIGlmIChtX21haW5GcmFtZSkKKyAgICAgICAgbV9tYWluRnJhbWUtPkNhbkRlY3Jl
YXNlVGV4dFNpemUoKTsKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCB3eFdlYlZpZXc6
OkRlY3JlYXNlVGV4dFNpemUoKQogeyAgICAgICAgCi0gICAgaWYgKENhbkRlY3JlYXNlVGV4dFNp
emUoKSkgewotICAgICAgICBtX3RleHRNYWduaWZpZXIgPSBtX3RleHRNYWduaWZpZXIvVGV4dFNp
emVNdWx0aXBsaWVyUmF0aW87Ci0gICAgICAgIG1faW1wbC0+ZnJhbWUtPnNldFpvb21GYWN0b3Io
bV90ZXh0TWFnbmlmaWVyLCB0cnVlKTsKLSAgICB9CisgICAgaWYgKG1fbWFpbkZyYW1lKQorICAg
ICAgICBtX21haW5GcmFtZS0+RGVjcmVhc2VUZXh0U2l6ZSgpOwogfQogCiB2b2lkIHd4V2ViVmll
dzo6TWFrZUVkaXRhYmxlKGJvb2wgZW5hYmxlKQpAQCAtNDY0LDEyICs0MDksMTcgQEAKIAogdm9p
ZCB3eFdlYlZpZXc6Ok9uUGFpbnQod3hQYWludEV2ZW50JiBldmVudCkKIHsKLSAgICBpZiAobV9i
ZWluZ0Rlc3Ryb3llZCB8fCAhbV9pbXBsLT5mcmFtZS0+dmlldygpIHx8ICFtX2ltcGwtPmZyYW1l
KQorICAgIAorICAgIGlmIChtX2JlaW5nRGVzdHJveWVkIHx8ICFtX21haW5GcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAorICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1l
LT5HZXRGcmFtZSgpOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKICAgICB3eEF1dG9CdWZmZXJlZFBhaW50REMgZGModGhpcyk7CiAKLSAg
ICBpZiAoSXNTaG93bigpICYmIG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+ZG9jdW1l
bnQoKSkgeworICAgIGlmIChJc1Nob3duKCkgJiYgZnJhbWUtPmRvY3VtZW50KCkpIHsKICNpZiBV
U0UoV1hHQykKICAgICAgICAgd3hHQ0RDIGdjZGMoZGMpOwogI2VuZGlmCkBAIC00NzcsNyArNDI3
LDcgQEAKICAgICAgICAgaWYgKGRjLklzT2soKSkgewogICAgICAgICAgICAgd3hSZWN0IHBhaW50
UmVjdCA9IEdldFVwZGF0ZVJlZ2lvbigpLkdldEJveCgpOwogCi0gICAgICAgICAgICBXZWJDb3Jl
OjpJbnRTaXplIG9mZnNldCA9IG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsT2Zmc2V0KCk7
CisgICAgICAgICAgICBXZWJDb3JlOjpJbnRTaXplIG9mZnNldCA9IGZyYW1lLT52aWV3KCktPnNj
cm9sbE9mZnNldCgpOwogI2lmIFVTRShXWEdDKQogICAgICAgICAgICAgZ2NkYy5TZXREZXZpY2VP
cmlnaW4oLW9mZnNldC53aWR0aCgpLCAtb2Zmc2V0LmhlaWdodCgpKTsKICNlbmRpZgpAQCAtNDg5
LDExICs0MzksMTEgQEAKICNlbHNlCiAgICAgICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQqIGdjID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCgod3hXaW5kb3dEQyopJmRjKTsK
ICNlbmRpZgotICAgICAgICAgICAgaWYgKGdjICYmIG1faW1wbC0+ZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+bmVl
ZHNMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9pbXBsLT5mcmFtZS0+dmlldygpLT5s
YXlvdXQoKTsKKyAgICAgICAgICAgIGlmIChnYyAmJiBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+bGF5b3V0KCk7CiAKLSAgICAgICAgICAg
ICAgICBtX2ltcGwtPmZyYW1lLT5wYWludChnYywgcGFpbnRSZWN0KTsKKyAgICAgICAgICAgICAg
ICBmcmFtZS0+cGFpbnQoZ2MsIHBhaW50UmVjdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9CkBAIC01MDEsOTEgKzQ1MSw5OSBAQAogCiB2b2lkIHd4V2ViVmlldzo6T25TaXplKHd4
U2l6ZUV2ZW50JiBldmVudCkKIHsgCi0gICAgaWYgKG1faXNJbml0aWFsaXplZCAmJiBtX2ltcGwt
PmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkgewotICAgICAgICBtX2ltcGwtPmZyYW1l
LT5zZW5kUmVzaXplRXZlbnQoKTsKLSAgICAgICAgbV9pbXBsLT5mcmFtZS0+dmlldygpLT5sYXlv
dXQoKTsKKyAgICBpZiAobV9pc0luaXRpYWxpemVkICYmIG1fbWFpbkZyYW1lKSB7CisgICAgICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOworICAgICAg
ICBmcmFtZS0+c2VuZFJlc2l6ZUV2ZW50KCk7CisgICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91
dCgpOwogICAgIH0KLSAgICAKKyAgICAgIAogICAgIGV2ZW50LlNraXAoKTsKLQogfQogCiB2b2lk
IHd4V2ViVmlldzo6T25Nb3VzZUV2ZW50cyh3eE1vdXNlRXZlbnQmIGV2ZW50KQogewogICAgIGV2
ZW50LlNraXAoKTsKICAgICAKLSAgICBpZiAoIW1faW1wbC0+ZnJhbWUgICYmIG1faW1wbC0+ZnJh
bWUtPnZpZXcoKSkKKyAgICBpZiAoIW1fbWFpbkZyYW1lKQogICAgICAgICByZXR1cm47IAogICAg
ICAgICAKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS0+R2V0RnJhbWUo
KTsgIAorICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKICAgICB3eFBvaW50IGdsb2JhbFBvaW50ID0gQ2xpZW50VG9TY3JlZW4oZXZlbnQuR2V0
UG9zaXRpb24oKSk7CiAKICAgICB3eEV2ZW50VHlwZSB0eXBlID0gZXZlbnQuR2V0RXZlbnRUeXBl
KCk7CiAgICAgCiAgICAgaWYgKHR5cGUgPT0gd3hFVlRfTU9VU0VXSEVFTCkgewogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQgd2tFdmVudChldmVudCwgZ2xvYmFsUG9pbnQpOwot
ICAgICAgICBtX2ltcGwtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudCh3
a0V2ZW50KTsKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50
KHdrRXZlbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFdlYkNvcmU6OlBs
YXRmb3JtTW91c2VFdmVudCB3a0V2ZW50KGV2ZW50LCBnbG9iYWxQb2ludCk7CiAKICAgICBpZiAo
dHlwZSA9PSB3eEVWVF9MRUZUX0RPV04gfHwgdHlwZSA9PSB3eEVWVF9NSURETEVfRE9XTiB8fCB0
eXBlID09IHd4RVZUX1JJR0hUX0RPV04pCi0gICAgICAgIG1faW1wbC0+ZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQod2tFdmVudCk7CisgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KHdrRXZlbnQpOwogICAgIAogICAg
IGVsc2UgaWYgKHR5cGUgPT0gd3hFVlRfTEVGVF9VUCB8fCB0eXBlID09IHd4RVZUX01JRERMRV9V
UCB8fCB0eXBlID09IHd4RVZUX1JJR0hUX1VQIHx8IAogICAgICAgICAgICAgICAgIHR5cGUgPT0g
d3hFVlRfTEVGVF9EQ0xJQ0sgfHwgdHlwZSA9PSB3eEVWVF9NSURETEVfRENMSUNLIHx8IHR5cGUg
PT0gd3hFVlRfUklHSFRfRENMSUNLKQotICAgICAgICBtX2ltcGwtPmZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQod2tFdmVudCk7CisgICAgICAgIGZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQod2tFdmVudCk7CiAKICAgICBl
bHNlIGlmICh0eXBlID09IHd4RVZUX01PVElPTikKLSAgICAgICAgbV9pbXBsLT5mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPm1vdXNlTW92ZWQod2tFdmVudCk7CisgICAgICAgIGZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+bW91c2VNb3ZlZCh3a0V2ZW50KTsKIH0KIAogYm9vbCB3eFdlYlZpZXc6OkNhbkNv
cHkoKQogewotICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkK
LSAgICAgICAgcmV0dXJuIChtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y2FuQ29weSgpIHx8IG1f
aW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTENvcHkoKSk7CisgICAgaWYgKG1fbWFpbkZy
YW1lKQorICAgICAgICByZXR1cm4gbV9tYWluRnJhbWUtPkNhbkNvcHkoKTsKIAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogdm9pZCB3eFdlYlZpZXc6OkNvcHkoKQogewotICAgIGlmIChDYW5Db3B5
KCkpCi0gICAgICAgIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jb3B5KCk7CisgICAgaWYgKG1f
bWFpbkZyYW1lKQorICAgICAgICBtX21haW5GcmFtZS0+Q29weSgpOwogfQogCiBib29sIHd4V2Vi
Vmlldzo6Q2FuQ3V0KCkKIHsKLSAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1l
LT52aWV3KCkpCi0gICAgICAgIHJldHVybiAobV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCktPmNhbkN1
dCgpIHx8IG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTEN1dCgpKTsKKyAgICBpZiAo
bV9tYWluRnJhbWUpCisgICAgICAgIG1fbWFpbkZyYW1lLT5DYW5DdXQoKTsKIAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogdm9pZCB3eFdlYlZpZXc6OkN1dCgpCiB7Ci0gICAgaWYgKENhbkN1dCgp
KQotICAgICAgICBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y3V0KCk7CisgICAgaWYgKG1fbWFp
bkZyYW1lKQorICAgICAgICBtX21haW5GcmFtZS0+Q3V0KCk7CiB9CiAKIGJvb2wgd3hXZWJWaWV3
OjpDYW5QYXN0ZSgpCiB7Ci0gICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+
dmlldygpKQotICAgICAgICByZXR1cm4gKG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0
ZSgpIHx8IG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRNTFBhc3RlKCkpOworICAgIGlm
IChtX21haW5GcmFtZSkKKyAgICAgICAgbV9tYWluRnJhbWUtPkNhblBhc3RlKCk7CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgd3hXZWJWaWV3OjpQYXN0ZSgpCiB7Ci0gICAgaWYgKENh
blBhc3RlKCkpCi0gICAgICAgIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5wYXN0ZSgpOworICAg
IGlmIChtX21haW5GcmFtZSkKKyAgICAgICAgbV9tYWluRnJhbWUtPlBhc3RlKCk7CiAKIH0KIAog
dm9pZCB3eFdlYlZpZXc6Ok9uS2V5RXZlbnRzKHd4S2V5RXZlbnQmIGV2ZW50KQogewotICAgIGlm
IChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkgeworICAgIFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSA9IDA7CisgICAgaWYgKG1fbWFpbkZyYW1lKQorICAgICAgICBmcmFtZSA9
IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOworICAgICAgICAKKyAgICBpZiAoZnJhbWUgJiYgZnJh
bWUtPnZpZXcoKSkgewogICAgICAgICAvLyBXZWJDb3JlIGRvZXNuJ3QgaGFuZGxlIHRoZXNlIGV2
ZW50cyBpdHNlbGYsIHNvIHdlIG5lZWQgdG8gZG8KICAgICAgICAgLy8gaXQgYW5kIG5vdCBzZW5k
IHRoZSBldmVudCBkb3duIG9yIGVsc2UgQ1RSTCtDIHdpbGwgZXJhc2UgdGhlIHRleHQKICAgICAg
ICAgLy8gYW5kIHJlcGxhY2UgaXQgd2l0aCBjLgpAQCAtNTk4LDkgKzU1Niw5IEBACiAgICAgICAg
IGVsc2UgeyAgICAKICAgICAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCB3
a0V2ZW50KGV2ZW50KTsKICAgICAgICAgICAgIGlmICh3a0V2ZW50LnR5cGUoKSA9PSBXZWJDb3Jl
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIgJiYgd2tFdmVudC5hbHRLZXkoKSkKLSAgICAg
ICAgICAgICAgICBtX2ltcGwtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlQWNjZXNzS2V5
KHdrRXZlbnQpOworICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
QWNjZXNzS2V5KHdrRXZlbnQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1f
aW1wbC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudCh3a0V2ZW50KTsKKyAgICAgICAg
ICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KHdrRXZlbnQpOwogICAgICAg
ICB9CiAgICAgfQogICAgIApAQCAtNjExLDE2ICs1NjksMjQgQEAKIAogdm9pZCB3eFdlYlZpZXc6
Ok9uU2V0Rm9jdXMod3hGb2N1c0V2ZW50JiBldmVudCkKIHsKLSAgICBpZiAobV9pbXBsLT5mcmFt
ZSkKLSAgICAgICAgbV9pbXBsLT5mcmFtZS0+c2VsZWN0aW9uKCktPnNldEZvY3VzZWQodHJ1ZSk7
CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gMDsKKyAgICBpZiAobV9tYWluRnJhbWUpCisg
ICAgICAgIGZyYW1lID0gbV9tYWluRnJhbWUtPkdldEZyYW1lKCk7CisgICAgICAgIAorICAgIGlm
IChmcmFtZSkKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLT5zZXRGb2N1c2VkKHRydWUpOwog
CiAgICAgZXZlbnQuU2tpcCgpOwogfQogCiB2b2lkIHd4V2ViVmlldzo6T25LaWxsRm9jdXMod3hG
b2N1c0V2ZW50JiBldmVudCkKIHsKLSAgICBpZiAobV9pbXBsLT5mcmFtZSkKLSAgICAgICAgbV9p
bXBsLT5mcmFtZS0+c2VsZWN0aW9uKCktPnNldEZvY3VzZWQoZmFsc2UpOworICAgIFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSA9IDA7CisgICAgaWYgKG1fbWFpbkZyYW1lKQorICAgICAgICBmcmFtZSA9
IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOworICAgICAgICAKKyAgICBpZiAoZnJhbWUpCisgICAg
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0Rm9jdXNlZChmYWxzZSk7CiAKICAgICBldmVudC5T
a2lwKCk7CiB9CkluZGV4OiBXZWJLaXQvd3gvd3h3ZWJraXQuYmtsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93eC93eHdlYmtpdC5ia2wJKHJldmlzaW9uIDM1NjA1KQorKysgV2ViS2l0L3d4L3d4d2Vi
a2l0LmJrbAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsNyBAQAogICAgICAgICAgICAgV2Vi
S2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmNwcAogICAgICAgICAgICAgV2ViS2l0U3Vw
cG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHAKICAgICAgICAgICAgIAorICAgICAgICAgICAgV2Vi
RnJhbWUuY3BwCiAgICAgICAgICAgICBXZWJWaWV3LmNwcAogICAgICAgICAgICAgV2ViQnJvd3Nl
clNoZWxsLmNwcAogICAgICAgICA8L3NvdXJjZXM+ICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38994</attachid>
            <date>2009-09-03 08:44:16 -0700</date>
            <delta_ts>2009-09-03 12:15:27 -0700</delta_ts>
            <desc>finishes wx port frames support</desc>
            <filename>frames_final3.patch</filename>
            <type>text/plain</type>
            <size>72465</size>
            <attacher name="Kevin Watters">kevinwatters</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3gu
Y3BwCShyZXZpc2lvbiA0Nzk5MikKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTMgQEAKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUg
IldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlldy5oIgogI2luY2x1ZGUgIldlYlZpZXdQcml2YXRlLmgiCiAKQEAgLTc3LDcgKzgwLDcgQEAK
IH0KIAogRnJhbWVMb2FkZXJDbGllbnRXeDo6RnJhbWVMb2FkZXJDbGllbnRXeCgpCi0gICAgOiBt
X2ZyYW1lKDApCisgICAgOiBtX3dlYkZyYW1lKDApCiB7CiB9CiAKQEAgLTg2LDkgKzg5LDEwIEBA
CiB7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6c2V0RnJhbWUoRnJhbWUgKmZyYW1l
KQordm9pZCBGcmFtZUxvYWRlckNsaWVudFd4OjpzZXRGcmFtZSh3eFdlYkZyYW1lICpmcmFtZSkK
IHsKLSAgICBtX2ZyYW1lID0gZnJhbWU7CisgICAgbV93ZWJGcmFtZSA9IGZyYW1lOworICAgIG1f
ZnJhbWUgPSBtX3dlYkZyYW1lLT5tX2ltcGwtPmZyYW1lOwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V3g6OnNldFdlYlZpZXcod3hXZWJWaWV3ICp3ZWJ2aWV3KQpAQCAtOTYsMTEgKzEwMCw2
IEBACiAgICAgbV93ZWJWaWV3ID0gd2VidmlldzsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFd4OjpkZXRhY2hGcmFtZUxvYWRlcigpCi17Ci0gICAgbV9mcmFtZSA9IDA7Ci19Ci0KIGJvb2wg
RnJhbWVMb2FkZXJDbGllbnRXeDo6aGFzV2ViVmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
d2ViVmlldyAhPSBOVUxMOwpAQCAtMzM5LDcgKzMzOCw3IEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KQogewog
ICAgIC8vIEZJWE1FOiBTZW5kIGFuIGV2ZW50IHRvIGFsbG93IGZvciBhbGVydHMgYW5kIGNhbmNl
bGxhdGlvbgotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAg
IHJldHVybjsKICAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsK
IH0KQEAgLTUwNSw2ICs1MDQsOSBAQAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmZyYW1l
TG9hZGVyRGVzdHJveWVkKCkKIHsKKyAgICBpZiAobV93ZWJGcmFtZSkKKyAgICAgICAgZGVsZXRl
IG1fd2ViRnJhbWU7CisgICAgbV93ZWJGcmFtZSA9IDA7CiAgICAgbV9mcmFtZSA9IDA7CiAgICAg
ZGVsZXRlIHRoaXM7CiB9CkBAIC01NTMsNyArNTU1LDcgQEAKIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudFd4Ojpjb21taXR0ZWRMb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlm
ICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIEZyYW1lTG9hZGVyKiBmbCA9IGxv
YWRlci0+ZnJhbWVMb2FkZXIoKTsKICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKQEAgLTY5Myw3ICs2OTUsNyBAQAogCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xp
Y3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1ldHlwZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fd2Vi
RnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAt
NzAyLDcgKzcwNCw3IEBACiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwg
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIHRhcmdldE5hbWUpCiB7Ci0gICAg
aWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fd2ViVmlldykgewpAQCAtNzIyLDcgKzcyNCw3IEBACiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1l
UG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCiB7
Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBpZiAobV93ZWJWaWV3KSB7CkBAIC03NTIsNTYgKzc1NCwzNCBAQAog
UGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRXeDo6Y3JlYXRlRnJhbWUoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3du
ZXJFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQg
bWFyZ2luSGVpZ2h0KQogewotLyoKLSAgICBGSVhNRTogVGVtcG9yYXJpbHkgZGlzYWJsaW5nIGNv
ZGUgZm9yIGxvYWRpbmcgc3ViZnJhbWVzLiBXaGlsZSBtb3N0IAotICAgIChpKWZyYW1lcyBsb2Fk
IGFuZCBhcmUgZGVzdHJveWVkIHByb3Blcmx5LCB0aGUgaWZyYW1lIGNyZWF0ZWQgYnkKLSAgICBn
b29nbGUuY29tIGluIGl0cyBuZXcgaG9tZXBhZ2UgZG9lcyBub3QgZ2V0IGRlc3Ryb3llZCB3aGVu
IAotICAgIGRvY3VtZW50KCktPmRldGFjaCgpIGlzIGNhbGxlZCwgYXMgb3RoZXIgKGkpZnJhbWVz
IGRvLiBJdCBpcyBkZXN0cm95ZWQgb24gCi0gICAgYXBwIHNodXRkb3duLCBidXQgdW50aWwgdGhh
dCBwb2ludCwgdGhpcyAnaW4gbGltYm8nIGZyYW1lIHdpbGwgZG8gdGhpbmdzCi0gICAgbGlrZSBz
dGVhbCBrZXlib2FyZCBmb2N1cyBhbmQgY3Jhc2ggd2hlbiBjbGlja2VkIG9uLiAoT24gc29tZSBw
bGF0Zm9ybXMsCi0gICAgaXQgaXMgYWN0dWFsbHkgYSB2aXNpYmxlIG9iamVjdCwgZXZlbiB0aG91
Z2ggaXQncyBub3QgaW4gYSB2YWxpZCBzdGF0ZS4pCi0gICAgCi0gICAgU2luY2UganVzdCBhYm91
dCBldmVyeSB1c2VyIGlzIHByb2JhYmx5IGdvaW5nIHRvIHRlc3QgYWdhaW5zdCBHb29nbGUgYXQg
Ci0gICAgc29tZSBwb2ludCwgSSdtIGRpc2FibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgdW50aWwg
SSBoYXZlIHRpbWUgdG8gdHJhY2sgZG93bgotICAgIHdoeSBpdCBpcyBub3QgYmVpbmcgZGVzdHJv
eWVkLgotKi8KLQotLyoKLSAgICB3eFdpbmRvdyogcGFyZW50ID0gbV93ZWJWaWV3OwotCiAgICAg
V2ViVmlld0ZyYW1lRGF0YSogZGF0YSA9IG5ldyBXZWJWaWV3RnJhbWVEYXRhKCk7CiAgICAgZGF0
YS0+bmFtZSA9IG5hbWU7CiAgICAgZGF0YS0+b3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50Owog
ICAgIGRhdGEtPnVybCA9IHVybDsKICAgICBkYXRhLT5yZWZlcnJlciA9IHJlZmVycmVyOworICAg
IGRhdGEtPmFsbG93c1Njcm9sbGluZyA9IGFsbG93c1Njcm9sbGluZzsKICAgICBkYXRhLT5tYXJn
aW5XaWR0aCA9IG1hcmdpbldpZHRoOwogICAgIGRhdGEtPm1hcmdpbkhlaWdodCA9IG1hcmdpbkhl
aWdodDsKIAotICAgIHd4V2ViVmlldyogbmV3V2luID0gbmV3IHd4V2ViVmlldyhwYXJlbnQsIC0x
LCB3eERlZmF1bHRQb3NpdGlvbiwgd3hEZWZhdWx0U2l6ZSwgZGF0YSk7CisgICAgd3hXZWJGcmFt
ZSogbmV3RnJhbWUgPSBuZXcgd3hXZWJGcmFtZShtX3dlYlZpZXcsIG1fd2ViRnJhbWUsIGRhdGEp
OwogCi0gICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gbmV3V2luLT5tX2ltcGwtPmZyYW1l
OworICAgIFJlZlB0cjxGcmFtZT4gY2hpbGRGcmFtZSA9IGFkb3B0UmVmKG5ld0ZyYW1lLT5tX2lt
cGwtPmZyYW1lKTsKIAotICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlIGJlbG93IHNob3VsZCBwcm9i
YWJseSBiZSBtb3ZlZCBvdmVyIGludG8gV2ViQ29yZQotICAgIGNoaWxkRnJhbWUtPnRyZWUoKS0+
c2V0TmFtZShuYW1lKTsKICAgICBtX2ZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkRnJh
bWUpOwotICAgIC8vICMjIyBzZXQgb3ZlcnJpZGUgZW5jb2RpbmcgaWYgd2UgaGF2ZSBvbmUKKyAg
ICBjaGlsZEZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7CisgICAgY2hpbGRGcmFtZS0+aW5p
dCgpOwogCi0gICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IG1fZnJhbWUtPmxvYWRlcigpLT5s
b2FkVHlwZSgpOwotICAgIEZyYW1lTG9hZFR5cGUgY2hpbGRMb2FkVHlwZSA9IEZyYW1lTG9hZFR5
cGVJbnRlcm5hbDsKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1
biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJl
YWR5LgorICAgIGlmICghY2hpbGRGcmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5sb2FkKHVybCwgcmVmZXJyZXIsIGNoaWxkTG9hZFR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKCksIDAsIDApOworICAgIGNo
aWxkRnJhbWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwg
Y2hpbGRGcmFtZS5nZXQoKSk7CiAgICAgCiAgICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRs
ZXIgbWF5IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KICAgICBpZiAoIWNoaWxk
RnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGRl
bGV0ZSBkYXRhOwotICAgIAotICAgIHJldHVybiBjaGlsZEZyYW1lLmdldCgpOwotKi8KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBjaGlsZEZyYW1lLnJl
bGVhc2UoKTsKIH0KIAogT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRXeDo6b2Jq
ZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQpA
QCAtODgwLDI5ICs4NjAsMTkgQEAKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4Ojp0cmFuc2l0
aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKIHsgCisgICAgQVNTRVJUKG1fd2ViRnJhbWUpOwog
ICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBBU1NFUlQobV93ZWJWaWV3KTsKICAgICAKLSAgICBQ
YWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwotICAgIEFTU0VSVChwYWdlKTsKLQotICAgIGJv
b2wgaXNNYWluRnJhbWUgPSBtX2ZyYW1lID09IHBhZ2UtPm1haW5GcmFtZSgpOwotCi0gICAgbV9m
cmFtZS0+c2V0VmlldygwKTsKLQotICAgIFJlZlB0cjxGcmFtZVZpZXc+IGZyYW1lVmlldzsKLSAg
ICBpZiAoaXNNYWluRnJhbWUpCi0gICAgICAgIGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRl
KG1fZnJhbWUsIEludFJlY3QobV93ZWJWaWV3LT5HZXRSZWN0KCkpLnNpemUoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShtX2ZyYW1lKTsKLQotICAg
IEFTU0VSVChmcmFtZVZpZXcpOwotICAgIG1fZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKLQot
ICAgIGZyYW1lVmlldy0+c2V0UGxhdGZvcm1XaWRnZXQobV93ZWJWaWV3KTsKLQotICAgIGlmIChI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpCi0g
ICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+c2V0U2Nyb2xsYmFyTW9kZXMob3duZXItPnNjcm9sbGlu
Z01vZGUoKSwgb3duZXItPnNjcm9sbGluZ01vZGUoKSk7CisgICAgSW50U2l6ZSBzaXplID0gSW50
UmVjdChtX3dlYlZpZXctPkdldFJlY3QoKSkuc2l6ZSgpOworICAgIC8vIEZJWE1FOiBUaGlzIHZh
bHVlIHNob3VsZCBiZSBnb3R0ZW4gZnJvbSBtX3dlYlZpZXctPklzVHJhbnNwYXJlbnQoKTsKKyAg
ICAvLyBidXQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpIGNhbiBiZSBjYWxsZWQg
d2hpbGUgbV93ZWJWaWV3IGlzCisgICAgLy8gc3RpbGwgYmVpbmcgaW5pdGlhbGl6ZWQuCisgICAg
Ym9vbCB0cmFuc3BhcmVudCA9IGZhbHNlOworICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHRy
YW5zcGFyZW50ID8gV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50IDogV2ViQ29yZTo6Q29sb3I6
OndoaXRlOworICAgIAorICAgIGlmIChtX2ZyYW1lKQorICAgICAgICBtX2ZyYW1lLT5jcmVhdGVW
aWV3KHNpemUsIGJhY2tncm91bmRDb2xvciwgdHJhbnNwYXJlbnQsIEludFNpemUoKSwgZmFsc2Up
OyAKIH0KIAogfQpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xpZW50V3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4
LmNwcAkocmV2aXNpb24gNDc5OTIpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9FZGl0b3JD
bGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OwogCiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHlu
YW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOwor
ICAgICAgICB3eFdlYlZpZXcqIHdlYktpdFdpbiA9IGR5bmFtaWNfY2FzdDx3eFdlYlZpZXcqPihm
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkpOwogICAgICAgICBp
ZiAod2ViS2l0V2luKSAKICAgICAgICAgICAgIHJldHVybiB3ZWJLaXRXaW4tPklzRWRpdGFibGUo
KTsKICAgICB9CkBAIC0yODUsOSArMjg1LDkgQEAKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIGlmIChmcmFt
ZSkgewotICAgICAgICB3eFdlYlZpZXcqIHdlYktpdFdpbiA9IGR5bmFtaWNfY2FzdDx3eFdlYlZp
ZXcqPihmcmFtZS0+dmlldygpLT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICAgICAgd3hXZWJWaWV3
KiB3ZWJLaXRXaW4gPSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKICAgICAgICAgaWYgKHdlYktpdFdpbikgewot
ICAgICAgICAgICAgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT51bmRvU3RhY2su
YXBwZW5kKEVkaXRDb21tYW5kV3goY29tbWFuZCkpOworICAgICAgICAgICAgd2ViS2l0V2luLT5t
X2ltcGwtPnVuZG9TdGFjay5hcHBlbmQoRWRpdENvbW1hbmRXeChjb21tYW5kKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0yOTcsMTYgKzI5NywyNCBAQAogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAgaWYg
KGZyYW1lKSB7Ci0gICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHluYW1pY19jYXN0PHd4
V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOworICAgICAgICB3eFdl
YlZpZXcqIHdlYktpdFdpbiA9IGR5bmFtaWNfY2FzdDx3eFdlYlZpZXcqPihmcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkpOwogICAgICAgICBpZiAod2ViS2l0V2lu
KSB7Ci0gICAgICAgICAgICB3ZWJLaXRXaW4tPkdldE1haW5GcmFtZSgpLT5tX2ltcGwtPnJlZG9T
dGFjay5pbnNlcnQoMCwgRWRpdENvbW1hbmRXeChjb21tYW5kKSk7CisgICAgICAgICAgICB3ZWJL
aXRXaW4tPm1faW1wbC0+cmVkb1N0YWNrLmluc2VydCgwLCBFZGl0Q29tbWFuZFd4KGNvbW1hbmQp
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBFZGl0b3JDbGllbnRXeDo6Y2xlYXJVbmRv
UmVkb09wZXJhdGlvbnMoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgRnJhbWUqIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgCisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHlu
YW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZv
cm1XaW5kb3coKSk7CisgICAgICAgIGlmICh3ZWJLaXRXaW4pIHsKKyAgICAgICAgICAgIHdlYktp
dFdpbi0+bV9pbXBsLT5yZWRvU3RhY2suY2xlYXIoKTsKKyAgICAgICAgICAgIHdlYktpdFdpbi0+
bV9pbXBsLT51bmRvU3RhY2suY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogYm9vbCBF
ZGl0b3JDbGllbnRXeDo6Y2FuVW5kbygpIGNvbnN0CkBAIC0zMTQsOSArMzIyLDkgQEAKICAgICBG
cmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKIAogICAgIGlmIChmcmFtZSkgewotICAgICAgICB3eFdlYlZpZXcqIHdlYktpdFdpbiA9
IGR5bmFtaWNfY2FzdDx3eFdlYlZpZXcqPihmcmFtZS0+dmlldygpLT5wbGF0Zm9ybVdpZGdldCgp
KTsKLSAgICAgICAgaWYgKHdlYktpdFdpbiAmJiB3ZWJLaXRXaW4tPkdldE1haW5GcmFtZSgpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT51
bmRvU3RhY2suc2l6ZSgpICE9IDA7CisgICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHlu
YW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZv
cm1XaW5kb3coKSk7CisgICAgICAgIGlmICh3ZWJLaXRXaW4pIHsKKyAgICAgICAgICAgIHJldHVy
biB3ZWJLaXRXaW4tPm1faW1wbC0+dW5kb1N0YWNrLnNpemUoKSAhPSAwOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNyw5ICszMzUsOSBAQAogICAgIEZyYW1lKiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwog
CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHluYW1p
Y19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOwotICAg
ICAgICBpZiAod2ViS2l0V2luICYmIHdlYktpdFdpbi0+R2V0TWFpbkZyYW1lKCkpIHsKLSAgICAg
ICAgICAgIHJldHVybiB3ZWJLaXRXaW4tPkdldE1haW5GcmFtZSgpLT5tX2ltcGwtPnJlZG9TdGFj
ay5zaXplKCkgIT0gMDsKKyAgICAgICAgd3hXZWJWaWV3KiB3ZWJLaXRXaW4gPSBkeW5hbWljX2Nh
c3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRv
dygpKTsKKyAgICAgICAgaWYgKHdlYktpdFdpbiAmJiB3ZWJLaXRXaW4pIHsKKyAgICAgICAgICAg
IHJldHVybiB3ZWJLaXRXaW4tPm1faW1wbC0+cmVkb1N0YWNrLnNpemUoKSAhPSAwOwogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MCwxMCArMzQ4LDEwIEBACiAgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAKICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgd3hXZWJWaWV3KiB3ZWJLaXRXaW4g
PSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+cGxhdGZvcm1XaWRnZXQo
KSk7Ci0gICAgICAgIGlmICh3ZWJLaXRXaW4gJiYgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKSkg
ewotICAgICAgICAgICAgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT51bmRvU3Rh
Y2subGFzdCgpLmVkaXRDb21tYW5kKCktPnVuYXBwbHkoKTsKLSAgICAgICAgICAgIHdlYktpdFdp
bi0+R2V0TWFpbkZyYW1lKCktPm1faW1wbC0+dW5kb1N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAg
ICAgd3hXZWJWaWV3KiB3ZWJLaXRXaW4gPSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICAgICAgaWYgKHdl
YktpdFdpbikgeworICAgICAgICAgICAgd2ViS2l0V2luLT5tX2ltcGwtPnVuZG9TdGFjay5sYXN0
KCkuZWRpdENvbW1hbmQoKS0+dW5hcHBseSgpOworICAgICAgICAgICAgd2ViS2l0V2luLT5tX2lt
cGwtPnVuZG9TdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNTIs
MTEgKzM2MCwxMSBAQAogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAg
IHd4V2ViVmlldyogd2ViS2l0V2luID0gZHluYW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52
aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOwotICAgICAgICBpZiAod2ViS2l0V2luICYmIHdlYktp
dFdpbi0+R2V0TWFpbkZyYW1lKCkpIHsKLSAgICAgICAgICAgIHdlYktpdFdpbi0+R2V0TWFpbkZy
YW1lKCktPm1faW1wbC0+cmVkb1N0YWNrLmZpcnN0KCkuZWRpdENvbW1hbmQoKS0+cmVhcHBseSgp
OwotICAgICAgICAgICAgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT5yZWRvU3Rh
Y2sucmVtb3ZlKDApOworICAgIGlmIChmcmFtZSkgeyAgICAKKyAgICAgICAgd3hXZWJWaWV3KiB3
ZWJLaXRXaW4gPSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+aG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICAgICAgaWYgKHdlYktpdFdpbikgeworICAg
ICAgICAgICAgd2ViS2l0V2luLT5tX2ltcGwtPnJlZG9TdGFjay5maXJzdCgpLmVkaXRDb21tYW5k
KCktPnJlYXBwbHkoKTsKKyAgICAgICAgICAgIHdlYktpdFdpbi0+bV9pbXBsLT5yZWRvU3RhY2su
cmVtb3ZlKDApOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guaAkocmV2aXNpb24gNDc5OTIpCisrKyBXZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgogCitjbGFzcyB3eFdlYkZyYW1lOwogY2xhc3Mgd3hXZWJWaWV3OwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC01MSw5ICs1Miw4IEBACiAgICAgcHVibGljOgogICAgICAgICBG
cmFtZUxvYWRlckNsaWVudFd4KCk7CiAgICAgICAgIH5GcmFtZUxvYWRlckNsaWVudFd4KCk7Ci0g
ICAgICAgIHZvaWQgc2V0RnJhbWUoRnJhbWUgKmZyYW1lKTsKKyAgICAgICAgdm9pZCBzZXRGcmFt
ZSh3eFdlYkZyYW1lICpmcmFtZSk7CiAgICAgICAgIHZvaWQgc2V0V2ViVmlldyh3eFdlYlZpZXcg
KndlYnZpZXcpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJhbWVMb2FkZXIoKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OyAvLyBtYWlubHkgZm9yIGFz
c2VydGlvbnMKIApAQCAtMjA3LDcgKzIwNyw4IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4gPSB0cnVlKTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIEZyYW1lICptX2ZyYW1lOworICAgICAgICB3eFdlYkZyYW1lICptX3dlYkZy
YW1lOworICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICAgICAgd3hXZWJWaWV3ICptX3dlYlZp
ZXc7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9vbCBt
X2ZpcnN0RGF0YTsKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVu
dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JD
bGllbnRXeC5jcHAJKHJldmlzaW9uIDQ3OTkyKQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQv
SW5zcGVjdG9yQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxNiArMjUsMzkgQEAK
IAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudFd4LmgiCisj
aW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlZpZXdQcml2YXRlLmgiCiAKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgogCitjbGFzcyB3eEluc3BlY3RvcldlYlZpZXcgOiBwdWJsaWMgd3hXZWJW
aWV3Cit7CitwdWJsaWM6CisgICAgd3hJbnNwZWN0b3JXZWJWaWV3KCkKKyAgICAgICAgOiB3eFdl
YlZpZXcoKQorICAgIHsKKyAgICAgICAgbV9mcmFtZSA9IG5ldyB3eEZyYW1lKE5VTEwsIHd4SURf
QU5ZLCB3eFQoIldlYiBJbnNwZWN0b3IiKSk7CisgICAgICAgIENyZWF0ZShtX2ZyYW1lKTsKKyAg
ICAgICAgTG9hZFVSTCh3eFQoImZpbGU6Ly8vQzovVXNlcnMvS2V2aW4vc3JjL2RpZ3NieS9idWls
ZC9tc3cvd2Via2l0L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuaHRtbCIp
KTsKKyAgICB9CisKKyAgICB3eEZyYW1lKiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWU7
IH0KKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5wYWdl
OyB9CisKKyAgICB2aXJ0dWFsIH53eEluc3BlY3RvcldlYlZpZXcoKSB7fQorCitwcm90ZWN0ZWQ6
CisgICAgd3hGcmFtZSogbV9mcmFtZTsKK307CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5z
cGVjdG9yQ2xpZW50V3g6Okluc3BlY3RvckNsaWVudFd4KCkKK0luc3BlY3RvckNsaWVudFd4OjpJ
bnNwZWN0b3JDbGllbnRXeCh3eFdlYlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX3dlYlZpZXcoMCkK
KyAgICAsIG1faW5zcGVjdGVkV2ViVmlldyh3ZWJWaWV3KQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKIEluc3BlY3RvckNsaWVudFd4Ojp+SW5zcGVjdG9yQ2xpZW50V3goKQpAQCAtNDIs
MTUgKzY1LDIyIEBACiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorUGFnZSogSW5zcGVjdG9y
Q2xpZW50V3g6Omluc3BlY3RlZFBhZ2UoKSBjb25zdAoreworICAgIHJldHVybiBtX2luc3BlY3Rl
ZFdlYlZpZXctPm1faW1wbC0+cGFnZTsKK30KKwogdm9pZCBJbnNwZWN0b3JDbGllbnRXeDo6aW5z
cGVjdG9yRGVzdHJveWVkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBQYWdlKiBJ
bnNwZWN0b3JDbGllbnRXeDo6Y3JlYXRlUGFnZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKKyAgICBpZiAobV93ZWJWaWV3ICYmIG1fd2ViVmlldy0+bV9pbXBsLT5w
YWdlKQorICAgICAgICByZXR1cm4gbV93ZWJWaWV3LT5tX2ltcGwtPnBhZ2U7CisgICAgCisgICAg
bV93ZWJWaWV3ID0gbmV3IHd4SW5zcGVjdG9yV2ViVmlldygpOworICAgIHJldHVybiBtX3dlYlZp
ZXctPnBhZ2UoKTsKIH0KIAogU3RyaW5nIEluc3BlY3RvckNsaWVudFd4Ojpsb2NhbGl6ZWRTdHJp
bmdzVVJMKCkKQEAgLTY3LDEyICs5NywyMCBAQAogCiB2b2lkIEluc3BlY3RvckNsaWVudFd4Ojpz
aG93V2luZG93KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghbV93ZWJWaWV3
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3dlYlZpZXctPmZyYW1lKCktPlNob3coKTsKKyAg
ICBpbnNwZWN0ZWRQYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJs
ZSh0cnVlKTsKIH0KICAgICAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmNsb3NlV2luZG93KCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghbV93ZWJWaWV3KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3dlYlZpZXctPmZyYW1lKCktPkhpZGUoKTsKKyAgICBpbnNwZWN0ZWRQ
YWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS0+c2V0V2luZG93VmlzaWJsZShmYWxzZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yQ2xpZW50V3g6OmF0dGFjaFdpbmRvdygpCkluZGV4OiBXZWJLaXQv
d3gvV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93eC9XZWJLaXRTdXBwb3J0L0luc3BlY3RvckNsaWVudFd4LmgJKHJldmlzaW9uIDQ3OTkyKQor
KysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50V3guaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOSBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50LmgiCiAK
K2NsYXNzIHd4V2ViVmlldzsKK2NsYXNzIHd4SW5zcGVjdG9yV2ViVmlldzsKKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBOb2RlOwpAQCAtMzYsNyArMzksNyBAQAogCiBjbGFzcyBJbnNw
ZWN0b3JDbGllbnRXeCA6IHB1YmxpYyBJbnNwZWN0b3JDbGllbnQgewogcHVibGljOgotICAgIElu
c3BlY3RvckNsaWVudFd4KCk7CisgICAgSW5zcGVjdG9yQ2xpZW50V3god3hXZWJWaWV3Kik7CiAg
ICAgfkluc3BlY3RvckNsaWVudFd4KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgaW5zcGVjdG9yRGVz
dHJveWVkKCk7CkBAIC02Myw4ICs2NiwxMyBAQAogICAgIHZpcnR1YWwgdm9pZCBwb3B1bGF0ZVNl
dHRpbmcoY29uc3QgU3RyaW5nJiBrZXksIEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc3RvcmVTZXR0aW5nKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpTZXR0aW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNl
dHRpbmcoY29uc3QgU3RyaW5nJiBrZXkpOwotICAgIAogICAgIHZpcnR1YWwgdm9pZCBpbnNwZWN0
b3JXaW5kb3dPYmplY3RDbGVhcmVkKCk7CisKK3ByaXZhdGU6CisgICAgd3hJbnNwZWN0b3JXZWJW
aWV3KiBtX3dlYlZpZXc7CisgICAgd3hXZWJWaWV3KiBtX2luc3BlY3RlZFdlYlZpZXc7CisKKyAg
ICBQYWdlKiBpbnNwZWN0ZWRQYWdlKCkgY29uc3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRXeC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3BwCShy
ZXZpc2lvbiA0Nzk5MikKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDcgKzM0MCw3IEBACiAKIFBsYXRmb3JtV2lkZ2V0
IENocm9tZUNsaWVudFd4OjpwbGF0Zm9ybVdpbmRvdygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIG1fd2ViVmlldzsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRXeDo6Y29udGVu
dHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IEludFNpemUmKSBjb25zdApAQCAtMzkzLDYgKzM5
Myw3IEBACiAKIHZvaWQgQ2hyb21lQ2xpZW50V3g6OnNjcm9sbChjb25zdCBJbnRTaXplJiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmKQogeworICAgIG1fd2ViVmlldy0+UmVmcmVzaCgp
OwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKSW5kZXg6IFdlYktpdC93eC9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3d4L0NoYW5nZUxvZwkocmV2aXNpb24gNDgwMDQpCisrKyBX
ZWJLaXQvd3gvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjUgQEAKKzIwMDkt
MDktMDIgIEtldmluIFdhdHRlcnMgIDxrZXZpbndhdHRlcnNAZ21haWwuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFt3eF0gRnJhbWVzIHN1cHBv
cnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDQx
CisKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgICh3eFdlYkZyYW1lOjp3eFdlYkZy
YW1lKToKKyAgICAgICAgKHd4V2ViRnJhbWU6On53eFdlYkZyYW1lKToKKyAgICAgICAgKHd4V2Vi
RnJhbWU6OkdldEZyYW1lKToKKyAgICAgICAgKiBXZWJGcmFtZS5oOgorICAgICAgICAqIFdlYkZy
YW1lUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYktpdFN1cHBvcnQvQ2hyb21lQ2xpZW50V3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50V3g6OnBsYXRmb3JtV2luZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudFd4OjpzY3JvbGwpOgorICAgICAgICAqIFdlYktp
dFN1cHBvcnQvRWRpdG9yQ2xpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xp
ZW50V3g6OmlzRWRpdGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50V3g6OnJl
Z2lzdGVyQ29tbWFuZEZvclVuZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50V3g6
OnJlZ2lzdGVyQ29tbWFuZEZvclJlZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50
V3g6OmNsZWFyVW5kb1JlZG9PcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNs
aWVudFd4OjpjYW5VbmRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFd4OjpjYW5S
ZWRvKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudFd4Ojp1bmRvKToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvckNsaWVudFd4OjpyZWRvKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRXeDo6RnJhbWVMb2FkZXJDbGllbnRXeCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFd4OjpzZXRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudFd4OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50V3g6OmZyYW1lTG9hZGVyRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmNvbW1pdHRlZExvYWQpOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5ld1dpbmRvd0FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVu
dFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeDo6Y3JlYXRlRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFn
ZSk6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4Lmg6CisgICAg
ICAgICogV2ViS2l0U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRXeC5jcHA6CisgICAgICAgICh3eElu
c3BlY3RvcldlYlZpZXc6Ond4SW5zcGVjdG9yV2ViVmlldyk6CisgICAgICAgICh3eEluc3BlY3Rv
cldlYlZpZXc6OmZyYW1lKToKKyAgICAgICAgKHd4SW5zcGVjdG9yV2ViVmlldzo6cGFnZSk6Cisg
ICAgICAgICh3eEluc3BlY3RvcldlYlZpZXc6On53eEluc3BlY3RvcldlYlZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50V3g6Okluc3BlY3RvckNsaWVudFd4KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0ZWRQYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckNsaWVudFd4OjppbnNwZWN0b3JEZXN0cm95ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50V3g6OmNyZWF0ZVBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ2xpZW50V3g6OnNob3dXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yQ2xpZW50V3g6OmNsb3NlV2luZG93KToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0
L0luc3BlY3RvckNsaWVudFd4Lmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgICh3
eFdlYlZpZXc6OkNyZWF0ZSk6CisgICAgICAgICh3eFdlYlZpZXc6On53eFdlYlZpZXcpOgorICAg
ICAgICAod3hXZWJWaWV3OjpPblBhaW50KToKKyAgICAgICAgKHd4V2ViVmlldzo6T25TaXplKToK
KyAgICAgICAgKHd4V2ViVmlldzo6T25Nb3VzZUV2ZW50cyk6CisgICAgICAgICh3eFdlYlZpZXc6
Ok9uQ29udGV4dE1lbnVFdmVudHMpOgorICAgICAgICAod3hXZWJWaWV3OjpPbktleUV2ZW50cyk6
CisgICAgICAgICh3eFdlYlZpZXc6Ok9uU2V0Rm9jdXMpOgorICAgICAgICAod3hXZWJWaWV3OjpP
bktpbGxGb2N1cyk6CisgICAgICAgICogV2ViVmlldy5oOgorICAgICAgICAqIFdlYlZpZXdQcml2
YXRlLmg6CisKIDIwMDktMDktMDIgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVy
cy5jb20+CiAKICAgICAgICAgd2FmIGJ1aWxkIGZpeGVzIGZvciBXaW5kb3dzL01TVkMuCkluZGV4
OiBXZWJLaXQvd3gvV2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2Vi
Vmlld1ByaXZhdGUuaAkocmV2aXNpb24gNDc5OTIpCisrKyBXZWJLaXQvd3gvV2ViVmlld1ByaXZh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDEwIEBACiAjZGVmaW5lIFdYV0VCVklF
V1BSSVZBVEVfSAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKKyNpbmNsdWRlICJFZGl0Q29t
bWFuZFd4LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgInd0Zi9SZWZQdHIuaCIKLSNp
bmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAid3RmL1ZlY3Rvci5oIgogCiAjaW5jbHVkZSA8d3gv
dGltZXIuaD4KIApAQCAtNDgsMTkgKzQ4LDkgQEAKIAogICAgIHd4VGltZXIgdHJpcGxlQ2xpY2tU
aW1lcjsKICAgICB3eFBvaW50IHRyaXBsZUNsaWNrUG9zOwotfTsKLQotY2xhc3MgV2ViVmlld0Zy
YW1lRGF0YQotewotcHVibGljOgotICAgIFdlYkNvcmU6OktVUkwgdXJsOwotICAgIFdlYkNvcmU6
OlN0cmluZyBuYW1lOwotICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJF
bGVtZW50OwogICAgIAotICAgIFdlYkNvcmU6OlN0cmluZyByZWZlcnJlcjsKLSAgICBib29sIGFs
bG93c1Njcm9sbGluZzsKLSAgICBpbnQgbWFyZ2luV2lkdGg7Ci0gICAgaW50IG1hcmdpbkhlaWdo
dDsgICAgCisgICAgV1RGOjpWZWN0b3I8RWRpdENvbW1hbmRXeD4gdW5kb1N0YWNrOworICAgIFdU
Rjo6VmVjdG9yPEVkaXRDb21tYW5kV3g+IHJlZG9TdGFjazsKIH07CiAKICNlbmRpZgpJbmRleDog
V2ViS2l0L3d4L1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJWaWV3LmNw
cAkocmV2aXNpb24gNDc5OTIpCisrKyBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNCw3ICsyMzQsNiBAQAogICAgIEVWVF9DSEFSKHd4V2ViVmlldzo6T25LZXlFdmVu
dHMpCiAgICAgRVZUX1NFVF9GT0NVUyh3eFdlYlZpZXc6Ok9uU2V0Rm9jdXMpCiAgICAgRVZUX0tJ
TExfRk9DVVMod3hXZWJWaWV3OjpPbktpbGxGb2N1cykKLSAgICBFVlRfQUNUSVZBVEUod3hXZWJW
aWV3OjpPbkFjdGl2YXRlKQogRU5EX0VWRU5UX1RBQkxFKCkKIAogSU1QTEVNRU5UX0RZTkFNSUNf
Q0xBU1Mod3hXZWJWaWV3LCB3eFdpbmRvdykKQEAgLTI2Niw3ICsyNjUsNiBAQAogewogICAgIGlm
ICggKHN0eWxlICYgd3hCT1JERVJfTUFTSykgPT0gMCkKICAgICAgICAgc3R5bGUgfD0gd3hCT1JE
RVJfTk9ORTsKLSAgICBzdHlsZSB8PSB3eEhTQ1JPTEwgfCB3eFZTQ1JPTEw7CiAgICAgCiAgICAg
aWYgKCF3eFdpbmRvdzo6Q3JlYXRlKHBhcmVudCwgaWQsIHBvc2l0aW9uLCBzaXplLCBzdHlsZSwg
bmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI4OSw3ICsyODcsNyBAQAogICAgIFdl
YkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogcGFyZW50RnJhbWUgPSAwOwogCiAgICAgV2Vi
Q29yZTo6RWRpdG9yQ2xpZW50V3gqIGVkaXRvckNsaWVudCA9IG5ldyBXZWJDb3JlOjpFZGl0b3JD
bGllbnRXeCgpOwotICAgIG1faW1wbC0+cGFnZSA9IG5ldyBXZWJDb3JlOjpQYWdlKG5ldyBXZWJD
b3JlOjpDaHJvbWVDbGllbnRXeCh0aGlzKSwgbmV3IFdlYkNvcmU6OkNvbnRleHRNZW51Q2xpZW50
V3goKSwgZWRpdG9yQ2xpZW50LCBuZXcgV2ViQ29yZTo6RHJhZ0NsaWVudFd4KCksIG5ldyBXZWJD
b3JlOjpJbnNwZWN0b3JDbGllbnRXeCgpKTsKKyAgICBtX2ltcGwtPnBhZ2UgPSBuZXcgV2ViQ29y
ZTo6UGFnZShuZXcgV2ViQ29yZTo6Q2hyb21lQ2xpZW50V3godGhpcyksIG5ldyBXZWJDb3JlOjpD
b250ZXh0TWVudUNsaWVudFd4KCksIGVkaXRvckNsaWVudCwgbmV3IFdlYkNvcmU6OkRyYWdDbGll
bnRXeCgpLCBuZXcgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50V3godGhpcykpOwogICAgIGVkaXRv
ckNsaWVudC0+c2V0UGFnZShtX2ltcGwtPnBhZ2UpOwogICAgIAogICAgIG1fbWFpbkZyYW1lID0g
bmV3IHd4V2ViRnJhbWUodGhpcyk7CkBAIC0zMTUsNyArMzEzLDggQEAKIHsKICAgICBtX2JlaW5n
RGVzdHJveWVkID0gdHJ1ZTsKICAgICAKLSAgICBkZWxldGUgbV9tYWluRnJhbWU7CisgICAgaWYg
KG1fbWFpbkZyYW1lICYmIG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpKQorICAgICAgICBtX21haW5G
cmFtZS0+R2V0RnJhbWUoKS0+bG9hZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKICAgICAKICAg
ICBkZWxldGUgbV9pbXBsLT5wYWdlOwogICAgIG1faW1wbC0+cGFnZSA9IDA7ICAgCkBAIC00ODcs
MTAgKzQ4NiwxNiBAQAogCiB2b2lkIHd4V2ViVmlldzo6T25QYWludCh3eFBhaW50RXZlbnQmIGV2
ZW50KQogewotICAgIAogICAgIGlmIChtX2JlaW5nRGVzdHJveWVkIHx8ICFtX21haW5GcmFtZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgLy8gV2ViVmlldyBhY3RpdmUgc3RhdGUgaXMg
YmFzZWQgb24gVExXIGFjdGl2ZSBzdGF0ZS4KKyAgICB3eFRvcExldmVsV2luZG93KiB0bHcgPSBk
eW5hbWljX2Nhc3Q8d3hUb3BMZXZlbFdpbmRvdyo+KHd4R2V0VG9wTGV2ZWxQYXJlbnQodGhpcykp
OworICAgIGlmICh0bHcgJiYgdGx3LT5Jc0FjdGl2ZSgpKQorICAgICAgICBtX2ltcGwtPnBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgZWxzZSB7CisgICAgICAg
IG1faW1wbC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShmYWxzZSk7CisgICAg
fQogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOwog
ICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUw
NSwyMyArNTEwLDE0IEBACiAgICAgICAgIGlmIChkYy5Jc09rKCkpIHsKICAgICAgICAgICAgIHd4
UmVjdCBwYWludFJlY3QgPSBHZXRVcGRhdGVSZWdpb24oKS5HZXRCb3goKTsKIAotICAgICAgICAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBvZmZzZXQgPSBmcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQo
KTsKICNpZiBVU0UoV1hHQykKLSAgICAgICAgICAgIGdjZGMuU2V0RGV2aWNlT3JpZ2luKC1vZmZz
ZXQud2lkdGgoKSwgLW9mZnNldC5oZWlnaHQoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRjLlNl
dERldmljZU9yaWdpbigtb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgcGFpbnRSZWN0Lk9mZnNldChvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKTsK
LQotI2lmIFVTRShXWEdDKQogICAgICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdj
KCZnY2RjKTsKICNlbHNlCiAgICAgICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ2Mo
JmRjKTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+dmlldygpLT5uZWVkc0xheW91dCgpKQotICAg
ICAgICAgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKLQotICAgICAgICAgICAg
ICAgIGZyYW1lLT52aWV3KCktPnBhaW50Q29udGVudHMoJmdjLCBwYWludFJlY3QpOworICAgICAg
ICAgICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dElmTmVlZGVkUmVjdXJzaXZlKCk7CisgICAg
ICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmdjLCBwYWludFJlY3QpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTM5LDkgKzUzNSw5IEBACiB7IAogICAgIGlm
IChtX2lzSW5pdGlhbGl6ZWQgJiYgbV9tYWluRnJhbWUpIHsKICAgICAgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPkdldEZyYW1lKCk7Ci0gICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2VuZFJlc2l6ZUV2ZW50KCk7Ci0gICAgICAgIGZyYW1lLT52aWV3KCktPmxh
eW91dCgpOwotICAgICAgICBmcmFtZS0+dmlldygpLT5hZGp1c3RTY3JvbGxiYXJzKCk7CisgICAg
ICAgIGZyYW1lLT52aWV3KCktPnNldEZyYW1lUmVjdCh3eFJlY3Qod3hQb2ludCgwLDApLCBldmVu
dC5HZXRTaXplKCkpKTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+Zm9yY2VMYXlvdXQoKTsKKyAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKICAgICB9CiAgICAgICAKICAg
ICBldmVudC5Ta2lwKCk7CkBAIC01NjAsMTAgKzU1Niw3IEBACiB7CiAgICAgZXZlbnQuU2tpcCgp
OwogICAgIAotICAgIGlmIChtX2JlaW5nRGVzdHJveWVkKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKCFtX21haW5GcmFtZSkKKyAgICBpZiAoIW1faW1wbC0+cGFnZSkKICAgICAgICAg
cmV0dXJuOyAKICAgICAgICAgCiAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gbV9tYWluRnJh
bWUtPkdldEZyYW1lKCk7ICAKQEAgLTYxMSwxMCArNjA0LDEwIEBACiAgICAgbV9pbXBsLT5wYWdl
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwogICAgIHd4UG9p
bnQgbG9jYWxFdmVudFBvaW50ID0gU2NyZWVuVG9DbGllbnQoZXZlbnQuR2V0UG9zaXRpb24oKSk7
CiAKLSAgICBpZiAoIW1fbWFpbkZyYW1lKQorICAgIGlmICghbV9pbXBsLT5wYWdlKQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAotICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBt
X21haW5GcmFtZS0+R2V0RnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogZm9jdXNlZEZyYW1l
ID0gbV9pbXBsLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAgICAgaWYgKCFmb2N1c2VkRnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02
OTQsOCArNjg3LDggQEAKIHZvaWQgd3hXZWJWaWV3OjpPbktleUV2ZW50cyh3eEtleUV2ZW50JiBl
dmVudCkKIHsKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSAwOwotICAgIGlmIChtX21haW5G
cmFtZSkKLSAgICAgICAgZnJhbWUgPSBtX21haW5GcmFtZS0+R2V0RnJhbWUoKTsKKyAgICBpZiAo
bV9pbXBsLT5wYWdlKQorICAgICAgICBmcmFtZSA9IG1faW1wbC0+cGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAgaWYgKCEoZnJhbWUgJiYgZnJhbWUt
PnZpZXcoKSkpCiAgICAgICAgIHJldHVybjsKQEAgLTgzNiw3ICs4MjksNiBAQAogICAgICAgICBm
cmFtZSA9IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOwogICAgICAgICAKICAgICBpZiAoZnJhbWUp
IHsKLSAgICAgICAgbV9pbXBsLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRy
dWUpOwogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldEZvY3VzZWQodHJ1ZSk7CiAgICAg
fQogCkBAIC04NTAsMjAgKzg0MiwxMSBAQAogICAgICAgICBmcmFtZSA9IG1fbWFpbkZyYW1lLT5H
ZXRGcmFtZSgpOwogICAgICAgICAKICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgbV9pbXBsLT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5zZXRGb2N1c2VkKGZhbHNlKTsKICAgICB9CiAgICAgZXZlbnQuU2tpcCgp
OwogfQogCi12b2lkIHd4V2ViVmlldzo6T25BY3RpdmF0ZSh3eEFjdGl2YXRlRXZlbnQmIGV2ZW50
KQotewotICAgIGlmIChtX2ltcGwtPnBhZ2UpCi0gICAgICAgIG1faW1wbC0+cGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPnNldEFjdGl2ZShldmVudC5HZXRBY3RpdmUoKSk7Ci0KLSAgICBldmVudC5T
a2lwKCk7Ci19Ci0KIHd4V2ViVmlld0RPTUVsZW1lbnRJbmZvIHd4V2ViVmlldzo6SGl0VGVzdChj
b25zdCB3eFBvaW50JiBwb3MpIGNvbnN0CiB7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQpJbmRleDog
V2ViS2l0L3d4L1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViVmlldy5oCShy
ZXZpc2lvbiA0Nzk5MikKKysrIFdlYktpdC93eC9XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw3ICsxNzEsNiBAQAogICAgIHZvaWQgT25LZXlFdmVudHMod3hLZXlFdmVudCYgZXZlbnQp
OwogICAgIHZvaWQgT25TZXRGb2N1cyh3eEZvY3VzRXZlbnQmIGV2ZW50KTsKICAgICB2b2lkIE9u
S2lsbEZvY3VzKHd4Rm9jdXNFdmVudCYgZXZlbnQpOwotICAgIHZvaWQgT25BY3RpdmF0ZSh3eEFj
dGl2YXRlRXZlbnQmIGV2ZW50KTsKICAgICAKIHByaXZhdGU6CiAgICAgLy8gYW55IGNsYXNzIHdp
c2hpbmcgdG8gcHJvY2VzcyB3eFdpbmRvd3MgZXZlbnRzIG11c3QgdXNlIHRoaXMgbWFjcm8KSW5k
ZXg6IFdlYktpdC93eC9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYkZy
YW1lLmNwcAkocmV2aXNpb24gNDc5OTIpCisrKyBXZWJLaXQvd3gvV2ViRnJhbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NCw4ICs3NCw3IEBACiAgICAgbV90ZXh0TWFnbmlmaWVyKDEuMCksCiAg
ICAgbV9pc0VkaXRhYmxlKGZhbHNlKSwKICAgICBtX2lzSW5pdGlhbGl6ZWQoZmFsc2UpLAotICAg
IG1fYmVpbmdEZXN0cm95ZWQoZmFsc2UpLAotICAgIG1fdGl0bGUod3hFbXB0eVN0cmluZykKKyAg
ICBtX2JlaW5nRGVzdHJveWVkKGZhbHNlKQogewogCiAgICAgbV9pbXBsID0gbmV3IFdlYkZyYW1l
UHJpdmF0ZSgpOwpAQCAtODcsMTMgKzg2LDE2IEBACiAgICAgfQogICAgIAogICAgIFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50V3gqIGxvYWRlckNsaWVudCA9IG5ldyBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudFd4KCk7Ci0gICAgCi0gICAgbV9pbXBsLT5mcmFtZSA9IFdlYkNvcmU6OkZyYW1l
OjpjcmVhdGUoY29udGFpbmVyLT5tX2ltcGwtPnBhZ2UsIHBhcmVudEZyYW1lLCBsb2FkZXJDbGll
bnQpOwotICAgIG1faW1wbC0+ZnJhbWUtPmRlcmVmKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkZy
YW1lPiBuZXdGcmFtZSA9IFdlYkNvcmU6OkZyYW1lOjpjcmVhdGUoY29udGFpbmVyLT5tX2ltcGwt
PnBhZ2UsIHBhcmVudEZyYW1lLCBsb2FkZXJDbGllbnQpOwogCi0gICAgbG9hZGVyQ2xpZW50LT5z
ZXRGcmFtZShtX2ltcGwtPmZyYW1lLmdldCgpKTsKKyAgICBtX2ltcGwtPmZyYW1lID0gbmV3RnJh
bWUuZ2V0KCk7CisKKyAgICBsb2FkZXJDbGllbnQtPnNldEZyYW1lKHRoaXMpOwogICAgIGxvYWRl
ckNsaWVudC0+c2V0V2ViVmlldyhjb250YWluZXIpOwogICAgIAorICAgIGlmIChkYXRhICYmIGRh
dGEtPm93bmVyRWxlbWVudCkKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+cmVmKCk7CisKICAgICBt
X2ltcGwtPmZyYW1lLT5pbml0KCk7CiAgICAgICAgIAogICAgIG1faXNJbml0aWFsaXplZCA9IHRy
dWU7CkBAIC0xMDEsMTMgKzEwMywxNCBAQAogCiB3eFdlYkZyYW1lOjp+d3hXZWJGcmFtZSgpCiB7
Ci0gICAgbV9pbXBsLT5mcmFtZS0+bG9hZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKKyAgICBp
ZiAobV9pbXBsKQorICAgICAgICBkZWxldGUgbV9pbXBsOwogfQogCiBXZWJDb3JlOjpGcmFtZSog
d3hXZWJGcmFtZTo6R2V0RnJhbWUoKQogewogICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
biBtX2ltcGwtPmZyYW1lLmdldCgpOworICAgICAgICByZXR1cm4gbV9pbXBsLT5mcmFtZTsKICAg
ICAgICAgCiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBXZWJLaXQvd3gvV2ViRnJhbWVQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYkZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiA0
Nzk5MikKKysrIFdlYktpdC93eC9XZWJGcmFtZVByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTEgKzMwLDkgQEAKICNkZWZpbmUgV1hXRUJGUkFNRVBSSVZBVEVfSAogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKLSNpbmNsdWRlICJFZGl0Q29tbWFu
ZFd4LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCi0jaW5j
bHVkZSAid3RmL1ZlY3Rvci5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgor
I2luY2x1ZGUgIktVUkwuaCIKIAogY2xhc3MgV2ViRnJhbWVQcml2YXRlIHsKIApAQCAtNDIsMTEg
KzQwLDIxIEBACiAgICAgV2ViRnJhbWVQcml2YXRlKCkgOgogICAgICAgICAgICAgZnJhbWUoMCkK
ICAgICB7fQorICAgIAorICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZTsKK307CiAKLSAgICBXVEY6
OlZlY3RvcjxFZGl0Q29tbWFuZFd4PiB1bmRvU3RhY2s7Ci0gICAgV1RGOjpWZWN0b3I8RWRpdENv
bW1hbmRXeD4gcmVkb1N0YWNrOworY2xhc3MgV2ViVmlld0ZyYW1lRGF0YQoreworcHVibGljOgor
ICAgIFdlYkNvcmU6OktVUkwgdXJsOworICAgIFdlYkNvcmU6OlN0cmluZyBuYW1lOworICAgIFdl
YkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50OwogICAgIAotICAgIFdU
Rjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBmcmFtZTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgcmVm
ZXJyZXI7CisgICAgYm9vbCBhbGxvd3NTY3JvbGxpbmc7CisgICAgaW50IG1hcmdpbldpZHRoOwor
ICAgIGludCBtYXJnaW5IZWlnaHQ7ICAgIAogfTsKIAogI2VuZGlmCkluZGV4OiBXZWJLaXQvd3gv
V2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViRnJhbWUuaAkocmV2aXNpb24g
NDc5OTIpCisrKyBXZWJLaXQvd3gvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDkg
KzE0Niw2IEBACiAgICAgdm9pZCBSZXNldFRleHRTaXplKCk7CiAgICAgdm9pZCBNYWtlRWRpdGFi
bGUoYm9vbCBlbmFibGUpOwogICAgIGJvb2wgSXNFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNFZGl0YWJsZTsgfQotCi0gICAgd3hTdHJpbmcgR2V0UGFnZVRpdGxlKCkgY29uc3QgeyByZXR1
cm4gbV90aXRsZTsgfQotICAgIHZvaWQgU2V0UGFnZVRpdGxlKGNvbnN0IHd4U3RyaW5nJiB0aXRs
ZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KICAgICAKICAgICBXZWJDb3JlOjpGcmFtZSogR2V0RnJh
bWUoKTsKIApAQCAtMTYwLDcgKzE1Nyw2IEBACiAgICAgYm9vbCBtX2lzSW5pdGlhbGl6ZWQ7CiAg
ICAgYm9vbCBtX2JlaW5nRGVzdHJveWVkOwogICAgIFdlYkZyYW1lUHJpdmF0ZSogbV9pbXBsOwot
ICAgIHd4U3RyaW5nIG1fdGl0bGU7CiAgICAgCiB9OwogCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gNDgwMDQpCisrKyBX
ZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBACisyMDA5LTA5
LTAyICBLZXZpbiBXYXR0ZXJzICA8a2V2aW53YXR0ZXJzQGdtYWlsLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbd3hdIEZyYW1lcyBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTA0MQor
CisgICAgICAgICogcGFnZS93eC9FdmVudEhhbmRsZXJXeC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZUV2ZW50VG9TdWJmcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3Vi
ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVudFRv
V2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29udHJv
bHMpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVudFRv
U3ViZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VEb3du
RXZlbnRUb1dpZGdldCk6CisgICAgICAgICogcGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVXaW5kb3dGb3JSZW5kZXJPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVXeDo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVXeDo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVXeDo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVd4OjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9TY3JvbGxi
YXJUaGVtZVd4LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZTo6
bmF0aXZlVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6flNjcm9s
bGJhclRoZW1lV3gpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6c2Nyb2xs
YmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6Omhhc1Ro
dW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OmJ1dHRvblNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6YmFja0J1dHRvblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6Zm9yd2FyZEJ1dHRvblJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVXeDo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OnBhaW50U2Nyb2xsQ29ybmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC9T
Y3JvbGxiYXJUaGVtZVd4Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVXeDo6aGFzQnV0dG9ucyk6CisgICAgICAgICogcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0
dWJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvZ3RrL3Njcm9sbGJhcl9yZW5k
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHd4U3R5bGVGb3JQYXJ0KToKKyAgICAgICAgKEdldEJ1
dHRvbldpZGdldCk6CisgICAgICAgICh3eEdldEdka1dpbmRvd0ZvckRDKToKKyAgICAgICAgKHd4
UmVuZGVyZXJfRHJhd1Njcm9sbGJhcik6CisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL21h
Yy9jYXJib24vc2Nyb2xsYmFyX3JlbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAod3hTY3JvbGxi
YXJQYXJ0VG9ISVByZXNzZWRTdGF0ZSk6CisgICAgICAgICh3eFJlbmRlcmVyX0RyYXdTY3JvbGxi
YXIpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS9zY3JvbGxiYXJfcmVuZGVyLmg6IEFk
ZGVkLgorICAgICAgICAoY2FsY1RodW1iU3RhcnRBbmRMZW5ndGgpOgorICAgICAgICAqIHBsYXRm
b3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmRyYXdUZXh0V2l0aFNwYWNpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS93
aW4vc2Nyb2xsYmFyX3JlbmRlci5jcHA6IEFkZGVkLgorICAgICAgICAoR3JhcGhpY3NIREM6Okdy
YXBoaWNzSERDKToKKyAgICAgICAgKEdyYXBoaWNzSERDOjp+R3JhcGhpY3NIREMpOgorICAgICAg
ICAoR3JhcGhpY3NIREM6Om9wZXJhdG9yIEhEQyk6CisgICAgICAgIChnZXRUU1N0YXRlRm9yUGFy
dCk6CisgICAgICAgICh3eFJlbmRlcmVyX0RyYXdTY3JvbGxiYXIpOgorICAgICAgICAqIHdlYmNv
cmUtd3guYmtsOgorCiAyMDA5LTA5LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcGFn
ZS93eC9FdmVudEhhbmRsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL3d4L0V2
ZW50SGFuZGxlcld4LmNwcAkocmV2aXNpb24gNDc5OTIpCisrKyBXZWJDb3JlL3BhZ2Uvd3gvRXZl
bnRIYW5kbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk1v
dXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKQEAgLTQzLDE3ICs0NCwyMCBAQAogCiBib29sIEV2
ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhI
aXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCiB7Ci0gICAgcmV0dXJuIHBhc3NT
dWJmcmFtZUV2ZW50VG9TdWJmcmFtZShtZXYsIHN1YmZyYW1lKTsKKyAgICBzdWJmcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChtZXYuZXZlbnQoKSk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1
YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1l
LCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0KiBoaXR0ZXN0KQogewotICAgIHJldHVybiBwYXNzU3Vi
ZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSk7CisgICAgc3ViZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZU1vdmVFdmVudChtZXYuZXZlbnQoKSwgaGl0dGVzdCk7Cisg
ICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VSZWxlYXNl
RXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUq
IHN1YmZyYW1lKQogewotICAgIHJldHVybiBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2
LCBzdWJmcmFtZSk7CisgICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJl
bGVhc2VFdmVudChtZXYuZXZlbnQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgRXZl
bnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKQEAgLTcwLDYgKzc0LDMyIEBACiAgICAgcmV0
dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOwog
fQogCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdo
ZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdpZGdldCB8fCAh
d2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVy
KCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6dGFi
c1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0IAoreyAKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorCitib29sIEV2ZW50SGFuZGxl
cjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmLCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7IAorICAgIHJldHVybiBmYWxzZTsgCit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
TW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKQoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiBmYWxzZTsgCit9CisKIHZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3Vt
ZW50VmlldygpCiB7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL3Njcm9sbGJhcl9yZW5kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24v
c2Nyb2xsYmFyX3JlbmRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4
L3d4Y29kZS9tYWMvY2FyYm9uL3Njcm9sbGJhcl9yZW5kZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtldmluIE9sbGl2aWVyICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgInNjcm9sbGJhcl9yZW5kZXIuaCIKKworI2luY2x1ZGUgPHd4L2RlZnMuaD4KKyNpbmNs
dWRlIDx3eC9kYy5oPgorI2luY2x1ZGUgPHd4L3JlbmRlcmVyLmg+CisKKyNpbmNsdWRlIDxDYXJi
b24vQ2FyYm9uLmg+CisKK3N0YXRpYyBpbnQgd3hTY3JvbGxiYXJQYXJ0VG9ISVByZXNzZWRTdGF0
ZSh3eFNjcm9sbGJhclBhcnQgcGFydCkKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAg
Y2FzZSB3eFNDUk9MTFBBUlRfQkFDS0JUTlNUQVJUOgorICAgICAgICAgICAgcmV0dXJuIGtUaGVt
ZVRvcE91dHNpZGVBcnJvd1ByZXNzZWQ7CisgICAgICAgIGNhc2Ugd3hTQ1JPTExQQVJUX0JBQ0tC
VE5FTkQ6CisgICAgICAgICAgICByZXR1cm4ga1RoZW1lVG9wT3V0c2lkZUFycm93UHJlc3NlZDsg
Ly8gVGhpcyBkb2VzIG5vdCBtYWtlIG11Y2ggc2Vuc2UuICBGb3Igc29tZSByZWFzb24gdGhlIG91
dHNpZGUgY29uc3RhbnQgaXMgcmVxdWlyZWQuCisgICAgICAgIGNhc2Ugd3hTQ1JPTExQQVJUX0ZX
REJUTlNUQVJUOgorICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRvcEluc2lkZUFycm93UHJlc3Nl
ZDsKKyAgICAgICAgY2FzZSB3eFNDUk9MTFBBUlRfRldEQlRORU5EOgorICAgICAgICAgICAgcmV0
dXJuIGtUaGVtZUJvdHRvbU91dHNpZGVBcnJvd1ByZXNzZWQ7CisgICAgICAgIGNhc2Ugd3hTQ1JP
TExQQVJUX1RIVU1COgorICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRodW1iUHJlc3NlZDsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwordm9pZCB3
eFJlbmRlcmVyX0RyYXdTY3JvbGxiYXIod3hXaW5kb3cqIFdYVU5VU0VEKHdpbmRvdyksIHd4REMm
IGRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3eFJlY3QmIHJlY3QsIHd4
T3JpZW50YXRpb24gb3JpZW50LCBpbnQgY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3hTY3JvbGxiYXJQYXJ0IGZvY3VzUGFydCwgd3hTY3JvbGxiYXJQYXJ0IGhvdmVyUGFy
dCwgaW50IG1heCwgaW50IHN0ZXAsIGludCBmbGFncykKK3sKKyAgICBjb25zdCB3eENvb3JkIHgg
PSByZWN0Lng7CisgICAgY29uc3Qgd3hDb29yZCB5ID0gcmVjdC55OworICAgIGNvbnN0IHd4Q29v
cmQgdyA9IHJlY3Qud2lkdGg7CisgICAgY29uc3Qgd3hDb29yZCBoID0gcmVjdC5oZWlnaHQ7CisK
KyAgICBkYy5TZXRCcnVzaCggKnd4V0hJVEVfQlJVU0ggKTsKKyAgICBkYy5TZXRQZW4oICp3eFRS
QU5TUEFSRU5UX1BFTiApOworICAgIGRjLkRyYXdSZWN0YW5nbGUocmVjdCk7CisgICAgCisgICAg
ZGMuU2V0QnJ1c2goICp3eFRSQU5TUEFSRU5UX0JSVVNIICk7CisKKyAgICBISVJlY3QgaGlSZWN0
ID0gQ0dSZWN0TWFrZSggeCwgeSwgdywgaCApOworCisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dDsKKyAgICBjZ0NvbnRleHQgPSAoQ0dDb250ZXh0UmVmKSBkYy5HZXRHcmFwaGljc0NvbnRleHQo
KS0+R2V0TmF0aXZlQ29udGV4dCgpOworCisgICAgeworICAgICAgICBISVRoZW1lVHJhY2tEcmF3
SW5mbyB0cmFja0luZm87CisgICAgICAgIHRyYWNrSW5mby52ZXJzaW9uID0gMDsKKyAgICAgICAg
dHJhY2tJbmZvLmtpbmQgPSBrVGhlbWVNZWRpdW1TY3JvbGxCYXI7CisgICAgICAgIHRyYWNrSW5m
by5ib3VuZHMgPSBoaVJlY3Q7CisgICAgICAgIHRyYWNrSW5mby5taW4gPSAwOworICAgICAgICB0
cmFja0luZm8ubWF4ID0gbWF4OworICAgICAgICB0cmFja0luZm8udmFsdWUgPSBjdXJyZW50Owor
ICAgICAgICB0cmFja0luZm8udHJhY2tJbmZvLnNjcm9sbGJhci52aWV3c2l6ZSA9IHN0ZXA7Cisg
ICAgICAgIHRyYWNrSW5mby5hdHRyaWJ1dGVzID0gMDsKKyAgICAgICAgaWYgKG9yaWVudCA9PSB3
eEhPUklaT05UQUwpCisgICAgICAgICAgICB0cmFja0luZm8uYXR0cmlidXRlcyB8PSBrVGhlbWVU
cmFja0hvcml6b250YWw7CisgICAgICAgIHRyYWNrSW5mby5lbmFibGVTdGF0ZSA9IChmbGFncyAm
IHd4Q09OVFJPTF9GT0NVU0VEKSA/IGtUaGVtZVRyYWNrQWN0aXZlIDoga1RoZW1lVHJhY2tJbmFj
dGl2ZTsKKyAgICAgICAgdHJhY2tJbmZvLnRyYWNrSW5mby5zY3JvbGxiYXIucHJlc3NTdGF0ZSA9
IHd4U2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUoZm9jdXNQYXJ0KTsKKyAgICAgICAgdHJh
Y2tJbmZvLmF0dHJpYnV0ZXMgfD0ga1RoZW1lVHJhY2tTaG93VGh1bWI7CisgICAgICAgIAorICAg
ICAgICBpZiAoZmxhZ3MgJiB3eENPTlRST0xfRElTQUJMRUQpCisgICAgICAgICAgICB0cmFja0lu
Zm8uZW5hYmxlU3RhdGUgPSBrVGhlbWVUcmFja0Rpc2FibGVkOworICAgICAgICAKKyAgICAgICAg
SElUaGVtZURyYXdUcmFjaygmdHJhY2tJbmZvLCAwLCBjZ0NvbnRleHQsIGtISVRoZW1lT3JpZW50
YXRpb25Ob3JtYWwpOworICAgIH0KK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2Rl
L2d0ay9zY3JvbGxiYXJfcmVuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L3d4L3d4Y29kZS9ndGsvc2Nyb2xsYmFyX3JlbmRlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9ndGsvc2Nyb2xsYmFyX3JlbmRlci5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtldmluIE9s
bGl2aWVyICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJzY3JvbGxiYXJfcmVuZGVyLmgiCisKKyNpbmNsdWRlIDx3eC9kZWZzLmg+
CisjaW5jbHVkZSA8d3gvZGMuaD4KKyNpbmNsdWRlIDx3eC9yZW5kZXJlci5oPgorI2luY2x1ZGUg
PHd4L3NldHRpbmdzLmg+CisjaW5jbHVkZSA8d3gvd2luZG93Lmg+CisKKyNpbmNsdWRlIDxndGsv
Z3RrLmg+CisjaW5jbHVkZSAid3gvZ3RrL3dpbl9ndGsuaCIKKworaW50IHd4U3R5bGVGb3JQYXJ0
KHd4U2Nyb2xsYmFyUGFydCBwYXJ0LCB3eFNjcm9sbGJhclBhcnQgZm9jdXNQYXJ0LCB3eFNjcm9s
bGJhclBhcnQgaG92ZXJQYXJ0LCBpbnQgZmxhZ3MpCit7CisgICAgaW50IHN0eWxlID0gMDsKKyAg
ICBpZiAoZmxhZ3MgPT0gd3hDT05UUk9MX0RJU0FCTEVEKQorICAgICAgICBzdHlsZSA9IHd4Q09O
VFJPTF9ESVNBQkxFRDsKKyAgICBlbHNlIGlmIChwYXJ0ID09IGZvY3VzUGFydCkKKyAgICAgICAg
c3R5bGUgPSB3eENPTlRST0xfUFJFU1NFRDsKKyAgICBlbHNlIGlmIChwYXJ0ID09IGhvdmVyUGFy
dCkKKyAgICAgICAgc3R5bGUgPSB3eENPTlRST0xfQ1VSUkVOVDsKKworICAgIHJldHVybiBzdHls
ZTsKK30KKworR3RrV2lkZ2V0KiBHZXRCdXR0b25XaWRnZXQoKQoreworICAgIHN0YXRpYyBHdGtX
aWRnZXQgKnNfYnV0dG9uID0gTlVMTDsKKyAgICBzdGF0aWMgR3RrV2lkZ2V0ICpzX3dpbmRvdyA9
IE5VTEw7CisKKyAgICBpZiAoICFzX2J1dHRvbiApCisgICAgeworICAgICAgICBzX3dpbmRvdyA9
IGd0a193aW5kb3dfbmV3KCBHVEtfV0lORE9XX1BPUFVQICk7CisgICAgICAgIGd0a193aWRnZXRf
cmVhbGl6ZSggc193aW5kb3cgKTsKKyAgICAgICAgc19idXR0b24gPSBndGtfYnV0dG9uX25ldygp
OworICAgICAgICBndGtfY29udGFpbmVyX2FkZCggR1RLX0NPTlRBSU5FUihzX3dpbmRvdyksIHNf
YnV0dG9uICk7CisgICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZSggc19idXR0b24gKTsKKyAgICB9
CisKKyAgICByZXR1cm4gc19idXR0b247Cit9CisKKworR2RrV2luZG93KiB3eEdldEdka1dpbmRv
d0ZvckRDKHd4V2luZG93KiB3aW4sIHd4REMmIGRjKQoreworICAgIC8vIFRoZSB3YXkgdG8gZ2V0
IGEgR2RrV2luZG93KiBmcm9tIGEgd3hXaW5kb3cgaXMgdG8gdXNlIAorICAgIC8vIEdUS19QSVpa
QSh3aW4tPm1fd3h3aW5kb3cpLT5iaW5fd2luZG93LCBidXQgdGhpcyBhcHByb2FjaAorICAgIC8v
IHdvbid0IHdvcmsgd2hlbiBkcmF3aW5nIHRvIGEgd3hNZW1vcnlEQyBhcyBpdCBoYXMgaXRzIG93
bgorICAgIC8vIEdka1dpbmRvdyogZm9yIGl0cyBiaXRtYXAuIHd4V2luZG93REMncyBHZXRHREtX
aW5kb3coKSB3YXMKKyAgICAvLyBkZXNpZ25lZCB0byBjcmVhdGUgYSBzb2x1dGlvbiBmb3IgYWxs
IERDcywgYnV0IHdlIGNhbid0CisgICAgLy8gaW1wbGVtZW50IGl0IHdpdGggd3hHQ0RDIHNpbmNl
IGl0IGRvZXNuJ3QgcmV0YWluIGl0cyB3eFdpbmRvdy4gCisgICAgLy8gU28sIHRvIHdvcmsgYXJv
dW5kIHRoaXMsIHdlIHVzZSBHZXRHREtXaW5kb3cgd2hlbmV2ZXIgcG9zc2libGUKKyAgICAvLyBh
bmQgdXNlIGJpbl93aW5kb3cgZm9yIHd4R0NEQy4gCisgICAgR2RrV2luZG93KiBnZGtfd2luZG93
ID0gTlVMTDsKKyNpZiB3eFVTRV9HUkFQSElDU19DT05URVhUCisgICAgaWYgKCBkYy5Jc0tpbmRP
ZiggQ0xBU1NJTkZPKHd4R0NEQykgKSApCisgICAgICAgIGdka193aW5kb3cgPSBHVEtfUElaWkEo
d2luLT5tX3d4d2luZG93KS0+YmluX3dpbmRvdzsgICAgCisgICAgZWxzZQorI2VuZGlmCisgICAg
ICAgZ2RrX3dpbmRvdyA9IGRjLkdldEdES1dpbmRvdygpOworICAgIHd4QVNTRVJUX01TRyggZ2Rr
X3dpbmRvdywKKyAgICAgICAgICAgICAgICAgIHd4VCgiY2Fubm90IHVzZSB3eFJlbmRlcmVyTmF0
aXZlIG9uIHd4REMgb2YgdGhpcyB0eXBlIikgKTsKKyAgICAKKyAgICByZXR1cm4gZ2RrX3dpbmRv
dzsKK30KKwordm9pZCB3eFJlbmRlcmVyX0RyYXdTY3JvbGxiYXIod3hXaW5kb3cqIHdpbmRvdywg
d3hEQyYgZGMsIGNvbnN0IHd4UmVjdCYgcmVjdCwgd3hPcmllbnRhdGlvbiBvcmllbnQsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnJlbnQsIHd4U2Nyb2xsYmFyUGFydCBmb2N1c1Bh
cnQsIHd4U2Nyb2xsYmFyUGFydCBob3ZlclBhcnQsIGludCBtYXgsIGludCBzdGVwLCBpbnQgZmxh
Z3MpCit7CisgICAgYm9vbCBob3JpeiA9IG9yaWVudCA9PSB3eEhPUklaT05UQUw7CisgICAgd3hD
b2xvdXIgc2Nyb2xsYmFyX2NvbG91ciA9IHd4U3lzdGVtU2V0dGluZ3M6OkdldENvbG91cih3eFNZ
U19DT0xPVVJfU0NST0xMQkFSKTsKKyAgICBkYy5TZXRCcnVzaCh3eEJydXNoKHNjcm9sbGJhcl9j
b2xvdXIpKTsKKyAgICBkYy5TZXRQZW4od3hQZW4od3hTeXN0ZW1TZXR0aW5nczo6R2V0Q29sb3Vy
KHd4U1lTX0NPTE9VUl9CVE5TSEFET1cpKSk7CisgICAgZGMuRHJhd1JlY3RhbmdsZShyZWN0Lngs
IHJlY3QueSwgcmVjdC53aWR0aCwgcmVjdC5oZWlnaHQpOworCisgICAgd3hSZW5kZXJlck5hdGl2
ZSYgcmVuZGVyZXIgPSB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKTsKKyAgICBpbnQgeCA9IHJlY3Qu
eDsKKyAgICBpbnQgeSA9IHJlY3QueTsKKworICAgIGludCBidXR0b25MZW5ndGggPSAxNjsKKwor
ICAgIHJlbmRlcmVyLkRyYXdQdXNoQnV0dG9uKHdpbmRvdywgZGMsIHd4UmVjdCh4LHksYnV0dG9u
TGVuZ3RoLGJ1dHRvbkxlbmd0aCksIHd4U3R5bGVGb3JQYXJ0KHd4U0NST0xMUEFSVF9CQUNLQlRO
U1RBUlQsIGZvY3VzUGFydCwgaG92ZXJQYXJ0LCBmbGFncykpOworCisgICAgR3RrV2lkZ2V0KiBi
dXR0b24gPSBHZXRCdXR0b25XaWRnZXQoKTsKKyAgICBHZGtXaW5kb3cqIGdka193aW5kb3cgPSB3
eEdldEdka1dpbmRvd0ZvckRDKHdpbmRvdywgZGMpOworCisgICAgR3RrQXJyb3dUeXBlIGFycm93
VHlwZSA9IEdUS19BUlJPV19VUDsKKyAgICBpZiAoaG9yaXopCisgICAgICAgIGFycm93VHlwZSA9
IEdUS19BUlJPV19MRUZUOworCisgICAgZ3RrX3BhaW50X2Fycm93KCBidXR0b24tPnN0eWxlLCBn
ZGtfd2luZG93LCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX09VVCwgTlVMTCwgYnV0dG9u
LCAiYXJyb3ciLCBhcnJvd1R5cGUsIGZhbHNlLCB4ICsgNCwgeSArIDQsIDgsIDgpOworCisgICAg
d3hSZWN0IGJ1dHRvblJlY3QgPSByZWN0OworICAgIGludCBwaHlzaWNhbExlbmd0aCA9IGhvcml6
ID8gcmVjdC53aWR0aCA6IHJlY3QuaGVpZ2h0OworICAgIHBoeXNpY2FsTGVuZ3RoIC09IGJ1dHRv
bkxlbmd0aCoyOworICAgIGludCB0aHVtYlN0YXJ0ID0gMDsKKyAgICBpbnQgdGh1bWJMZW5ndGgg
PSAwOworICAgIGNhbGNUaHVtYlN0YXJ0QW5kTGVuZ3RoKHBoeXNpY2FsTGVuZ3RoLCBtYXggKyBz
dGVwLCBjdXJyZW50LCBzdGVwLCAmdGh1bWJTdGFydCwgJnRodW1iTGVuZ3RoKTsKKworICAgIGlm
IChob3JpeikgeworICAgICAgICBidXR0b25SZWN0LnggPSB0aHVtYlN0YXJ0ICsgYnV0dG9uTGVu
Z3RoOworICAgICAgICBidXR0b25SZWN0LndpZHRoID0gdGh1bWJMZW5ndGg7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgYnV0dG9uUmVjdC55ID0gdGh1bWJTdGFydCArIGJ1dHRvbkxlbmd0aDsKKyAg
ICAgICAgYnV0dG9uUmVjdC5oZWlnaHQgPSB0aHVtYkxlbmd0aDsKKyAgICB9CisKKyAgICByZW5k
ZXJlci5EcmF3UHVzaEJ1dHRvbih3aW5kb3csIGRjLCBidXR0b25SZWN0LCB3eFN0eWxlRm9yUGFy
dCh3eFNDUk9MTFBBUlRfVEhVTUIsIGZvY3VzUGFydCwgaG92ZXJQYXJ0LCBmbGFncykpOworCisg
ICAgaWYgKGhvcml6KQorICAgICAgICB4ICs9IHJlY3Qud2lkdGggLSBidXR0b25MZW5ndGg7Cisg
ICAgZWxzZQorICAgICAgICB5ICs9IHJlY3QuaGVpZ2h0IC0gYnV0dG9uTGVuZ3RoOworCisgICAg
cmVuZGVyZXIuRHJhd1B1c2hCdXR0b24od2luZG93LCBkYywgd3hSZWN0KHgseSxidXR0b25MZW5n
dGgsYnV0dG9uTGVuZ3RoKSwgd3hTdHlsZUZvclBhcnQod3hTQ1JPTExQQVJUX0ZXREJUTkVORCwg
Zm9jdXNQYXJ0LCBob3ZlclBhcnQsIGZsYWdzKSk7CisgICAgCisgICAgaWYgKGhvcml6KQorICAg
ICAgICBhcnJvd1R5cGUgPSBHVEtfQVJST1dfUklHSFQ7CisgICAgZWxzZQorICAgICAgICBhcnJv
d1R5cGUgPSBHVEtfQVJST1dfRE9XTjsKKworICAgIGd0a19wYWludF9hcnJvdyggYnV0dG9uLT5z
dHlsZSwgZ2RrX3dpbmRvdywgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19PVVQsIE5VTEws
IGJ1dHRvbiwgImFycm93IiwgYXJyb3dUeXBlLCBmYWxzZSwgeCArIDQsIHkgKyA0LCA4LCA4KTsK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3Njcm9sbGJhcl9yZW5kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9zY3JvbGxiYXJfcmVuZGVy
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9zY3JvbGxiYXJf
cmVuZGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgS2V2aW4gT2xsaXZpZXIgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgc2Nyb2xsYmFyX3JlbmRlcl9oCisjZGVmaW5lIHNjcm9sbGJhcl9yZW5kZXJfaAorCisj
aW5jbHVkZSA8d3gvZGVmcy5oPgorI2luY2x1ZGUgPHd4L2RjLmg+CisjaW5jbHVkZSA8d3gvcmVu
ZGVyZXIuaD4KKworZW51bSB3eFNjcm9sbGJhclBhcnQgeworICAgIHd4U0NST0xMUEFSVF9OT05F
ID0gMCwKKyAgICB3eFNDUk9MTFBBUlRfQkFDS0JUTlNUQVJUID0gMSwKKyAgICB3eFNDUk9MTFBB
UlRfRldEQlROU1RBUlQgPSAxIDw8IDEsCisgICAgd3hTQ1JPTExQQVJUX0JBQ0tUUkFDSyA9IDEg
PDwgMiwKKyAgICB3eFNDUk9MTFBBUlRfVEhVTUIgPSAxIDw8IDMsCisgICAgd3hTQ1JPTExQQVJU
X0ZXRFRSQUNLID0gMSA8PCA0LAorICAgIHd4U0NST0xMUEFSVF9CQUNLQlRORU5EID0gMSA8PCA1
LAorICAgIHd4U0NST0xMUEFSVF9GV0RCVE5FTkQgPSAxIDw8IDYsCisgICAgd3hTQ1JPTExQQVJU
X1NDUk9MTEJBUkJHID0gMSA8PCA3LAorICAgIHd4U0NST0xMUEFSVF9UUkFDS0JHID0gMSA8PCA4
LAorICAgIHd4U0NST0xMUEFSVF9BTEwgPSAweGZmZmZmZmZmLAorfTsKKwordm9pZCB3eFJlbmRl
cmVyX0RyYXdTY3JvbGxiYXIod3hXaW5kb3cqIHdpbmRvdywgd3hEQyYgZGMsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hSZWN0JiByZWN0LCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHd4T3JpZW50YXRpb24gb3JpZW50YXRp
b24sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGN1cnJlbnQs
IHd4U2Nyb2xsYmFyUGFydCBmb2N1c1BhcnQsIHd4U2Nyb2xsYmFyUGFydCBob3ZlclBhcnQsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1heCwgaW50IHN0ZXAs
IGludCBmbGFncz0wKTsKKworaW5saW5lIHZvaWQgY2FsY1RodW1iU3RhcnRBbmRMZW5ndGgoaW50
IHBoeXNpY2FsTGVuZ3RoLCBpbnQgdmlydHVhbExlbmd0aCwgaW50IGN1cnJlbnQsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RlcCwgaW50ICp0aHVtYlN0YXJ0LCBpbnQg
KnRodW1iTGVuZ3RoKQoreworICAgICAgICBmbG9hdCBwcm9wb3J0aW9uID0gKGZsb2F0KXBoeXNp
Y2FsTGVuZ3RoIC8gdmlydHVhbExlbmd0aDsKKyAgICAgICAgZmxvYXQgc2NhbGUgPSAoZmxvYXQp
dmlydHVhbExlbmd0aCAvIHBoeXNpY2FsTGVuZ3RoOworICAgICAgICBpbnQgdGh1bWJTaXplID0g
cHJvcG9ydGlvbiAqIHBoeXNpY2FsTGVuZ3RoOworICAgICAgICBpbnQgY3VycmVudFBvcyA9IGN1
cnJlbnQgLyBzY2FsZTsKKyAgICAgICAgCisgICAgICAgIGlmICh0aHVtYlN0YXJ0KQorICAgICAg
ICAgICAgKnRodW1iU3RhcnQgPSBjdXJyZW50UG9zOworICAgICAgICAKKyAgICAgICAgaWYgKHRo
dW1iTGVuZ3RoKQorICAgICAgICAgICAgKnRodW1iTGVuZ3RoID0gdGh1bWJTaXplOworfQorI2Vu
ZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4vc2Nyb2xsYmFyX3JlbmRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL3Njcm9s
bGJhcl9yZW5kZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNv
ZGUvd2luL3Njcm9sbGJhcl9yZW5kZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLZXZpbiBPbGxpdmllciAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAic2Nyb2xs
YmFyX3JlbmRlci5oIgorCisjaW5jbHVkZSA8d3gvZGVmcy5oPgorCisjaW5jbHVkZSA8d3gvZGMu
aD4KKyNpbmNsdWRlIDx3eC9yZW5kZXJlci5oPgorI2luY2x1ZGUgPHd4L3dpbmRvdy5oPgorCisj
aW5jbHVkZSA8d3gvbXN3L3ByaXZhdGUuaD4KKyNpbmNsdWRlIDx3eC9tc3cvdXh0aGVtZS5oPgor
CisvLyBjb25zdGFudHMKKyNkZWZpbmUgU1BfQlVUVE9OICAgICAgICAgIDEKKyNkZWZpbmUgU1Bf
VEhVTUJIT1IgICAgICAgIDIKKyNkZWZpbmUgU1BfVEhVTUJWRVJUICAgICAgIDMKKyNkZWZpbmUg
U1BfVFJBQ0tFTkRIT1IgICAgICA0CisjZGVmaW5lIFNQX1RSQUNLRU5EVkVSVCAgICAgNworI2Rl
ZmluZSBTUF9HUklQUEVSSE9SICAgICAgIDgKKyNkZWZpbmUgU1BfR1JJUFBFUlZFUlQgICAgICA5
CisKKyNkZWZpbmUgVFNfTk9STUFMICAgICAgICAgICAxCisjZGVmaW5lIFRTX0hPVkVSICAgICAg
ICAgICAgMgorI2RlZmluZSBUU19BQ1RJVkUgICAgICAgICAgIDMKKyNkZWZpbmUgVFNfRElTQUJM
RUQgICAgICAgICA0CisKKyNkZWZpbmUgVFNfVVBfQlVUVE9OICAgICAgIDAKKyNkZWZpbmUgVFNf
RE9XTl9CVVRUT04gICAgIDQKKyNkZWZpbmUgVFNfTEVGVF9CVVRUT04gICAgIDgKKyNkZWZpbmUg
VFNfUklHSFRfQlVUVE9OICAgIDEyCisKKyNpZiB3eFVTRV9HUkFQSElDU19DT05URVhUCisvLyBU
T0RPIHJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgKGdkaXBsdXMgbmVlZHMgdGhlIG1hY3JvcykKKy8v
IHdlIG5lZWQgdG8gdW5kZWYgYmVjYXVzZSB0aGUgbWFjcm9zIGFyZSBiZWluZyBkZWZpbmVkIGlu
IFdlYkNvcmVQcmVmaXguaAorLy8gYnV0IEdkaVBsdXMuaCBpcyBub3QgYWNjZXB0aW5nIHRoZW0K
KyN1bmRlZiBtYXgKKyNkZWZpbmUgbWF4KGEsYikgICAgICAgICAgICAoKChhKSA+IChiKSkgPyAo
YSkgOiAoYikpCisKKyN1bmRlZiBtaW4KKyNkZWZpbmUgbWluKGEsYikgICAgICAgICAgICAoKChh
KSA8IChiKSkgPyAoYSkgOiAoYikpCisKKyNpbmNsdWRlIDx3eC9kY2dyYXBoLmg+CisjaW5jbHVk
ZSAiZ2RpcGx1cy5oIgordXNpbmcgbmFtZXNwYWNlIEdkaXBsdXM7CisjZW5kaWYgLy8gd3hVU0Vf
R1JBUEhJQ1NfQ09OVEVYVAorCitjbGFzcyBHcmFwaGljc0hEQworeworcHVibGljOgorICAgIEdy
YXBoaWNzSERDKHd4REMqIGRjKQorICAgIHsKKyNpZiB3eFVTRV9HUkFQSElDU19DT05URVhUCisg
ICAgICAgIG1fZ3JhcGhpY3MgPSBOVUxMOworICAgICAgICB3eEdDREMqIGdjZGMgPSB3eER5bmFt
aWNDYXN0KGRjLCB3eEdDREMpOworICAgICAgICBpZiAoZ2NkYykgeworICAgICAgICAgICAgbV9n
cmFwaGljcyA9IChHcmFwaGljcyopZ2NkYy0+R2V0R3JhcGhpY3NDb250ZXh0KCktPkdldE5hdGl2
ZUNvbnRleHQoKTsKKyAgICAgICAgICAgIG1faGRjID0gbV9ncmFwaGljcy0+R2V0SERDKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBtX2hkYyA9IEdldEhk
Y09mKCpkYyk7CisgICAgfQorCisgICAgfkdyYXBoaWNzSERDKCkKKyAgICB7CisjaWYgd3hVU0Vf
R1JBUEhJQ1NfQ09OVEVYVAorICAgICAgICBpZiAobV9ncmFwaGljcykKKyAgICAgICAgICAgIG1f
Z3JhcGhpY3MtPlJlbGVhc2VIREMobV9oZGMpOworI2VuZGlmCisgICAgfQorCisgICAgb3BlcmF0
b3IgSERDKCkgY29uc3QgeyByZXR1cm4gbV9oZGM7IH0KKworcHJpdmF0ZToKKyAgICBIREMgICAg
ICAgICBtX2hkYzsKKyNpZiB3eFVTRV9HUkFQSElDU19DT05URVhUCisgICAgR3JhcGhpY3MqICAg
bV9ncmFwaGljczsKKyNlbmRpZgorfTsKKworaW50IGdldFRTU3RhdGVGb3JQYXJ0KHd4U2Nyb2xs
YmFyUGFydCBwYXJ0LCB3eFNjcm9sbGJhclBhcnQgZm9jdXNQYXJ0LCB3eFNjcm9sbGJhclBhcnQg
aG92ZXJQYXJ0LCBpbnQgZmxhZ3MgPSAwKQoreworICAgIGludCB4cFN0YXRlID0gVFNfTk9STUFM
OworICAgIGlmIChmbGFncyAmIHd4Q09OVFJPTF9ESVNBQkxFRCkKKyAgICAgICAgeHBTdGF0ZSA9
IFRTX0RJU0FCTEVEOworICAgIGVsc2UgaWYgKHBhcnQgPT0gZm9jdXNQYXJ0KQorICAgICAgICB4
cFN0YXRlID0gVFNfQUNUSVZFOworICAgIGVsc2UgaWYgKHBhcnQgPT0gaG92ZXJQYXJ0KQorICAg
ICAgICB4cFN0YXRlID0gVFNfSE9WRVI7CisgICAgICAgIAorICAgIHJldHVybiB4cFN0YXRlOwor
fQorCit2b2lkIHd4UmVuZGVyZXJfRHJhd1Njcm9sbGJhcih3eFdpbmRvdyogd2luZG93LCB3eERD
JiBkYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hSZWN0JiByZWN0LCB3
eE9yaWVudGF0aW9uIG9yaWVudCwgaW50IGN1cnJlbnQsIHd4U2Nyb2xsYmFyUGFydCBmb2N1c1Bh
cnQsIHd4U2Nyb2xsYmFyUGFydCBob3ZlclBhcnQsIGludCBtYXgsIGludCBzdGVwLCBpbnQgZmxh
Z3MpCit7CisgICAgd3hVeFRoZW1lRW5naW5lICplbmdpbmUgPSB3eFV4VGhlbWVFbmdpbmU6Okdl
dCgpOworICAgIEhUSEVNRSBoVGhlbWUgPSAoSFRIRU1FKWVuZ2luZS0+T3BlblRoZW1lRGF0YSgw
LCBMIlNDUk9MTEJBUiIpOworCisgICAgYm9vbCBob3JpeiA9IG9yaWVudCA9PSB3eEhPUklaT05U
QUw7CisgICAgaW50IHBhcnQgPSAwOworICAgIGlmIChob3JpeikKKyAgICAgICAgcGFydCA9IFNQ
X1RSQUNLRU5ESE9SOworICAgIGVsc2UKKyAgICAgICAgcGFydCA9IFNQX1RSQUNLRU5EVkVSVDsK
KworICAgIGludCB4cFN0YXRlID0gVFNfTk9STUFMOworICAgIFJFQ1QgcjsKKyAgICB3eENvcHlS
ZWN0VG9SRUNUKHJlY3QsIHIpOworCisgICAgLy8gVW5saWtlIE1hYywgb24gTVNXIHlvdSBkcmF3
IHRoZSBzY3JvbGxiYXIgcGllY2UgYnkgcGllY2UuCisgICAgLy8gc28gd2UgZHJhdyB0aGUgdHJh
Y2sgZmlyc3QsIHRoZW4gdGhlIGJ1dHRvbnMKKyAgICBpZiAoaFRoZW1lKQorICAgIHsKKyAgICAg
ICAgZW5naW5lLT5EcmF3VGhlbWVCYWNrZ3JvdW5kKGhUaGVtZSwgR3JhcGhpY3NIREMoJmRjKSwg
cGFydCwgeHBTdGF0ZSwgJnIsIDApOworCisgICAgICAgIGludCBidXR0b25TaXplID0gMTY7Cisg
ICAgICAgICAgICAKKyAgICAgICAgcGFydCA9IFNQX0JVVFRPTjsKKyAgICAgICAgeHBTdGF0ZSA9
IGdldFRTU3RhdGVGb3JQYXJ0KHd4U0NST0xMUEFSVF9CQUNLQlROU1RBUlQsIGZvY3VzUGFydCwg
aG92ZXJQYXJ0LCBmbGFncyk7CisgICAgICAgIHhwU3RhdGUgKz0gaG9yaXogPyBUU19MRUZUX0JV
VFRPTiA6IFRTX1VQX0JVVFRPTjsKKyAgICAgICAgUkVDVCBidXR0b25SZWN0ID0gcjsKKyAgICAg
ICAgYnV0dG9uUmVjdC5ib3R0b20gPSBidXR0b25SZWN0LnRvcCArIGJ1dHRvblNpemU7CisgICAg
ICAgIGJ1dHRvblJlY3QucmlnaHQgPSBidXR0b25SZWN0LmxlZnQgKyBidXR0b25TaXplOworICAg
ICAgICBlbmdpbmUtPkRyYXdUaGVtZUJhY2tncm91bmQoaFRoZW1lLCBHcmFwaGljc0hEQygmZGMp
LCBwYXJ0LCB4cFN0YXRlLCAmYnV0dG9uUmVjdCwgMCk7CisKKyAgICAgICAgeHBTdGF0ZSA9IGdl
dFRTU3RhdGVGb3JQYXJ0KHd4U0NST0xMUEFSVF9GV0RCVE5FTkQsIGZvY3VzUGFydCwgaG92ZXJQ
YXJ0LCBmbGFncyk7CisgICAgICAgIHhwU3RhdGUgKz0gaG9yaXogPyBUU19SSUdIVF9CVVRUT04g
OiBUU19ET1dOX0JVVFRPTjsKKyAgICAgICAgYnV0dG9uUmVjdCA9IHI7CisgICAgICAgIGJ1dHRv
blJlY3QudG9wID0gYnV0dG9uUmVjdC5ib3R0b20gLSBidXR0b25TaXplOworICAgICAgICBidXR0
b25SZWN0LmxlZnQgPSBidXR0b25SZWN0LnJpZ2h0IC0gYnV0dG9uU2l6ZTsKKyAgICAgICAgZW5n
aW5lLT5EcmF3VGhlbWVCYWNrZ3JvdW5kKGhUaGVtZSwgR3JhcGhpY3NIREMoJmRjKSwgcGFydCwg
eHBTdGF0ZSwgJmJ1dHRvblJlY3QsIDApOworCisgICAgICAgIHBhcnQgPSBob3JpeiA/IFNQX1RI
VU1CSE9SIDogU1BfVEhVTUJWRVJUOworCisgICAgICAgIGludCBwaHlzaWNhbExlbmd0aCA9IGhv
cml6ID8gcmVjdC53aWR0aCA6IHJlY3QuaGVpZ2h0OworICAgICAgICBwaHlzaWNhbExlbmd0aCAt
PSBidXR0b25TaXplKjI7CisgICAgICAgIGludCB0aHVtYlN0YXJ0ID0gMDsKKyAgICAgICAgaW50
IHRodW1iTGVuZ3RoID0gMDsKKyAgICAgICAgY2FsY1RodW1iU3RhcnRBbmRMZW5ndGgocGh5c2lj
YWxMZW5ndGgsIG1heCArIHN0ZXAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJl
bnQsIHN0ZXAsICZ0aHVtYlN0YXJ0LCAmdGh1bWJMZW5ndGgpOworICAgICAgICBidXR0b25SZWN0
ID0gcjsKKyAgICAgICAgaWYgKGhvcml6KSB7CisgICAgICAgICAgICBidXR0b25SZWN0LmxlZnQg
PSB0aHVtYlN0YXJ0ICsgYnV0dG9uU2l6ZTsKKyAgICAgICAgICAgIGJ1dHRvblJlY3QucmlnaHQg
PSBidXR0b25SZWN0LmxlZnQgKyB0aHVtYkxlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGJ1dHRvblJlY3QudG9wID0gdGh1bWJTdGFydCArIGJ1dHRvblNpemU7CisgICAgICAg
ICAgICBidXR0b25SZWN0LmJvdHRvbSA9IGJ1dHRvblJlY3QudG9wICsgdGh1bWJMZW5ndGg7Cisg
ICAgICAgIH0KKworICAgICAgICB4cFN0YXRlID0gZ2V0VFNTdGF0ZUZvclBhcnQod3hTQ1JPTExQ
QVJUX1RIVU1CLCBmb2N1c1BhcnQsIGhvdmVyUGFydCwgZmxhZ3MpOworICAgICAgICBlbmdpbmUt
PkRyYXdUaGVtZUJhY2tncm91bmQoaFRoZW1lLCBHcmFwaGljc0hEQygmZGMpLCBwYXJ0LCB4cFN0
YXRlLCAmYnV0dG9uUmVjdCwgMCk7CisgICAgICAgIAorICAgICAgICAvLyBkcmF3IHRoZSBncmlw
cGVyCisgICAgICAgIGludCB0aGlja25lc3MgPSA6OkdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NS
T0xMKSAvIDI7CisgICAgICAgIAorICAgICAgICBidXR0b25SZWN0LmxlZnQgKz0gKChidXR0b25S
ZWN0LnJpZ2h0IC0gYnV0dG9uUmVjdC5sZWZ0KSAtIHRoaWNrbmVzcykgLyAyOworICAgICAgICBi
dXR0b25SZWN0LnRvcCArPSAoKGJ1dHRvblJlY3QuYm90dG9tIC0gYnV0dG9uUmVjdC50b3ApIC0g
dGhpY2tuZXNzKSAvIDI7CisgICAgICAgIGJ1dHRvblJlY3QucmlnaHQgPSBidXR0b25SZWN0Lmxl
ZnQgKyB0aGlja25lc3M7CisgICAgICAgIGJ1dHRvblJlY3QuYm90dG9tID0gYnV0dG9uUmVjdC50
b3AgKyB0aGlja25lc3M7CisgICAgICAgIAorICAgICAgICBpZiAoaG9yaXopCisgICAgICAgICAg
ICBwYXJ0ID0gU1BfR1JJUFBFUkhPUjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFydCA9
IFNQX0dSSVBQRVJWRVJUOworICAgICAgICAKKyAgICAgICAgZW5naW5lLT5EcmF3VGhlbWVCYWNr
Z3JvdW5kKGhUaGVtZSwgR3JhcGhpY3NIREMoJmRjKSwgcGFydCwgeHBTdGF0ZSwgJmJ1dHRvblJl
Y3QsIDApOworICAgIH0KK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9u
b24ta2VybmVkLWRyYXdpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gv
d3hjb2RlL3dpbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCShyZXZpc2lvbiA0Nzk5MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03OSwxMyArNzksMjQgQEAKIAogICAgIC8vIGdldCB0aGUgbmF0aXZlIEhE
QyBoYW5kbGUgdG8gZHJhdyB1c2luZyBuYXRpdmUgQVBJcwogICAgIEhEQyBoZGMgPSAwOworICAg
IGZsb2F0IHkgPSBwb2ludC55KCkgLSBmb250LT5hc2NlbnQoKTsKKyAgICBmbG9hdCB4ID0gcG9p
bnQueCgpOworCiAjaWYgVVNFKFdYR0MpCisgICAgLy8gd2hlbiBnb2luZyBmcm9tIEdkaVBsdXMg
LT4gR2RpLCBhbnkgR2RpUGx1cyB0cmFuc2Zvcm1hdGlvbnMgYXJlIGxvc3QKKyAgICAvLyBzbyB3
ZSBuZWVkIHRvIGFsdGVyIHRoZSBjb29yZGluYXRlcyB0byByZWZsZWN0IHRoZWlyIHRyYW5zZm9y
bWVkIHBvaW50LgorICAgIGRvdWJsZSB4dHJhbnMgPSAwOworICAgIGRvdWJsZSB5dHJhbnMgPSAw
OworICAgIAogICAgIHd4R3JhcGhpY3NDb250ZXh0KiBnYyA9IGRjLT5HZXRHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICBnYy0+R2V0VHJhbnNmb3JtKCkuVHJhbnNmb3JtUG9pbnQoJnh0cmFucywgJnl0
cmFucyk7CiAgICAgR2RpcGx1czo6R3JhcGhpY3MqIGc7CiAgICAgaWYgKGdjKSB7CiAgICAgICAg
IGcgPSAoR2RpcGx1czo6R3JhcGhpY3MqKWdjLT5HZXROYXRpdmVDb250ZXh0KCk7CiAgICAgICAg
IGhkYyA9IGctPkdldEhEQygpOwogICAgIH0KKyAgICB4ICs9IChpbnQpeHRyYW5zOworICAgIHkg
Kz0gKGludCl5dHJhbnM7ICAgIAogI2Vsc2UKICAgICBoZGMgPSBzdGF0aWNfY2FzdDxIREM+KGRj
LT5HZXRIREMoKSk7CiAjZW5kaWYKQEAgLTk1LDkgKzEwNiw2IEBACiAgICAgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCogICBnbHlwaHMgICA9IGdseXBoQnVmZmVyLmdseXBocyhmcm9tKTsKICAgICBj
b25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
ZnJvbSk7CiAKLSAgICBmbG9hdCB5ID0gcG9pbnQueSgpIC0gZm9udC0+YXNjZW50KCk7Ci0gICAg
ZmxvYXQgeCA9IHBvaW50LngoKTsKLQogICAgIGludCogc3BhY2luZyA9IG5ldyBpbnRbbnVtR2x5
cGhzIC0gZnJvbV07CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KQogICAgICAgICBzcGFjaW5nW2ldID0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDQ3OTkyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTMsOCArMTEzLDYgQEAKIAogdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBv
c2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KSB7IG5vdEltcGxlbWVudGVk
KCk7IH0gCiAKLVNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKSB7
IG5vdEltcGxlbWVudGVkKCk7IHN0YXRpYyBTY3JvbGxiYXJUaGVtZSB0aGVtZTsgcmV0dXJuICZ0
aGVtZTsgfQotCiBTdHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uc3QgRm9u
dCYsIGludCB3aWR0aCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gU3RyaW5nKCk7
IH0KIAogSWNvbjo6fkljb24oKSB7IH0KQEAgLTEyNiwxMSArMTI0LDYgQEAKIHZvaWQgRWRpdG9y
OjpzaG93Rm9udFBhbmVsKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiB2b2lkIEVkaXRvcjo6c2hv
d1N0eWxlc1BhbmVsKCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiAKLWJvb2wgRXZlbnRIYW5kbGVy
Ojp0YWJzVG9BbGxDb250cm9scyhLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QgeyBub3RJbXBs
ZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJh
bWVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIEZyYW1lKiBz
dWJmcmFtZSwgSGl0VGVzdFJlc3VsdCopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNl
OyB9Ci1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0
KikgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLWJvb2wgRXZlbnRIYW5kbGVy
OjpwYXNzV2hlZWxFdmVudFRvV2lkZ2V0KFBsYXRmb3JtV2hlZWxFdmVudCYsIFdpZGdldCopIHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci0KIHZvaWQgU2VhcmNoUG9wdXBNZW51
OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBTZWFy
Y2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IFZlY3RvcjxTdHJpbmc+JiBzZWFyY2hJdGVtcykgeyBub3RJbXBsZW1lbnRlZCgpOyB9CiBTZWFy
Y2hQb3B1cE1lbnU6OlNlYXJjaFBvcHVwTWVudShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCkgOiBQ
b3B1cE1lbnUoY2xpZW50KSB7IG5vdEltcGxlbWVudGVkKCk7IH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS93eC9SZW5kZXJUaGVtZVd4LmNwcAkocmV2aXNpb24gNDc5OTIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKQEAgLTEzOCw2ICsx
MzksMTUgQEAKICAgICByZXR1cm4gcnQ7CiB9CiAKK3d4V2luZG93KiBuYXRpdmVXaW5kb3dGb3JS
ZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiBvKQoreworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gby0+dmlldygpLT5mcmFtZVZpZXcoKTsKKyAgICBBU1NFUlQoZnJhbWVWaWV3KTsKKyAgICBB
U1NFUlQoZnJhbWVWaWV3LT5ob3N0V2luZG93KCkpOworICAgIHJldHVybiBmcmFtZVZpZXctPmhv
c3RXaW5kb3coKS0+cGxhdGZvcm1XaW5kb3coKTsKK30KKworCiBib29sIFJlbmRlclRoZW1lV3g6
OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRh
dGEmIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
aWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
CiB7CkBAIC0yNTEsMTAgKzI2MSwyMyBAQAogCiBib29sIFJlbmRlclRoZW1lV3g6OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCiB7Ci0gICAgd3hXaW5kb3cqIHdpbmRvdyA9IG8tPnZpZXcoKS0+ZnJh
bWVWaWV3KCktPnBsYXRmb3JtV2lkZ2V0KCk7CisgICAgd3hXaW5kb3cqIHdpbmRvdyA9IG5hdGl2
ZVdpbmRvd0ZvclJlbmRlck9iamVjdChvKTsKICAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4
REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBpbnQgZmxhZ3MgPSAwOwog
ICAgIAorICAgIEludFJlY3QgcmVjdCA9IHI7IAorCisjaWYgVVNFKFdYR0MpCisgICAgZG91Ymxl
IHh0cmFucyA9IDA7CisgICAgZG91YmxlIHl0cmFucyA9IDA7CisgICAgCisgICAgd3hHQ0RDKiBn
Y2RjID0gc3RhdGljX2Nhc3Q8d3hHQ0RDKj4oZGMpOworICAgIHd4R3JhcGhpY3NDb250ZXh0KiBn
YyA9IGdjZGMtPkdldEdyYXBoaWNzQ29udGV4dCgpOworICAgIGdjLT5HZXRUcmFuc2Zvcm0oKS5U
cmFuc2Zvcm1Qb2ludCgmeHRyYW5zLCAmeXRyYW5zKTsKKyAgICByZWN0LnNldFgoci54KCkgKyAo
aW50KXh0cmFucyk7CisgICAgcmVjdC5zZXRZKHIueSgpICsgKGludCl5dHJhbnMpOworI2VuZGlm
CisKICAgICBpZiAoIWlzRW5hYmxlZChvKSkKICAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0RJ
U0FCTEVEOwogCkBAIC0yNjYsMjAgKzI4OSwyMCBAQAogICAgICAgICBmbGFncyB8PSB3eENPTlRS
T0xfUFJFU1NFRDsKICAgICAKICAgICBpZiAocGFydCA9PSBQdXNoQnV0dG9uUGFydCB8fCBwYXJ0
ID09IEJ1dHRvblBhcnQpCi0gICAgICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdQdXNo
QnV0dG9uKHdpbmRvdywgKmRjLCByLCBmbGFncyk7CisgICAgICAgIHd4UmVuZGVyZXJOYXRpdmU6
OkdldCgpLkRyYXdQdXNoQnV0dG9uKHdpbmRvdywgKmRjLCByZWN0LCBmbGFncyk7CiAgICAgZWxz
ZSBpZihwYXJ0ID09IFJhZGlvUGFydCkgewogICAgICAgICBpZiAoaXNDaGVja2VkKG8pKQogICAg
ICAgICAgICAgZmxhZ3MgfD0gd3hDT05UUk9MX0NIRUNLRUQ7CiAjaWYgd3hDSEVDS19WRVJTSU9O
KDIsOSwwKQotICAgICAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3UmFkaW9CdXR0b24o
d2luZG93LCAqZGMsIHIsIGZsYWdzKTsKKyAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCku
RHJhd1JhZGlvQnV0dG9uKHdpbmRvdywgKmRjLCByZWN0LCBmbGFncyk7CiAjZWxzZQotICAgICAg
ICB3eFJlbmRlcmVyX0RyYXdSYWRpb0J1dHRvbih3aW5kb3csICpkYywgciwgZmxhZ3MpOworICAg
ICAgICB3eFJlbmRlcmVyX0RyYXdSYWRpb0J1dHRvbih3aW5kb3csICpkYywgcmVjdCwgZmxhZ3Mp
OwogI2VuZGlmCiAgICAgfQogICAgIGVsc2UgaWYocGFydCA9PSBDaGVja2JveFBhcnQpIHsKICAg
ICAgICAgaWYgKGlzQ2hlY2tlZChvKSkKICAgICAgICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9D
SEVDS0VEOwotICAgICAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5EcmF3Q2hlY2tCb3god2lu
ZG93LCAqZGMsIHIsIGZsYWdzKTsKKyAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJh
d0NoZWNrQm94KHdpbmRvdywgKmRjLCByZWN0LCBmbGFncyk7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTI5MSw3ICszMTQsNyBAQAogCiBib29sIFJlbmRlclRoZW1lV3g6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgd3hXaW5kb3cqIHdpbmRvdyA9IG8tPnZpZXco
KS0+ZnJhbWVWaWV3KCktPnBsYXRmb3JtV2lkZ2V0KCk7CisgICAgd3hXaW5kb3cqIHdpbmRvdyA9
IG5hdGl2ZVdpbmRvd0ZvclJlbmRlck9iamVjdChvKTsKICAgICB3eERDKiBkYyA9IHN0YXRpY19j
YXN0PHd4REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICNpZiB3eENIRUNLX1ZF
UlNJT04oMiw5LDApCiAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd1RleHRDdHJsKHdp
bmRvdywgKmRjLCByLCAwKTsKQEAgLTMxMyw3ICszMzYsNyBAQAogICAgIAogYm9vbCBSZW5kZXJU
aGVtZVd4OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgd3hXaW5kb3cqIHdpbmRv
dyA9IG8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPnBsYXRmb3JtV2lkZ2V0KCk7CisgICAgd3hXaW5k
b3cqIHdpbmRvdyA9IG5hdGl2ZVdpbmRvd0ZvclJlbmRlck9iamVjdChvKTsKICAgICB3eERDKiBk
YyA9IHN0YXRpY19jYXN0PHd4REMqPihpLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICAKICAgICBpbnQgZmxhZ3MgPSAwOyAgICAgIApAQCAtMzQyLDcgKzM2NSw3IEBACiAgICAgCiBi
b29sIFJlbmRlclRoZW1lV3g6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKIHsKLSAg
ICB3eFdpbmRvdyogd2luZG93ID0gby0+dmlldygpLT5mcmFtZVZpZXcoKS0+cGxhdGZvcm1XaWRn
ZXQoKTsKKyAgICB3eFdpbmRvdyogd2luZG93ID0gbmF0aXZlV2luZG93Rm9yUmVuZGVyT2JqZWN0
KG8pOwogICAgIHd4REMqIGRjID0gc3RhdGljX2Nhc3Q8d3hEQyo+KGkuY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIAogICAgIGludCBmbGFncyA9IDA7ICAgICAgCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVXeC5oIgorCisj
aW5jbHVkZSAiSG9zdFdpbmRvdy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVk
ZSAic2Nyb2xsYmFyX3JlbmRlci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9zaXRl
LmgiCisjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgorCisjaW5jbHVkZSA8d3gvZGVmcy5oPgorI2lu
Y2x1ZGUgPHd4L3NldHRpbmdzLmg+CisKK2NvbnN0IGludCBjTWFjQnV0dG9uT3ZlcmxhcCA9IDQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1l
OjpuYXRpdmVUaGVtZSgpCit7CisgICAgc3RhdGljIFNjcm9sbGJhclRoZW1lV3ggdGhlbWU7Cisg
ICAgcmV0dXJuICZ0aGVtZTsKK30KKworU2Nyb2xsYmFyVGhlbWVXeDo6flNjcm9sbGJhclRoZW1l
V3goKQoreworfQorCitpbnQgU2Nyb2xsYmFyVGhlbWVXeDo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNj
cm9sbGJhckNvbnRyb2xTaXplIHNpemUpCit7CisgICAgaW50IHRoaWNrbmVzcyA9IHd4U3lzdGVt
U2V0dGluZ3M6OkdldE1ldHJpYyh3eFNZU19WU0NST0xMX1gpOworICAgIAorICAgIC8vIGZhbGxi
YWNrIGZvciB3aGVuIGEgcGxhdGZvcm0gZG9lc24ndCBkZWZpbmUgdGhpcyBtZXRyaWMKKyAgICBp
ZiAodGhpY2tuZXNzIDw9IDApCisgICAgICAgIHRoaWNrbmVzcyA9IDIwOworICAgIAorICAgIHJl
dHVybiB0aGlja25lc3M7Cit9CisKK2Jvb2wgU2Nyb2xsYmFyVGhlbWVXeDo6aGFzVGh1bWIoU2Ny
b2xsYmFyKiBzY3JvbGxiYXIpCit7CisgICAgLy8gVGhpcyBtZXRob2QgaXMganVzdCBjYWxsZWQg
YXMgYSBwYWludC10aW1lIG9wdGltaXphdGlvbiB0byBzZWUgaWYKKyAgICAvLyBwYWludGluZyB0
aGUgdGh1bWIgY2FuIGJlIHNraXBwZWQuICBXZSBkb24ndCBoYXZlIHRvIGJlIGV4YWN0IGhlcmUu
CisgICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikgPiAwOworfQorCitJbnRTaXplIFNj
cm9sbGJhclRoZW1lV3g6OmJ1dHRvblNpemUoU2Nyb2xsYmFyKikgCit7CisjaWZkZWYgX19XWE1B
Q19fCisgICAgcmV0dXJuIEludFNpemUoMjAsMjApOworI2Vsc2UKKyAgICByZXR1cm4gSW50U2l6
ZSgxNiwxNik7CisjZW5kaWYKK30KKworCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OmJhY2tC
dXR0b25SZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wp
Cit7CisgICAgLy8gRklYTUU6IEhhbmRsaW5nIHRoaXMgY2FzZSBpcyBuZWVkZWQgd2hlbiB0aGVy
ZSBhcmUgdHdvIHNldHMgb2YgYXJyb3cgYnV0dG9ucworICAgIC8vIG9uIE1hYywgb25lIGF0IHRo
ZSB0b3AgYW5kIG9uZSBhdCB0aGUgYm90dG9tLgorICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25F
bmRQYXJ0KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50U2l6ZSBzaXplID0g
YnV0dG9uU2l6ZShzY3JvbGxiYXIpOworICAgIGludCB4ID0gc2Nyb2xsYmFyLT54KCk7CisgICAg
aW50IHkgPSBzY3JvbGxiYXItPnkoKTsKKyAgICAKKyNpZiBfX1dYTUFDX18KKyAgICBpZiAoc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHgg
Kz0gc2Nyb2xsYmFyLT53aWR0aCgpIC0gKHNpemUud2lkdGgoKSAqIDIpICsgY01hY0J1dHRvbk92
ZXJsYXA7CisgICAgZWxzZQorICAgICAgICB5ICs9IHNjcm9sbGJhci0+aGVpZ2h0KCkgLSAoc2l6
ZS5oZWlnaHQoKSAqIDIpICsgY01hY0J1dHRvbk92ZXJsYXA7CisjZW5kaWYKKyAgICAKKyAgICBy
ZXR1cm4gSW50UmVjdCh4LCB5LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworfQorCitJ
bnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wpCit7CisgICAgLy8gRklYTUU6IEhhbmRs
aW5nIHRoaXMgY2FzZSBpcyBuZWVkZWQgd2hlbiB0aGVyZSBhcmUgdHdvIHNldHMgb2YgYXJyb3cg
YnV0dG9ucworICAgIC8vIG9uIE1hYywgb25lIGF0IHRoZSB0b3AgYW5kIG9uZSBhdCB0aGUgYm90
dG9tLgorICAgIGlmIChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpCisgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CisKKyAgICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplKHNjcm9sbGJh
cik7CisgICAgaW50IHgsIHk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSB7CisgICAgICAgIHggPSBzY3JvbGxiYXItPngoKSArIHNjcm9s
bGJhci0+d2lkdGgoKSAtIHNpemUud2lkdGgoKTsKKyAgICAgICAgeSA9IHNjcm9sbGJhci0+eSgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIHggPSBzY3JvbGxiYXItPngoKTsKKyAgICAgICAgeSA9
IHNjcm9sbGJhci0+eSgpICsgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCk7Cisg
ICAgfQorICAgIHJldHVybiBJbnRSZWN0KHgsIHksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7Cit9CisKK0ludFJlY3QgU2Nyb2xsYmFyVGhlbWVXeDo6dHJhY2tSZWN0KFNjcm9sbGJhciog
c2Nyb2xsYmFyLCBib29sKQoreworICAgIEludFNpemUgYnMgPSBidXR0b25TaXplKHNjcm9sbGJh
cik7CisgICAgaW50IHRyYWNrU3RhcnQgPSAwOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0
aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgdHJhY2tTdGFydCA9IGJzLndp
ZHRoKCk7CisgICAgZWxzZQorICAgICAgICB0cmFja1N0YXJ0ID0gYnMuaGVpZ2h0KCk7CisgICAg
ICAgIAorI2lmIF9fV1hNQUNfXworICAgIHRyYWNrU3RhcnQgPSAwOworI2VuZGlmCisgICAgCisg
ICAgaW50IHRoaWNrbmVzcyA9IHNjcm9sbGJhclRoaWNrbmVzcyhzY3JvbGxiYXItPmNvbnRyb2xT
aXplKCkpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgeworICAgICAgICBpZiAoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHRoaWNrbmVz
cykKKyAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CisgICAgICAgIHJldHVybiBJbnRSZWN0
KHNjcm9sbGJhci0+eCgpICsgdHJhY2tTdGFydCwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+
d2lkdGgoKSAtIDIgKiBicy53aWR0aCgpLCB0aGlja25lc3MpOworICAgIH0KKyAgICBpZiAoc2Ny
b2xsYmFyLT5oZWlnaHQoKSA8IDIgKiB0aGlja25lc3MpCisgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7CisgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJhci0+eSgpICsg
dHJhY2tTdGFydCwgdGhpY2tuZXNzLCBzY3JvbGxiYXItPmhlaWdodCgpIC0gMiAqIGJzLmhlaWdo
dCgpKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZVd4OjpwYWludFNjcm9sbENvcm5lcihTY3Jv
bGxWaWV3KiB2aWV3LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGNv
cm5lclJlY3QpCit7CisgICAgLy8gU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGU6OnBhaW50U2Nyb2xs
Q29ybmVyIGluY29ycmVjdGx5IGFzc3VtZXMgdGhhdCB0aGUKKyAgICAvLyBTY3JvbGxWaWV3IGlz
IGEgRnJhbWVWaWV3IChzZWUgRnJhbWVsZXNzU2Nyb2xsVmlldyksIHNvIHdlIGNhbm5vdCBsZXQK
KyAgICAvLyB0aGF0IGNvZGUgcnVuLiAgRm9yIEZyYW1lVmlldydzIHRoaXMgaXMgY29ycmVjdCBz
aW5jZSB3ZSBkb24ndCBkbyBjdXN0b20KKyAgICAvLyBzY3JvbGxiYXIgY29ybmVyIHJlbmRlcmlu
Zywgd2hpY2ggU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgc3VwcG9ydHMuCisgICAgU2Nyb2xsYmFy
VGhlbWU6OnBhaW50U2Nyb2xsQ29ybmVyKHZpZXcsIGNvbnRleHQsIGNvcm5lclJlY3QpOworfQor
Citib29sIFNjcm9sbGJhclRoZW1lV3g6OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgd3hPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiA9IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhcikgPyB3eEhPUklaT05UQUwgOiB3eFZFUlRJQ0FMOworICAgIGludCBmbGFn
cyA9IDA7CisgICAgaWYgKHNjcm9sbGJhci0+Y2xpZW50KCktPmlzQWN0aXZlKCkpCisgICAgICAg
IGZsYWdzIHw9IHd4Q09OVFJPTF9GT0NVU0VEOworICAgIAorICAgIGlmICghc2Nyb2xsYmFyLT5l
bmFibGVkKCkpCisgICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9ESVNBQkxFRDsKKyAgICAKKyAg
ICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4REMqPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSk7CisgICAgCisgICAgY29udGV4dC0+c2F2ZSgpOworICAgIFNjcm9sbFZpZXcqIHJvb3QgPSBz
Y3JvbGxiYXItPnJvb3QoKTsKKyAgICBBU1NFUlQocm9vdCk7CisgICAgaWYgKCFyb290KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgd3hXaW5kb3cqIHdlYnZpZXcgPSByb290LT5o
b3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCk7IAorICAgIAorICAgIHd4UmVuZGVyZXJfRHJh
d1Njcm9sbGJhcih3ZWJ2aWV3LCAqZGMsIHNjcm9sbGJhci0+ZnJhbWVSZWN0KCksIG9yaWVudGF0
aW9uLCBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSwgc3RhdGljX2Nhc3Q8d3hTY3JvbGxiYXJQYXJ0
PihzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkpLCAgICAKKyAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHd4U2Nyb2xsYmFyUGFydD4oc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpKSwgc2Ny
b2xsYmFyLT5tYXhpbXVtKCksIHNjcm9sbGJhci0+cGFnZVN0ZXAoKSwgZmxhZ3MpOworCisgICAg
Y29udGV4dC0+cmVzdG9yZSgpOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBTY3JvbGxiYXJUaGVtZVd4X2gKKyNkZWZpbmUgU2Nyb2xsYmFyVGhlbWVXeF9oCisKKyNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ29tcG9z
aXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2Nyb2xsYmFyVGhlbWVXeCA6
IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+
U2Nyb2xsYmFyVGhlbWVXeCgpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbGJhclRoaWNrbmVzcyhT
Y3JvbGxiYXJDb250cm9sU2l6ZSA9IFJlZ3VsYXJTY3JvbGxiYXIpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludChTY3JvbGxiYXIqLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRTY3JvbGxDb3JuZXIoU2Nyb2xsVmlldyosIEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmIGNvcm5lclJlY3QpOworICAgIAorcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciopIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyKik7CisKKyAgICB2aXJ0dWFsIElu
dFNpemUgYnV0dG9uU2l6ZShTY3JvbGxiYXIqKTsKKworICAgIHZpcnR1YWwgSW50UmVjdCBiYWNr
QnV0dG9uUmVjdChTY3JvbGxiYXIqLCBTY3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFs
c2UpOworICAgIHZpcnR1YWwgSW50UmVjdCBmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXIqLCBT
Y3JvbGxiYXJQYXJ0LCBib29sIHBhaW50aW5nID0gZmFsc2UpOworICAgIHZpcnR1YWwgSW50UmVj
dCB0cmFja1JlY3QoU2Nyb2xsYmFyKiwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKK307CisKK30K
KyNlbmRpZgpJbmRleDogV2ViQ29yZS93ZWJjb3JlLXd4LmJrbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dlYmNvcmUtd3guYmtsCShyZXZpc2lvbiA0Nzk5MikKKysrIFdlYkNvcmUvd2ViY29yZS13
eC5ia2wJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxNyArMTExLDIwIEBACiAgICAgICAgICAgICA8
aWYgY29uZD0iV1hfUE9SVD09J2d0azInIj4KICAgICAgICAgICAgICAgICBwbGF0Zm9ybS93eC93
eGNvZGUvZ3RrL2ZvbnRwcm9wcy5jcHAKICAgICAgICAgICAgICAgICBwbGF0Zm9ybS93eC93eGNv
ZGUvZ3RrL25vbi1rZXJuZWQtZHJhd2luZy5jcHAKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS93
eC93eGNvZGUvZ3RrL3Njcm9sbGJhcl9yZW5kZXIuY3BwCiAgICAgICAgICAgICAgICAgcGxhdGZv
cm0vd3gvU2hhcmVkVGltZXJXeC5jcHAKICAgICAgICAgICAgIDwvaWY+CiAgICAgICAgICAgICA8
aWYgY29uZD0iUExBVEZPUk1fT1M9PSdtYWMnIj4KICAgICAgICAgICAgICAgICBwbGF0Zm9ybS9t
YWMvUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcAogICAgICAgICAgICAgICAgIHBsYXRmb3JtL3d4L3d4
Y29kZS9tYWMvY2FyYm9uL2ZvbnRwcm9wcy5jcHAKICAgICAgICAgICAgICAgICBwbGF0Zm9ybS93
eC93eGNvZGUvbWFjL2NhcmJvbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCisgICAgICAgICAgICAg
ICAgcGxhdGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24vc2Nyb2xsYmFyX3JlbmRlci5jcHAKICAg
ICAgICAgICAgICAgICBwbGF0Zm9ybS93eC9TaGFyZWRUaW1lcld4LmNwcAogICAgICAgICAgICAg
PC9pZj4KICAgICAgICAgICAgIDxpZiBjb25kPSJXWF9QT1JUPT0nbXN3JyI+CiAgICAgICAgICAg
ICAgICAgcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9mb250cHJvcHMuY3BwCiAgICAgICAgICAgICAg
ICAgcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9ub24ta2VybmVkLWRyYXdpbmcuY3BwCisgICAgICAg
ICAgICAgICAgcGxhdGZvcm0vd3gvd3hjb2RlL3dpbi9zY3JvbGxiYXJfcmVuZGVyLmNwcAogICAg
ICAgICAgICAgICAgIDwhLS0gZ3JhYiB0aGUgd2luZG93cyBwb3J0J3MgU2hhcmVkVGltZXIgaW1w
bGVtZW50YXRpb24gLS0+CiAgICAgICAgICAgICAgICAgcGxhdGZvcm0vd2luL1NoYXJlZFRpbWVy
V2luLmNwcAogICAgICAgICAgICAgICAgIHBhZ2Uvd2luL1BhZ2VXaW4uY3BwCkluZGV4OiBXZWJL
aXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA0ODAwNCkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDA5LTA5LTAyICBLZXZpbiBXYXR0ZXJzICA8a2V2aW53YXR0ZXJz
QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbd3hdIEZyYW1lcyBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTA0MQorCisgICAgICAgICogd3gvYnVpbGQtd3h3ZWJraXQ6CisK
IDIwMDktMDktMDIgIExhdXJlbnQgQ2VydmVhdSAgPGxjZXJ2ZWF1QG1lLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCkluZGV4OiBXZWJLaXRUb29scy93eC9idWlsZC13
eHdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy93eC9idWlsZC13eHdlYmtpdAkocmV2
aXNpb24gNDc5OTIpCisrKyBXZWJLaXRUb29scy93eC9idWlsZC13eHdlYmtpdAkod29ya2luZyBj
b3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBACiAgICAgICAgICAgICAgICAgUFlfTElCRElSPWBweXRo
b24gLWMgImltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyBpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0
LndyaXRlKGRpc3R1dGlscy5zeXNjb25maWcuUFJFRklYKSJgCiAgICAgICAgICAgICAgICAgUFlf
TElCRElSPSIkUFlfTElCRElSXFxMaWJzIgogICAgICAgICAgICAgICAgIFBZX0xJQj1gcHl0aG9u
IC1jICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCdweXRob24nICsgc3lzLnZlcnNpb25b
OjNdKSJgCi0gICAgICAgICAgICAgICAgUFlfTElCPWBweXRob24gLWMgInN5cy5zdGRvdXQud3Jp
dGUoJyRQWV9MSUInLnJlcGxhY2UoJy4nLCAnJykpImAKKyAgICAgICAgICAgICAgICBQWV9MSUI9
YHB5dGhvbiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgnJFBZX0xJQicucmVwbGFj
ZSgnLicsICcnKSkiYAogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIFBZX0xJQj1g
cHl0aG9uLWNvbmZpZyAtLWxpYnNgCiAgICAgICAgICAgICAgICAgUFlfTElCRElSPWBweXRob24t
Y29uZmlnIC0tbGRmbGFnc2AK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39001</attachid>
            <date>2009-09-03 12:15:27 -0700</date>
            <delta_ts>2009-09-03 12:18:46 -0700</delta_ts>
            <desc>finishes wx port frames support (revised)</desc>
            <filename>frames_final4.patch</filename>
            <type>text/plain</type>
            <size>67635</size>
            <attacher name="Kevin Watters">kevinwatters</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3gu
Y3BwCShyZXZpc2lvbiA0ODAyNCkKKysrIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMCArNDgsMTMgQEAKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAogI2luY2x1ZGUg
IldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlldy5oIgogI2luY2x1ZGUgIldlYlZpZXdQcml2YXRlLmgiCiAKQEAgLTc3LDcgKzgwLDcgQEAK
IH0KIAogRnJhbWVMb2FkZXJDbGllbnRXeDo6RnJhbWVMb2FkZXJDbGllbnRXeCgpCi0gICAgOiBt
X2ZyYW1lKDApCisgICAgOiBtX3dlYkZyYW1lKDApCiB7CiB9CiAKQEAgLTg2LDkgKzg5LDEwIEBA
CiB7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6c2V0RnJhbWUoRnJhbWUgKmZyYW1l
KQordm9pZCBGcmFtZUxvYWRlckNsaWVudFd4OjpzZXRGcmFtZSh3eFdlYkZyYW1lICpmcmFtZSkK
IHsKLSAgICBtX2ZyYW1lID0gZnJhbWU7CisgICAgbV93ZWJGcmFtZSA9IGZyYW1lOworICAgIG1f
ZnJhbWUgPSBtX3dlYkZyYW1lLT5tX2ltcGwtPmZyYW1lOwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50V3g6OnNldFdlYlZpZXcod3hXZWJWaWV3ICp3ZWJ2aWV3KQpAQCAtOTYsMTEgKzEwMCw2
IEBACiAgICAgbV93ZWJWaWV3ID0gd2VidmlldzsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVu
dFd4OjpkZXRhY2hGcmFtZUxvYWRlcigpCi17Ci0gICAgbV9mcmFtZSA9IDA7Ci19Ci0KIGJvb2wg
RnJhbWVMb2FkZXJDbGllbnRXeDo6aGFzV2ViVmlldygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
d2ViVmlldyAhPSBOVUxMOwpAQCAtMzM5LDcgKzMzOCw3IEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KQogewog
ICAgIC8vIEZJWE1FOiBTZW5kIGFuIGV2ZW50IHRvIGFsbG93IGZvciBhbGVydHMgYW5kIGNhbmNl
bGxhdGlvbgotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fd2ViRnJhbWUpCiAgICAgICAg
IHJldHVybjsKICAgICAobV9mcmFtZS0+bG9hZGVyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsK
IH0KQEAgLTUwNSw2ICs1MDQsOSBAQAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50V3g6OmZyYW1l
TG9hZGVyRGVzdHJveWVkKCkKIHsKKyAgICBpZiAobV93ZWJGcmFtZSkKKyAgICAgICAgZGVsZXRl
IG1fd2ViRnJhbWU7CisgICAgbV93ZWJGcmFtZSA9IDA7CiAgICAgbV9mcmFtZSA9IDA7CiAgICAg
ZGVsZXRlIHRoaXM7CiB9CkBAIC01NTMsNyArNTU1LDcgQEAKIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudFd4Ojpjb21taXR0ZWRMb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlm
ICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogICAgIEZyYW1lTG9hZGVyKiBmbCA9IGxv
YWRlci0+ZnJhbWVMb2FkZXIoKTsKICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0
RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKQEAgLTY5Myw3ICs2OTUsNyBAQAogCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xp
Y3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgU3RyaW5nJiBtaW1ldHlwZSwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGlmICghbV9mcmFtZSkKKyAgICBpZiAoIW1fd2Vi
RnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAt
NzAyLDcgKzcwNCw3IEBACiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwg
Y29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcmIHRhcmdldE5hbWUpCiB7Ci0gICAg
aWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKG1fd2ViVmlldykgewpAQCAtNzIyLDcgKzcyNCw3IEBACiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRXeDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1l
UG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIGFjdGlvbiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCiB7
Ci0gICAgaWYgKCFtX2ZyYW1lKQorICAgIGlmICghbV93ZWJGcmFtZSkKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKICAgICBpZiAobV93ZWJWaWV3KSB7CkBAIC03NTIsNTYgKzc1NCwzNCBAQAog
UGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRXeDo6Y3JlYXRlRnJhbWUoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3du
ZXJFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHJlZmVycmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQg
bWFyZ2luSGVpZ2h0KQogewotLyoKLSAgICBGSVhNRTogVGVtcG9yYXJpbHkgZGlzYWJsaW5nIGNv
ZGUgZm9yIGxvYWRpbmcgc3ViZnJhbWVzLiBXaGlsZSBtb3N0IAotICAgIChpKWZyYW1lcyBsb2Fk
IGFuZCBhcmUgZGVzdHJveWVkIHByb3Blcmx5LCB0aGUgaWZyYW1lIGNyZWF0ZWQgYnkKLSAgICBn
b29nbGUuY29tIGluIGl0cyBuZXcgaG9tZXBhZ2UgZG9lcyBub3QgZ2V0IGRlc3Ryb3llZCB3aGVu
IAotICAgIGRvY3VtZW50KCktPmRldGFjaCgpIGlzIGNhbGxlZCwgYXMgb3RoZXIgKGkpZnJhbWVz
IGRvLiBJdCBpcyBkZXN0cm95ZWQgb24gCi0gICAgYXBwIHNodXRkb3duLCBidXQgdW50aWwgdGhh
dCBwb2ludCwgdGhpcyAnaW4gbGltYm8nIGZyYW1lIHdpbGwgZG8gdGhpbmdzCi0gICAgbGlrZSBz
dGVhbCBrZXlib2FyZCBmb2N1cyBhbmQgY3Jhc2ggd2hlbiBjbGlja2VkIG9uLiAoT24gc29tZSBw
bGF0Zm9ybXMsCi0gICAgaXQgaXMgYWN0dWFsbHkgYSB2aXNpYmxlIG9iamVjdCwgZXZlbiB0aG91
Z2ggaXQncyBub3QgaW4gYSB2YWxpZCBzdGF0ZS4pCi0gICAgCi0gICAgU2luY2UganVzdCBhYm91
dCBldmVyeSB1c2VyIGlzIHByb2JhYmx5IGdvaW5nIHRvIHRlc3QgYWdhaW5zdCBHb29nbGUgYXQg
Ci0gICAgc29tZSBwb2ludCwgSSdtIGRpc2FibGluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgdW50aWwg
SSBoYXZlIHRpbWUgdG8gdHJhY2sgZG93bgotICAgIHdoeSBpdCBpcyBub3QgYmVpbmcgZGVzdHJv
eWVkLgotKi8KLQotLyoKLSAgICB3eFdpbmRvdyogcGFyZW50ID0gbV93ZWJWaWV3OwotCiAgICAg
V2ViVmlld0ZyYW1lRGF0YSogZGF0YSA9IG5ldyBXZWJWaWV3RnJhbWVEYXRhKCk7CiAgICAgZGF0
YS0+bmFtZSA9IG5hbWU7CiAgICAgZGF0YS0+b3duZXJFbGVtZW50ID0gb3duZXJFbGVtZW50Owog
ICAgIGRhdGEtPnVybCA9IHVybDsKICAgICBkYXRhLT5yZWZlcnJlciA9IHJlZmVycmVyOworICAg
IGRhdGEtPmFsbG93c1Njcm9sbGluZyA9IGFsbG93c1Njcm9sbGluZzsKICAgICBkYXRhLT5tYXJn
aW5XaWR0aCA9IG1hcmdpbldpZHRoOwogICAgIGRhdGEtPm1hcmdpbkhlaWdodCA9IG1hcmdpbkhl
aWdodDsKIAotICAgIHd4V2ViVmlldyogbmV3V2luID0gbmV3IHd4V2ViVmlldyhwYXJlbnQsIC0x
LCB3eERlZmF1bHRQb3NpdGlvbiwgd3hEZWZhdWx0U2l6ZSwgZGF0YSk7CisgICAgd3hXZWJGcmFt
ZSogbmV3RnJhbWUgPSBuZXcgd3hXZWJGcmFtZShtX3dlYlZpZXcsIG1fd2ViRnJhbWUsIGRhdGEp
OwogCi0gICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gbmV3V2luLT5tX2ltcGwtPmZyYW1l
OworICAgIFJlZlB0cjxGcmFtZT4gY2hpbGRGcmFtZSA9IGFkb3B0UmVmKG5ld0ZyYW1lLT5tX2lt
cGwtPmZyYW1lKTsKIAotICAgIC8vIEZJWE1FOiBBbGwgb2YgdGhlIGJlbG93IHNob3VsZCBwcm9i
YWJseSBiZSBtb3ZlZCBvdmVyIGludG8gV2ViQ29yZQotICAgIGNoaWxkRnJhbWUtPnRyZWUoKS0+
c2V0TmFtZShuYW1lKTsKICAgICBtX2ZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkRnJh
bWUpOwotICAgIC8vICMjIyBzZXQgb3ZlcnJpZGUgZW5jb2RpbmcgaWYgd2UgaGF2ZSBvbmUKKyAg
ICBjaGlsZEZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7CisgICAgY2hpbGRGcmFtZS0+aW5p
dCgpOwogCi0gICAgRnJhbWVMb2FkVHlwZSBsb2FkVHlwZSA9IG1fZnJhbWUtPmxvYWRlcigpLT5s
b2FkVHlwZSgpOwotICAgIEZyYW1lTG9hZFR5cGUgY2hpbGRMb2FkVHlwZSA9IEZyYW1lTG9hZFR5
cGVJbnRlcm5hbDsKKyAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1
biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJl
YWR5LgorICAgIGlmICghY2hpbGRGcmFtZS0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5sb2FkKHVybCwgcmVmZXJyZXIsIGNoaWxkTG9hZFR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nKCksIDAsIDApOworICAgIGNo
aWxkRnJhbWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwg
Y2hpbGRGcmFtZS5nZXQoKSk7CiAgICAgCiAgICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRs
ZXIgbWF5IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KICAgICBpZiAoIWNoaWxk
RnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGRl
bGV0ZSBkYXRhOwotICAgIAotICAgIHJldHVybiBjaGlsZEZyYW1lLmdldCgpOwotKi8KLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBjaGlsZEZyYW1lLnJl
bGVhc2UoKTsKIH0KIAogT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRXeDo6b2Jq
ZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQpA
QCAtODgwLDI5ICs4NjAsMTkgQEAKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudFd4Ojp0cmFuc2l0
aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKIHsgCisgICAgQVNTRVJUKG1fd2ViRnJhbWUpOwog
ICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBBU1NFUlQobV93ZWJWaWV3KTsKICAgICAKLSAgICBQ
YWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwotICAgIEFTU0VSVChwYWdlKTsKLQotICAgIGJv
b2wgaXNNYWluRnJhbWUgPSBtX2ZyYW1lID09IHBhZ2UtPm1haW5GcmFtZSgpOwotCi0gICAgbV9m
cmFtZS0+c2V0VmlldygwKTsKLQotICAgIFJlZlB0cjxGcmFtZVZpZXc+IGZyYW1lVmlldzsKLSAg
ICBpZiAoaXNNYWluRnJhbWUpCi0gICAgICAgIGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRl
KG1fZnJhbWUsIEludFJlY3QobV93ZWJWaWV3LT5HZXRSZWN0KCkpLnNpemUoKSk7Ci0gICAgZWxz
ZQotICAgICAgICBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShtX2ZyYW1lKTsKLQotICAg
IEFTU0VSVChmcmFtZVZpZXcpOwotICAgIG1fZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKLQot
ICAgIGZyYW1lVmlldy0+c2V0UGxhdGZvcm1XaWRnZXQobV93ZWJWaWV3KTsKLQotICAgIGlmIChI
VE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpCi0g
ICAgICAgIG1fZnJhbWUtPnZpZXcoKS0+c2V0U2Nyb2xsYmFyTW9kZXMob3duZXItPnNjcm9sbGlu
Z01vZGUoKSwgb3duZXItPnNjcm9sbGluZ01vZGUoKSk7CisgICAgSW50U2l6ZSBzaXplID0gSW50
UmVjdChtX3dlYlZpZXctPkdldFJlY3QoKSkuc2l6ZSgpOworICAgIC8vIEZJWE1FOiBUaGlzIHZh
bHVlIHNob3VsZCBiZSBnb3R0ZW4gZnJvbSBtX3dlYlZpZXctPklzVHJhbnNwYXJlbnQoKTsKKyAg
ICAvLyBidXQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpIGNhbiBiZSBjYWxsZWQg
d2hpbGUgbV93ZWJWaWV3IGlzCisgICAgLy8gc3RpbGwgYmVpbmcgaW5pdGlhbGl6ZWQuCisgICAg
Ym9vbCB0cmFuc3BhcmVudCA9IGZhbHNlOworICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHRy
YW5zcGFyZW50ID8gV2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50IDogV2ViQ29yZTo6Q29sb3I6
OndoaXRlOworICAgIAorICAgIGlmIChtX2ZyYW1lKQorICAgICAgICBtX2ZyYW1lLT5jcmVhdGVW
aWV3KHNpemUsIGJhY2tncm91bmRDb2xvciwgdHJhbnNwYXJlbnQsIEludFNpemUoKSwgZmFsc2Up
OyAKIH0KIAogfQpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvRWRpdG9yQ2xpZW50V3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0VkaXRvckNsaWVudFd4
LmNwcAkocmV2aXNpb24gNDgwMjQpCisrKyBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9FZGl0b3JD
bGllbnRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgIEZyYW1l
KiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
OwogCiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHlu
YW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOwor
ICAgICAgICB3eFdlYlZpZXcqIHdlYktpdFdpbiA9IGR5bmFtaWNfY2FzdDx3eFdlYlZpZXcqPihm
cmFtZS0+dmlldygpLT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkpOwogICAgICAgICBp
ZiAod2ViS2l0V2luKSAKICAgICAgICAgICAgIHJldHVybiB3ZWJLaXRXaW4tPklzRWRpdGFibGUo
KTsKICAgICB9CkBAIC0yODUsOSArMjg1LDkgQEAKICAgICBGcmFtZSogZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIGlmIChmcmFt
ZSkgewotICAgICAgICB3eFdlYlZpZXcqIHdlYktpdFdpbiA9IGR5bmFtaWNfY2FzdDx3eFdlYlZp
ZXcqPihmcmFtZS0+dmlldygpLT5wbGF0Zm9ybVdpZGdldCgpKTsKKyAgICAgICAgd3hXZWJWaWV3
KiB3ZWJLaXRXaW4gPSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+aG9z
dFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKICAgICAgICAgaWYgKHdlYktpdFdpbikgewot
ICAgICAgICAgICAgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT51bmRvU3RhY2su
YXBwZW5kKEVkaXRDb21tYW5kV3goY29tbWFuZCkpOworICAgICAgICAgICAgd2ViS2l0V2luLT5t
X2ltcGwtPnVuZG9TdGFjay5hcHBlbmQoRWRpdENvbW1hbmRXeChjb21tYW5kKSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC0yOTcsMTYgKzI5NywyNCBAQAogICAgIEZyYW1lKiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAgaWYg
KGZyYW1lKSB7Ci0gICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHluYW1pY19jYXN0PHd4
V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOworICAgICAgICB3eFdl
YlZpZXcqIHdlYktpdFdpbiA9IGR5bmFtaWNfY2FzdDx3eFdlYlZpZXcqPihmcmFtZS0+dmlldygp
LT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCkpOwogICAgICAgICBpZiAod2ViS2l0V2lu
KSB7Ci0gICAgICAgICAgICB3ZWJLaXRXaW4tPkdldE1haW5GcmFtZSgpLT5tX2ltcGwtPnJlZG9T
dGFjay5pbnNlcnQoMCwgRWRpdENvbW1hbmRXeChjb21tYW5kKSk7CisgICAgICAgICAgICB3ZWJL
aXRXaW4tPm1faW1wbC0+cmVkb1N0YWNrLmluc2VydCgwLCBFZGl0Q29tbWFuZFd4KGNvbW1hbmQp
KTsKICAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBFZGl0b3JDbGllbnRXeDo6Y2xlYXJVbmRv
UmVkb09wZXJhdGlvbnMoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgRnJhbWUqIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Cisg
ICAgCisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHlu
YW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZv
cm1XaW5kb3coKSk7CisgICAgICAgIGlmICh3ZWJLaXRXaW4pIHsKKyAgICAgICAgICAgIHdlYktp
dFdpbi0+bV9pbXBsLT5yZWRvU3RhY2suY2xlYXIoKTsKKyAgICAgICAgICAgIHdlYktpdFdpbi0+
bV9pbXBsLT51bmRvU3RhY2suY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogYm9vbCBF
ZGl0b3JDbGllbnRXeDo6Y2FuVW5kbygpIGNvbnN0CkBAIC0zMTQsOSArMzIyLDkgQEAKICAgICBG
cmFtZSogZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKIAogICAgIGlmIChmcmFtZSkgewotICAgICAgICB3eFdlYlZpZXcqIHdlYktpdFdpbiA9
IGR5bmFtaWNfY2FzdDx3eFdlYlZpZXcqPihmcmFtZS0+dmlldygpLT5wbGF0Zm9ybVdpZGdldCgp
KTsKLSAgICAgICAgaWYgKHdlYktpdFdpbiAmJiB3ZWJLaXRXaW4tPkdldE1haW5GcmFtZSgpKSB7
Ci0gICAgICAgICAgICByZXR1cm4gd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT51
bmRvU3RhY2suc2l6ZSgpICE9IDA7CisgICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHlu
YW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPmhvc3RXaW5kb3coKS0+cGxhdGZv
cm1XaW5kb3coKSk7CisgICAgICAgIGlmICh3ZWJLaXRXaW4pIHsKKyAgICAgICAgICAgIHJldHVy
biB3ZWJLaXRXaW4tPm1faW1wbC0+dW5kb1N0YWNrLnNpemUoKSAhPSAwOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTMyNyw5ICszMzUsOSBAQAogICAgIEZyYW1lKiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwog
CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHd4V2ViVmlldyogd2ViS2l0V2luID0gZHluYW1p
Y19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOwotICAg
ICAgICBpZiAod2ViS2l0V2luICYmIHdlYktpdFdpbi0+R2V0TWFpbkZyYW1lKCkpIHsKLSAgICAg
ICAgICAgIHJldHVybiB3ZWJLaXRXaW4tPkdldE1haW5GcmFtZSgpLT5tX2ltcGwtPnJlZG9TdGFj
ay5zaXplKCkgIT0gMDsKKyAgICAgICAgd3hXZWJWaWV3KiB3ZWJLaXRXaW4gPSBkeW5hbWljX2Nh
c3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRv
dygpKTsKKyAgICAgICAgaWYgKHdlYktpdFdpbiAmJiB3ZWJLaXRXaW4pIHsKKyAgICAgICAgICAg
IHJldHVybiB3ZWJLaXRXaW4tPm1faW1wbC0+cmVkb1N0YWNrLnNpemUoKSAhPSAwOwogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MCwxMCArMzQ4LDEwIEBACiAgICAg
RnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCk7CiAKICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgd3hXZWJWaWV3KiB3ZWJLaXRXaW4g
PSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+cGxhdGZvcm1XaWRnZXQo
KSk7Ci0gICAgICAgIGlmICh3ZWJLaXRXaW4gJiYgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKSkg
ewotICAgICAgICAgICAgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT51bmRvU3Rh
Y2subGFzdCgpLmVkaXRDb21tYW5kKCktPnVuYXBwbHkoKTsKLSAgICAgICAgICAgIHdlYktpdFdp
bi0+R2V0TWFpbkZyYW1lKCktPm1faW1wbC0+dW5kb1N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAg
ICAgd3hXZWJWaWV3KiB3ZWJLaXRXaW4gPSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUt
PnZpZXcoKS0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICAgICAgaWYgKHdl
YktpdFdpbikgeworICAgICAgICAgICAgd2ViS2l0V2luLT5tX2ltcGwtPnVuZG9TdGFjay5sYXN0
KCkuZWRpdENvbW1hbmQoKS0+dW5hcHBseSgpOworICAgICAgICAgICAgd2ViS2l0V2luLT5tX2lt
cGwtPnVuZG9TdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0zNTIs
MTEgKzM2MCwxMSBAQAogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lKSB7Ci0gICAgICAg
IHd4V2ViVmlldyogd2ViS2l0V2luID0gZHluYW1pY19jYXN0PHd4V2ViVmlldyo+KGZyYW1lLT52
aWV3KCktPnBsYXRmb3JtV2lkZ2V0KCkpOwotICAgICAgICBpZiAod2ViS2l0V2luICYmIHdlYktp
dFdpbi0+R2V0TWFpbkZyYW1lKCkpIHsKLSAgICAgICAgICAgIHdlYktpdFdpbi0+R2V0TWFpbkZy
YW1lKCktPm1faW1wbC0+cmVkb1N0YWNrLmZpcnN0KCkuZWRpdENvbW1hbmQoKS0+cmVhcHBseSgp
OwotICAgICAgICAgICAgd2ViS2l0V2luLT5HZXRNYWluRnJhbWUoKS0+bV9pbXBsLT5yZWRvU3Rh
Y2sucmVtb3ZlKDApOworICAgIGlmIChmcmFtZSkgeyAgICAKKyAgICAgICAgd3hXZWJWaWV3KiB3
ZWJLaXRXaW4gPSBkeW5hbWljX2Nhc3Q8d3hXZWJWaWV3Kj4oZnJhbWUtPnZpZXcoKS0+aG9zdFdp
bmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpKTsKKyAgICAgICAgaWYgKHdlYktpdFdpbikgeworICAg
ICAgICAgICAgd2ViS2l0V2luLT5tX2ltcGwtPnJlZG9TdGFjay5maXJzdCgpLmVkaXRDb21tYW5k
KCktPnJlYXBwbHkoKTsKKyAgICAgICAgICAgIHdlYktpdFdpbi0+bV9pbXBsLT5yZWRvU3RhY2su
cmVtb3ZlKDApOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogV2ViS2l0L3d4L1dlYktpdFN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93eC9XZWJL
aXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3guaAkocmV2aXNpb24gNDgwMjQpCisrKyBXZWJL
aXQvd3gvV2ViS2l0U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFd4LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgogCitjbGFzcyB3eFdlYkZyYW1lOwogY2xhc3Mgd3hXZWJWaWV3OwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC01MSw5ICs1Miw4IEBACiAgICAgcHVibGljOgogICAgICAgICBG
cmFtZUxvYWRlckNsaWVudFd4KCk7CiAgICAgICAgIH5GcmFtZUxvYWRlckNsaWVudFd4KCk7Ci0g
ICAgICAgIHZvaWQgc2V0RnJhbWUoRnJhbWUgKmZyYW1lKTsKKyAgICAgICAgdm9pZCBzZXRGcmFt
ZSh3eFdlYkZyYW1lICpmcmFtZSk7CiAgICAgICAgIHZvaWQgc2V0V2ViVmlldyh3eFdlYlZpZXcg
KndlYnZpZXcpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoRnJhbWVMb2FkZXIoKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OyAvLyBtYWlubHkgZm9yIGFz
c2VydGlvbnMKIApAQCAtMjA3LDcgKzIwNyw4IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4gPSB0cnVlKTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIEZyYW1lICptX2ZyYW1lOworICAgICAgICB3eFdlYkZyYW1lICptX3dlYkZy
YW1lOworICAgICAgICBGcmFtZSogbV9mcmFtZTsKICAgICAgICAgd3hXZWJWaWV3ICptX3dlYlZp
ZXc7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAgYm9vbCBt
X2ZpcnN0RGF0YTsKSW5kZXg6IFdlYktpdC93eC9XZWJLaXRTdXBwb3J0L0Nocm9tZUNsaWVudFd4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGllbnRX
eC5jcHAJKHJldmlzaW9uIDQ4MDI0KQorKysgV2ViS2l0L3d4L1dlYktpdFN1cHBvcnQvQ2hyb21l
Q2xpZW50V3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDcgQEAKIAogUGxhdGZv
cm1XaWRnZXQgQ2hyb21lQ2xpZW50V3g6OnBsYXRmb3JtV2luZG93KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbV93ZWJWaWV3OwogfQogCiB2b2lkIENocm9tZUNsaWVudFd4
Ojpjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CkBAIC0z
OTMsNiArMzkzLDcgQEAKIAogdm9pZCBDaHJvbWVDbGllbnRXeDo6c2Nyb2xsKGNvbnN0IEludFNp
emUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpCiB7CisgICAgbV93ZWJWaWV3LT5S
ZWZyZXNoKCk7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIApJbmRleDogV2ViS2l0L3d4L0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvQ2hhbmdlTG9nCShyZXZpc2lvbiA0ODAy
NCkKKysrIFdlYktpdC93eC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MyBA
QAorMjAwOS0wOS0wMyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW3d4XSBGcmFt
ZXMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwNDEKKworICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAgICAgICAgKHd4V2ViRnJhbWU6
Ond4V2ViRnJhbWUpOgorICAgICAgICAod3hXZWJGcmFtZTo6fnd4V2ViRnJhbWUpOgorICAgICAg
ICAod3hXZWJGcmFtZTo6R2V0RnJhbWUpOgorICAgICAgICAqIFdlYkZyYW1lLmg6CisgICAgICAg
ICogV2ViRnJhbWVQcml2YXRlLmg6CisgICAgICAgICogV2ViS2l0U3VwcG9ydC9DaHJvbWVDbGll
bnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnRXeDo6cGxhdGZvcm1XaW5k
b3cpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50V3g6OnNjcm9sbCk6CisgICAgICAg
ICogV2ViS2l0U3VwcG9ydC9FZGl0b3JDbGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3JDbGllbnRXeDo6aXNFZGl0YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGll
bnRXeDo6cmVnaXN0ZXJDb21tYW5kRm9yVW5kbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JD
bGllbnRXeDo6cmVnaXN0ZXJDb21tYW5kRm9yUmVkbyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3JDbGllbnRXeDo6Y2xlYXJVbmRvUmVkb09wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yQ2xpZW50V3g6OmNhblVuZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50
V3g6OmNhblJlZG8pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50V3g6OnVuZG8pOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50V3g6OnJlZG8pOgorICAgICAgICAqIFdlYktp
dFN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZUxvYWRlckNsaWVudFd4OjpGcmFtZUxvYWRlckNsaWVudFd4KToKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50V3g6OnNldEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRXeDo6ZnJhbWVMb2FkZXJEZXN0cm95ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeDo6Y29tbWl0dGVkTG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50V3g6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4OjpjcmVhdGVGcmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRG
b3JOZXdQYWdlKToKKyAgICAgICAgKiBXZWJLaXRTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50V3gu
aDoKKyAgICAgICAgKiBXZWJWaWV3Lmg6CisgICAgICAgICogV2ViVmlld1ByaXZhdGUuaDoKKwog
MjAwOS0wOS0wMiAgS2V2aW4gT2xsaXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAog
ICAgICAgICB3YWYgYnVpbGQgZml4ZXMgZm9yIFdpbmRvd3MvTVNWQy4KSW5kZXg6IFdlYktpdC93
eC9XZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd3gvV2ViVmlldy5jcHAJKHJldmlz
aW9uIDQ4MDI0KQorKysgV2ViS2l0L3d4L1dlYlZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzQsNyArMjM0LDYgQEAKICAgICBFVlRfQ0hBUih3eFdlYlZpZXc6Ok9uS2V5RXZlbnRzKQogICAg
IEVWVF9TRVRfRk9DVVMod3hXZWJWaWV3OjpPblNldEZvY3VzKQogICAgIEVWVF9LSUxMX0ZPQ1VT
KHd4V2ViVmlldzo6T25LaWxsRm9jdXMpCi0gICAgRVZUX0FDVElWQVRFKHd4V2ViVmlldzo6T25B
Y3RpdmF0ZSkKIEVORF9FVkVOVF9UQUJMRSgpCiAKIElNUExFTUVOVF9EWU5BTUlDX0NMQVNTKHd4
V2ViVmlldywgd3hXaW5kb3cpCkBAIC0yNjYsNyArMjY1LDYgQEAKIHsKICAgICBpZiAoIChzdHls
ZSAmIHd4Qk9SREVSX01BU0spID09IDApCiAgICAgICAgIHN0eWxlIHw9IHd4Qk9SREVSX05PTkU7
Ci0gICAgc3R5bGUgfD0gd3hIU0NST0xMIHwgd3hWU0NST0xMOwogICAgIAogICAgIGlmICghd3hX
aW5kb3c6OkNyZWF0ZShwYXJlbnQsIGlkLCBwb3NpdGlvbiwgc2l6ZSwgc3R5bGUsIG5hbWUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTUsNyArMzEzLDggQEAKIHsKICAgICBtX2JlaW5n
RGVzdHJveWVkID0gdHJ1ZTsKICAgICAKLSAgICBkZWxldGUgbV9tYWluRnJhbWU7CisgICAgaWYg
KG1fbWFpbkZyYW1lICYmIG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpKQorICAgICAgICBtX21haW5G
cmFtZS0+R2V0RnJhbWUoKS0+bG9hZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKICAgICAKICAg
ICBkZWxldGUgbV9pbXBsLT5wYWdlOwogICAgIG1faW1wbC0+cGFnZSA9IDA7ICAgCkBAIC00ODcs
MTAgKzQ4NiwxNiBAQAogCiB2b2lkIHd4V2ViVmlldzo6T25QYWludCh3eFBhaW50RXZlbnQmIGV2
ZW50KQogewotICAgIAogICAgIGlmIChtX2JlaW5nRGVzdHJveWVkIHx8ICFtX21haW5GcmFtZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCisgICAgLy8gV2ViVmlldyBhY3RpdmUgc3RhdGUgaXMg
YmFzZWQgb24gVExXIGFjdGl2ZSBzdGF0ZS4KKyAgICB3eFRvcExldmVsV2luZG93KiB0bHcgPSBk
eW5hbWljX2Nhc3Q8d3hUb3BMZXZlbFdpbmRvdyo+KHd4R2V0VG9wTGV2ZWxQYXJlbnQodGhpcykp
OworICAgIGlmICh0bHcgJiYgdGx3LT5Jc0FjdGl2ZSgpKQorICAgICAgICBtX2ltcGwtPnBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5zZXRBY3RpdmUodHJ1ZSk7CisgICAgZWxzZSB7CisgICAgICAg
IG1faW1wbC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPnNldEFjdGl2ZShmYWxzZSk7CisgICAg
fQogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOwog
ICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT52aWV3KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTUw
NSwyMyArNTEwLDE0IEBACiAgICAgICAgIGlmIChkYy5Jc09rKCkpIHsKICAgICAgICAgICAgIHd4
UmVjdCBwYWludFJlY3QgPSBHZXRVcGRhdGVSZWdpb24oKS5HZXRCb3goKTsKIAotICAgICAgICAg
ICAgV2ViQ29yZTo6SW50U2l6ZSBvZmZzZXQgPSBmcmFtZS0+dmlldygpLT5zY3JvbGxPZmZzZXQo
KTsKICNpZiBVU0UoV1hHQykKLSAgICAgICAgICAgIGdjZGMuU2V0RGV2aWNlT3JpZ2luKC1vZmZz
ZXQud2lkdGgoKSwgLW9mZnNldC5oZWlnaHQoKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGRjLlNl
dERldmljZU9yaWdpbigtb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgcGFpbnRSZWN0Lk9mZnNldChvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKTsK
LQotI2lmIFVTRShXWEdDKQogICAgICAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdj
KCZnY2RjKTsKICNlbHNlCiAgICAgICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ2Mo
JmRjKTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkg
ewotICAgICAgICAgICAgICAgIGlmIChmcmFtZS0+dmlldygpLT5uZWVkc0xheW91dCgpKQotICAg
ICAgICAgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKLQotICAgICAgICAgICAg
ICAgIGZyYW1lLT52aWV3KCktPnBhaW50Q29udGVudHMoJmdjLCBwYWludFJlY3QpOworICAgICAg
ICAgICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dElmTmVlZGVkUmVjdXJzaXZlKCk7CisgICAg
ICAgICAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmdjLCBwYWludFJlY3QpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNTM5LDkgKzUzNSw5IEBACiB7IAogICAgIGlm
IChtX2lzSW5pdGlhbGl6ZWQgJiYgbV9tYWluRnJhbWUpIHsKICAgICAgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPkdldEZyYW1lKCk7Ci0gICAgICAgIGZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+c2VuZFJlc2l6ZUV2ZW50KCk7Ci0gICAgICAgIGZyYW1lLT52aWV3KCktPmxh
eW91dCgpOwotICAgICAgICBmcmFtZS0+dmlldygpLT5hZGp1c3RTY3JvbGxiYXJzKCk7CisgICAg
ICAgIGZyYW1lLT52aWV3KCktPnNldEZyYW1lUmVjdCh3eFJlY3Qod3hQb2ludCgwLDApLCBldmVu
dC5HZXRTaXplKCkpKTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+Zm9yY2VMYXlvdXQoKTsKKyAg
ICAgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKICAgICB9CiAgICAgICAKICAg
ICBldmVudC5Ta2lwKCk7CkBAIC01NjAsMTAgKzU1Niw3IEBACiB7CiAgICAgZXZlbnQuU2tpcCgp
OwogICAgIAotICAgIGlmIChtX2JlaW5nRGVzdHJveWVkKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgaWYgKCFtX21haW5GcmFtZSkKKyAgICBpZiAoIW1faW1wbC0+cGFnZSkKICAgICAgICAg
cmV0dXJuOyAKICAgICAgICAgCiAgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gbV9tYWluRnJh
bWUtPkdldEZyYW1lKCk7ICAKQEAgLTYxMSwxMCArNjA0LDEwIEBACiAgICAgbV9pbXBsLT5wYWdl
LT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwogICAgIHd4UG9p
bnQgbG9jYWxFdmVudFBvaW50ID0gU2NyZWVuVG9DbGllbnQoZXZlbnQuR2V0UG9zaXRpb24oKSk7
CiAKLSAgICBpZiAoIW1fbWFpbkZyYW1lKQorICAgIGlmICghbV9pbXBsLT5wYWdlKQogICAgICAg
ICByZXR1cm47CiAgICAgICAgIAotICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBt
X21haW5GcmFtZS0+R2V0RnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogZm9jdXNlZEZyYW1l
ID0gbV9pbXBsLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAgICAgaWYgKCFmb2N1c2VkRnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02
OTQsOCArNjg3LDggQEAKIHZvaWQgd3hXZWJWaWV3OjpPbktleUV2ZW50cyh3eEtleUV2ZW50JiBl
dmVudCkKIHsKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSAwOwotICAgIGlmIChtX21haW5G
cmFtZSkKLSAgICAgICAgZnJhbWUgPSBtX21haW5GcmFtZS0+R2V0RnJhbWUoKTsKKyAgICBpZiAo
bV9pbXBsLT5wYWdlKQorICAgICAgICBmcmFtZSA9IG1faW1wbC0+cGFnZS0+Zm9jdXNDb250cm9s
bGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAgaWYgKCEoZnJhbWUgJiYgZnJhbWUt
PnZpZXcoKSkpCiAgICAgICAgIHJldHVybjsKQEAgLTgzNiw3ICs4MjksNiBAQAogICAgICAgICBm
cmFtZSA9IG1fbWFpbkZyYW1lLT5HZXRGcmFtZSgpOwogICAgICAgICAKICAgICBpZiAoZnJhbWUp
IHsKLSAgICAgICAgbV9pbXBsLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKHRy
dWUpOwogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCktPnNldEZvY3VzZWQodHJ1ZSk7CiAgICAg
fQogCkBAIC04NTAsMjAgKzg0MiwxMSBAQAogICAgICAgICBmcmFtZSA9IG1fbWFpbkZyYW1lLT5H
ZXRGcmFtZSgpOwogICAgICAgICAKICAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgbV9pbXBsLT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0QWN0aXZlKGZhbHNlKTsKICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLT5zZXRGb2N1c2VkKGZhbHNlKTsKICAgICB9CiAgICAgZXZlbnQuU2tpcCgp
OwogfQogCi12b2lkIHd4V2ViVmlldzo6T25BY3RpdmF0ZSh3eEFjdGl2YXRlRXZlbnQmIGV2ZW50
KQotewotICAgIGlmIChtX2ltcGwtPnBhZ2UpCi0gICAgICAgIG1faW1wbC0+cGFnZS0+Zm9jdXND
b250cm9sbGVyKCktPnNldEFjdGl2ZShldmVudC5HZXRBY3RpdmUoKSk7Ci0KLSAgICBldmVudC5T
a2lwKCk7Ci19Ci0KIHd4V2ViVmlld0RPTUVsZW1lbnRJbmZvIHd4V2ViVmlldzo6SGl0VGVzdChj
b25zdCB3eFBvaW50JiBwb3MpIGNvbnN0CiB7CiAgICAgaWYgKG1fbWFpbkZyYW1lKQpJbmRleDog
V2ViS2l0L3d4L1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYlZp
ZXdQcml2YXRlLmgJKHJldmlzaW9uIDQ4MDI0KQorKysgV2ViS2l0L3d4L1dlYlZpZXdQcml2YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDEwICszMCwxMCBAQAogI2RlZmluZSBXWFdFQlZJRVdQ
UklWQVRFX0gKIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgorI2luY2x1ZGUgIkVkaXRDb21tYW5kLmgiCisjaW5jbHVkZSAiRWRpdENvbW1h
bmRXeC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJ3dGYvUmVmUHRyLmgiCi0jaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgInd0Zi9WZWN0b3IuaCIKIAogI2luY2x1ZGUgPHd4L3Rp
bWVyLmg+CiAKQEAgLTQ4LDE5ICs0OCw5IEBACiAKICAgICB3eFRpbWVyIHRyaXBsZUNsaWNrVGlt
ZXI7CiAgICAgd3hQb2ludCB0cmlwbGVDbGlja1BvczsKLX07Ci0KLWNsYXNzIFdlYlZpZXdGcmFt
ZURhdGEKLXsKLXB1YmxpYzoKLSAgICBXZWJDb3JlOjpLVVJMIHVybDsKLSAgICBXZWJDb3JlOjpT
dHJpbmcgbmFtZTsKLSAgICBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxl
bWVudDsKICAgICAKLSAgICBXZWJDb3JlOjpTdHJpbmcgcmVmZXJyZXI7Ci0gICAgYm9vbCBhbGxv
d3NTY3JvbGxpbmc7Ci0gICAgaW50IG1hcmdpbldpZHRoOwotICAgIGludCBtYXJnaW5IZWlnaHQ7
ICAgIAorICAgIFdURjo6VmVjdG9yPEVkaXRDb21tYW5kV3g+IHVuZG9TdGFjazsKKyAgICBXVEY6
OlZlY3RvcjxFZGl0Q29tbWFuZFd4PiByZWRvU3RhY2s7CiB9OwogCiAjZW5kaWYKSW5kZXg6IFdl
YktpdC93eC9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYlZpZXcuaAkocmV2
aXNpb24gNDgwMjQpCisrKyBXZWJLaXQvd3gvV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzEsNyArMTcxLDYgQEAKICAgICB2b2lkIE9uS2V5RXZlbnRzKHd4S2V5RXZlbnQmIGV2ZW50KTsK
ICAgICB2b2lkIE9uU2V0Rm9jdXMod3hGb2N1c0V2ZW50JiBldmVudCk7CiAgICAgdm9pZCBPbktp
bGxGb2N1cyh3eEZvY3VzRXZlbnQmIGV2ZW50KTsKLSAgICB2b2lkIE9uQWN0aXZhdGUod3hBY3Rp
dmF0ZUV2ZW50JiBldmVudCk7CiAgICAgCiBwcml2YXRlOgogICAgIC8vIGFueSBjbGFzcyB3aXNo
aW5nIHRvIHByb2Nlc3Mgd3hXaW5kb3dzIGV2ZW50cyBtdXN0IHVzZSB0aGlzIG1hY3JvCkluZGV4
OiBXZWJLaXQvd3gvV2ViRnJhbWVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dl
YkZyYW1lUHJpdmF0ZS5oCShyZXZpc2lvbiA0ODAyNCkKKysrIFdlYktpdC93eC9XZWJGcmFtZVBy
aXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDkgQEAKICNkZWZpbmUgV1hXRUJG
UkFNRVBSSVZBVEVfSAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWRpdENvbW1h
bmQuaCIKLSNpbmNsdWRlICJFZGl0Q29tbWFuZFd4LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKLSNp
bmNsdWRlICJ3dGYvUmVmUHRyLmgiCi0jaW5jbHVkZSAid3RmL1ZlY3Rvci5oIgorI2luY2x1ZGUg
IkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIktVUkwuaCIKIAogY2xhc3MgV2Vi
RnJhbWVQcml2YXRlIHsKIApAQCAtNDIsMTEgKzQwLDIxIEBACiAgICAgV2ViRnJhbWVQcml2YXRl
KCkgOgogICAgICAgICAgICAgZnJhbWUoMCkKICAgICB7fQorICAgIAorICAgIFdlYkNvcmU6OkZy
YW1lKiBmcmFtZTsKK307CiAKLSAgICBXVEY6OlZlY3RvcjxFZGl0Q29tbWFuZFd4PiB1bmRvU3Rh
Y2s7Ci0gICAgV1RGOjpWZWN0b3I8RWRpdENvbW1hbmRXeD4gcmVkb1N0YWNrOworY2xhc3MgV2Vi
Vmlld0ZyYW1lRGF0YQoreworcHVibGljOgorICAgIFdlYkNvcmU6OktVUkwgdXJsOworICAgIFdl
YkNvcmU6OlN0cmluZyBuYW1lOworICAgIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCog
b3duZXJFbGVtZW50OwogICAgIAotICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBmcmFt
ZTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgcmVmZXJyZXI7CisgICAgYm9vbCBhbGxvd3NTY3JvbGxp
bmc7CisgICAgaW50IG1hcmdpbldpZHRoOworICAgIGludCBtYXJnaW5IZWlnaHQ7ICAgIAogfTsK
IAogI2VuZGlmCkluZGV4OiBXZWJLaXQvd3gvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC93eC9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDQ4MDI0KQorKysgV2ViS2l0L3d4L1dlYkZy
YW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsOCArNzQsNyBAQAogICAgIG1fdGV4dE1hZ25p
ZmllcigxLjApLAogICAgIG1faXNFZGl0YWJsZShmYWxzZSksCiAgICAgbV9pc0luaXRpYWxpemVk
KGZhbHNlKSwKLSAgICBtX2JlaW5nRGVzdHJveWVkKGZhbHNlKSwKLSAgICBtX3RpdGxlKHd4RW1w
dHlTdHJpbmcpCisgICAgbV9iZWluZ0Rlc3Ryb3llZChmYWxzZSkKIHsKIAogICAgIG1faW1wbCA9
IG5ldyBXZWJGcmFtZVByaXZhdGUoKTsKQEAgLTg3LDEzICs4NiwxNiBAQAogICAgIH0KICAgICAK
ICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudFd4KiBsb2FkZXJDbGllbnQgPSBuZXcgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRXeCgpOwotICAgIAotICAgIG1faW1wbC0+ZnJhbWUgPSBX
ZWJDb3JlOjpGcmFtZTo6Y3JlYXRlKGNvbnRhaW5lci0+bV9pbXBsLT5wYWdlLCBwYXJlbnRGcmFt
ZSwgbG9hZGVyQ2xpZW50KTsKLSAgICBtX2ltcGwtPmZyYW1lLT5kZXJlZigpOworICAgIFJlZlB0
cjxXZWJDb3JlOjpGcmFtZT4gbmV3RnJhbWUgPSBXZWJDb3JlOjpGcmFtZTo6Y3JlYXRlKGNvbnRh
aW5lci0+bV9pbXBsLT5wYWdlLCBwYXJlbnRGcmFtZSwgbG9hZGVyQ2xpZW50KTsKIAotICAgIGxv
YWRlckNsaWVudC0+c2V0RnJhbWUobV9pbXBsLT5mcmFtZS5nZXQoKSk7CisgICAgbV9pbXBsLT5m
cmFtZSA9IG5ld0ZyYW1lLmdldCgpOworCisgICAgbG9hZGVyQ2xpZW50LT5zZXRGcmFtZSh0aGlz
KTsKICAgICBsb2FkZXJDbGllbnQtPnNldFdlYlZpZXcoY29udGFpbmVyKTsKICAgICAKKyAgICBp
ZiAoZGF0YSAmJiBkYXRhLT5vd25lckVsZW1lbnQpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPnJl
ZigpOworCiAgICAgbV9pbXBsLT5mcmFtZS0+aW5pdCgpOwogICAgICAgICAKICAgICBtX2lzSW5p
dGlhbGl6ZWQgPSB0cnVlOwpAQCAtMTAxLDEzICsxMDMsMTQgQEAKIAogd3hXZWJGcmFtZTo6fnd4
V2ViRnJhbWUoKQogewotICAgIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpLT5kZXRhY2hGcm9tUGFy
ZW50KCk7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgZGVsZXRlIG1faW1wbDsKIH0KIAogV2Vi
Q29yZTo6RnJhbWUqIHd4V2ViRnJhbWU6OkdldEZyYW1lKCkKIHsKICAgICBpZiAobV9pbXBsKQot
ICAgICAgICByZXR1cm4gbV9pbXBsLT5mcmFtZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIG1faW1w
bC0+ZnJhbWU7CiAgICAgICAgIAogICAgIHJldHVybiAwOwogfQpJbmRleDogV2ViS2l0L3d4L1dl
YkZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3d4L1dlYkZyYW1lLmgJKHJldmlzaW9uIDQ4
MDI0KQorKysgV2ViS2l0L3d4L1dlYkZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw5ICsx
NDYsNiBAQAogICAgIHZvaWQgUmVzZXRUZXh0U2l6ZSgpOwogICAgIHZvaWQgTWFrZUVkaXRhYmxl
KGJvb2wgZW5hYmxlKTsKICAgICBib29sIElzRWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX2lz
RWRpdGFibGU7IH0KLQotICAgIHd4U3RyaW5nIEdldFBhZ2VUaXRsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdGl0bGU7IH0KLSAgICB2b2lkIFNldFBhZ2VUaXRsZShjb25zdCB3eFN0cmluZyYgdGl0bGUp
IHsgbV90aXRsZSA9IHRpdGxlOyB9CiAgICAgCiAgICAgV2ViQ29yZTo6RnJhbWUqIEdldEZyYW1l
KCk7CiAKQEAgLTE2MCw3ICsxNTcsNiBAQAogICAgIGJvb2wgbV9pc0luaXRpYWxpemVkOwogICAg
IGJvb2wgbV9iZWluZ0Rlc3Ryb3llZDsKICAgICBXZWJGcmFtZVByaXZhdGUqIG1faW1wbDsKLSAg
ICB3eFN0cmluZyBtX3RpdGxlOwogICAgIAogfTsKIApJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4MDI0KQorKysgV2Vi
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1OCBAQAorMjAwOS0wOS0w
MyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW3d4XSBGcmFtZXMgc3VwcG9ydAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNDEKKwor
ICAgICAgICAqIHBhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwYXNzTW91c2VSZWxlYXNlRXZlbnRUb1N1YmZy
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dp
ZGdldCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhYnNUb0FsbENvbnRyb2xz
KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc1N1YmZyYW1lRXZlbnRUb1N1
YmZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2
ZW50VG9XaWRnZXQpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6bmF0aXZlV2luZG93Rm9yUmVuZGVyT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lV3g6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lV3g6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lV3g6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVX
eDo6cGFpbnRNZW51TGlzdEJ1dHRvbik6CisgICAgICAgICogcGxhdGZvcm0vd3gvU2Nyb2xsYmFy
VGhlbWVXeC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5h
dGl2ZVRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6On5TY3JvbGxi
YXJUaGVtZVd4KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OnNjcm9sbGJh
clRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVd4OjpoYXNUaHVt
Yik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVd4OjpidXR0b25TaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OmJhY2tCdXR0b25SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OmZvcndhcmRCdXR0b25SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lV3g6OnRyYWNrUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVd4OjpwYWludFNjcm9sbENvcm5lcik6CisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxiYXJUaGVtZVd4OjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vd3gvU2Ny
b2xsYmFyVGhlbWVXeC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
V3g6Omhhc0J1dHRvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vd3gvd3hjb2RlL2d0ay9zY3JvbGxiYXJfcmVuZGVy
LmNwcDogQWRkZWQuCisgICAgICAgICh3eFN0eWxlRm9yUGFydCk6CisgICAgICAgIChHZXRCdXR0
b25XaWRnZXQpOgorICAgICAgICAod3hHZXRHZGtXaW5kb3dGb3JEQyk6CisgICAgICAgICh3eFJl
bmRlcmVyX0RyYXdTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL3d4L3d4Y29kZS9tYWMv
Y2FyYm9uL3Njcm9sbGJhcl9yZW5kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHd4U2Nyb2xsYmFy
UGFydFRvSElQcmVzc2VkU3RhdGUpOgorICAgICAgICAod3hSZW5kZXJlcl9EcmF3U2Nyb2xsYmFy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvc2Nyb2xsYmFyX3JlbmRlci5oOiBBZGRl
ZC4KKyAgICAgICAgKGNhbGNUaHVtYlN0YXJ0QW5kTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9y
bS93eC93eGNvZGUvd2luL25vbi1rZXJuZWQtZHJhd2luZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpkcmF3VGV4dFdpdGhTcGFjaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS93eC93eGNvZGUvd2lu
L3Njcm9sbGJhcl9yZW5kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEdyYXBoaWNzSERDOjpHcmFw
aGljc0hEQyk6CisgICAgICAgIChHcmFwaGljc0hEQzo6fkdyYXBoaWNzSERDKToKKyAgICAgICAg
KEdyYXBoaWNzSERDOjpvcGVyYXRvciBIREMpOgorICAgICAgICAoZ2V0VFNTdGF0ZUZvclBhcnQp
OgorICAgICAgICAod3hSZW5kZXJlcl9EcmF3U2Nyb2xsYmFyKToKKyAgICAgICAgKiB3ZWJjb3Jl
LXd4LmJrbDoKKwogMjAwOS0wOS0wMyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJD
b3JlL3BhZ2Uvd3gvRXZlbnRIYW5kbGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFn
ZS93eC9FdmVudEhhbmRsZXJXeC5jcHAJKHJldmlzaW9uIDQ4MDI0KQorKysgV2ViQ29yZS9wYWdl
L3d4L0V2ZW50SGFuZGxlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKICNpbmNs
dWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCkBAIC00MywxNyArNDQsMjAgQEAKIAog
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZl
bnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQogewotICAgIHJldHVy
biBwYXNzU3ViZnJhbWVFdmVudFRvU3ViZnJhbWUobWV2LCBzdWJmcmFtZSk7CisgICAgc3ViZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQobWV2LmV2ZW50KCkpOwor
ICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlTW92ZUV2
ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBz
dWJmcmFtZSwgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCogaGl0dGVzdCkKIHsKLSAgICByZXR1cm4g
cGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKG1ldiwgc3ViZnJhbWUpOworICAgIHN1YmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VNb3ZlRXZlbnQobWV2LmV2ZW50KCksIGhpdHRl
c3QpOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNl
UmVsZWFzZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYs
IEZyYW1lKiBzdWJmcmFtZSkKIHsKLSAgICByZXR1cm4gcGFzc1N1YmZyYW1lRXZlbnRUb1N1YmZy
YW1lKG1ldiwgc3ViZnJhbWUpOworICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQobWV2LmV2ZW50KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiBi
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3Qg
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCkBAIC03MCw2ICs3NCwzMiBAQAog
ICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChyZW5kZXJXaWRnZXQtPndpZGdl
dCgpKTsKIH0KIAorYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxh
dGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRn
ZXQgfHwgIXdpZGdldC0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPmZyYW1lKCktPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKK30KKworYm9vbCBFdmVudEhhbmRs
ZXI6OnRhYnNUb0FsbENvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdCAKK3sgCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsgCisgICAgcmV0dXJuIGZhbHNlOyAKK30KKworYm9vbCBFdmVu
dEhhbmRsZXI6OnBhc3NTdWJmcmFtZUV2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJiwgRnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOyAKKyAgICByZXR1cm4gZmFsc2U7IAorfQorCitib29sIEV2ZW50SGFuZGxl
cjo6cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KikKK3sgCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7IAorfQorCiB2b2lkIEV2ZW50SGFuZGxlcjo6Zm9j
dXNEb2N1bWVudFZpZXcoKQogewogICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgp
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9zY3JvbGxiYXJf
cmVuZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9tYWMv
Y2FyYm9uL3Njcm9sbGJhcl9yZW5kZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS93eC93eGNvZGUvbWFjL2NhcmJvbi9zY3JvbGxiYXJfcmVuZGVyLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBLZXZpbiBPbGxp
dmllciAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJzY3JvbGxiYXJfcmVuZGVyLmgiCisKKyNpbmNsdWRlIDx3eC9kZWZzLmg+
CisjaW5jbHVkZSA8d3gvZGMuaD4KKyNpbmNsdWRlIDx3eC9yZW5kZXJlci5oPgorCisjaW5jbHVk
ZSA8Q2FyYm9uL0NhcmJvbi5oPgorCitzdGF0aWMgaW50IHd4U2Nyb2xsYmFyUGFydFRvSElQcmVz
c2VkU3RhdGUod3hTY3JvbGxiYXJQYXJ0IHBhcnQpCit7CisgICAgc3dpdGNoIChwYXJ0KSB7Cisg
ICAgICAgIGNhc2Ugd3hTQ1JPTExQQVJUX0JBQ0tCVE5TVEFSVDoKKyAgICAgICAgICAgIHJldHVy
biBrVGhlbWVUb3BPdXRzaWRlQXJyb3dQcmVzc2VkOworICAgICAgICBjYXNlIHd4U0NST0xMUEFS
VF9CQUNLQlRORU5EOgorICAgICAgICAgICAgcmV0dXJuIGtUaGVtZVRvcE91dHNpZGVBcnJvd1By
ZXNzZWQ7IC8vIFRoaXMgZG9lcyBub3QgbWFrZSBtdWNoIHNlbnNlLiAgRm9yIHNvbWUgcmVhc29u
IHRoZSBvdXRzaWRlIGNvbnN0YW50IGlzIHJlcXVpcmVkLgorICAgICAgICBjYXNlIHd4U0NST0xM
UEFSVF9GV0RCVE5TVEFSVDoKKyAgICAgICAgICAgIHJldHVybiBrVGhlbWVUb3BJbnNpZGVBcnJv
d1ByZXNzZWQ7CisgICAgICAgIGNhc2Ugd3hTQ1JPTExQQVJUX0ZXREJUTkVORDoKKyAgICAgICAg
ICAgIHJldHVybiBrVGhlbWVCb3R0b21PdXRzaWRlQXJyb3dQcmVzc2VkOworICAgICAgICBjYXNl
IHd4U0NST0xMUEFSVF9USFVNQjoKKyAgICAgICAgICAgIHJldHVybiBrVGhlbWVUaHVtYlByZXNz
ZWQ7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisK
K3ZvaWQgd3hSZW5kZXJlcl9EcmF3U2Nyb2xsYmFyKHd4V2luZG93KiBXWFVOVVNFRCh3aW5kb3cp
LCB3eERDJiBkYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd3hSZWN0JiBy
ZWN0LCB3eE9yaWVudGF0aW9uIG9yaWVudCwgaW50IGN1cnJlbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHd4U2Nyb2xsYmFyUGFydCBmb2N1c1BhcnQsIHd4U2Nyb2xsYmFyUGFydCBo
b3ZlclBhcnQsIGludCBtYXgsIGludCBzdGVwLCBpbnQgZmxhZ3MpCit7CisgICAgY29uc3Qgd3hD
b29yZCB4ID0gcmVjdC54OworICAgIGNvbnN0IHd4Q29vcmQgeSA9IHJlY3QueTsKKyAgICBjb25z
dCB3eENvb3JkIHcgPSByZWN0LndpZHRoOworICAgIGNvbnN0IHd4Q29vcmQgaCA9IHJlY3QuaGVp
Z2h0OworCisgICAgZGMuU2V0QnJ1c2goICp3eFdISVRFX0JSVVNIICk7CisgICAgZGMuU2V0UGVu
KCAqd3hUUkFOU1BBUkVOVF9QRU4gKTsKKyAgICBkYy5EcmF3UmVjdGFuZ2xlKHJlY3QpOworICAg
IAorICAgIGRjLlNldEJydXNoKCAqd3hUUkFOU1BBUkVOVF9CUlVTSCApOworCisgICAgSElSZWN0
IGhpUmVjdCA9IENHUmVjdE1ha2UoIHgsIHksIHcsIGggKTsKKworICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQ7CisgICAgY2dDb250ZXh0ID0gKENHQ29udGV4dFJlZikgZGMuR2V0R3JhcGhpY3ND
b250ZXh0KCktPkdldE5hdGl2ZUNvbnRleHQoKTsKKworICAgIHsKKyAgICAgICAgSElUaGVtZVRy
YWNrRHJhd0luZm8gdHJhY2tJbmZvOworICAgICAgICB0cmFja0luZm8udmVyc2lvbiA9IDA7Cisg
ICAgICAgIHRyYWNrSW5mby5raW5kID0ga1RoZW1lTWVkaXVtU2Nyb2xsQmFyOworICAgICAgICB0
cmFja0luZm8uYm91bmRzID0gaGlSZWN0OworICAgICAgICB0cmFja0luZm8ubWluID0gMDsKKyAg
ICAgICAgdHJhY2tJbmZvLm1heCA9IG1heDsKKyAgICAgICAgdHJhY2tJbmZvLnZhbHVlID0gY3Vy
cmVudDsKKyAgICAgICAgdHJhY2tJbmZvLnRyYWNrSW5mby5zY3JvbGxiYXIudmlld3NpemUgPSBz
dGVwOworICAgICAgICB0cmFja0luZm8uYXR0cmlidXRlcyA9IDA7CisgICAgICAgIGlmIChvcmll
bnQgPT0gd3hIT1JJWk9OVEFMKQorICAgICAgICAgICAgdHJhY2tJbmZvLmF0dHJpYnV0ZXMgfD0g
a1RoZW1lVHJhY2tIb3Jpem9udGFsOworICAgICAgICB0cmFja0luZm8uZW5hYmxlU3RhdGUgPSAo
ZmxhZ3MgJiB3eENPTlRST0xfRk9DVVNFRCkgPyBrVGhlbWVUcmFja0FjdGl2ZSA6IGtUaGVtZVRy
YWNrSW5hY3RpdmU7CisgICAgICAgIHRyYWNrSW5mby50cmFja0luZm8uc2Nyb2xsYmFyLnByZXNz
U3RhdGUgPSB3eFNjcm9sbGJhclBhcnRUb0hJUHJlc3NlZFN0YXRlKGZvY3VzUGFydCk7CisgICAg
ICAgIHRyYWNrSW5mby5hdHRyaWJ1dGVzIHw9IGtUaGVtZVRyYWNrU2hvd1RodW1iOworICAgICAg
ICAKKyAgICAgICAgaWYgKGZsYWdzICYgd3hDT05UUk9MX0RJU0FCTEVEKQorICAgICAgICAgICAg
dHJhY2tJbmZvLmVuYWJsZVN0YXRlID0ga1RoZW1lVHJhY2tEaXNhYmxlZDsKKyAgICAgICAgCisg
ICAgICAgIEhJVGhlbWVEcmF3VHJhY2soJnRyYWNrSW5mbywgMCwgY2dDb250ZXh0LCBrSElUaGVt
ZU9yaWVudGF0aW9uTm9ybWFsKTsKKyAgICB9Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4
L3d4Y29kZS9ndGsvc2Nyb2xsYmFyX3JlbmRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS93eC93eGNvZGUvZ3RrL3Njcm9sbGJhcl9yZW5kZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvZ3RrL3Njcm9sbGJhcl9yZW5kZXIuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBL
ZXZpbiBPbGxpdmllciAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAic2Nyb2xsYmFyX3JlbmRlci5oIgorCisjaW5jbHVkZSA8d3gv
ZGVmcy5oPgorI2luY2x1ZGUgPHd4L2RjLmg+CisjaW5jbHVkZSA8d3gvcmVuZGVyZXIuaD4KKyNp
bmNsdWRlIDx3eC9zZXR0aW5ncy5oPgorI2luY2x1ZGUgPHd4L3dpbmRvdy5oPgorCisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgInd4L2d0ay93aW5fZ3RrLmgiCisKK2ludCB3eFN0eWxl
Rm9yUGFydCh3eFNjcm9sbGJhclBhcnQgcGFydCwgd3hTY3JvbGxiYXJQYXJ0IGZvY3VzUGFydCwg
d3hTY3JvbGxiYXJQYXJ0IGhvdmVyUGFydCwgaW50IGZsYWdzKQoreworICAgIGludCBzdHlsZSA9
IDA7CisgICAgaWYgKGZsYWdzID09IHd4Q09OVFJPTF9ESVNBQkxFRCkKKyAgICAgICAgc3R5bGUg
PSB3eENPTlRST0xfRElTQUJMRUQ7CisgICAgZWxzZSBpZiAocGFydCA9PSBmb2N1c1BhcnQpCisg
ICAgICAgIHN0eWxlID0gd3hDT05UUk9MX1BSRVNTRUQ7CisgICAgZWxzZSBpZiAocGFydCA9PSBo
b3ZlclBhcnQpCisgICAgICAgIHN0eWxlID0gd3hDT05UUk9MX0NVUlJFTlQ7CisKKyAgICByZXR1
cm4gc3R5bGU7Cit9CisKK0d0a1dpZGdldCogR2V0QnV0dG9uV2lkZ2V0KCkKK3sKKyAgICBzdGF0
aWMgR3RrV2lkZ2V0ICpzX2J1dHRvbiA9IE5VTEw7CisgICAgc3RhdGljIEd0a1dpZGdldCAqc193
aW5kb3cgPSBOVUxMOworCisgICAgaWYgKCAhc19idXR0b24gKQorICAgIHsKKyAgICAgICAgc193
aW5kb3cgPSBndGtfd2luZG93X25ldyggR1RLX1dJTkRPV19QT1BVUCApOworICAgICAgICBndGtf
d2lkZ2V0X3JlYWxpemUoIHNfd2luZG93ICk7CisgICAgICAgIHNfYnV0dG9uID0gZ3RrX2J1dHRv
bl9uZXcoKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoIEdUS19DT05UQUlORVIoc193aW5k
b3cpLCBzX2J1dHRvbiApOworICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUoIHNfYnV0dG9uICk7
CisgICAgfQorCisgICAgcmV0dXJuIHNfYnV0dG9uOworfQorCisKK0dka1dpbmRvdyogd3hHZXRH
ZGtXaW5kb3dGb3JEQyh3eFdpbmRvdyogd2luLCB3eERDJiBkYykKK3sKKyAgICAvLyBUaGUgd2F5
IHRvIGdldCBhIEdka1dpbmRvdyogZnJvbSBhIHd4V2luZG93IGlzIHRvIHVzZSAKKyAgICAvLyBH
VEtfUElaWkEod2luLT5tX3d4d2luZG93KS0+YmluX3dpbmRvdywgYnV0IHRoaXMgYXBwcm9hY2gK
KyAgICAvLyB3b24ndCB3b3JrIHdoZW4gZHJhd2luZyB0byBhIHd4TWVtb3J5REMgYXMgaXQgaGFz
IGl0cyBvd24KKyAgICAvLyBHZGtXaW5kb3cqIGZvciBpdHMgYml0bWFwLiB3eFdpbmRvd0RDJ3Mg
R2V0R0RLV2luZG93KCkgd2FzCisgICAgLy8gZGVzaWduZWQgdG8gY3JlYXRlIGEgc29sdXRpb24g
Zm9yIGFsbCBEQ3MsIGJ1dCB3ZSBjYW4ndAorICAgIC8vIGltcGxlbWVudCBpdCB3aXRoIHd4R0NE
QyBzaW5jZSBpdCBkb2Vzbid0IHJldGFpbiBpdHMgd3hXaW5kb3cuIAorICAgIC8vIFNvLCB0byB3
b3JrIGFyb3VuZCB0aGlzLCB3ZSB1c2UgR2V0R0RLV2luZG93IHdoZW5ldmVyIHBvc3NpYmxlCisg
ICAgLy8gYW5kIHVzZSBiaW5fd2luZG93IGZvciB3eEdDREMuIAorICAgIEdka1dpbmRvdyogZ2Rr
X3dpbmRvdyA9IE5VTEw7CisjaWYgd3hVU0VfR1JBUEhJQ1NfQ09OVEVYVAorICAgIGlmICggZGMu
SXNLaW5kT2YoIENMQVNTSU5GTyh3eEdDREMpICkgKQorICAgICAgICBnZGtfd2luZG93ID0gR1RL
X1BJWlpBKHdpbi0+bV93eHdpbmRvdyktPmJpbl93aW5kb3c7ICAgIAorICAgIGVsc2UKKyNlbmRp
ZgorICAgICAgIGdka193aW5kb3cgPSBkYy5HZXRHREtXaW5kb3coKTsKKyAgICB3eEFTU0VSVF9N
U0coIGdka193aW5kb3csCisgICAgICAgICAgICAgICAgICB3eFQoImNhbm5vdCB1c2Ugd3hSZW5k
ZXJlck5hdGl2ZSBvbiB3eERDIG9mIHRoaXMgdHlwZSIpICk7CisgICAgCisgICAgcmV0dXJuIGdk
a193aW5kb3c7Cit9CisKK3ZvaWQgd3hSZW5kZXJlcl9EcmF3U2Nyb2xsYmFyKHd4V2luZG93KiB3
aW5kb3csIHd4REMmIGRjLCBjb25zdCB3eFJlY3QmIHJlY3QsIHd4T3JpZW50YXRpb24gb3JpZW50
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdXJyZW50LCB3eFNjcm9sbGJhclBhcnQg
Zm9jdXNQYXJ0LCB3eFNjcm9sbGJhclBhcnQgaG92ZXJQYXJ0LCBpbnQgbWF4LCBpbnQgc3RlcCwg
aW50IGZsYWdzKQoreworICAgIGJvb2wgaG9yaXogPSBvcmllbnQgPT0gd3hIT1JJWk9OVEFMOwor
ICAgIHd4Q29sb3VyIHNjcm9sbGJhcl9jb2xvdXIgPSB3eFN5c3RlbVNldHRpbmdzOjpHZXRDb2xv
dXIod3hTWVNfQ09MT1VSX1NDUk9MTEJBUik7CisgICAgZGMuU2V0QnJ1c2god3hCcnVzaChzY3Jv
bGxiYXJfY29sb3VyKSk7CisgICAgZGMuU2V0UGVuKHd4UGVuKHd4U3lzdGVtU2V0dGluZ3M6Okdl
dENvbG91cih3eFNZU19DT0xPVVJfQlROU0hBRE9XKSkpOworICAgIGRjLkRyYXdSZWN0YW5nbGUo
cmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVpZ2h0KTsKKworICAgIHd4UmVuZGVy
ZXJOYXRpdmUmIHJlbmRlcmVyID0gd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCk7CisgICAgaW50IHgg
PSByZWN0Lng7CisgICAgaW50IHkgPSByZWN0Lnk7CisKKyAgICBpbnQgYnV0dG9uTGVuZ3RoID0g
MTY7CisKKyAgICByZW5kZXJlci5EcmF3UHVzaEJ1dHRvbih3aW5kb3csIGRjLCB3eFJlY3QoeCx5
LGJ1dHRvbkxlbmd0aCxidXR0b25MZW5ndGgpLCB3eFN0eWxlRm9yUGFydCh3eFNDUk9MTFBBUlRf
QkFDS0JUTlNUQVJULCBmb2N1c1BhcnQsIGhvdmVyUGFydCwgZmxhZ3MpKTsKKworICAgIEd0a1dp
ZGdldCogYnV0dG9uID0gR2V0QnV0dG9uV2lkZ2V0KCk7CisgICAgR2RrV2luZG93KiBnZGtfd2lu
ZG93ID0gd3hHZXRHZGtXaW5kb3dGb3JEQyh3aW5kb3csIGRjKTsKKworICAgIEd0a0Fycm93VHlw
ZSBhcnJvd1R5cGUgPSBHVEtfQVJST1dfVVA7CisgICAgaWYgKGhvcml6KQorICAgICAgICBhcnJv
d1R5cGUgPSBHVEtfQVJST1dfTEVGVDsKKworICAgIGd0a19wYWludF9hcnJvdyggYnV0dG9uLT5z
dHlsZSwgZ2RrX3dpbmRvdywgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19PVVQsIE5VTEws
IGJ1dHRvbiwgImFycm93IiwgYXJyb3dUeXBlLCBmYWxzZSwgeCArIDQsIHkgKyA0LCA4LCA4KTsK
KworICAgIHd4UmVjdCBidXR0b25SZWN0ID0gcmVjdDsKKyAgICBpbnQgcGh5c2ljYWxMZW5ndGgg
PSBob3JpeiA/IHJlY3Qud2lkdGggOiByZWN0LmhlaWdodDsKKyAgICBwaHlzaWNhbExlbmd0aCAt
PSBidXR0b25MZW5ndGgqMjsKKyAgICBpbnQgdGh1bWJTdGFydCA9IDA7CisgICAgaW50IHRodW1i
TGVuZ3RoID0gMDsKKyAgICBjYWxjVGh1bWJTdGFydEFuZExlbmd0aChwaHlzaWNhbExlbmd0aCwg
bWF4ICsgc3RlcCwgY3VycmVudCwgc3RlcCwgJnRodW1iU3RhcnQsICZ0aHVtYkxlbmd0aCk7CisK
KyAgICBpZiAoaG9yaXopIHsKKyAgICAgICAgYnV0dG9uUmVjdC54ID0gdGh1bWJTdGFydCArIGJ1
dHRvbkxlbmd0aDsKKyAgICAgICAgYnV0dG9uUmVjdC53aWR0aCA9IHRodW1iTGVuZ3RoOworICAg
IH0gZWxzZSB7CisgICAgICAgIGJ1dHRvblJlY3QueSA9IHRodW1iU3RhcnQgKyBidXR0b25MZW5n
dGg7CisgICAgICAgIGJ1dHRvblJlY3QuaGVpZ2h0ID0gdGh1bWJMZW5ndGg7CisgICAgfQorCisg
ICAgcmVuZGVyZXIuRHJhd1B1c2hCdXR0b24od2luZG93LCBkYywgYnV0dG9uUmVjdCwgd3hTdHls
ZUZvclBhcnQod3hTQ1JPTExQQVJUX1RIVU1CLCBmb2N1c1BhcnQsIGhvdmVyUGFydCwgZmxhZ3Mp
KTsKKworICAgIGlmIChob3JpeikKKyAgICAgICAgeCArPSByZWN0LndpZHRoIC0gYnV0dG9uTGVu
Z3RoOworICAgIGVsc2UKKyAgICAgICAgeSArPSByZWN0LmhlaWdodCAtIGJ1dHRvbkxlbmd0aDsK
KworICAgIHJlbmRlcmVyLkRyYXdQdXNoQnV0dG9uKHdpbmRvdywgZGMsIHd4UmVjdCh4LHksYnV0
dG9uTGVuZ3RoLGJ1dHRvbkxlbmd0aCksIHd4U3R5bGVGb3JQYXJ0KHd4U0NST0xMUEFSVF9GV0RC
VE5FTkQsIGZvY3VzUGFydCwgaG92ZXJQYXJ0LCBmbGFncykpOworICAgIAorICAgIGlmIChob3Jp
eikKKyAgICAgICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX1JJR0hUOworICAgIGVsc2UKKyAgICAg
ICAgYXJyb3dUeXBlID0gR1RLX0FSUk9XX0RPV047CisKKyAgICBndGtfcGFpbnRfYXJyb3coIGJ1
dHRvbi0+c3R5bGUsIGdka193aW5kb3csIEdUS19TVEFURV9OT1JNQUwsIEdUS19TSEFET1dfT1VU
LCBOVUxMLCBidXR0b24sICJhcnJvdyIsIGFycm93VHlwZSwgZmFsc2UsIHggKyA0LCB5ICsgNCwg
OCwgOCk7Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS9zY3JvbGxiYXJfcmVu
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvc2Nyb2xsYmFy
X3JlbmRlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvc2Ny
b2xsYmFyX3JlbmRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEtldmluIE9sbGl2aWVyICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIHNjcm9sbGJhcl9yZW5kZXJfaAorI2RlZmluZSBzY3JvbGxiYXJfcmVuZGVy
X2gKKworI2luY2x1ZGUgPHd4L2RlZnMuaD4KKyNpbmNsdWRlIDx3eC9kYy5oPgorI2luY2x1ZGUg
PHd4L3JlbmRlcmVyLmg+CisKK2VudW0gd3hTY3JvbGxiYXJQYXJ0IHsKKyAgICB3eFNDUk9MTFBB
UlRfTk9ORSA9IDAsCisgICAgd3hTQ1JPTExQQVJUX0JBQ0tCVE5TVEFSVCA9IDEsCisgICAgd3hT
Q1JPTExQQVJUX0ZXREJUTlNUQVJUID0gMSA8PCAxLAorICAgIHd4U0NST0xMUEFSVF9CQUNLVFJB
Q0sgPSAxIDw8IDIsCisgICAgd3hTQ1JPTExQQVJUX1RIVU1CID0gMSA8PCAzLAorICAgIHd4U0NS
T0xMUEFSVF9GV0RUUkFDSyA9IDEgPDwgNCwKKyAgICB3eFNDUk9MTFBBUlRfQkFDS0JUTkVORCA9
IDEgPDwgNSwKKyAgICB3eFNDUk9MTFBBUlRfRldEQlRORU5EID0gMSA8PCA2LAorICAgIHd4U0NS
T0xMUEFSVF9TQ1JPTExCQVJCRyA9IDEgPDwgNywKKyAgICB3eFNDUk9MTFBBUlRfVFJBQ0tCRyA9
IDEgPDwgOCwKKyAgICB3eFNDUk9MTFBBUlRfQUxMID0gMHhmZmZmZmZmZiwKK307CisKK3ZvaWQg
d3hSZW5kZXJlcl9EcmF3U2Nyb2xsYmFyKHd4V2luZG93KiB3aW5kb3csIHd4REMmIGRjLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4UmVjdCYgcmVjdCwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eE9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBj
dXJyZW50LCB3eFNjcm9sbGJhclBhcnQgZm9jdXNQYXJ0LCB3eFNjcm9sbGJhclBhcnQgaG92ZXJQ
YXJ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXgsIGlu
dCBzdGVwLCBpbnQgZmxhZ3M9MCk7CisKK2lubGluZSB2b2lkIGNhbGNUaHVtYlN0YXJ0QW5kTGVu
Z3RoKGludCBwaHlzaWNhbExlbmd0aCwgaW50IHZpcnR1YWxMZW5ndGgsIGludCBjdXJyZW50LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0ZXAsIGludCAqdGh1bWJTdGFy
dCwgaW50ICp0aHVtYkxlbmd0aCkKK3sKKyAgICAgICAgZmxvYXQgcHJvcG9ydGlvbiA9IChmbG9h
dClwaHlzaWNhbExlbmd0aCAvIHZpcnR1YWxMZW5ndGg7CisgICAgICAgIGZsb2F0IHNjYWxlID0g
KGZsb2F0KXZpcnR1YWxMZW5ndGggLyBwaHlzaWNhbExlbmd0aDsKKyAgICAgICAgaW50IHRodW1i
U2l6ZSA9IHByb3BvcnRpb24gKiBwaHlzaWNhbExlbmd0aDsKKyAgICAgICAgaW50IGN1cnJlbnRQ
b3MgPSBjdXJyZW50IC8gc2NhbGU7CisgICAgICAgIAorICAgICAgICBpZiAodGh1bWJTdGFydCkK
KyAgICAgICAgICAgICp0aHVtYlN0YXJ0ID0gY3VycmVudFBvczsKKyAgICAgICAgCisgICAgICAg
IGlmICh0aHVtYkxlbmd0aCkKKyAgICAgICAgICAgICp0aHVtYkxlbmd0aCA9IHRodW1iU2l6ZTsK
K30KKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS93eC93eGNvZGUvd2luL3Njcm9sbGJh
cl9yZW5kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vd3gvd3hjb2RlL3dp
bi9zY3JvbGxiYXJfcmVuZGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
d3gvd3hjb2RlL3dpbi9zY3JvbGxiYXJfcmVuZGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2V2aW4gT2xsaXZpZXIgIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
InNjcm9sbGJhcl9yZW5kZXIuaCIKKworI2luY2x1ZGUgPHd4L2RlZnMuaD4KKworI2luY2x1ZGUg
PHd4L2RjLmg+CisjaW5jbHVkZSA8d3gvcmVuZGVyZXIuaD4KKyNpbmNsdWRlIDx3eC93aW5kb3cu
aD4KKworI2luY2x1ZGUgPHd4L21zdy9wcml2YXRlLmg+CisjaW5jbHVkZSA8d3gvbXN3L3V4dGhl
bWUuaD4KKworLy8gY29uc3RhbnRzCisjZGVmaW5lIFNQX0JVVFRPTiAgICAgICAgICAxCisjZGVm
aW5lIFNQX1RIVU1CSE9SICAgICAgICAyCisjZGVmaW5lIFNQX1RIVU1CVkVSVCAgICAgICAzCisj
ZGVmaW5lIFNQX1RSQUNLRU5ESE9SICAgICAgNAorI2RlZmluZSBTUF9UUkFDS0VORFZFUlQgICAg
IDcKKyNkZWZpbmUgU1BfR1JJUFBFUkhPUiAgICAgICA4CisjZGVmaW5lIFNQX0dSSVBQRVJWRVJU
ICAgICAgOQorCisjZGVmaW5lIFRTX05PUk1BTCAgICAgICAgICAgMQorI2RlZmluZSBUU19IT1ZF
UiAgICAgICAgICAgIDIKKyNkZWZpbmUgVFNfQUNUSVZFICAgICAgICAgICAzCisjZGVmaW5lIFRT
X0RJU0FCTEVEICAgICAgICAgNAorCisjZGVmaW5lIFRTX1VQX0JVVFRPTiAgICAgICAwCisjZGVm
aW5lIFRTX0RPV05fQlVUVE9OICAgICA0CisjZGVmaW5lIFRTX0xFRlRfQlVUVE9OICAgICA4Cisj
ZGVmaW5lIFRTX1JJR0hUX0JVVFRPTiAgICAxMgorCisjaWYgd3hVU0VfR1JBUEhJQ1NfQ09OVEVY
VAorLy8gVE9ETyByZW1vdmUgdGhpcyBkZXBlbmRlbmN5IChnZGlwbHVzIG5lZWRzIHRoZSBtYWNy
b3MpCisvLyB3ZSBuZWVkIHRvIHVuZGVmIGJlY2F1c2UgdGhlIG1hY3JvcyBhcmUgYmVpbmcgZGVm
aW5lZCBpbiBXZWJDb3JlUHJlZml4LmgKKy8vIGJ1dCBHZGlQbHVzLmggaXMgbm90IGFjY2VwdGlu
ZyB0aGVtCisjdW5kZWYgbWF4CisjZGVmaW5lIG1heChhLGIpICAgICAgICAgICAgKCgoYSkgPiAo
YikpID8gKGEpIDogKGIpKQorCisjdW5kZWYgbWluCisjZGVmaW5lIG1pbihhLGIpICAgICAgICAg
ICAgKCgoYSkgPCAoYikpID8gKGEpIDogKGIpKQorCisjaW5jbHVkZSA8d3gvZGNncmFwaC5oPgor
I2luY2x1ZGUgImdkaXBsdXMuaCIKK3VzaW5nIG5hbWVzcGFjZSBHZGlwbHVzOworI2VuZGlmIC8v
IHd4VVNFX0dSQVBISUNTX0NPTlRFWFQKKworY2xhc3MgR3JhcGhpY3NIREMKK3sKK3B1YmxpYzoK
KyAgICBHcmFwaGljc0hEQyh3eERDKiBkYykKKyAgICB7CisjaWYgd3hVU0VfR1JBUEhJQ1NfQ09O
VEVYVAorICAgICAgICBtX2dyYXBoaWNzID0gTlVMTDsKKyAgICAgICAgd3hHQ0RDKiBnY2RjID0g
d3hEeW5hbWljQ2FzdChkYywgd3hHQ0RDKTsKKyAgICAgICAgaWYgKGdjZGMpIHsKKyAgICAgICAg
ICAgIG1fZ3JhcGhpY3MgPSAoR3JhcGhpY3MqKWdjZGMtPkdldEdyYXBoaWNzQ29udGV4dCgpLT5H
ZXROYXRpdmVDb250ZXh0KCk7CisgICAgICAgICAgICBtX2hkYyA9IG1fZ3JhcGhpY3MtPkdldEhE
QygpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgbV9oZGMg
PSBHZXRIZGNPZigqZGMpOworICAgIH0KKworICAgIH5HcmFwaGljc0hEQygpCisgICAgeworI2lm
IHd4VVNFX0dSQVBISUNTX0NPTlRFWFQKKyAgICAgICAgaWYgKG1fZ3JhcGhpY3MpCisgICAgICAg
ICAgICBtX2dyYXBoaWNzLT5SZWxlYXNlSERDKG1faGRjKTsKKyNlbmRpZgorICAgIH0KKworICAg
IG9wZXJhdG9yIEhEQygpIGNvbnN0IHsgcmV0dXJuIG1faGRjOyB9CisKK3ByaXZhdGU6CisgICAg
SERDICAgICAgICAgbV9oZGM7CisjaWYgd3hVU0VfR1JBUEhJQ1NfQ09OVEVYVAorICAgIEdyYXBo
aWNzKiAgIG1fZ3JhcGhpY3M7CisjZW5kaWYKK307CisKK2ludCBnZXRUU1N0YXRlRm9yUGFydCh3
eFNjcm9sbGJhclBhcnQgcGFydCwgd3hTY3JvbGxiYXJQYXJ0IGZvY3VzUGFydCwgd3hTY3JvbGxi
YXJQYXJ0IGhvdmVyUGFydCwgaW50IGZsYWdzID0gMCkKK3sKKyAgICBpbnQgeHBTdGF0ZSA9IFRT
X05PUk1BTDsKKyAgICBpZiAoZmxhZ3MgJiB3eENPTlRST0xfRElTQUJMRUQpCisgICAgICAgIHhw
U3RhdGUgPSBUU19ESVNBQkxFRDsKKyAgICBlbHNlIGlmIChwYXJ0ID09IGZvY3VzUGFydCkKKyAg
ICAgICAgeHBTdGF0ZSA9IFRTX0FDVElWRTsKKyAgICBlbHNlIGlmIChwYXJ0ID09IGhvdmVyUGFy
dCkKKyAgICAgICAgeHBTdGF0ZSA9IFRTX0hPVkVSOworICAgICAgICAKKyAgICByZXR1cm4geHBT
dGF0ZTsKK30KKwordm9pZCB3eFJlbmRlcmVyX0RyYXdTY3JvbGxiYXIod3hXaW5kb3cqIHdpbmRv
dywgd3hEQyYgZGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHd4UmVjdCYg
cmVjdCwgd3hPcmllbnRhdGlvbiBvcmllbnQsIGludCBjdXJyZW50LCB3eFNjcm9sbGJhclBhcnQg
Zm9jdXNQYXJ0LCB3eFNjcm9sbGJhclBhcnQgaG92ZXJQYXJ0LCBpbnQgbWF4LCBpbnQgc3RlcCwg
aW50IGZsYWdzKQoreworICAgIHd4VXhUaGVtZUVuZ2luZSAqZW5naW5lID0gd3hVeFRoZW1lRW5n
aW5lOjpHZXQoKTsKKyAgICBIVEhFTUUgaFRoZW1lID0gKEhUSEVNRSllbmdpbmUtPk9wZW5UaGVt
ZURhdGEoMCwgTCJTQ1JPTExCQVIiKTsKKworICAgIGJvb2wgaG9yaXogPSBvcmllbnQgPT0gd3hI
T1JJWk9OVEFMOworICAgIGludCBwYXJ0ID0gMDsKKyAgICBpZiAoaG9yaXopCisgICAgICAgIHBh
cnQgPSBTUF9UUkFDS0VOREhPUjsKKyAgICBlbHNlCisgICAgICAgIHBhcnQgPSBTUF9UUkFDS0VO
RFZFUlQ7CisKKyAgICBpbnQgeHBTdGF0ZSA9IFRTX05PUk1BTDsKKyAgICBSRUNUIHI7CisgICAg
d3hDb3B5UmVjdFRvUkVDVChyZWN0LCByKTsKKworICAgIC8vIFVubGlrZSBNYWMsIG9uIE1TVyB5
b3UgZHJhdyB0aGUgc2Nyb2xsYmFyIHBpZWNlIGJ5IHBpZWNlLgorICAgIC8vIHNvIHdlIGRyYXcg
dGhlIHRyYWNrIGZpcnN0LCB0aGVuIHRoZSBidXR0b25zCisgICAgaWYgKGhUaGVtZSkKKyAgICB7
CisgICAgICAgIGVuZ2luZS0+RHJhd1RoZW1lQmFja2dyb3VuZChoVGhlbWUsIEdyYXBoaWNzSERD
KCZkYyksIHBhcnQsIHhwU3RhdGUsICZyLCAwKTsKKworICAgICAgICBpbnQgYnV0dG9uU2l6ZSA9
IDE2OworICAgICAgICAgICAgCisgICAgICAgIHBhcnQgPSBTUF9CVVRUT047CisgICAgICAgIHhw
U3RhdGUgPSBnZXRUU1N0YXRlRm9yUGFydCh3eFNDUk9MTFBBUlRfQkFDS0JUTlNUQVJULCBmb2N1
c1BhcnQsIGhvdmVyUGFydCwgZmxhZ3MpOworICAgICAgICB4cFN0YXRlICs9IGhvcml6ID8gVFNf
TEVGVF9CVVRUT04gOiBUU19VUF9CVVRUT047CisgICAgICAgIFJFQ1QgYnV0dG9uUmVjdCA9IHI7
CisgICAgICAgIGJ1dHRvblJlY3QuYm90dG9tID0gYnV0dG9uUmVjdC50b3AgKyBidXR0b25TaXpl
OworICAgICAgICBidXR0b25SZWN0LnJpZ2h0ID0gYnV0dG9uUmVjdC5sZWZ0ICsgYnV0dG9uU2l6
ZTsKKyAgICAgICAgZW5naW5lLT5EcmF3VGhlbWVCYWNrZ3JvdW5kKGhUaGVtZSwgR3JhcGhpY3NI
REMoJmRjKSwgcGFydCwgeHBTdGF0ZSwgJmJ1dHRvblJlY3QsIDApOworCisgICAgICAgIHhwU3Rh
dGUgPSBnZXRUU1N0YXRlRm9yUGFydCh3eFNDUk9MTFBBUlRfRldEQlRORU5ELCBmb2N1c1BhcnQs
IGhvdmVyUGFydCwgZmxhZ3MpOworICAgICAgICB4cFN0YXRlICs9IGhvcml6ID8gVFNfUklHSFRf
QlVUVE9OIDogVFNfRE9XTl9CVVRUT047CisgICAgICAgIGJ1dHRvblJlY3QgPSByOworICAgICAg
ICBidXR0b25SZWN0LnRvcCA9IGJ1dHRvblJlY3QuYm90dG9tIC0gYnV0dG9uU2l6ZTsKKyAgICAg
ICAgYnV0dG9uUmVjdC5sZWZ0ID0gYnV0dG9uUmVjdC5yaWdodCAtIGJ1dHRvblNpemU7CisgICAg
ICAgIGVuZ2luZS0+RHJhd1RoZW1lQmFja2dyb3VuZChoVGhlbWUsIEdyYXBoaWNzSERDKCZkYyks
IHBhcnQsIHhwU3RhdGUsICZidXR0b25SZWN0LCAwKTsKKworICAgICAgICBwYXJ0ID0gaG9yaXog
PyBTUF9USFVNQkhPUiA6IFNQX1RIVU1CVkVSVDsKKworICAgICAgICBpbnQgcGh5c2ljYWxMZW5n
dGggPSBob3JpeiA/IHJlY3Qud2lkdGggOiByZWN0LmhlaWdodDsKKyAgICAgICAgcGh5c2ljYWxM
ZW5ndGggLT0gYnV0dG9uU2l6ZSoyOworICAgICAgICBpbnQgdGh1bWJTdGFydCA9IDA7CisgICAg
ICAgIGludCB0aHVtYkxlbmd0aCA9IDA7CisgICAgICAgIGNhbGNUaHVtYlN0YXJ0QW5kTGVuZ3Ro
KHBoeXNpY2FsTGVuZ3RoLCBtYXggKyBzdGVwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJyZW50LCBzdGVwLCAmdGh1bWJTdGFydCwgJnRodW1iTGVuZ3RoKTsKKyAgICAgICAgYnV0
dG9uUmVjdCA9IHI7CisgICAgICAgIGlmIChob3JpeikgeworICAgICAgICAgICAgYnV0dG9uUmVj
dC5sZWZ0ID0gdGh1bWJTdGFydCArIGJ1dHRvblNpemU7CisgICAgICAgICAgICBidXR0b25SZWN0
LnJpZ2h0ID0gYnV0dG9uUmVjdC5sZWZ0ICsgdGh1bWJMZW5ndGg7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBidXR0b25SZWN0LnRvcCA9IHRodW1iU3RhcnQgKyBidXR0b25TaXplOwor
ICAgICAgICAgICAgYnV0dG9uUmVjdC5ib3R0b20gPSBidXR0b25SZWN0LnRvcCArIHRodW1iTGVu
Z3RoOworICAgICAgICB9CisKKyAgICAgICAgeHBTdGF0ZSA9IGdldFRTU3RhdGVGb3JQYXJ0KHd4
U0NST0xMUEFSVF9USFVNQiwgZm9jdXNQYXJ0LCBob3ZlclBhcnQsIGZsYWdzKTsKKyAgICAgICAg
ZW5naW5lLT5EcmF3VGhlbWVCYWNrZ3JvdW5kKGhUaGVtZSwgR3JhcGhpY3NIREMoJmRjKSwgcGFy
dCwgeHBTdGF0ZSwgJmJ1dHRvblJlY3QsIDApOworICAgICAgICAKKyAgICAgICAgLy8gZHJhdyB0
aGUgZ3JpcHBlcgorICAgICAgICBpbnQgdGhpY2tuZXNzID0gOjpHZXRTeXN0ZW1NZXRyaWNzKFNN
X0NYVlNDUk9MTCkgLyAyOworICAgICAgICAKKyAgICAgICAgYnV0dG9uUmVjdC5sZWZ0ICs9ICgo
YnV0dG9uUmVjdC5yaWdodCAtIGJ1dHRvblJlY3QubGVmdCkgLSB0aGlja25lc3MpIC8gMjsKKyAg
ICAgICAgYnV0dG9uUmVjdC50b3AgKz0gKChidXR0b25SZWN0LmJvdHRvbSAtIGJ1dHRvblJlY3Qu
dG9wKSAtIHRoaWNrbmVzcykgLyAyOworICAgICAgICBidXR0b25SZWN0LnJpZ2h0ID0gYnV0dG9u
UmVjdC5sZWZ0ICsgdGhpY2tuZXNzOworICAgICAgICBidXR0b25SZWN0LmJvdHRvbSA9IGJ1dHRv
blJlY3QudG9wICsgdGhpY2tuZXNzOworICAgICAgICAKKyAgICAgICAgaWYgKGhvcml6KQorICAg
ICAgICAgICAgcGFydCA9IFNQX0dSSVBQRVJIT1I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHBhcnQgPSBTUF9HUklQUEVSVkVSVDsKKyAgICAgICAgCisgICAgICAgIGVuZ2luZS0+RHJhd1Ro
ZW1lQmFja2dyb3VuZChoVGhlbWUsIEdyYXBoaWNzSERDKCZkYyksIHBhcnQsIHhwU3RhdGUsICZi
dXR0b25SZWN0LCAwKTsKKyAgICB9Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29k
ZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAkocmV2aXNpb24gNDgwMjQp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzksMTMgKzc5LDI0IEBACiAKICAgICAvLyBnZXQgdGhlIG5h
dGl2ZSBIREMgaGFuZGxlIHRvIGRyYXcgdXNpbmcgbmF0aXZlIEFQSXMKICAgICBIREMgaGRjID0g
MDsKKyAgICBmbG9hdCB5ID0gcG9pbnQueSgpIC0gZm9udC0+YXNjZW50KCk7CisgICAgZmxvYXQg
eCA9IHBvaW50LngoKTsKKwogI2lmIFVTRShXWEdDKQorICAgIC8vIHdoZW4gZ29pbmcgZnJvbSBH
ZGlQbHVzIC0+IEdkaSwgYW55IEdkaVBsdXMgdHJhbnNmb3JtYXRpb25zIGFyZSBsb3N0CisgICAg
Ly8gc28gd2UgbmVlZCB0byBhbHRlciB0aGUgY29vcmRpbmF0ZXMgdG8gcmVmbGVjdCB0aGVpciB0
cmFuc2Zvcm1lZCBwb2ludC4KKyAgICBkb3VibGUgeHRyYW5zID0gMDsKKyAgICBkb3VibGUgeXRy
YW5zID0gMDsKKyAgICAKICAgICB3eEdyYXBoaWNzQ29udGV4dCogZ2MgPSBkYy0+R2V0R3JhcGhp
Y3NDb250ZXh0KCk7CisgICAgZ2MtPkdldFRyYW5zZm9ybSgpLlRyYW5zZm9ybVBvaW50KCZ4dHJh
bnMsICZ5dHJhbnMpOwogICAgIEdkaXBsdXM6OkdyYXBoaWNzKiBnOwogICAgIGlmIChnYykgewog
ICAgICAgICBnID0gKEdkaXBsdXM6OkdyYXBoaWNzKilnYy0+R2V0TmF0aXZlQ29udGV4dCgpOwog
ICAgICAgICBoZGMgPSBnLT5HZXRIREMoKTsKICAgICB9CisgICAgeCArPSAoaW50KXh0cmFuczsK
KyAgICB5ICs9IChpbnQpeXRyYW5zOyAgICAKICNlbHNlCiAgICAgaGRjID0gc3RhdGljX2Nhc3Q8
SERDPihkYy0+R2V0SERDKCkpOwogI2VuZGlmCkBAIC05NSw5ICsxMDYsNiBAQAogICAgIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqICAgZ2x5cGhzICAgPSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7
CiAgICAgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyA9IGdseXBoQnVmZmVyLmFk
dmFuY2VzKGZyb20pOwogCi0gICAgZmxvYXQgeSA9IHBvaW50LnkoKSAtIGZvbnQtPmFzY2VudCgp
OwotICAgIGZsb2F0IHggPSBwb2ludC54KCk7Ci0KICAgICBpbnQqIHNwYWNpbmcgPSBuZXcgaW50
W251bUdseXBocyAtIGZyb21dOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlw
aHM7ICsraSkKICAgICAgICAgc3BhY2luZ1tpXSA9IGFkdmFuY2VzW2ldLndpZHRoKCk7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS93eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiA0
ODAyNCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEzLDggKzExMyw2IEBACiAKIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkgeyBub3RJbXBs
ZW1lbnRlZCgpOyB9IAogCi1TY3JvbGxiYXJUaGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRo
ZW1lKCkgeyBub3RJbXBsZW1lbnRlZCgpOyBzdGF0aWMgU2Nyb2xsYmFyVGhlbWUgdGhlbWU7IHJl
dHVybiAmdGhlbWU7IH0KLQogU3RyaW5nIEZpbGVDaG9vc2VyOjpiYXNlbmFtZUZvcldpZHRoKGNv
bnN0IEZvbnQmLCBpbnQgd2lkdGgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIFN0
cmluZygpOyB9CiAKIEljb246On5JY29uKCkgeyB9CkBAIC0xMjYsMTEgKzEyNCw2IEBACiB2b2lk
IEVkaXRvcjo6c2hvd0ZvbnRQYW5lbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBFZGl0
b3I6OnNob3dTdHlsZXNQYW5lbCgpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCi1ib29sIEV2ZW50
SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0IHsg
bm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1N1YmZyYW1lRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBG
cmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0
KFdpZGdldCopIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9Ci1ib29sIEV2ZW50
SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRn
ZXQqKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotCiB2b2lkIFNlYXJjaFBv
cHVwTWVudTo6c2F2ZVJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHNlYXJjaEl0ZW1zKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZv
aWQgU2VhcmNoUG9wdXBNZW51Ojpsb2FkUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgc2VhcmNoSXRlbXMpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQogU2VhcmNoUG9wdXBNZW51OjpTZWFyY2hQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBjbGll
bnQpIDogUG9wdXBNZW51KGNsaWVudCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3d4L1JlbmRlclRoZW1lV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vd3gvUmVuZGVyVGhlbWVXeC5jcHAJKHJldmlzaW9uIDQ4MDI0KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS93eC9SZW5kZXJUaGVtZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSG9zdFdpbmRvdy5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCkBAIC0x
MzgsNiArMTM5LDE1IEBACiAgICAgcmV0dXJuIHJ0OwogfQogCit3eFdpbmRvdyogbmF0aXZlV2lu
ZG93Rm9yUmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogbykKK3sKKyAgICBGcmFtZVZpZXcqIGZy
YW1lVmlldyA9IG8tPnZpZXcoKS0+ZnJhbWVWaWV3KCk7CisgICAgQVNTRVJUKGZyYW1lVmlldyk7
CisgICAgQVNTRVJUKGZyYW1lVmlldy0+aG9zdFdpbmRvdygpKTsKKyAgICByZXR1cm4gZnJhbWVW
aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtV2luZG93KCk7Cit9CisKKwogYm9vbCBSZW5kZXJU
aGVtZVd4Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBC
b3JkZXJEYXRhJiBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KSBjb25zdAogewpAQCAtMjUxLDEwICsyNjEsMjMgQEAKIAogYm9vbCBSZW5kZXJUaGVtZVd4Ojpw
YWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIHd4V2luZG93KiB3aW5kb3cgPSBvLT52aWV3
KCktPmZyYW1lVmlldygpLT5wbGF0Zm9ybVdpZGdldCgpOworICAgIHd4V2luZG93KiB3aW5kb3cg
PSBuYXRpdmVXaW5kb3dGb3JSZW5kZXJPYmplY3Qobyk7CiAgICAgd3hEQyogZGMgPSBzdGF0aWNf
Y2FzdDx3eERDKj4oaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgaW50IGZsYWdz
ID0gMDsKICAgICAKKyAgICBJbnRSZWN0IHJlY3QgPSByOyAKKworI2lmIFVTRShXWEdDKQorICAg
IGRvdWJsZSB4dHJhbnMgPSAwOworICAgIGRvdWJsZSB5dHJhbnMgPSAwOworICAgIAorICAgIHd4
R0NEQyogZ2NkYyA9IHN0YXRpY19jYXN0PHd4R0NEQyo+KGRjKTsKKyAgICB3eEdyYXBoaWNzQ29u
dGV4dCogZ2MgPSBnY2RjLT5HZXRHcmFwaGljc0NvbnRleHQoKTsKKyAgICBnYy0+R2V0VHJhbnNm
b3JtKCkuVHJhbnNmb3JtUG9pbnQoJnh0cmFucywgJnl0cmFucyk7CisgICAgcmVjdC5zZXRYKHIu
eCgpICsgKGludCl4dHJhbnMpOworICAgIHJlY3Quc2V0WShyLnkoKSArIChpbnQpeXRyYW5zKTsK
KyNlbmRpZgorCiAgICAgaWYgKCFpc0VuYWJsZWQobykpCiAgICAgICAgIGZsYWdzIHw9IHd4Q09O
VFJPTF9ESVNBQkxFRDsKIApAQCAtMjY2LDIwICsyODksMjAgQEAKICAgICAgICAgZmxhZ3MgfD0g
d3hDT05UUk9MX1BSRVNTRUQ7CiAgICAgCiAgICAgaWYgKHBhcnQgPT0gUHVzaEJ1dHRvblBhcnQg
fHwgcGFydCA9PSBCdXR0b25QYXJ0KQotICAgICAgICB3eFJlbmRlcmVyTmF0aXZlOjpHZXQoKS5E
cmF3UHVzaEJ1dHRvbih3aW5kb3csICpkYywgciwgZmxhZ3MpOworICAgICAgICB3eFJlbmRlcmVy
TmF0aXZlOjpHZXQoKS5EcmF3UHVzaEJ1dHRvbih3aW5kb3csICpkYywgcmVjdCwgZmxhZ3MpOwog
ICAgIGVsc2UgaWYocGFydCA9PSBSYWRpb1BhcnQpIHsKICAgICAgICAgaWYgKGlzQ2hlY2tlZChv
KSkKICAgICAgICAgICAgIGZsYWdzIHw9IHd4Q09OVFJPTF9DSEVDS0VEOwogI2lmIHd4Q0hFQ0tf
VkVSU0lPTigyLDksMCkKLSAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd1JhZGlv
QnV0dG9uKHdpbmRvdywgKmRjLCByLCBmbGFncyk7CisgICAgICAgIHd4UmVuZGVyZXJOYXRpdmU6
OkdldCgpLkRyYXdSYWRpb0J1dHRvbih3aW5kb3csICpkYywgcmVjdCwgZmxhZ3MpOwogI2Vsc2UK
LSAgICAgICAgd3hSZW5kZXJlcl9EcmF3UmFkaW9CdXR0b24od2luZG93LCAqZGMsIHIsIGZsYWdz
KTsKKyAgICAgICAgd3hSZW5kZXJlcl9EcmF3UmFkaW9CdXR0b24od2luZG93LCAqZGMsIHJlY3Qs
IGZsYWdzKTsKICNlbmRpZgogICAgIH0KICAgICBlbHNlIGlmKHBhcnQgPT0gQ2hlY2tib3hQYXJ0
KSB7CiAgICAgICAgIGlmIChpc0NoZWNrZWQobykpCiAgICAgICAgICAgICBmbGFncyB8PSB3eENP
TlRST0xfQ0hFQ0tFRDsKLSAgICAgICAgd3hSZW5kZXJlck5hdGl2ZTo6R2V0KCkuRHJhd0NoZWNr
Qm94KHdpbmRvdywgKmRjLCByLCBmbGFncyk7CisgICAgICAgIHd4UmVuZGVyZXJOYXRpdmU6Okdl
dCgpLkRyYXdDaGVja0JveCh3aW5kb3csICpkYywgcmVjdCwgZmxhZ3MpOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CkBAIC0yOTEsNyArMzE0LDcgQEAKIAogYm9vbCBSZW5kZXJUaGVtZVd4
OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIHd4V2luZG93KiB3aW5kb3cgPSBv
LT52aWV3KCktPmZyYW1lVmlldygpLT5wbGF0Zm9ybVdpZGdldCgpOworICAgIHd4V2luZG93KiB3
aW5kb3cgPSBuYXRpdmVXaW5kb3dGb3JSZW5kZXJPYmplY3Qobyk7CiAgICAgd3hEQyogZGMgPSBz
dGF0aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAjaWYgd3hD
SEVDS19WRVJTSU9OKDIsOSwwKQogICAgIHd4UmVuZGVyZXJOYXRpdmU6OkdldCgpLkRyYXdUZXh0
Q3RybCh3aW5kb3csICpkYywgciwgMCk7CkBAIC0zMTMsNyArMzM2LDcgQEAKICAgICAKIGJvb2wg
UmVuZGVyVGhlbWVXeDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIHd4V2luZG93
KiB3aW5kb3cgPSBvLT52aWV3KCktPmZyYW1lVmlldygpLT5wbGF0Zm9ybVdpZGdldCgpOworICAg
IHd4V2luZG93KiB3aW5kb3cgPSBuYXRpdmVXaW5kb3dGb3JSZW5kZXJPYmplY3Qobyk7CiAgICAg
d3hEQyogZGMgPSBzdGF0aWNfY2FzdDx3eERDKj4oaS5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgCiAgICAgaW50IGZsYWdzID0gMDsgICAgICAKQEAgLTM0Miw3ICszNjUsNyBAQAog
ICAgIAogYm9vbCBSZW5kZXJUaGVtZVd4OjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
CiB7Ci0gICAgd3hXaW5kb3cqIHdpbmRvdyA9IG8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPnBsYXRm
b3JtV2lkZ2V0KCk7CisgICAgd3hXaW5kb3cqIHdpbmRvdyA9IG5hdGl2ZVdpbmRvd0ZvclJlbmRl
ck9iamVjdChvKTsKICAgICB3eERDKiBkYyA9IHN0YXRpY19jYXN0PHd4REMqPihpLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAKICAgICBpbnQgZmxhZ3MgPSAwOyAgICAgIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lV3gu
aCIKKworI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgor
I2luY2x1ZGUgInNjcm9sbGJhcl9yZW5kZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNv
bXBvc2l0ZS5oIgorI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgPHd4L2RlZnMu
aD4KKyNpbmNsdWRlIDx3eC9zZXR0aW5ncy5oPgorCitjb25zdCBpbnQgY01hY0J1dHRvbk92ZXJs
YXAgPSA0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGJhclRoZW1lKiBTY3JvbGxi
YXJUaGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZVd4IHRo
ZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisKK1Njcm9sbGJhclRoZW1lV3g6On5TY3JvbGxi
YXJUaGVtZVd4KCkKK3sKK30KKworaW50IFNjcm9sbGJhclRoZW1lV3g6OnNjcm9sbGJhclRoaWNr
bmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQoreworICAgIGludCB0aGlja25lc3MgPSB3
eFN5c3RlbVNldHRpbmdzOjpHZXRNZXRyaWMod3hTWVNfVlNDUk9MTF9YKTsKKyAgICAKKyAgICAv
LyBmYWxsYmFjayBmb3Igd2hlbiBhIHBsYXRmb3JtIGRvZXNuJ3QgZGVmaW5lIHRoaXMgbWV0cmlj
CisgICAgaWYgKHRoaWNrbmVzcyA8PSAwKQorICAgICAgICB0aGlja25lc3MgPSAyMDsKKyAgICAK
KyAgICByZXR1cm4gdGhpY2tuZXNzOworfQorCitib29sIFNjcm9sbGJhclRoZW1lV3g6Omhhc1Ro
dW1iKFNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGlzIGp1c3Qg
Y2FsbGVkIGFzIGEgcGFpbnQtdGltZSBvcHRpbWl6YXRpb24gdG8gc2VlIGlmCisgICAgLy8gcGFp
bnRpbmcgdGhlIHRodW1iIGNhbiBiZSBza2lwcGVkLiAgV2UgZG9uJ3QgaGF2ZSB0byBiZSBleGFj
dCBoZXJlLgorICAgIHJldHVybiB0aHVtYkxlbmd0aChzY3JvbGxiYXIpID4gMDsKK30KKworSW50
U2l6ZSBTY3JvbGxiYXJUaGVtZVd4OjpidXR0b25TaXplKFNjcm9sbGJhciopIAoreworI2lmZGVm
IF9fV1hNQUNfXworICAgIHJldHVybiBJbnRTaXplKDIwLDIwKTsKKyNlbHNlCisgICAgcmV0dXJu
IEludFNpemUoMTYsMTYpOworI2VuZGlmCit9CisKKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZVd4
OjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0
LCBib29sKQoreworICAgIC8vIEZJWE1FOiBIYW5kbGluZyB0aGlzIGNhc2UgaXMgbmVlZGVkIHdo
ZW4gdGhlcmUgYXJlIHR3byBzZXRzIG9mIGFycm93IGJ1dHRvbnMKKyAgICAvLyBvbiBNYWMsIG9u
ZSBhdCB0aGUgdG9wIGFuZCBvbmUgYXQgdGhlIGJvdHRvbS4KKyAgICBpZiAocGFydCA9PSBCYWNr
QnV0dG9uRW5kUGFydCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEludFNpemUg
c2l6ZSA9IGJ1dHRvblNpemUoc2Nyb2xsYmFyKTsKKyAgICBpbnQgeCA9IHNjcm9sbGJhci0+eCgp
OworICAgIGludCB5ID0gc2Nyb2xsYmFyLT55KCk7CisgICAgCisjaWYgX19XWE1BQ19fCisgICAg
aWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAg
ICAgICB4ICs9IHNjcm9sbGJhci0+d2lkdGgoKSAtIChzaXplLndpZHRoKCkgKiAyKSArIGNNYWNC
dXR0b25PdmVybGFwOworICAgIGVsc2UKKyAgICAgICAgeSArPSBzY3JvbGxiYXItPmhlaWdodCgp
IC0gKHNpemUuaGVpZ2h0KCkgKiAyKSArIGNNYWNCdXR0b25PdmVybGFwOworI2VuZGlmCisgICAg
CisgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsK
K30KKworSW50UmVjdCBTY3JvbGxiYXJUaGVtZVd4Ojpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxi
YXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCBwYXJ0LCBib29sKQoreworICAgIC8vIEZJWE1F
OiBIYW5kbGluZyB0aGlzIGNhc2UgaXMgbmVlZGVkIHdoZW4gdGhlcmUgYXJlIHR3byBzZXRzIG9m
IGFycm93IGJ1dHRvbnMKKyAgICAvLyBvbiBNYWMsIG9uZSBhdCB0aGUgdG9wIGFuZCBvbmUgYXQg
dGhlIGJvdHRvbS4KKyAgICBpZiAocGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KQorICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOworCisgICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZShz
Y3JvbGxiYXIpOworICAgIGludCB4LCB5OworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgeworICAgICAgICB4ID0gc2Nyb2xsYmFyLT54KCkg
KyBzY3JvbGxiYXItPndpZHRoKCkgLSBzaXplLndpZHRoKCk7CisgICAgICAgIHkgPSBzY3JvbGxi
YXItPnkoKTsKKyAgICB9IGVsc2UgeworICAgICAgICB4ID0gc2Nyb2xsYmFyLT54KCk7CisgICAg
ICAgIHkgPSBzY3JvbGxiYXItPnkoKSArIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSBzaXplLmhlaWdo
dCgpOworICAgIH0KKyAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOworfQorCitJbnRSZWN0IFNjcm9sbGJhclRoZW1lV3g6OnRyYWNrUmVjdChTY3Jv
bGxiYXIqIHNjcm9sbGJhciwgYm9vbCkKK3sKKyAgICBJbnRTaXplIGJzID0gYnV0dG9uU2l6ZShz
Y3JvbGxiYXIpOworICAgIGludCB0cmFja1N0YXJ0ID0gMDsKKyAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHRyYWNrU3RhcnQg
PSBicy53aWR0aCgpOworICAgIGVsc2UKKyAgICAgICAgdHJhY2tTdGFydCA9IGJzLmhlaWdodCgp
OworICAgICAgICAKKyNpZiBfX1dYTUFDX18KKyAgICB0cmFja1N0YXJ0ID0gMDsKKyNlbmRpZgor
ICAgIAorICAgIGludCB0aGlja25lc3MgPSBzY3JvbGxiYXJUaGlja25lc3Moc2Nyb2xsYmFyLT5j
b250cm9sU2l6ZSgpKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpIHsKKyAgICAgICAgaWYgKHNjcm9sbGJhci0+d2lkdGgoKSA8IDIgKiB0
aGlja25lc3MpCisgICAgICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgICAgICByZXR1cm4g
SW50UmVjdChzY3JvbGxiYXItPngoKSArIHRyYWNrU3RhcnQsIHNjcm9sbGJhci0+eSgpLCBzY3Jv
bGxiYXItPndpZHRoKCkgLSAyICogYnMud2lkdGgoKSwgdGhpY2tuZXNzKTsKKyAgICB9CisgICAg
aWYgKHNjcm9sbGJhci0+aGVpZ2h0KCkgPCAyICogdGhpY2tuZXNzKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworICAgIHJldHVybiBJbnRSZWN0KHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSArIHRyYWNrU3RhcnQsIHRoaWNrbmVzcywgc2Nyb2xsYmFyLT5oZWlnaHQoKSAtIDIgKiBi
cy5oZWlnaHQoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyVGhlbWVXeDo6cGFpbnRTY3JvbGxDb3Ju
ZXIoU2Nyb2xsVmlldyogdmlldywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiBjb3JuZXJSZWN0KQoreworICAgIC8vIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlOjpwYWlu
dFNjcm9sbENvcm5lciBpbmNvcnJlY3RseSBhc3N1bWVzIHRoYXQgdGhlCisgICAgLy8gU2Nyb2xs
VmlldyBpcyBhIEZyYW1lVmlldyAoc2VlIEZyYW1lbGVzc1Njcm9sbFZpZXcpLCBzbyB3ZSBjYW5u
b3QgbGV0CisgICAgLy8gdGhhdCBjb2RlIHJ1bi4gIEZvciBGcmFtZVZpZXcncyB0aGlzIGlzIGNv
cnJlY3Qgc2luY2Ugd2UgZG9uJ3QgZG8gY3VzdG9tCisgICAgLy8gc2Nyb2xsYmFyIGNvcm5lciBy
ZW5kZXJpbmcsIHdoaWNoIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHN1cHBvcnRzLgorICAgIFNj
cm9sbGJhclRoZW1lOjpwYWludFNjcm9sbENvcm5lcih2aWV3LCBjb250ZXh0LCBjb3JuZXJSZWN0
KTsKK30KKworYm9vbCBTY3JvbGxiYXJUaGVtZVd4OjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJh
ciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IHd4T3JpZW50YXRpb24gb3JpZW50YXRpb24gPSAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIpID8gd3hIT1JJWk9OVEFMIDogd3hWRVJUSUNBTDsKKyAgICBp
bnQgZmxhZ3MgPSAwOworICAgIGlmIChzY3JvbGxiYXItPmNsaWVudCgpLT5pc0FjdGl2ZSgpKQor
ICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRk9DVVNFRDsKKyAgICAKKyAgICBpZiAoIXNjcm9s
bGJhci0+ZW5hYmxlZCgpKQorICAgICAgICBmbGFncyB8PSB3eENPTlRST0xfRElTQUJMRUQ7Cisg
ICAgCisgICAgd3hEQyogZGMgPSBzdGF0aWNfY2FzdDx3eERDKj4oY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCkpOworICAgIAorICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICBTY3JvbGxWaWV3KiBy
b290ID0gc2Nyb2xsYmFyLT5yb290KCk7CisgICAgQVNTRVJUKHJvb3QpOworICAgIGlmICghcm9v
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHd4V2luZG93KiB3ZWJ2aWV3ID0g
cm9vdC0+aG9zdFdpbmRvdygpLT5wbGF0Zm9ybVdpbmRvdygpOyAKKyAgICAKKyAgICB3eFJlbmRl
cmVyX0RyYXdTY3JvbGxiYXIod2VidmlldywgKmRjLCBzY3JvbGxiYXItPmZyYW1lUmVjdCgpLCBv
cmllbnRhdGlvbiwgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCksIHN0YXRpY19jYXN0PHd4U2Nyb2xs
YmFyUGFydD4oc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKSwgICAgCisgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDx3eFNjcm9sbGJhclBhcnQ+KHNjcm9sbGJhci0+aG92ZXJlZFBhcnQo
KSksIHNjcm9sbGJhci0+bWF4aW11bSgpLCBzY3JvbGxiYXItPnBhZ2VTdGVwKCksIGZsYWdzKTsK
KworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vd3gvU2Nyb2xsYmFyVGhlbWVXeC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgU2Nyb2xsYmFyVGhlbWVXeF9oCisjZGVmaW5lIFNjcm9sbGJhclRoZW1lV3hf
aAorCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVt
ZUNvbXBvc2l0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRo
ZW1lV3ggOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUgeworcHVibGljOgorICAgIHZp
cnR1YWwgflNjcm9sbGJhclRoZW1lV3goKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgPSBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnQoU2Nyb2xsYmFyKiwgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgdmlydHVhbCB2b2lkIHBhaW50U2Nyb2xsQ29ybmVyKFNjcm9sbFZpZXcqLCBH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiBjb3JuZXJSZWN0KTsKKyAgICAKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgaGFzQnV0dG9ucyhTY3JvbGxiYXIqKSB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBib29sIGhhc1RodW1iKFNjcm9sbGJhciopOworCisgICAgdmly
dHVhbCBJbnRTaXplIGJ1dHRvblNpemUoU2Nyb2xsYmFyKik7CisKKyAgICB2aXJ0dWFsIEludFJl
Y3QgYmFja0J1dHRvblJlY3QoU2Nyb2xsYmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGlu
ZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFsIEludFJlY3QgZm9yd2FyZEJ1dHRvblJlY3QoU2Nyb2xs
YmFyKiwgU2Nyb2xsYmFyUGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKTsKKyAgICB2aXJ0dWFs
IEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhciosIGJvb2wgcGFpbnRpbmcgPSBmYWxzZSk7Cit9
OworCit9CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd2ViY29yZS13eC5ia2wKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS93ZWJjb3JlLXd4LmJrbAkocmV2aXNpb24gNDgwMjQpCisrKyBXZWJDb3JlL3dl
YmNvcmUtd3guYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTcgKzExMSwyMCBAQAogICAgICAg
ICAgICAgPGlmIGNvbmQ9IldYX1BPUlQ9PSdndGsyJyI+CiAgICAgICAgICAgICAgICAgcGxhdGZv
cm0vd3gvd3hjb2RlL2d0ay9mb250cHJvcHMuY3BwCiAgICAgICAgICAgICAgICAgcGxhdGZvcm0v
d3gvd3hjb2RlL2d0ay9ub24ta2VybmVkLWRyYXdpbmcuY3BwCisgICAgICAgICAgICAgICAgcGxh
dGZvcm0vd3gvd3hjb2RlL2d0ay9zY3JvbGxiYXJfcmVuZGVyLmNwcAogICAgICAgICAgICAgICAg
IHBsYXRmb3JtL3d4L1NoYXJlZFRpbWVyV3guY3BwCiAgICAgICAgICAgICA8L2lmPgogICAgICAg
ICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX09TPT0nbWFjJyI+CiAgICAgICAgICAgICAgICAgcGxh
dGZvcm0vbWFjL1B1cmdlYWJsZUJ1ZmZlck1hYy5jcHAKICAgICAgICAgICAgICAgICBwbGF0Zm9y
bS93eC93eGNvZGUvbWFjL2NhcmJvbi9mb250cHJvcHMuY3BwCiAgICAgICAgICAgICAgICAgcGxh
dGZvcm0vd3gvd3hjb2RlL21hYy9jYXJib24vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAorICAgICAg
ICAgICAgICAgIHBsYXRmb3JtL3d4L3d4Y29kZS9tYWMvY2FyYm9uL3Njcm9sbGJhcl9yZW5kZXIu
Y3BwCiAgICAgICAgICAgICAgICAgcGxhdGZvcm0vd3gvU2hhcmVkVGltZXJXeC5jcHAKICAgICAg
ICAgICAgIDwvaWY+CiAgICAgICAgICAgICA8aWYgY29uZD0iV1hfUE9SVD09J21zdyciPgogICAg
ICAgICAgICAgICAgIHBsYXRmb3JtL3d4L3d4Y29kZS93aW4vZm9udHByb3BzLmNwcAogICAgICAg
ICAgICAgICAgIHBsYXRmb3JtL3d4L3d4Y29kZS93aW4vbm9uLWtlcm5lZC1kcmF3aW5nLmNwcAor
ICAgICAgICAgICAgICAgIHBsYXRmb3JtL3d4L3d4Y29kZS93aW4vc2Nyb2xsYmFyX3JlbmRlci5j
cHAKICAgICAgICAgICAgICAgICA8IS0tIGdyYWIgdGhlIHdpbmRvd3MgcG9ydCdzIFNoYXJlZFRp
bWVyIGltcGxlbWVudGF0aW9uIC0tPgogICAgICAgICAgICAgICAgIHBsYXRmb3JtL3dpbi9TaGFy
ZWRUaW1lcldpbi5jcHAKICAgICAgICAgICAgICAgICBwYWdlL3dpbi9QYWdlV2luLmNwcApJbmRl
eDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gNDgwMjQpCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOS0wMyAgS2V2aW4gV2F0dGVycyAgPGtldmlu
d2F0dGVyc0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW3d4XSBGcmFtZXMgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNDEKKworICAgICAgICAqIHd4L2J1aWxkLXd4d2Vi
a2l0OgorCiAyMDA5LTA5LTAyICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJrIFJvd2UuCkluZGV4OiBXZWJLaXRU
b29scy93eC9idWlsZC13eHdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy93eC9idWls
ZC13eHdlYmtpdAkocmV2aXNpb24gNDgwMjQpCisrKyBXZWJLaXRUb29scy93eC9idWlsZC13eHdl
YmtpdAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCw3IEBACiAgICAgICAgICAgICAgICAg
UFlfTElCRElSPWBweXRob24gLWMgImltcG9ydCBkaXN0dXRpbHMuc3lzY29uZmlnOyBpbXBvcnQg
c3lzOyBzeXMuc3Rkb3V0LndyaXRlKGRpc3R1dGlscy5zeXNjb25maWcuUFJFRklYKSJgCiAgICAg
ICAgICAgICAgICAgUFlfTElCRElSPSIkUFlfTElCRElSXFxMaWJzIgogICAgICAgICAgICAgICAg
IFBZX0xJQj1gcHl0aG9uIC1jICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCdweXRob24n
ICsgc3lzLnZlcnNpb25bOjNdKSJgCi0gICAgICAgICAgICAgICAgUFlfTElCPWBweXRob24gLWMg
InN5cy5zdGRvdXQud3JpdGUoJyRQWV9MSUInLnJlcGxhY2UoJy4nLCAnJykpImAKKyAgICAgICAg
ICAgICAgICBQWV9MSUI9YHB5dGhvbiAtYyAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgn
JFBZX0xJQicucmVwbGFjZSgnLicsICcnKSkiYAogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIFBZX0xJQj1gcHl0aG9uLWNvbmZpZyAtLWxpYnNgCiAgICAgICAgICAgICAgICAgUFlf
TElCRElSPWBweXRob24tY29uZmlnIC0tbGRmbGFnc2AK
</data>
<flag name="review"
          id="20020"
          type_id="1"
          status="+"
          setter="kevino"
    />
    <flag name="commit-queue"
          id="20021"
          type_id="3"
          status="-"
          setter="kevino"
    />
          </attachment>
      

    </bug>

</bugzilla>