<?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>161574</bug_id>
          
          <creation_ts>2016-09-04 08:50:06 -0700</creation_ts>
          <short_desc>Remove Style::PendingResources</short_desc>
          <delta_ts>2016-09-04 11:52:21 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1226268</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-09-04 08:50:06 -0700</bug_when>
    <thetext>RenderStyle contains all the information needed to initialize resource loads. There is no need for this side structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226270</commentid>
    <comment_count>1</comment_count>
      <attachid>287908</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-09-04 09:02:38 -0700</bug_when>
    <thetext>Created attachment 287908
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226271</commentid>
    <comment_count>2</comment_count>
      <attachid>287909</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-09-04 09:05:15 -0700</bug_when>
    <thetext>Created attachment 287909
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226272</commentid>
    <comment_count>3</comment_count>
      <attachid>287910</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-09-04 09:13:36 -0700</bug_when>
    <thetext>Created attachment 287910
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226286</commentid>
    <comment_count>4</comment_count>
      <attachid>287910</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-09-04 11:14:26 -0700</bug_when>
    <thetext>Comment on attachment 287910
patch

k</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226298</commentid>
    <comment_count>5</comment_count>
      <attachid>287910</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-04 11:52:18 -0700</bug_when>
    <thetext>Comment on attachment 287910
patch

Clearing flags on attachment: 287910

Committed r205421: &lt;http://trac.webkit.org/changeset/205421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226299</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-04 11:52:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287908</attachid>
            <date>2016-09-04 09:02:38 -0700</date>
            <delta_ts>2016-09-04 09:05:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-stylependingresources.patch</filename>
            <type>text/plain</type>
            <size>24366</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE2LTA5LTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgU3R5bGU6OlBlbmRp
bmdSZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MTU3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmRlclN0eWxlIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGlu
aXRpYWxpemUgcmVzb3VyY2UgbG9hZHMuIFRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgc2lkZSBz
dHJ1Y3R1cmUuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjpsb2FkU3ViaW1hZ2VzKToKKworICAg
ICAgICAgICAgTG9hZCBleHRlcm5hbCBTVkcgcmVzb3VyY2VzIGFsb25nIHdpdGggYW55IGltYWdl
IHJlc291cmNlcy4KKworICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5
bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5o
OgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0eWxlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZSk6CisgICAg
ICAgICogY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVuc3VyZVBlbmRpbmdSZXNvdXJj
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVDYWNo
ZWRJbWFnZUZyb21WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OnRha2VQZW5kaW5nUmVzb3VyY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmxvYWRFeHRlcm5hbERvY3VtZW50SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpnZXRPckNyZWF0ZUNh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6U3R5bGVDYWNoZWRJbWFnZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjps
b2FkUGVuZGluZ1Jlc291cmNlcyk6CisKKyAgICAgICAgICAgIFRyaWdnZXIgcmVzb3VyY2UgbG9h
ZHMgYnkgY2hlY2tpbmcgcGVuZGluZyByZXNvdXJjZXMgaW4gUmVuZGVyU3R5bGUgdW5jb25kaXRp
b25hbGx5LiBLZWVwaW5nIHRyYWNrIG9mIHRoZW0KKyAgICAgICAgICAgIHNlcGFyYXRlbHkgd2Fz
bid0IG5lY2Vzc2FyeSBvciBhIG1lYW5pbmdmdWwgb3B0aW1pemF0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bG9hZFBlbmRpbmdJbWFnZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OmxvYWRQZW5kaW5nU1ZHRmlsdGVycyk6IERlbGV0ZWQuCisgICAgICAgICog
c3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmg6CisKIDIwMTYtMDktMDQgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVyc2Ugb3duZXJzaGlwIHJlbGF0
aW9uIG9mIFN0eWxlQ2FjaGVkSW1hZ2UgYW5kIENTU0ltYWdlVmFsdWUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJDcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTk2LDYgKzk3LDEzIEBAIHZvaWQgQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6bG9hZFN1YmltYWdlcygKICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmFkZENs
aWVudCgmbV9maWx0ZXJTdWJpbWFnZU9ic2VydmVyKTsKICAgICB9CiAKKyAgICBmb3IgKGF1dG8m
IGZpbHRlck9wZXJhdGlvbiA6IG1fZmlsdGVyT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKKyAg
ICAgICAgaWYgKCFpczxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbi5n
ZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgcmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqZmlsdGVy
T3BlcmF0aW9uKTsKKyAgICAgICAgcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uLmxvYWRFeHRlcm5h
bERvY3VtZW50SWZOZWVkZWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOworICAgIH0K
KwogICAgIG1fZmlsdGVyU3ViaW1hZ2VPYnNlcnZlci5zZXRSZWFkeSh0cnVlKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw5ICs2Niw5IEBAIGJvb2wgQ1NTVG9TdHlsZU1hcDo6dXNlU1ZHWm9vbVJ1bGVzKCkgY28KICAg
ICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzKCk7CiB9CiAKLVJlZlB0cjxTdHls
ZUltYWdlPiBDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
ZCwgQ1NTVmFsdWUmIHZhbHVlKQorUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0
eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHls
ZUltYWdlKHByb3BlcnR5SWQsIHZhbHVlKTsKKyAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJ
bWFnZSh2YWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
SW1hZ2UoQ1NTUHJvcAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGF5ZXIuc2V0SW1h
Z2Uoc3R5bGVJbWFnZShwcm9wZXJ0eUlELCB2YWx1ZSkpOworICAgIGxheWVyLnNldEltYWdlKHN0
eWxlSW1hZ2UodmFsdWUpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0
WChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5p
bmVQaWVjZUltYWdlKENTCiAKICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBib3JkZXJJbWFnZSkg
ewogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1
ZT4oY3VycmVudC5nZXQoKSkpCi0gICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdl
KGltYWdlUHJvcGVydHksIGN1cnJlbnQuZ2V0KCkpKTsKKyAgICAgICAgICAgIGltYWdlLnNldElt
YWdlKHN0eWxlSW1hZ2UoY3VycmVudC5nZXQoKSkpOwogICAgICAgICBlbHNlIGlmIChpczxDU1NC
b3JkZXJJbWFnZVNsaWNlVmFsdWU+KGN1cnJlbnQuZ2V0KCkpKQogICAgICAgICAgICAgbWFwTmlu
ZVBpZWNlSW1hZ2VTbGljZShjdXJyZW50LCBpbWFnZSk7CiAgICAgICAgIGVsc2UgaWYgKGlzPENT
U1ZhbHVlTGlzdD4oY3VycmVudC5nZXQoKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgc29ydCBvZiBTdHlsZUltYWdlQ2Fj
aGUgb2JqZWN0IHdoaWNoCiAgICAgLy8gaXMgaGVsZCBieSB0aGUgU3R5bGVSZXNvbHZlciwgYW5k
IGxpa2VseSBwcm92aWRlZCB0byB0aGlzIG9iamVjdAogICAgIC8vIGR1cmluZyB0aGUgcmVzb2x2
ZS4KLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSYpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAK
ICAgICBTdHlsZVJlc29sdmVyKiBtX3Jlc29sdmVyOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDA4LDcgKzQwOCw3IEBAIGlubGluZSBOaW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXIK
IHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogaW5saW5lIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFnZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0
eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpOworICAgIHJldHVybiBzdHls
ZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOwogfQogCiBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0
aW9ucyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtNzQxLDcgKzc0MSw3IEBAIGlu
bGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVpbGQKICAgICB9CiAKICAgICBpZiAo
aXNJbWFnZVNoYXBlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZUlt
YWdlVmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKENTU1Byb3BlcnR5V2Via2l0U2hhcGVP
dXRzaWRlLCB2YWx1ZSkpOworICAgICAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VW
YWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpKTsKIAogICAgIFJlZlB0cjxCYXNp
Y1NoYXBlPiBzaGFwZTsKICAgICBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveCA9IEJveE1pc3Npbmc7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNDcsNyArMTE0Nyw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWwKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBsaXN0KSB7CiAgICAgICAgIGlm
IChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtLmdldCgpKSkgewogICAgICAgICAgICAgYXV0
byYgaW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtLmdldCgpKTsKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXIu
c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS5ob3RTcG90KCkpOwor
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZl
ci5zdHlsZUltYWdlKGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKQEAgLTEzMTQsMTIgKzEzMTQsMTIgQEAgaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNldFZhbHVl
PihpdGVtLmdldCgpKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRD
b250ZW50KHN0eWxlUmVzb2x2ZXIuc3R5bGVDYWNoZWRJbWFnZUZyb21WYWx1ZShDU1NQcm9wZXJ0
eUNvbnRlbnQsIGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsK
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8
Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Q29udGVudChzdHlsZVJlc29sdmVyLnN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFs
dWUoQ1NTUHJvcGVydHlDb250ZW50LCBpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRl
bSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpjbGVhcigKICAgICBtX3BhcmVudFN0eWxlID0gbnVsbHB0cjsKICAgICBt
X293bmVkUGFyZW50U3R5bGUgPSBudWxscHRyOwogICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IG51
bGxwdHI7Ci0gICAgbV9wZW5kaW5nUmVzb3VyY2VzID0gbnVsbHB0cjsKICAgICBtX2Nzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgPSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiB9CiAKQEAg
LTM3OCwxMyArMzc3LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0UGFyZW50U3R5
bAogICAgIG1fcGFyZW50U3R5bGUgPSBtX293bmVkUGFyZW50U3R5bGUuZ2V0KCk7CiB9CiAKLVN0
eWxlOjpQZW5kaW5nUmVzb3VyY2VzJiBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6ZW5zdXJlUGVuZGlu
Z1Jlc291cmNlcygpCi17Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXMpCi0gICAgICAgIG1f
cGVuZGluZ1Jlc291cmNlcyA9IHN0ZDo6bWFrZV91bmlxdWU8U3R5bGU6OlBlbmRpbmdSZXNvdXJj
ZXM+KCk7Ci0gICAgcmV0dXJuICptX3BlbmRpbmdSZXNvdXJjZXM7Ci19Ci0KIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICBhdXRvKiBwYXJlbnROb2RlID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CkBAIC0xNzAwLDQwICsx
NjkyLDI1IEBAIFJlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWQKICAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShwcm9wSUQsIHZhbHVlLCBt
X3N0YXRlLnN0eWxlKCktPmN1c3RvbVByb3BlcnRpZXMoKSwgbV9zdGF0ZS5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgbV9zdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKIH0KIAotUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUmIHZhbHVlKQorUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVlKHByb3Bl
cnR5LCAqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxl
c1Jlc29sdmVkKHRoaXMpKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlR2VuZXJhdGVkSW1hZ2VGcm9t
VmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7
CisgICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpkb3duY2Fz
dDxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhp
cykpOworCisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRp
b25zLgorICAgICAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNy
ZWF0ZUZpbHRlck9wZXJhdGlvbnModGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0
eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Pih2YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkgfHwg
aXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFsdWUocHJvcGVydHks
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmPFN0eWxlQ2FjaGVkSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUmIHZhbHVlKQotewotICAgIGF1dG8gaW1hZ2UgPSBTdHlsZUNhY2hlZEltYWdl
OjpjcmVhdGUodmFsdWUpOwotICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nKCkpCi0gICAgICAgIG1f
c3RhdGUuZW5zdXJlUGVuZGluZ1Jlc291cmNlcygpLnBlbmRpbmdJbWFnZXMuc2V0KHByb3BlcnR5
LCAmdmFsdWUpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotUmVmPFN0eWxlR2VuZXJhdGVkSW1h
Z2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlR2VuZXJhdGVkSW1hZ2VGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewotICAgICAgICAvLyBGaWx0ZXJJbWFn
ZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAgZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModGhpcyk7
Ci0gICAgfQotICAgIGlmICh2YWx1ZS5pc1BlbmRpbmcoKSkKLSAgICAgICAgbV9zdGF0ZS5lbnN1
cmVQZW5kaW5nUmVzb3VyY2VzKCkucGVuZGluZ0ltYWdlcy5zZXQocHJvcGVydHksICZ2YWx1ZSk7
Ci0KLSAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKLX0KLQog
I2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVj
a0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKQEAgLTE5NjgsOSArMTk0
NSw2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW8KICAgICAgICAg
ICAgIFVSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCkuY29tcGxldGVVUkwoY3NzVXJsKTsKIAog
ICAgICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0g
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoY3NzVXJsLCB1cmwuZnJhZ21lbnRJZGVu
dGlmaWVyKCkpOwotICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVS
SVJlZmVyZW5jZShjc3NVcmwsIG1fc3RhdGUuZG9jdW1lbnQoKSkpCi0gICAgICAgICAgICAgICAg
c3RhdGUuZW5zdXJlUGVuZGluZ1Jlc291cmNlcygpLnBlbmRpbmdTVkdGaWx0ZXJzLmFwcGVuZChv
cGVyYXRpb24pOwotCiAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
b3BlcmF0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0yMDc4LDgg
KzIwNTIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzCiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0ltYWdlcyk7CiAgICAgVGVtcG9yYXJ5Q2hh
bmdlPGJvb2w+IGNoYW5nZUluTG9hZFBlbmRpbmdJbWFnZXMobV9pbkxvYWRQZW5kaW5nSW1hZ2Vz
LCB0cnVlKTsKIAotICAgIGlmIChhdXRvIHBlbmRpbmdSZXNvdXJjZXMgPSBzdGF0ZSgpLnRha2VQ
ZW5kaW5nUmVzb3VyY2VzKCkpCi0gICAgICAgIFN0eWxlOjpsb2FkUGVuZGluZ1Jlc291cmNlcygq
cGVuZGluZ1Jlc291cmNlcywgZG9jdW1lbnQoKSwgKnN0eWxlKCksIG1fc3RhdGUuZWxlbWVudCgp
KTsKKyAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKnN0eWxlKCksIGRvY3VtZW50KCks
IG1fc3RhdGUuZWxlbWVudCgpKTsKIH0KIAogaW5saW5lIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQ
cm9wZXJ0aWVzOjpNYXRjaGVkUHJvcGVydGllcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgY2xhc3MgU3R5bGVDYWNo
ZWRJbWFnZTsKIGNsYXNzIFN0eWxlR2VuZXJhdGVkSW1hZ2U7CiBjbGFzcyBTdHlsZUltYWdlOwog
Y2xhc3MgU3R5bGVLZXlmcmFtZTsKLWNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwogY2xhc3MgU3R5
bGVQcm9wZXJ0aWVzOwogY2xhc3MgU3R5bGVSdWxlOwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVz
OwpAQCAtNDA3LDkgKzQwNiw2IEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIHVzZVNWR1pvb21S
dWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVu
dCgpOyB9CiAKLSAgICAgICAgU3R5bGU6OlBlbmRpbmdSZXNvdXJjZXMmIGVuc3VyZVBlbmRpbmdS
ZXNvdXJjZXMoKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQZW5kaW5nUmVzb3Vy
Y2VzPiB0YWtlUGVuZGluZ1Jlc291cmNlcygpIHsgcmV0dXJuIFdURk1vdmUobV9wZW5kaW5nUmVz
b3VyY2VzKTsgfQotCiAgICAgICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Nzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE7IH0KIAogICAgICAgICBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKCkgY29u
c3QgeyByZXR1cm4gbV9jYXNjYWRlTGV2ZWw7IH0KQEAgLTQ0Niw3ICs0NDIsNiBAQCBwdWJsaWM6
CiAgICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhIHsgQmFja2dyb3VuZEZpbGxMYXll
ciB9OwogICAgICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKIAotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U3R5bGU6OlBlbmRpbmdSZXNvdXJjZXM+IG1fcGVuZGluZ1Jlc291cmNlczsKICAg
ICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGE7CiAgICAgICAgIAogICAgICAgICBDYXNjYWRlTGV2ZWwgbV9jYXNjYWRlTGV2ZWwgeyBVc2Vy
QWdlbnRMZXZlbCB9OwpAQCAtNDU5LDkgKzQ1NCw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSYgc3Rh
dGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQogCi0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2Uo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKLSAgICBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gc3R5
bGVDYWNoZWRJbWFnZUZyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOwotICAgIFJl
ZjxTdHlsZUdlbmVyYXRlZEltYWdlPiBzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmKTsKKyAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gc3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogCiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCk7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRp
b24uaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5
LDEyICs2MSwxNSBAQCBib29sIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9CiAg
ICAgCiAgICAgcmV0dXJuIG1fdXJsID09IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
bj4ob3BlcmF0aW9uKS5tX3VybDsKIH0KLSAgICAKLUNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
KiBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmdldE9yQ3JlYXRlQ2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UoKQorCit2b2lkIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6bG9hZEV4dGVybmFs
RG9jdW1lbnRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW1f
Y2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UpCi0gICAgICAgIG1fY2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlPiht
X3VybCk7Ci0gICAgcmV0dXJuIG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuZ2V0KCk7Cisg
ICAgaWYgKG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIVNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShtX3VybCwgKmNh
Y2hlZFJlc291cmNlTG9hZGVyLmRvY3VtZW50KCkpKQorICAgICAgICByZXR1cm47CisgICAgbV9j
YWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2U+KG1fdXJsKTsKKyAgICBtX2NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
LT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsKIH0KIAogdm9pZCBSZWZlcmVu
Y2VGaWx0ZXJPcGVyYXRpb246OnNldEZpbHRlckVmZmVjdChQYXNzUmVmUHRyPEZpbHRlckVmZmVj
dD4gZmlsdGVyRWZmZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0MiwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIENTUyBGaWx0ZXJzCiAKK2NsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwog
Y2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7Citz
dHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOwogCiBjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKIHB1YmxpYzoKQEAgLTE4NCw4ICsx
ODYsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X3VybDsgfQogICAgIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2Zy
YWdtZW50OyB9CiAKKyAgICB2b2lkIGxvYWRFeHRlcm5hbERvY3VtZW50SWZOZWVkZWQoQ2FjaGVk
UmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKwogICAgIENh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKiBjYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuZ2V0KCk7IH0KLSAgICBD
YWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSogZ2V0T3JDcmVhdGVDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZSgpOwogCiAgICAgRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlckVmZmVjdC5nZXQoKTsgfQogICAgIHZvaWQgc2V0RmlsdGVyRWZmZWN0KFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0Pik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBAIFN0eWxlQ2FjaGVkSW1hZ2U6OlN0eWxlQ2Fj
aGVkSW1hZ2UoQ1NTVmEKICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkg
fHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9jc3NWYWx1ZSkgfHwgaXM8Q1NTQ3Vyc29ySW1hZ2VW
YWx1ZT4obV9jc3NWYWx1ZSkpOwogCiAgICAgbV9pc0NhY2hlZEltYWdlID0gdHJ1ZTsKKworICAg
IC8vIENTU0ltYWdlVmFsdWUgZG9lc24ndCBnZXQgaW52YWxpZGF0ZWQgc28gd2UgY2FuIGdyYWIg
dGhlIENhY2hlZEltYWdlIGltbWVkaWF0ZWx5IGlmIGl0IGV4aXN0cy4KKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkpCisgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBkb3duY2Fz
dDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwogfQogCiBT
dHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVBlbmRpbmdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFs
dWUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNs
dWRlICJDdXJzb3JEYXRhLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgpAQCAtNjAsODIgKzU5
LDM1IEBAIHN0YXRpYyB2b2lkIGxvYWRQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGQKICAgICBjb25z
dF9jYXN0PFN0eWxlSW1hZ2UmPigqc3R5bGVJbWFnZSkubG9hZChkb2N1bWVudC5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLCBvcHRpb25zKTsKIH0KIAotc3RhdGljIHZvaWQgbG9hZFBlbmRpbmdJbWFn
ZXMoY29uc3QgUGVuZGluZ1Jlc291cmNlcyYgcGVuZGluZ1Jlc291cmNlcywgRG9jdW1lbnQmIGRv
Y3VtZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit2b2lk
IGxvYWRQZW5kaW5nUmVzb3VyY2VzKFJlbmRlclN0eWxlJiBzdHlsZSwgRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGZvciAoYXV0byBjdXJyZW50UHJv
cGVydHkgOiBwZW5kaW5nUmVzb3VyY2VzLnBlbmRpbmdJbWFnZXMua2V5cygpKSB7Ci0gICAgICAg
IHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogYmFja2dyb3VuZExheWVyID0g
JnN0eWxlLmVuc3VyZUJhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3Jv
dW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkKLSAgICAgICAgICAgICAgICBsb2Fk
UGVuZGluZ0ltYWdlKGRvY3VtZW50LCBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCksIGVsZW1lbnQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogY29udGVudERhdGEgPSBjb25zdF9j
YXN0PENvbnRlbnREYXRhKj4oc3R5bGUuY29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250
ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXM8
SW1hZ2VDb250ZW50RGF0YT4oKmNvbnRlbnREYXRhKSkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBzdHlsZUltYWdlID0gZG93bmNhc3Q8SW1hZ2VDb250ZW50RGF0YT4oKmNvbnRlbnREYXRh
KS5pbWFnZSgpOwotICAgICAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRvY3VtZW50
LCAmc3R5bGVJbWFnZSwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKGF1dG8qIGN1cnNvckxpc3QgPSBzdHlsZS5jdXJz
b3JzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxp
c3QtPnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRv
Y3VtZW50LCBjdXJzb3JMaXN0LT5hdChpKS5pbWFnZSgpLCBlbGVtZW50KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVu
dCwgc3R5bGUubGlzdFN0eWxlSW1hZ2UoKSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsK
LSAgICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHN0eWxlLmJvcmRlckltYWdl
U291cmNlKCksIGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChh
dXRvKiByZWZsZWN0aW9uID0gc3R5bGUuYm94UmVmbGVjdCgpKQotICAgICAgICAgICAgICAgIGxv
YWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHJlZmxlY3Rpb24tPm1hc2soKS5pbWFnZSgpLCBlbGVt
ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGxvYWRQZW5kaW5n
SW1hZ2UoZG9jdW1lbnQsIHN0eWxlLm1hc2tCb3hJbWFnZVNvdXJjZSgpLCBlbGVtZW50KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogbWFza0xheWVyID0gJnN0eWxl
LmVuc3VyZU1hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5l
eHQoKSkKLSAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRvY3VtZW50LCBtYXNrTGF5
ZXItPmltYWdlKCksIGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBl
T3V0c2lkZTogewotICAgICAgICAgICAgaWYgKHN0eWxlLnNoYXBlT3V0c2lkZSgpKQotICAgICAg
ICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHN0eWxlLnNoYXBlT3V0c2lkZSgp
LT5pbWFnZSgpLCBlbGVtZW50LCBMb2FkUG9saWN5OjpTaGFwZU91dHNpZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZm9yIChhdXRvKiBiYWNrZ3JvdW5kTGF5ZXIg
PSBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExh
eWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpCisgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2Uo
ZG9jdW1lbnQsIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSwgZWxlbWVudCk7CisKKyAgICBmb3Ig
KGF1dG8qIGNvbnRlbnREYXRhID0gc3R5bGUuY29udGVudERhdGEoKTsgY29udGVudERhdGE7IGNv
bnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgeworICAgICAgICBpZiAoaXM8SW1hZ2VD
b250ZW50RGF0YT4oKmNvbnRlbnREYXRhKSkgeworICAgICAgICAgICAgYXV0byYgc3R5bGVJbWFn
ZSA9IGRvd25jYXN0PEltYWdlQ29udGVudERhdGE+KCpjb250ZW50RGF0YSkuaW1hZ2UoKTsKKyAg
ICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsICZzdHlsZUltYWdlLCBlbGVtZW50
KTsKICAgICAgICAgfQogICAgIH0KLX0KIAotc3RhdGljIHZvaWQgbG9hZFBlbmRpbmdTVkdGaWx0
ZXJzKGNvbnN0IFBlbmRpbmdSZXNvdXJjZXMmIHBlbmRpbmdSZXNvdXJjZXMsIERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAocGVuZGluZ1Jlc291
cmNlcy5wZW5kaW5nU1ZHRmlsdGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoYXV0byogY3Vyc29yTGlzdCA9IHN0eWxlLmN1cnNvcnMoKSkgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgbG9h
ZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgY3Vyc29yTGlzdC0+YXQoaSkuaW1hZ2UoKSwgZWxlbWVu
dCk7CisgICAgfQogCi0gICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwotICAgIG9wdGlv
bnMuY29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbiA9IGVsZW1lbnQgJiYgZWxlbWVudC0+
aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSA/IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRp
b246OlNraXBQb2xpY3lDaGVjayA6IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb246OkRv
UG9saWN5Q2hlY2s7CisgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgc3R5bGUubGlzdFN0
eWxlSW1hZ2UoKSwgZWxlbWVudCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgc3R5
bGUuYm9yZGVySW1hZ2VTb3VyY2UoKSwgZWxlbWVudCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZShk
b2N1bWVudCwgc3R5bGUubWFza0JveEltYWdlU291cmNlKCksIGVsZW1lbnQpOwogCi0gICAgZm9y
IChhdXRvJiBmaWx0ZXJPcGVyYXRpb24gOiBwZW5kaW5nUmVzb3VyY2VzLnBlbmRpbmdTVkdGaWx0
ZXJzKQotICAgICAgICBmaWx0ZXJPcGVyYXRpb24tPmdldE9yQ3JlYXRlQ2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2UoKS0+bG9hZChkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLCBvcHRp
b25zKTsKLX0KKyAgICBpZiAoYXV0byogcmVmbGVjdGlvbiA9IHN0eWxlLmJveFJlZmxlY3QoKSkK
KyAgICAgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgcmVmbGVjdGlvbi0+bWFzaygpLmlt
YWdlKCksIGVsZW1lbnQpOwogCi12b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKGNvbnN0IFBlbmRp
bmdSZXNvdXJjZXMmIHBlbmRpbmdSZXNvdXJjZXMsIERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGxvYWRQZW5kaW5n
SW1hZ2VzKHBlbmRpbmdSZXNvdXJjZXMsIGRvY3VtZW50LCBzdHlsZSwgZWxlbWVudCk7Ci0gICAg
bG9hZFBlbmRpbmdTVkdGaWx0ZXJzKHBlbmRpbmdSZXNvdXJjZXMsIGRvY3VtZW50LCBlbGVtZW50
KTsKKyAgICBmb3IgKGF1dG8qIG1hc2tMYXllciA9IHN0eWxlLm1hc2tMYXllcnMoKTsgbWFza0xh
eWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkKKyAgICAgICAgbG9hZFBlbmRpbmdJ
bWFnZShkb2N1bWVudCwgbWFza0xheWVyLT5pbWFnZSgpLCBlbGVtZW50KTsKKworICAgIGlmIChz
dHlsZS5zaGFwZU91dHNpZGUoKSkKKyAgICAgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwg
c3R5bGUuc2hhcGVPdXRzaWRlKCktPmltYWdlKCksIGVsZW1lbnQsIExvYWRQb2xpY3k6OlNoYXBl
T3V0c2lkZSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGlu
Z1Jlc291cmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVu
ZGluZ1Jlc291cmNlcy5oCShyZXZpc2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVBlbmRpbmdSZXNvdXJjZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMjcgKzI1LDE1
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2lu
Y2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENTU1ZhbHVlOwogY2xhc3MgRG9jdW1lbnQ7CiBj
bGFzcyBFbGVtZW50OwogY2xhc3MgUmVuZGVyU3R5bGU7CiAKIG5hbWVzcGFjZSBTdHlsZSB7CiAK
LXN0cnVjdCBQZW5kaW5nUmVzb3VyY2VzIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBIYXNoTWFwPENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4+IHBl
bmRpbmdJbWFnZXM7Ci0gICAgVmVjdG9yPFJlZlB0cjxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+
PiBwZW5kaW5nU1ZHRmlsdGVyczsKLX07Ci0KLXZvaWQgbG9hZFBlbmRpbmdSZXNvdXJjZXMoY29u
c3QgUGVuZGluZ1Jlc291cmNlcyYsIERvY3VtZW50JiwgUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVt
ZW50Kik7Cit2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKFJlbmRlclN0eWxlJiwgRG9jdW1lbnQm
LCBjb25zdCBFbGVtZW50Kik7CiAKIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287909</attachid>
            <date>2016-09-04 09:05:15 -0700</date>
            <delta_ts>2016-09-04 09:13:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-stylependingresources-2.patch</filename>
            <type>text/plain</type>
            <size>24398</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE2LTA5LTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgU3R5bGU6OlBlbmRp
bmdSZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MTU3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmRlclN0eWxlIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGlu
aXRpYWxpemUgcmVzb3VyY2UgbG9hZHMuIFRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgc2lkZSBz
dHJ1Y3R1cmUuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjpsb2FkU3ViaW1hZ2VzKToKKworICAg
ICAgICAgICAgTG9hZCBleHRlcm5hbCBTVkcgcmVzb3VyY2VzIGFsb25nIHdpdGggYW55IGltYWdl
IHJlc291cmNlcy4KKworICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5
bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5o
OgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0eWxlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZSk6CisgICAg
ICAgICogY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVuc3VyZVBlbmRpbmdSZXNvdXJj
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVDYWNo
ZWRJbWFnZUZyb21WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OnRha2VQZW5kaW5nUmVzb3VyY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmxvYWRFeHRlcm5hbERvY3VtZW50SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpnZXRPckNyZWF0ZUNh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6U3R5bGVDYWNoZWRJbWFnZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjps
b2FkUGVuZGluZ1Jlc291cmNlcyk6CisKKyAgICAgICAgICAgIFRyaWdnZXIgcmVzb3VyY2UgbG9h
ZHMgYnkgY2hlY2tpbmcgcGVuZGluZyByZXNvdXJjZXMgaW4gUmVuZGVyU3R5bGUgdW5jb25kaXRp
b25hbGx5LiBLZWVwaW5nIHRyYWNrIG9mIHRoZW0KKyAgICAgICAgICAgIHNlcGFyYXRlbHkgd2Fz
bid0IG5lY2Vzc2FyeSBvciBhIG1lYW5pbmdmdWwgb3B0aW1pemF0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bG9hZFBlbmRpbmdJbWFnZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OmxvYWRQZW5kaW5nU1ZHRmlsdGVycyk6IERlbGV0ZWQuCisgICAgICAgICog
c3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmg6CisKIDIwMTYtMDktMDQgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVyc2Ugb3duZXJzaGlwIHJlbGF0
aW9uIG9mIFN0eWxlQ2FjaGVkSW1hZ2UgYW5kIENTU0ltYWdlVmFsdWUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJDcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTk2LDYgKzk3LDEzIEBAIHZvaWQgQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6bG9hZFN1YmltYWdlcygKICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmFkZENs
aWVudCgmbV9maWx0ZXJTdWJpbWFnZU9ic2VydmVyKTsKICAgICB9CiAKKyAgICBmb3IgKGF1dG8m
IGZpbHRlck9wZXJhdGlvbiA6IG1fZmlsdGVyT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKKyAg
ICAgICAgaWYgKCFpczxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbi5n
ZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgcmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqZmlsdGVy
T3BlcmF0aW9uKTsKKyAgICAgICAgcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uLmxvYWRFeHRlcm5h
bERvY3VtZW50SWZOZWVkZWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOworICAgIH0K
KwogICAgIG1fZmlsdGVyU3ViaW1hZ2VPYnNlcnZlci5zZXRSZWFkeSh0cnVlKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw5ICs2Niw5IEBAIGJvb2wgQ1NTVG9TdHlsZU1hcDo6dXNlU1ZHWm9vbVJ1bGVzKCkgY28KICAg
ICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzKCk7CiB9CiAKLVJlZlB0cjxTdHls
ZUltYWdlPiBDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
ZCwgQ1NTVmFsdWUmIHZhbHVlKQorUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0
eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHls
ZUltYWdlKHByb3BlcnR5SWQsIHZhbHVlKTsKKyAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJ
bWFnZSh2YWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
SW1hZ2UoQ1NTUHJvcAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGF5ZXIuc2V0SW1h
Z2Uoc3R5bGVJbWFnZShwcm9wZXJ0eUlELCB2YWx1ZSkpOworICAgIGxheWVyLnNldEltYWdlKHN0
eWxlSW1hZ2UodmFsdWUpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0
WChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKQEAgLTU2OCw3ICs1NjgsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcE5p
bmVQaWVjZUltYWdlKENTCiAKICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBib3JkZXJJbWFnZSkg
ewogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1
ZT4oY3VycmVudC5nZXQoKSkpCi0gICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHlsZUltYWdl
KGltYWdlUHJvcGVydHksIGN1cnJlbnQuZ2V0KCkpKTsKKyAgICAgICAgICAgIGltYWdlLnNldElt
YWdlKHN0eWxlSW1hZ2UoY3VycmVudC5nZXQoKSkpOwogICAgICAgICBlbHNlIGlmIChpczxDU1NC
b3JkZXJJbWFnZVNsaWNlVmFsdWU+KGN1cnJlbnQuZ2V0KCkpKQogICAgICAgICAgICAgbWFwTmlu
ZVBpZWNlSW1hZ2VTbGljZShjdXJyZW50LCBpbWFnZSk7CiAgICAgICAgIGVsc2UgaWYgKGlzPENT
U1ZhbHVlTGlzdD4oY3VycmVudC5nZXQoKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NUb1N0eWxlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5
bGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgogICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgc29ydCBvZiBTdHlsZUltYWdlQ2Fj
aGUgb2JqZWN0IHdoaWNoCiAgICAgLy8gaXMgaGVsZCBieSB0aGUgU3R5bGVSZXNvbHZlciwgYW5k
IGxpa2VseSBwcm92aWRlZCB0byB0aGlzIG9iamVjdAogICAgIC8vIGR1cmluZyB0aGUgcmVzb2x2
ZS4KLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlELCBDU1NW
YWx1ZSYpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAK
ICAgICBTdHlsZVJlc29sdmVyKiBtX3Jlc29sdmVyOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDA4LDcgKzQwOCw3IEBAIGlubGluZSBOaW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXIK
IHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogaW5saW5lIFBhc3NSZWZQdHI8U3R5
bGVJbWFnZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFnZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0
eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpOworICAgIHJldHVybiBzdHls
ZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOwogfQogCiBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0
aW9ucyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtNzQxLDcgKzc0MSw3IEBAIGlu
bGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVpbGQKICAgICB9CiAKICAgICBpZiAo
aXNJbWFnZVNoYXBlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZUlt
YWdlVmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKENTU1Byb3BlcnR5V2Via2l0U2hhcGVP
dXRzaWRlLCB2YWx1ZSkpOworICAgICAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlSW1hZ2VW
YWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpKTsKIAogICAgIFJlZlB0cjxCYXNp
Y1NoYXBlPiBzaGFwZTsKICAgICBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveCA9IEJveE1pc3Npbmc7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZpc2lvbiAy
MDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNDcsNyArMTE0Nyw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWwKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBsaXN0KSB7CiAgICAgICAgIGlm
IChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtLmdldCgpKSkgewogICAgICAgICAgICAgYXV0
byYgaW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtLmdldCgpKTsKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXIu
c3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS5ob3RTcG90KCkpOwor
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVSZXNvbHZl
ci5zdHlsZUltYWdlKGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAKQEAgLTEzMTQsMTIgKzEzMTQsMTIgQEAgaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNldFZhbHVl
PihpdGVtLmdldCgpKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRD
b250ZW50KHN0eWxlUmVzb2x2ZXIuc3R5bGVDYWNoZWRJbWFnZUZyb21WYWx1ZShDU1NQcm9wZXJ0
eUNvbnRlbnQsIGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsK
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8
Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Q29udGVudChzdHlsZVJlc29sdmVyLnN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFs
dWUoQ1NTUHJvcGVydHlDb250ZW50LCBpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRl
bSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJ
KHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw2IEBAIGlubGluZSB2b2lkIFN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpjbGVhcigKICAgICBtX3BhcmVudFN0eWxlID0gbnVsbHB0cjsKICAgICBt
X293bmVkUGFyZW50U3R5bGUgPSBudWxscHRyOwogICAgIG1fcmVnaW9uRm9yU3R5bGluZyA9IG51
bGxwdHI7Ci0gICAgbV9wZW5kaW5nUmVzb3VyY2VzID0gbnVsbHB0cjsKICAgICBtX2Nzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgPSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiB9CiAKQEAg
LTM3OCwxMyArMzc3LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0UGFyZW50U3R5
bAogICAgIG1fcGFyZW50U3R5bGUgPSBtX293bmVkUGFyZW50U3R5bGUuZ2V0KCk7CiB9CiAKLVN0
eWxlOjpQZW5kaW5nUmVzb3VyY2VzJiBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6ZW5zdXJlUGVuZGlu
Z1Jlc291cmNlcygpCi17Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXMpCi0gICAgICAgIG1f
cGVuZGluZ1Jlc291cmNlcyA9IHN0ZDo6bWFrZV91bmlxdWU8U3R5bGU6OlBlbmRpbmdSZXNvdXJj
ZXM+KCk7Ci0gICAgcmV0dXJuICptX3BlbmRpbmdSZXNvdXJjZXM7Ci19Ci0KIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAg
ICBhdXRvKiBwYXJlbnROb2RlID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CkBAIC0xNzAwLDQwICsx
NjkyLDI1IEBAIFJlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWQKICAgICBy
ZXR1cm4gcGFyc2VyLnBhcnNlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShwcm9wSUQsIHZhbHVlLCBt
X3N0YXRlLnN0eWxlKCktPmN1c3RvbVByb3BlcnRpZXMoKSwgbV9zdGF0ZS5zdHlsZSgpLT5kaXJl
Y3Rpb24oKSwgbV9zdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKIH0KIAotUmVmUHRyPFN0
eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUmIHZhbHVlKQorUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVlKHByb3Bl
cnR5LCAqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50V2l0aFN0eWxl
c1Jlc29sdmVkKHRoaXMpKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlR2VuZXJhdGVkSW1hZ2VGcm9t
VmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKSk7
CisgICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpkb3duY2Fz
dDxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2ZWQodGhp
cykpOworCisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkpIHsKKyAg
ICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJPcGVyYXRp
b25zLgorICAgICAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNy
ZWF0ZUZpbHRlck9wZXJhdGlvbnModGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0
eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVl
Pih2YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkgfHwg
aXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFsdWU+KHZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFsdWUocHJvcGVydHks
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2YWx1ZSk7
CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmPFN0eWxlQ2FjaGVkSW1hZ2U+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgQ1NTVmFsdWUmIHZhbHVlKQotewotICAgIGF1dG8gaW1hZ2UgPSBTdHlsZUNhY2hlZEltYWdl
OjpjcmVhdGUodmFsdWUpOwotICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nKCkpCi0gICAgICAgIG1f
c3RhdGUuZW5zdXJlUGVuZGluZ1Jlc291cmNlcygpLnBlbmRpbmdJbWFnZXMuc2V0KHByb3BlcnR5
LCAmdmFsdWUpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotUmVmPFN0eWxlR2VuZXJhdGVkSW1h
Z2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlR2VuZXJhdGVkSW1hZ2VGcm9tVmFsdWUoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgdmFsdWUpCi17Ci0gICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewotICAgICAgICAvLyBGaWx0ZXJJbWFn
ZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAgZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModGhpcyk7
Ci0gICAgfQotICAgIGlmICh2YWx1ZS5pc1BlbmRpbmcoKSkKLSAgICAgICAgbV9zdGF0ZS5lbnN1
cmVQZW5kaW5nUmVzb3VyY2VzKCkucGVuZGluZ0ltYWdlcy5zZXQocHJvcGVydHksICZ2YWx1ZSk7
Ci0KLSAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsKLX0KLQog
I2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogdm9pZCBTdHlsZVJlc29sdmVyOjpjaGVj
a0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKQEAgLTE5NjgsOSArMTk0
NSw2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW8KICAgICAgICAg
ICAgIFVSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCkuY29tcGxldGVVUkwoY3NzVXJsKTsKIAog
ICAgICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0aW9uID0g
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoY3NzVXJsLCB1cmwuZnJhZ21lbnRJZGVu
dGlmaWVyKCkpOwotICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVS
SVJlZmVyZW5jZShjc3NVcmwsIG1fc3RhdGUuZG9jdW1lbnQoKSkpCi0gICAgICAgICAgICAgICAg
c3RhdGUuZW5zdXJlUGVuZGluZ1Jlc291cmNlcygpLnBlbmRpbmdTVkdGaWx0ZXJzLmFwcGVuZChv
cGVyYXRpb24pOwotCiAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5hcHBlbmQo
b3BlcmF0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0yMDc4LDgg
KzIwNTIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2VzCiAgICAg
UkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0ltYWdlcyk7CiAgICAgVGVtcG9yYXJ5Q2hh
bmdlPGJvb2w+IGNoYW5nZUluTG9hZFBlbmRpbmdJbWFnZXMobV9pbkxvYWRQZW5kaW5nSW1hZ2Vz
LCB0cnVlKTsKIAotICAgIGlmIChhdXRvIHBlbmRpbmdSZXNvdXJjZXMgPSBzdGF0ZSgpLnRha2VQ
ZW5kaW5nUmVzb3VyY2VzKCkpCi0gICAgICAgIFN0eWxlOjpsb2FkUGVuZGluZ1Jlc291cmNlcygq
cGVuZGluZ1Jlc291cmNlcywgZG9jdW1lbnQoKSwgKnN0eWxlKCksIG1fc3RhdGUuZWxlbWVudCgp
KTsKKyAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKnN0eWxlKCksIGRvY3VtZW50KCks
IG1fc3RhdGUuZWxlbWVudCgpKTsKIH0KIAogaW5saW5lIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoZWRQ
cm9wZXJ0aWVzOjpNYXRjaGVkUHJvcGVydGllcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgY2xhc3MgU3R5bGVDYWNo
ZWRJbWFnZTsKIGNsYXNzIFN0eWxlR2VuZXJhdGVkSW1hZ2U7CiBjbGFzcyBTdHlsZUltYWdlOwog
Y2xhc3MgU3R5bGVLZXlmcmFtZTsKLWNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwogY2xhc3MgU3R5
bGVQcm9wZXJ0aWVzOwogY2xhc3MgU3R5bGVSdWxlOwogY2xhc3MgU3R5bGVSdWxlS2V5ZnJhbWVz
OwpAQCAtNDA3LDkgKzQwNiw2IEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIHVzZVNWR1pvb21S
dWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVu
dCgpOyB9CiAKLSAgICAgICAgU3R5bGU6OlBlbmRpbmdSZXNvdXJjZXMmIGVuc3VyZVBlbmRpbmdS
ZXNvdXJjZXMoKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQZW5kaW5nUmVzb3Vy
Y2VzPiB0YWtlUGVuZGluZ1Jlc291cmNlcygpIHsgcmV0dXJuIFdURk1vdmUobV9wZW5kaW5nUmVz
b3VyY2VzKTsgfQotCiAgICAgICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Nzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE7IH0KIAogICAgICAgICBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKCkgY29u
c3QgeyByZXR1cm4gbV9jYXNjYWRlTGV2ZWw7IH0KQEAgLTQ0Niw3ICs0NDIsNiBAQCBwdWJsaWM6
CiAgICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhIHsgQmFja2dyb3VuZEZpbGxMYXll
ciB9OwogICAgICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKIAotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U3R5bGU6OlBlbmRpbmdSZXNvdXJjZXM+IG1fcGVuZGluZ1Jlc291cmNlczsKICAg
ICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGE7CiAgICAgICAgIAogICAgICAgICBDYXNjYWRlTGV2ZWwgbV9jYXNjYWRlTGV2ZWwgeyBVc2Vy
QWdlbnRMZXZlbCB9OwpAQCAtNDU5LDkgKzQ1NCw3IEBAIHB1YmxpYzoKICAgICBTdGF0ZSYgc3Rh
dGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQogCi0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2Uo
Q1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKLSAgICBSZWY8U3R5bGVDYWNoZWRJbWFnZT4gc3R5
bGVDYWNoZWRJbWFnZUZyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOwotICAgIFJl
ZjxTdHlsZUdlbmVyYXRlZEltYWdlPiBzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVlKENTU1By
b3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmKTsKKyAgICBSZWZQdHI8U3R5bGVJbWFn
ZT4gc3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogCiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCk7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3Bl
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXJPcGVyYXRp
b24uaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2Uu
aCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5
LDEyICs2MSwxNSBAQCBib29sIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6b3BlcmF0b3I9CiAg
ICAgCiAgICAgcmV0dXJuIG1fdXJsID09IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJhdGlv
bj4ob3BlcmF0aW9uKS5tX3VybDsKIH0KLSAgICAKLUNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
KiBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmdldE9yQ3JlYXRlQ2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UoKQorCit2b2lkIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6bG9hZEV4dGVybmFs
RG9jdW1lbnRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3VyY2VMb2Fk
ZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW1f
Y2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UpCi0gICAgICAgIG1fY2FjaGVkU1ZHRG9jdW1lbnRS
ZWZlcmVuY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlPiht
X3VybCk7Ci0gICAgcmV0dXJuIG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuZ2V0KCk7Cisg
ICAgaWYgKG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIVNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShtX3VybCwgKmNh
Y2hlZFJlc291cmNlTG9hZGVyLmRvY3VtZW50KCkpKQorICAgICAgICByZXR1cm47CisgICAgbV9j
YWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2U+KG1fdXJsKTsKKyAgICBtX2NhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNl
LT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsKIH0KIAogdm9pZCBSZWZlcmVu
Y2VGaWx0ZXJPcGVyYXRpb246OnNldEZpbHRlckVmZmVjdChQYXNzUmVmUHRyPEZpbHRlckVmZmVj
dD4gZmlsdGVyRWZmZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9w
ZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0MiwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIC8vIENTUyBGaWx0ZXJzCiAKK2NsYXNzIENhY2hlZFJlc291cmNlTG9hZGVyOwog
Y2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7Citz
dHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOwogCiBjbGFzcyBGaWx0ZXJPcGVyYXRpb24gOiBw
dWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKIHB1YmxpYzoKQEAgLTE4NCw4ICsx
ODYsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X3VybDsgfQogICAgIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2Zy
YWdtZW50OyB9CiAKKyAgICB2b2lkIGxvYWRFeHRlcm5hbERvY3VtZW50SWZOZWVkZWQoQ2FjaGVk
UmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKwogICAgIENh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKiBjYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuZ2V0KCk7IH0KLSAgICBD
YWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSogZ2V0T3JDcmVhdGVDYWNoZWRTVkdEb2N1bWVudFJl
ZmVyZW5jZSgpOwogCiAgICAgRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2ZpbHRlckVmZmVjdC5nZXQoKTsgfQogICAgIHZvaWQgc2V0RmlsdGVyRWZmZWN0KFBh
c3NSZWZQdHI8RmlsdGVyRWZmZWN0Pik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDU0MTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBAIFN0eWxlQ2FjaGVkSW1hZ2U6OlN0eWxlQ2Fj
aGVkSW1hZ2UoQ1NTVmEKICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkg
fHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9jc3NWYWx1ZSkgfHwgaXM8Q1NTQ3Vyc29ySW1hZ2VW
YWx1ZT4obV9jc3NWYWx1ZSkpOwogCiAgICAgbV9pc0NhY2hlZEltYWdlID0gdHJ1ZTsKKworICAg
IC8vIENTU0ltYWdlVmFsdWUgZG9lc24ndCBnZXQgaW52YWxpZGF0ZWQgc28gd2UgY2FuIGdyYWIg
dGhlIENhY2hlZEltYWdlIGltbWVkaWF0ZWx5IGlmIGl0IGV4aXN0cy4KKyAgICBpZiAoaXM8Q1NT
SW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkpCisgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBkb3duY2Fz
dDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwogfQogCiBT
dHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVBlbmRpbmdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAJKHJldmlzaW9uIDIwNTQxOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFs
dWUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNhY2hl
ZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNs
dWRlICJDdXJzb3JEYXRhLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgpAQCAtNjAsODIgKzU5
LDM3IEBAIHN0YXRpYyB2b2lkIGxvYWRQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGQKICAgICBjb25z
dF9jYXN0PFN0eWxlSW1hZ2UmPigqc3R5bGVJbWFnZSkubG9hZChkb2N1bWVudC5jYWNoZWRSZXNv
dXJjZUxvYWRlcigpLCBvcHRpb25zKTsKIH0KIAotc3RhdGljIHZvaWQgbG9hZFBlbmRpbmdJbWFn
ZXMoY29uc3QgUGVuZGluZ1Jlc291cmNlcyYgcGVuZGluZ1Jlc291cmNlcywgRG9jdW1lbnQmIGRv
Y3VtZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCit2b2lk
IGxvYWRQZW5kaW5nUmVzb3VyY2VzKFJlbmRlclN0eWxlJiBzdHlsZSwgRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGZvciAoYXV0byBjdXJyZW50UHJv
cGVydHkgOiBwZW5kaW5nUmVzb3VyY2VzLnBlbmRpbmdJbWFnZXMua2V5cygpKSB7Ci0gICAgICAg
IHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogYmFja2dyb3VuZExheWVyID0g
JnN0eWxlLmVuc3VyZUJhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBiYWNrZ3Jv
dW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkKLSAgICAgICAgICAgICAgICBsb2Fk
UGVuZGluZ0ltYWdlKGRvY3VtZW50LCBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCksIGVsZW1lbnQp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogY29udGVudERhdGEgPSBjb25zdF9j
YXN0PENvbnRlbnREYXRhKj4oc3R5bGUuY29udGVudERhdGEoKSk7IGNvbnRlbnREYXRhOyBjb250
ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXM8
SW1hZ2VDb250ZW50RGF0YT4oKmNvbnRlbnREYXRhKSkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvJiBzdHlsZUltYWdlID0gZG93bmNhc3Q8SW1hZ2VDb250ZW50RGF0YT4oKmNvbnRlbnREYXRh
KS5pbWFnZSgpOwotICAgICAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRvY3VtZW50
LCAmc3R5bGVJbWFnZSwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKGF1dG8qIGN1cnNvckxpc3QgPSBzdHlsZS5jdXJz
b3JzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxp
c3QtPnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRv
Y3VtZW50LCBjdXJzb3JMaXN0LT5hdChpKS5pbWFnZSgpLCBlbGVtZW50KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVu
dCwgc3R5bGUubGlzdFN0eWxlSW1hZ2UoKSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6IHsK
LSAgICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHN0eWxlLmJvcmRlckltYWdl
U291cmNlKCksIGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAgIGlmIChh
dXRvKiByZWZsZWN0aW9uID0gc3R5bGUuYm94UmVmbGVjdCgpKQotICAgICAgICAgICAgICAgIGxv
YWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHJlZmxlY3Rpb24tPm1hc2soKS5pbWFnZSgpLCBlbGVt
ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGxvYWRQZW5kaW5n
SW1hZ2UoZG9jdW1lbnQsIHN0eWxlLm1hc2tCb3hJbWFnZVNvdXJjZSgpLCBlbGVtZW50KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogbWFza0xheWVyID0gJnN0eWxl
LmVuc3VyZU1hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5l
eHQoKSkKLSAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRvY3VtZW50LCBtYXNrTGF5
ZXItPmltYWdlKCksIGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNp
ZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBl
T3V0c2lkZTogewotICAgICAgICAgICAgaWYgKHN0eWxlLnNoYXBlT3V0c2lkZSgpKQotICAgICAg
ICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHN0eWxlLnNoYXBlT3V0c2lkZSgp
LT5pbWFnZSgpLCBlbGVtZW50LCBMb2FkUG9saWN5OjpTaGFwZU91dHNpZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZm9yIChhdXRvKiBiYWNrZ3JvdW5kTGF5ZXIg
PSBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dyb3VuZExh
eWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpCisgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2Uo
ZG9jdW1lbnQsIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSwgZWxlbWVudCk7CisKKyAgICBmb3Ig
KGF1dG8qIGNvbnRlbnREYXRhID0gc3R5bGUuY29udGVudERhdGEoKTsgY29udGVudERhdGE7IGNv
bnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgeworICAgICAgICBpZiAoaXM8SW1hZ2VD
b250ZW50RGF0YT4oKmNvbnRlbnREYXRhKSkgeworICAgICAgICAgICAgYXV0byYgc3R5bGVJbWFn
ZSA9IGRvd25jYXN0PEltYWdlQ29udGVudERhdGE+KCpjb250ZW50RGF0YSkuaW1hZ2UoKTsKKyAg
ICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsICZzdHlsZUltYWdlLCBlbGVtZW50
KTsKICAgICAgICAgfQogICAgIH0KLX0KIAotc3RhdGljIHZvaWQgbG9hZFBlbmRpbmdTVkdGaWx0
ZXJzKGNvbnN0IFBlbmRpbmdSZXNvdXJjZXMmIHBlbmRpbmdSZXNvdXJjZXMsIERvY3VtZW50JiBk
b2N1bWVudCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAocGVuZGluZ1Jlc291
cmNlcy5wZW5kaW5nU1ZHRmlsdGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoYXV0byogY3Vyc29yTGlzdCA9IHN0eWxlLmN1cnNvcnMoKSkgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKQorICAgICAgICAgICAgbG9h
ZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgY3Vyc29yTGlzdC0+YXQoaSkuaW1hZ2UoKSwgZWxlbWVu
dCk7CisgICAgfQogCi0gICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwotICAgIG9wdGlv
bnMuY29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbiA9IGVsZW1lbnQgJiYgZWxlbWVudC0+
aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSA/IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRp
b246OlNraXBQb2xpY3lDaGVjayA6IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRpb246OkRv
UG9saWN5Q2hlY2s7CisgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgc3R5bGUubGlzdFN0
eWxlSW1hZ2UoKSwgZWxlbWVudCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgc3R5
bGUuYm9yZGVySW1hZ2VTb3VyY2UoKSwgZWxlbWVudCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZShk
b2N1bWVudCwgc3R5bGUubWFza0JveEltYWdlU291cmNlKCksIGVsZW1lbnQpOwogCi0gICAgZm9y
IChhdXRvJiBmaWx0ZXJPcGVyYXRpb24gOiBwZW5kaW5nUmVzb3VyY2VzLnBlbmRpbmdTVkdGaWx0
ZXJzKQotICAgICAgICBmaWx0ZXJPcGVyYXRpb24tPmdldE9yQ3JlYXRlQ2FjaGVkU1ZHRG9jdW1l
bnRSZWZlcmVuY2UoKS0+bG9hZChkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLCBvcHRp
b25zKTsKLX0KKyAgICBpZiAoYXV0byogcmVmbGVjdGlvbiA9IHN0eWxlLmJveFJlZmxlY3QoKSkK
KyAgICAgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgcmVmbGVjdGlvbi0+bWFzaygpLmlt
YWdlKCksIGVsZW1lbnQpOwogCi12b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKGNvbnN0IFBlbmRp
bmdSZXNvdXJjZXMmIHBlbmRpbmdSZXNvdXJjZXMsIERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGxvYWRQZW5kaW5n
SW1hZ2VzKHBlbmRpbmdSZXNvdXJjZXMsIGRvY3VtZW50LCBzdHlsZSwgZWxlbWVudCk7Ci0gICAg
bG9hZFBlbmRpbmdTVkdGaWx0ZXJzKHBlbmRpbmdSZXNvdXJjZXMsIGRvY3VtZW50LCBlbGVtZW50
KTsKKyAgICBmb3IgKGF1dG8qIG1hc2tMYXllciA9IHN0eWxlLm1hc2tMYXllcnMoKTsgbWFza0xh
eWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkKKyAgICAgICAgbG9hZFBlbmRpbmdJ
bWFnZShkb2N1bWVudCwgbWFza0xheWVyLT5pbWFnZSgpLCBlbGVtZW50KTsKKworI2lmIEVOQUJM
RShDU1NfU0hBUEVTKQorICAgIGlmIChzdHlsZS5zaGFwZU91dHNpZGUoKSkKKyAgICAgICAgbG9h
ZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgc3R5bGUuc2hhcGVPdXRzaWRlKCktPmltYWdlKCksIGVs
ZW1lbnQsIExvYWRQb2xpY3k6OlNoYXBlT3V0c2lkZSk7CisjZW5kaWYKIH0KIAogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgJKHJldmlzaW9u
IDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyNyArMjUsMTUgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9ucy5o
IgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xh
c3MgQ1NTVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBSZW5k
ZXJTdHlsZTsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotc3RydWN0IFBlbmRpbmdSZXNvdXJjZXMg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEhhc2hNYXA8Q1NT
UHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPj4gcGVuZGluZ0ltYWdlczsKLSAgICBWZWN0b3I8
UmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4+IHBlbmRpbmdTVkdGaWx0ZXJzOwotfTsK
LQotdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcyhjb25zdCBQZW5kaW5nUmVzb3VyY2VzJiwgRG9j
dW1lbnQmLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKTsKK3ZvaWQgbG9hZFBlbmRpbmdS
ZXNvdXJjZXMoUmVuZGVyU3R5bGUmLCBEb2N1bWVudCYsIGNvbnN0IEVsZW1lbnQqKTsKIAogfQog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287910</attachid>
            <date>2016-09-04 09:13:36 -0700</date>
            <delta_ts>2016-09-04 11:52:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-stylependingresources-3.patch</filename>
            <type>text/plain</type>
            <size>24860</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBACisyMDE2LTA5LTA0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgU3R5bGU6OlBlbmRp
bmdSZXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2MTU3NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmRlclN0eWxlIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGlu
aXRpYWxpemUgcmVzb3VyY2UgbG9hZHMuIFRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgc2lkZSBz
dHJ1Y3R1cmUuCisKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjpsb2FkU3ViaW1hZ2VzKToKKworICAg
ICAgICAgICAgTG9hZCBleHRlcm5hbCBTVkcgcmVzb3VyY2VzIGFsb25nIHdpdGggYW55IGltYWdl
IHJlc291cmNlcy4KKworICAgICAgICAqIGNzcy9DU1NUb1N0eWxlTWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTVG9TdHlsZU1hcDo6bWFwRmlsbEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5
bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTVG9TdHlsZU1hcC5o
OgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0eWxlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZSk6CisgICAg
ICAgICogY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQpOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6bG9hZFBlbmRpbmdSZXNvdXJjZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmVuc3VyZVBlbmRpbmdSZXNvdXJj
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVDYWNo
ZWRJbWFnZUZyb21WYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3Rh
dGU6OnRha2VQZW5kaW5nUmVzb3VyY2VzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmxvYWRFeHRlcm5hbERvY3VtZW50SWZOZWVkZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpnZXRPckNyZWF0ZUNh
Y2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVDYWNoZWRJbWFnZTo6U3R5bGVDYWNoZWRJbWFnZSk6CisgICAgICAgICogc3R5
bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjps
b2FkUGVuZGluZ1Jlc291cmNlcyk6CisKKyAgICAgICAgICAgIFRyaWdnZXIgcmVzb3VyY2UgbG9h
ZHMgYnkgY2hlY2tpbmcgcGVuZGluZyByZXNvdXJjZXMgaW4gUmVuZGVyU3R5bGUgdW5jb25kaXRp
b25hbGx5LiBLZWVwaW5nIHRyYWNrIG9mIHRoZW0KKyAgICAgICAgICAgIHNlcGFyYXRlbHkgd2Fz
bid0IG5lY2Vzc2FyeSBvciBhIG1lYW5pbmdmdWwgb3B0aW1pemF0aW9uLgorCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6bG9hZFBlbmRpbmdJbWFnZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OmxvYWRQZW5kaW5nU1ZHRmlsdGVycyk6IERlbGV0ZWQuCisgICAgICAgICog
c3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmg6CisKIDIwMTYtMDktMDQgIEFudHRpIEtvaXZp
c3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmVyc2Ugb3duZXJzaGlwIHJlbGF0
aW9uIG9mIFN0eWxlQ2FjaGVkSW1hZ2UgYW5kIENTU0ltYWdlVmFsdWUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKICNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5j
bHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJDcm9zc2ZhZGVH
ZW5lcmF0ZWRJbWFnZS5oIgogI2luY2x1ZGUgIkZpbHRlckVmZmVjdFJlbmRlcmVyLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTk2LDYgKzk3LDEzIEBAIHZvaWQgQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6bG9hZFN1YmltYWdlcygKICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmFkZENs
aWVudCgmbV9maWx0ZXJTdWJpbWFnZU9ic2VydmVyKTsKICAgICB9CiAKKyAgICBmb3IgKGF1dG8m
IGZpbHRlck9wZXJhdGlvbiA6IG1fZmlsdGVyT3BlcmF0aW9ucy5vcGVyYXRpb25zKCkpIHsKKyAg
ICAgICAgaWYgKCFpczxSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24+KGZpbHRlck9wZXJhdGlvbi5n
ZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byYgcmVmZXJlbmNlRmls
dGVyT3BlcmF0aW9uID0gZG93bmNhc3Q8UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uPigqZmlsdGVy
T3BlcmF0aW9uKTsKKyAgICAgICAgcmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uLmxvYWRFeHRlcm5h
bERvY3VtZW50SWZOZWVkZWQoY2FjaGVkUmVzb3VyY2VMb2FkZXIsIG9wdGlvbnMpOworICAgIH0K
KwogICAgIG1fZmlsdGVyU3ViaW1hZ2VPYnNlcnZlci5zZXRSZWFkeSh0cnVlKTsKIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAkocmV2aXNpb24gMjA1NDE5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw5ICs2Niw5IEBAIGJvb2wgQ1NTVG9TdHlsZU1hcDo6dXNlU1ZHWm9vbVJ1bGVzKCkgY28KICAg
ICByZXR1cm4gbV9yZXNvbHZlci0+dXNlU1ZHWm9vbVJ1bGVzKCk7CiB9CiAKLVJlZlB0cjxTdHls
ZUltYWdlPiBDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
ZCwgQ1NTVmFsdWUmIHZhbHVlKQorUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0
eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHls
ZUltYWdlKHByb3BlcnR5SWQsIHZhbHVlKTsKKyAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJ
bWFnZSh2YWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCkBAIC0xNTUsNyArMTU1LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxs
SW1hZ2UoQ1NTUHJvcAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbGF5ZXIuc2V0SW1h
Z2Uoc3R5bGVJbWFnZShwcm9wZXJ0eUlELCB2YWx1ZSkpOworICAgIGxheWVyLnNldEltYWdlKHN0
eWxlSW1hZ2UodmFsdWUpKTsKIH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsUmVwZWF0
WChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKQEAgLTU1NywxOCArNTU3LDkgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBO
aW5lUGllY2VJbWFnZShDUwogICAgIC8vIFJldHJpZXZlIHRoZSBib3JkZXIgaW1hZ2UgdmFsdWUu
CiAgICAgQ1NTVmFsdWVMaXN0JiBib3JkZXJJbWFnZSA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
KnZhbHVlKTsKIAotICAgIC8vIFNldCB0aGUgaW1hZ2UgKHRoaXMga2lja3Mgb2ZmIHRoZSBsb2Fk
KS4KLSAgICBDU1NQcm9wZXJ0eUlEIGltYWdlUHJvcGVydHk7Ci0gICAgaWYgKHByb3BlcnR5ID09
IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UpCi0gICAgICAgIGltYWdlUHJvcGVydHkgPSBD
U1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlOwotICAgIGVsc2UgaWYgKHByb3BlcnR5ID09IENT
U1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlKQotICAgICAgICBpbWFnZVByb3BlcnR5ID0gQ1NT
UHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U7Ci0gICAgZWxzZQotICAgICAgICBpbWFn
ZVByb3BlcnR5ID0gcHJvcGVydHk7Ci0KICAgICBmb3IgKGF1dG8mIGN1cnJlbnQgOiBib3JkZXJJ
bWFnZSkgewogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwg
aXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oY3VycmVudC5nZXQoKSkgfHwgaXM8Q1NTSW1hZ2VT
ZXRWYWx1ZT4oY3VycmVudC5nZXQoKSkpCi0gICAgICAgICAgICBpbWFnZS5zZXRJbWFnZShzdHls
ZUltYWdlKGltYWdlUHJvcGVydHksIGN1cnJlbnQuZ2V0KCkpKTsKKyAgICAgICAgICAgIGltYWdl
LnNldEltYWdlKHN0eWxlSW1hZ2UoY3VycmVudC5nZXQoKSkpOwogICAgICAgICBlbHNlIGlmIChp
czxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+KGN1cnJlbnQuZ2V0KCkpKQogICAgICAgICAgICAg
bWFwTmluZVBpZWNlSW1hZ2VTbGljZShjdXJyZW50LCBpbWFnZSk7CiAgICAgICAgIGVsc2UgaWYg
KGlzPENTU1ZhbHVlTGlzdD4oY3VycmVudC5nZXQoKSkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NUb1N0eWxlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuaAkocmV2aXNpb24gMjA1NDE5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBwcml2YXRlOgog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgc29ydCBvZiBTdHlsZUlt
YWdlQ2FjaGUgb2JqZWN0IHdoaWNoCiAgICAgLy8gaXMgaGVsZCBieSB0aGUgU3R5bGVSZXNvbHZl
ciwgYW5kIGxpa2VseSBwcm92aWRlZCB0byB0aGlzIG9iamVjdAogICAgIC8vIGR1cmluZyB0aGUg
cmVzb2x2ZS4KLSAgICBSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUlE
LCBDU1NWYWx1ZSYpOworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVl
Jik7CiAKICAgICBTdHlsZVJlc29sdmVyKiBtX3Jlc29sdmVyOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDA4LDcgKzQwOCw3IEBAIGlubGluZSBOaW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJD
b252ZXIKIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgogaW5saW5lIFBhc3NSZWZQ
dHI8U3R5bGVJbWFnZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFnZShT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0
dXJuIHN0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShwcm9wZXJ0eSwgdmFsdWUpOworICAgIHJldHVy
biBzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOwogfQogCiBpbmxpbmUgVHJhbnNmb3Jt
T3BlcmF0aW9ucyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtNzQxLDcgKzc0MSw3
IEBAIGlubGluZSBQYXNzUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVpbGQKICAgICB9CiAKICAg
ICBpZiAoaXNJbWFnZVNoYXBlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNy
ZWF0ZUltYWdlVmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKENTU1Byb3BlcnR5V2Via2l0
U2hhcGVPdXRzaWRlLCB2YWx1ZSkpOworICAgICAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRl
SW1hZ2VWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpKTsKIAogICAgIFJlZlB0
cjxCYXNpY1NoYXBlPiBzaGFwZTsKICAgICBDU1NCb3hUeXBlIHJlZmVyZW5jZUJveCA9IEJveE1p
c3Npbmc7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCShyZXZp
c2lvbiAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNDcsNyArMTE0Nyw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWwKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBsaXN0KSB7CiAgICAg
ICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtLmdldCgpKSkgewogICAgICAgICAg
ICAgYXV0byYgaW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtLmdldCgp
KTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVz
b2x2ZXIuc3R5bGVJbWFnZShDU1NQcm9wZXJ0eUN1cnNvciwgaW1hZ2UpLCBpbWFnZS5ob3RTcG90
KCkpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVS
ZXNvbHZlci5zdHlsZUltYWdlKGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTEzMTQsMTIgKzEzMTQsMTIgQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbAogICAgICAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAg
ICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNl
dFZhbHVlPihpdGVtLmdldCgpKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRDb250ZW50KHN0eWxlUmVzb2x2ZXIuc3R5bGVDYWNoZWRJbWFnZUZyb21WYWx1ZShDU1NQ
cm9wZXJ0eUNvbnRlbnQsIGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlk
U2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChzdHlsZVJlc29sdmVyLnN0eWxlQ2FjaGVkSW1hZ2VG
cm9tVmFsdWUoQ1NTUHJvcGVydHlDb250ZW50LCBpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVh
dGUoaXRlbSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw2IEBAIGlubGluZSB2b2lkIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlOjpjbGVhcigKICAgICBtX3BhcmVudFN0eWxlID0gbnVsbHB0cjsK
ICAgICBtX293bmVkUGFyZW50U3R5bGUgPSBudWxscHRyOwogICAgIG1fcmVnaW9uRm9yU3R5bGlu
ZyA9IG51bGxwdHI7Ci0gICAgbV9wZW5kaW5nUmVzb3VyY2VzID0gbnVsbHB0cjsKICAgICBtX2Nz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgPSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiB9
CiAKQEAgLTM3OCwxMyArMzc3LDYgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0UGFy
ZW50U3R5bAogICAgIG1fcGFyZW50U3R5bGUgPSBtX293bmVkUGFyZW50U3R5bGUuZ2V0KCk7CiB9
CiAKLVN0eWxlOjpQZW5kaW5nUmVzb3VyY2VzJiBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6ZW5zdXJl
UGVuZGluZ1Jlc291cmNlcygpCi17Ci0gICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXMpCi0gICAg
ICAgIG1fcGVuZGluZ1Jlc291cmNlcyA9IHN0ZDo6bWFrZV91bmlxdWU8U3R5bGU6OlBlbmRpbmdS
ZXNvdXJjZXM+KCk7Ci0gICAgcmV0dXJuICptX3BlbmRpbmdSZXNvdXJjZXM7Ci19Ci0KIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY29uc3QgRWxlbWVudCYgZWxlbWVudCkK
IHsKICAgICBhdXRvKiBwYXJlbnROb2RlID0gZWxlbWVudC5wYXJlbnROb2RlKCk7CkBAIC0xNzAw
LDQwICsxNjkyLDI1IEBAIFJlZlB0cjxDU1NWYWx1ZT4gU3R5bGVSZXNvbHZlcjo6cmVzb2x2ZWQK
ICAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShwcm9wSUQsIHZh
bHVlLCBtX3N0YXRlLnN0eWxlKCktPmN1c3RvbVByb3BlcnRpZXMoKSwgbV9zdGF0ZS5zdHlsZSgp
LT5kaXJlY3Rpb24oKSwgbV9zdGF0ZS5zdHlsZSgpLT53cml0aW5nTW9kZSgpKTsKIH0KIAotUmVm
UHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlSW1hZ2UoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTVmFsdWUmIHZhbHVlKQorUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlUmVzb2x2
ZXI6OnN0eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NJbWFnZUdl
bmVyYXRvclZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+
KHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVl
KHByb3BlcnR5LCAqZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4odmFsdWUpLmdyYWRpZW50V2l0
aFN0eWxlc1Jlc29sdmVkKHRoaXMpKTsKLSAgICAgICAgcmV0dXJuIHN0eWxlR2VuZXJhdGVkSW1h
Z2VGcm9tVmFsdWUocHJvcGVydHksIGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZh
bHVlKSk7CisgICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpk
b3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPih2YWx1ZSkuZ3JhZGllbnRXaXRoU3R5bGVzUmVzb2x2
ZWQodGhpcykpOworCisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih2YWx1ZSkp
IHsKKyAgICAgICAgICAgIC8vIEZpbHRlckltYWdlIG5lZWRzIHRvIGNhbGN1bGF0ZSBGaWx0ZXJP
cGVyYXRpb25zLgorICAgICAgICAgICAgZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFs
dWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRv
clZhbHVlPih2YWx1ZSkpOwogICAgIH0KIAogICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPih2YWx1
ZSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0N1cnNvckltYWdlVmFs
dWU+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFsdWUocHJv
cGVydHksIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZSh2
YWx1ZSk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmPFN0eWxlQ2FjaGVkSW1hZ2U+
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlQ2FjaGVkSW1hZ2VGcm9tVmFsdWUoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgQ1NTVmFsdWUmIHZhbHVlKQotewotICAgIGF1dG8gaW1hZ2UgPSBTdHlsZUNhY2hl
ZEltYWdlOjpjcmVhdGUodmFsdWUpOwotICAgIGlmIChpbWFnZS0+aXNQZW5kaW5nKCkpCi0gICAg
ICAgIG1fc3RhdGUuZW5zdXJlUGVuZGluZ1Jlc291cmNlcygpLnBlbmRpbmdJbWFnZXMuc2V0KHBy
b3BlcnR5LCAmdmFsdWUpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotUmVmPFN0eWxlR2VuZXJh
dGVkSW1hZ2U+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlR2VuZXJhdGVkSW1hZ2VGcm9tVmFsdWUoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgdmFsdWUpCi17Ci0g
ICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHZhbHVlKSkgewotICAgICAgICAvLyBGaWx0
ZXJJbWFnZSBuZWVkcyB0byBjYWxjdWxhdGUgRmlsdGVyT3BlcmF0aW9ucy4KLSAgICAgICAgZG93
bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odmFsdWUpLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMo
dGhpcyk7Ci0gICAgfQotICAgIGlmICh2YWx1ZS5pc1BlbmRpbmcoKSkKLSAgICAgICAgbV9zdGF0
ZS5lbnN1cmVQZW5kaW5nUmVzb3VyY2VzKCkucGVuZGluZ0ltYWdlcy5zZXQocHJvcGVydHksICZ2
YWx1ZSk7Ci0KLSAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKHZhbHVlKTsK
LX0KLQogI2lmIEVOQUJMRShJT1NfVEVYVF9BVVRPU0laSU5HKQogdm9pZCBTdHlsZVJlc29sdmVy
OjpjaGVja0ZvclRleHRTaXplQWRqdXN0KFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKQEAgLTE5Njgs
OSArMTk0NSw2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y3JlYXRlRmlsdGVyT3BlcmF0aW8KICAg
ICAgICAgICAgIFVSTCB1cmwgPSBtX3N0YXRlLmRvY3VtZW50KCkuY29tcGxldGVVUkwoY3NzVXJs
KTsKIAogICAgICAgICAgICAgUmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4gb3BlcmF0
aW9uID0gUmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoY3NzVXJsLCB1cmwuZnJhZ21l
bnRJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6aXNFeHRl
cm5hbFVSSVJlZmVyZW5jZShjc3NVcmwsIG1fc3RhdGUuZG9jdW1lbnQoKSkpCi0gICAgICAgICAg
ICAgICAgc3RhdGUuZW5zdXJlUGVuZGluZ1Jlc291cmNlcygpLnBlbmRpbmdTVkdGaWx0ZXJzLmFw
cGVuZChvcGVyYXRpb24pOwotCiAgICAgICAgICAgICBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5h
cHBlbmQob3BlcmF0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0y
MDc4LDggKzIwNTIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmxvYWRQZW5kaW5nUmVzb3VyY2Vz
CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1faW5Mb2FkUGVuZGluZ0ltYWdlcyk7CiAgICAgVGVtcG9y
YXJ5Q2hhbmdlPGJvb2w+IGNoYW5nZUluTG9hZFBlbmRpbmdJbWFnZXMobV9pbkxvYWRQZW5kaW5n
SW1hZ2VzLCB0cnVlKTsKIAotICAgIGlmIChhdXRvIHBlbmRpbmdSZXNvdXJjZXMgPSBzdGF0ZSgp
LnRha2VQZW5kaW5nUmVzb3VyY2VzKCkpCi0gICAgICAgIFN0eWxlOjpsb2FkUGVuZGluZ1Jlc291
cmNlcygqcGVuZGluZ1Jlc291cmNlcywgZG9jdW1lbnQoKSwgKnN0eWxlKCksIG1fc3RhdGUuZWxl
bWVudCgpKTsKKyAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKnN0eWxlKCksIGRvY3Vt
ZW50KCksIG1fc3RhdGUuZWxlbWVudCgpKTsKIH0KIAogaW5saW5lIFN0eWxlUmVzb2x2ZXI6Ok1h
dGNoZWRQcm9wZXJ0aWVzOjpNYXRjaGVkUHJvcGVydGllcygpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgY2xhc3MgU3R5
bGVDYWNoZWRJbWFnZTsKIGNsYXNzIFN0eWxlR2VuZXJhdGVkSW1hZ2U7CiBjbGFzcyBTdHlsZUlt
YWdlOwogY2xhc3MgU3R5bGVLZXlmcmFtZTsKLWNsYXNzIFN0eWxlUGVuZGluZ0ltYWdlOwogY2xh
c3MgU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgU3R5bGVSdWxlOwogY2xhc3MgU3R5bGVSdWxlS2V5
ZnJhbWVzOwpAQCAtNDA3LDkgKzQwNiw2IEBAIHB1YmxpYzoKIAogICAgICAgICBib29sIHVzZVNW
R1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZH
RWxlbWVudCgpOyB9CiAKLSAgICAgICAgU3R5bGU6OlBlbmRpbmdSZXNvdXJjZXMmIGVuc3VyZVBl
bmRpbmdSZXNvdXJjZXMoKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpQZW5kaW5n
UmVzb3VyY2VzPiB0YWtlUGVuZGluZ1Jlc291cmNlcygpIHsgcmV0dXJuIFdURk1vdmUobV9wZW5k
aW5nUmVzb3VyY2VzKTsgfQotCiAgICAgICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Nzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGE7IH0KIAogICAgICAgICBDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVs
KCkgY29uc3QgeyByZXR1cm4gbV9jYXNjYWRlTGV2ZWw7IH0KQEAgLTQ0Niw3ICs0NDIsNiBAQCBw
dWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhIHsgQmFja2dyb3VuZEZp
bGxMYXllciB9OwogICAgICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKIAotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlBlbmRpbmdSZXNvdXJjZXM+IG1fcGVuZGluZ1Jlc291cmNl
czsKICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE7CiAgICAgICAgIAogICAgICAgICBDYXNjYWRlTGV2ZWwgbV9jYXNjYWRlTGV2ZWwg
eyBVc2VyQWdlbnRMZXZlbCB9OwpAQCAtNDU5LDkgKzQ1NCw3IEBAIHB1YmxpYzoKICAgICBTdGF0
ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRlOyB9CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogCi0gICAgUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxl
SW1hZ2UoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmKTsKLSAgICBSZWY8U3R5bGVDYWNoZWRJbWFn
ZT4gc3R5bGVDYWNoZWRJbWFnZUZyb21WYWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYpOwot
ICAgIFJlZjxTdHlsZUdlbmVyYXRlZEltYWdlPiBzdHlsZUdlbmVyYXRlZEltYWdlRnJvbVZhbHVl
KENTU1Byb3BlcnR5SUQsIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmKTsKKyAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogCiAgICAgYm9vbCBhcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpOyB9CiAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyT3BlcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTQxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyT3BlcmF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXJP
cGVyYXRpb24uaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU1ZHRG9jdW1lbnRSZWZl
cmVuY2UuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKKyNpbmNsdWRlICJTVkdVUklSZWZl
cmVuY2UuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTU5LDEyICs2MSwxNSBAQCBib29sIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6b3BlcmF0
b3I9CiAgICAgCiAgICAgcmV0dXJuIG1fdXJsID09IGRvd25jYXN0PFJlZmVyZW5jZUZpbHRlck9w
ZXJhdGlvbj4ob3BlcmF0aW9uKS5tX3VybDsKIH0KLSAgICAKLUNhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlKiBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OmdldE9yQ3JlYXRlQ2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UoKQorCit2b2lkIFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbjo6bG9hZEV4
dGVybmFsRG9jdW1lbnRJZk5lZWRlZChDYWNoZWRSZXNvdXJjZUxvYWRlciYgY2FjaGVkUmVzb3Vy
Y2VMb2FkZXIsIGNvbnN0IFJlc291cmNlTG9hZGVyT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBp
ZiAoIW1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UpCi0gICAgICAgIG1fY2FjaGVkU1ZHRG9j
dW1lbnRSZWZlcmVuY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPENhY2hlZFNWR0RvY3VtZW50UmVmZXJl
bmNlPihtX3VybCk7Ci0gICAgcmV0dXJuIG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuZ2V0
KCk7CisgICAgaWYgKG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIVNWR1VSSVJlZmVyZW5jZTo6aXNFeHRlcm5hbFVSSVJlZmVyZW5jZShtX3Vy
bCwgKmNhY2hlZFJlc291cmNlTG9hZGVyLmRvY3VtZW50KCkpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FjaGVk
U1ZHRG9jdW1lbnRSZWZlcmVuY2U+KG1fdXJsKTsKKyAgICBtX2NhY2hlZFNWR0RvY3VtZW50UmVm
ZXJlbmNlLT5sb2FkKGNhY2hlZFJlc291cmNlTG9hZGVyLCBvcHRpb25zKTsKIH0KIAogdm9pZCBS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb246OnNldEZpbHRlckVmZmVjdChQYXNzUmVmUHRyPEZpbHRl
ckVmZmVjdD4gZmlsdGVyRWZmZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJPcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlck9wZXJhdGlvbi5oCShyZXZpc2lv
biAyMDU0MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlck9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0MiwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIC8vIENTUyBGaWx0ZXJzCiAKK2NsYXNzIENhY2hlZFJlc291cmNlTG9h
ZGVyOwogY2xhc3MgQ2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2U7CiBjbGFzcyBGaWx0ZXJFZmZl
Y3Q7CitzdHJ1Y3QgUmVzb3VyY2VMb2FkZXJPcHRpb25zOwogCiBjbGFzcyBGaWx0ZXJPcGVyYXRp
b24gOiBwdWJsaWMgUmVmQ291bnRlZDxGaWx0ZXJPcGVyYXRpb24+IHsKIHB1YmxpYzoKQEAgLTE4
NCw4ICsxODYsOSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQogICAgIGNvbnN0IFN0cmluZyYgZnJhZ21lbnQoKSBjb25zdCB7IHJldHVy
biBtX2ZyYWdtZW50OyB9CiAKKyAgICB2b2lkIGxvYWRFeHRlcm5hbERvY3VtZW50SWZOZWVkZWQo
Q2FjaGVkUmVzb3VyY2VMb2FkZXImLCBjb25zdCBSZXNvdXJjZUxvYWRlck9wdGlvbnMmKTsKKwog
ICAgIENhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlKiBjYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkU1ZHRG9jdW1lbnRSZWZlcmVuY2UuZ2V0KCk7IH0K
LSAgICBDYWNoZWRTVkdEb2N1bWVudFJlZmVyZW5jZSogZ2V0T3JDcmVhdGVDYWNoZWRTVkdEb2N1
bWVudFJlZmVyZW5jZSgpOwogCiAgICAgRmlsdGVyRWZmZWN0KiBmaWx0ZXJFZmZlY3QoKSBjb25z
dCB7IHJldHVybiBtX2ZpbHRlckVmZmVjdC5nZXQoKTsgfQogICAgIHZvaWQgc2V0RmlsdGVyRWZm
ZWN0KFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0Pik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAyMDU0
MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVDYWNoZWRJbWFnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDEwIEBAIFN0eWxlQ2FjaGVkSW1hZ2U6OlN0
eWxlQ2FjaGVkSW1hZ2UoQ1NTVmEKICAgICBBU1NFUlQoaXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NW
YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4obV9jc3NWYWx1ZSkgfHwgaXM8Q1NTQ3Vyc29y
SW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkpOwogCiAgICAgbV9pc0NhY2hlZEltYWdlID0gdHJ1ZTsK
KworICAgIC8vIENTU0ltYWdlVmFsdWUgZG9lc24ndCBnZXQgaW52YWxpZGF0ZWQgc28gd2UgY2Fu
IGdyYWIgdGhlIENhY2hlZEltYWdlIGltbWVkaWF0ZWx5IGlmIGl0IGV4aXN0cy4KKyAgICBpZiAo
aXM8Q1NTSW1hZ2VWYWx1ZT4obV9jc3NWYWx1ZSkpCisgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBk
b3duY2FzdDxDU1NJbWFnZVZhbHVlPihtX2Nzc1ZhbHVlLmdldCgpKS5jYWNoZWRJbWFnZSgpOwog
fQogCiBTdHlsZUNhY2hlZEltYWdlOjp+U3R5bGVDYWNoZWRJbWFnZSgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVBlbmRpbmdSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAJKHJldmlzaW9uIDIw
NTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291cmNlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNTU0N1cnNvcklt
YWdlVmFsdWUuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUg
IkNhY2hlZFNWR0RvY3VtZW50UmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIK
ICNpbmNsdWRlICJDdXJzb3JEYXRhLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgpAQCAtNjAs
ODIgKzU5LDM3IEBAIHN0YXRpYyB2b2lkIGxvYWRQZW5kaW5nSW1hZ2UoRG9jdW1lbnQmIGQKICAg
ICBjb25zdF9jYXN0PFN0eWxlSW1hZ2UmPigqc3R5bGVJbWFnZSkubG9hZChkb2N1bWVudC5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpLCBvcHRpb25zKTsKIH0KIAotc3RhdGljIHZvaWQgbG9hZFBlbmRp
bmdJbWFnZXMoY29uc3QgUGVuZGluZ1Jlc291cmNlcyYgcGVuZGluZ1Jlc291cmNlcywgRG9jdW1l
bnQmIGRvY3VtZW50LCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
Cit2b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKFJlbmRlclN0eWxlJiBzdHlsZSwgRG9jdW1lbnQm
IGRvY3VtZW50LCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGZvciAoYXV0byBjdXJy
ZW50UHJvcGVydHkgOiBwZW5kaW5nUmVzb3VyY2VzLnBlbmRpbmdJbWFnZXMua2V5cygpKSB7Ci0g
ICAgICAgIHN3aXRjaCAoY3VycmVudFByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogYmFja2dyb3VuZExh
eWVyID0gJnN0eWxlLmVuc3VyZUJhY2tncm91bmRMYXllcnMoKTsgYmFja2dyb3VuZExheWVyOyBi
YWNrZ3JvdW5kTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXItPm5leHQoKSkKLSAgICAgICAgICAgICAg
ICBsb2FkUGVuZGluZ0ltYWdlKGRvY3VtZW50LCBiYWNrZ3JvdW5kTGF5ZXItPmltYWdlKCksIGVs
ZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNvbnRlbnQ6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogY29udGVudERhdGEgPSBj
b25zdF9jYXN0PENvbnRlbnREYXRhKj4oc3R5bGUuY29udGVudERhdGEoKSk7IGNvbnRlbnREYXRh
OyBjb250ZW50RGF0YSA9IGNvbnRlbnREYXRhLT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaXM8SW1hZ2VDb250ZW50RGF0YT4oKmNvbnRlbnREYXRhKSkgewotICAgICAgICAgICAgICAg
ICAgICBhdXRvJiBzdHlsZUltYWdlID0gZG93bmNhc3Q8SW1hZ2VDb250ZW50RGF0YT4oKmNvbnRl
bnREYXRhKS5pbWFnZSgpOwotICAgICAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRv
Y3VtZW50LCAmc3R5bGVJbWFnZSwgZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUN1cnNvcjogewotICAgICAgICAgICAgaWYgKGF1dG8qIGN1cnNvckxpc3QgPSBzdHls
ZS5jdXJzb3JzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGN1
cnNvckxpc3QtPnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0lt
YWdlKGRvY3VtZW50LCBjdXJzb3JMaXN0LT5hdChpKS5pbWFnZSgpLCBlbGVtZW50KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlMaXN0U3R5bGVJbWFnZTogewotICAgICAgICAgICAgbG9hZFBlbmRpbmdJbWFnZShk
b2N1bWVudCwgc3R5bGUubGlzdFN0eWxlSW1hZ2UoKSwgZWxlbWVudCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3Vy
Y2U6IHsKLSAgICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHN0eWxlLmJvcmRl
ckltYWdlU291cmNlKCksIGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6IHsKLSAgICAgICAgICAg
IGlmIChhdXRvKiByZWZsZWN0aW9uID0gc3R5bGUuYm94UmVmbGVjdCgpKQotICAgICAgICAgICAg
ICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHJlZmxlY3Rpb24tPm1hc2soKS5pbWFnZSgp
LCBlbGVtZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6IHsKLSAgICAgICAgICAgIGxvYWRQ
ZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHN0eWxlLm1hc2tCb3hJbWFnZVNvdXJjZSgpLCBlbGVtZW50
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrSW1hZ2U6IHsKLSAgICAgICAgICAgIGZvciAoYXV0byogbWFza0xheWVyID0g
JnN0eWxlLmVuc3VyZU1hc2tMYXllcnMoKTsgbWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5
ZXItPm5leHQoKSkKLSAgICAgICAgICAgICAgICBsb2FkUGVuZGluZ0ltYWdlKGRvY3VtZW50LCBt
YXNrTGF5ZXItPmltYWdlKCksIGVsZW1lbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSNpZiBFTkFCTEUoQ1NTX1NIQVBFUykKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFNoYXBlT3V0c2lkZTogewotICAgICAgICAgICAgaWYgKHN0eWxlLnNoYXBlT3V0c2lkZSgpKQot
ICAgICAgICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsIHN0eWxlLnNoYXBlT3V0
c2lkZSgpLT5pbWFnZSgpLCBlbGVtZW50LCBMb2FkUG9saWN5OjpTaGFwZU91dHNpZGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgZm9yIChhdXRvKiBiYWNrZ3JvdW5k
TGF5ZXIgPSBzdHlsZS5iYWNrZ3JvdW5kTGF5ZXJzKCk7IGJhY2tncm91bmRMYXllcjsgYmFja2dy
b3VuZExheWVyID0gYmFja2dyb3VuZExheWVyLT5uZXh0KCkpCisgICAgICAgIGxvYWRQZW5kaW5n
SW1hZ2UoZG9jdW1lbnQsIGJhY2tncm91bmRMYXllci0+aW1hZ2UoKSwgZWxlbWVudCk7CisKKyAg
ICBmb3IgKGF1dG8qIGNvbnRlbnREYXRhID0gc3R5bGUuY29udGVudERhdGEoKTsgY29udGVudERh
dGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5leHQoKSkgeworICAgICAgICBpZiAoaXM8
SW1hZ2VDb250ZW50RGF0YT4oKmNvbnRlbnREYXRhKSkgeworICAgICAgICAgICAgYXV0byYgc3R5
bGVJbWFnZSA9IGRvd25jYXN0PEltYWdlQ29udGVudERhdGE+KCpjb250ZW50RGF0YSkuaW1hZ2Uo
KTsKKyAgICAgICAgICAgIGxvYWRQZW5kaW5nSW1hZ2UoZG9jdW1lbnQsICZzdHlsZUltYWdlLCBl
bGVtZW50KTsKICAgICAgICAgfQogICAgIH0KLX0KIAotc3RhdGljIHZvaWQgbG9hZFBlbmRpbmdT
VkdGaWx0ZXJzKGNvbnN0IFBlbmRpbmdSZXNvdXJjZXMmIHBlbmRpbmdSZXNvdXJjZXMsIERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAocGVuZGlu
Z1Jlc291cmNlcy5wZW5kaW5nU1ZHRmlsdGVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoYXV0byogY3Vyc29yTGlzdCA9IHN0eWxlLmN1cnNvcnMoKSkgeworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGN1cnNvckxpc3QtPnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgY3Vyc29yTGlzdC0+YXQoaSkuaW1hZ2UoKSwg
ZWxlbWVudCk7CisgICAgfQogCi0gICAgUmVzb3VyY2VMb2FkZXJPcHRpb25zIG9wdGlvbnMgPSBD
YWNoZWRSZXNvdXJjZUxvYWRlcjo6ZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpOwotICAg
IG9wdGlvbnMuY29udGVudFNlY3VyaXR5UG9saWN5SW1wb3NpdGlvbiA9IGVsZW1lbnQgJiYgZWxl
bWVudC0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSA/IENvbnRlbnRTZWN1cml0eVBvbGljeUlt
cG9zaXRpb246OlNraXBQb2xpY3lDaGVjayA6IENvbnRlbnRTZWN1cml0eVBvbGljeUltcG9zaXRp
b246OkRvUG9saWN5Q2hlY2s7CisgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgc3R5bGUu
bGlzdFN0eWxlSW1hZ2UoKSwgZWxlbWVudCk7CisgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVu
dCwgc3R5bGUuYm9yZGVySW1hZ2VTb3VyY2UoKSwgZWxlbWVudCk7CisgICAgbG9hZFBlbmRpbmdJ
bWFnZShkb2N1bWVudCwgc3R5bGUubWFza0JveEltYWdlU291cmNlKCksIGVsZW1lbnQpOwogCi0g
ICAgZm9yIChhdXRvJiBmaWx0ZXJPcGVyYXRpb24gOiBwZW5kaW5nUmVzb3VyY2VzLnBlbmRpbmdT
VkdGaWx0ZXJzKQotICAgICAgICBmaWx0ZXJPcGVyYXRpb24tPmdldE9yQ3JlYXRlQ2FjaGVkU1ZH
RG9jdW1lbnRSZWZlcmVuY2UoKS0+bG9hZChkb2N1bWVudC5jYWNoZWRSZXNvdXJjZUxvYWRlcigp
LCBvcHRpb25zKTsKLX0KKyAgICBpZiAoYXV0byogcmVmbGVjdGlvbiA9IHN0eWxlLmJveFJlZmxl
Y3QoKSkKKyAgICAgICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgcmVmbGVjdGlvbi0+bWFz
aygpLmltYWdlKCksIGVsZW1lbnQpOwogCi12b2lkIGxvYWRQZW5kaW5nUmVzb3VyY2VzKGNvbnN0
IFBlbmRpbmdSZXNvdXJjZXMmIHBlbmRpbmdSZXNvdXJjZXMsIERvY3VtZW50JiBkb2N1bWVudCwg
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGxvYWRQ
ZW5kaW5nSW1hZ2VzKHBlbmRpbmdSZXNvdXJjZXMsIGRvY3VtZW50LCBzdHlsZSwgZWxlbWVudCk7
Ci0gICAgbG9hZFBlbmRpbmdTVkdGaWx0ZXJzKHBlbmRpbmdSZXNvdXJjZXMsIGRvY3VtZW50LCBl
bGVtZW50KTsKKyAgICBmb3IgKGF1dG8qIG1hc2tMYXllciA9IHN0eWxlLm1hc2tMYXllcnMoKTsg
bWFza0xheWVyOyBtYXNrTGF5ZXIgPSBtYXNrTGF5ZXItPm5leHQoKSkKKyAgICAgICAgbG9hZFBl
bmRpbmdJbWFnZShkb2N1bWVudCwgbWFza0xheWVyLT5pbWFnZSgpLCBlbGVtZW50KTsKKworI2lm
IEVOQUJMRShDU1NfU0hBUEVTKQorICAgIGlmIChzdHlsZS5zaGFwZU91dHNpZGUoKSkKKyAgICAg
ICAgbG9hZFBlbmRpbmdJbWFnZShkb2N1bWVudCwgc3R5bGUuc2hhcGVPdXRzaWRlKCktPmltYWdl
KCksIGVsZW1lbnQsIExvYWRQb2xpY3k6OlNoYXBlT3V0c2lkZSk7CisjZW5kaWYKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgJKHJl
dmlzaW9uIDIwNTQxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUGVuZGluZ1Jlc291
cmNlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyNyArMjUsMTUgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRmlsdGVyT3BlcmF0
aW9ucy5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFz
cyBSZW5kZXJTdHlsZTsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIAotc3RydWN0IFBlbmRpbmdSZXNv
dXJjZXMgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEhhc2hN
YXA8Q1NTUHJvcGVydHlJRCwgUmVmUHRyPENTU1ZhbHVlPj4gcGVuZGluZ0ltYWdlczsKLSAgICBW
ZWN0b3I8UmVmUHRyPFJlZmVyZW5jZUZpbHRlck9wZXJhdGlvbj4+IHBlbmRpbmdTVkdGaWx0ZXJz
OwotfTsKLQotdm9pZCBsb2FkUGVuZGluZ1Jlc291cmNlcyhjb25zdCBQZW5kaW5nUmVzb3VyY2Vz
JiwgRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKTsKK3ZvaWQgbG9hZFBl
bmRpbmdSZXNvdXJjZXMoUmVuZGVyU3R5bGUmLCBEb2N1bWVudCYsIGNvbnN0IEVsZW1lbnQqKTsK
IAogfQogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>