<?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>53581</bug_id>
          
          <creation_ts>2011-02-02 01:50:04 -0800</creation_ts>
          <short_desc>Use Vector instead of a linked list for rules in CSSStyleSelector</short_desc>
          <delta_ts>2011-02-02 07:01:30 -0800</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>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>peter</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>343919</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-02 01:50:04 -0800</bug_when>
    <thetext>Eliminate CSSRuleDataList. Linked lists are slow and wasteful for non-dynamic data structures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343920</commentid>
    <comment_count>1</comment_count>
      <attachid>80904</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-02 02:02:39 -0800</bug_when>
    <thetext>Created attachment 80904
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343923</commentid>
    <comment_count>2</comment_count>
      <attachid>80904</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2011-02-02 02:17:53 -0800</bug_when>
    <thetext>Comment on attachment 80904
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343965</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-02-02 07:01:30 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/77376</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80904</attachid>
            <date>2011-02-02 02:02:39 -0800</date>
            <delta_ts>2011-02-02 02:17:53 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ruledata-vector-3.patch</filename>
            <type>text/plain</type>
            <size>26943</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc3MzcwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDItMDIgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSBWZWN0b3IgaW5zdGVhZCBvZiBhIGxpbmtlZCBsaXN0IGZv
ciBydWxlcyBpbiBDU1NTdHlsZVNlbGVjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01MzU4MQorICAgICAgICAKKyAgICAgICAgLSBlbGltaW5hdGUg
Q1NTUnVsZURhdGFMaXN0LCByZXBsYWNlIHdpdGggVmVjdG9yPFJ1bGVEYXRhPgorICAgICAgICAt
IHJlbmFtZSBDU1NSdWxlRGF0YSAtPiBSdWxlRGF0YSBhbmQgQ1NTUnVsZVNldCAtPiBSdWxlU2V0
IAorICAgICAgICAgICh0aGVzZSBhcmUgc2VsZWN0b3IgaW50ZXJuYWwgY2xhc3NlcywgQ1NTIHBy
ZWZpeCBpcyBiZXR0ZXIgcmVzZXJ2ZWQgZm9yIHB1YmxpYyBvbmVzKS4KKyAgICAgICAgLSBjb25z
dGlmeSBhIGJpdAorICAgICAgICAtIHNocmluayB0aGUgdmVjdG9ycyB0byBmaXQgYWZ0ZXIgY29s
bGVjdGluZyB0aGUgcnVsZXMKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVEYXRhOjpSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpSdWxlRGF0YTo6cG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OnJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OnNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJ1bGVTZXQ6OmRpc2FibGVBdXRvU2hyaW5rVG9GaXQpOgorICAgICAgICAoV2ViQ29yZTo6
UnVsZVNldDo6Z2V0SURSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpnZXRDbGFz
c1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmdldFRhZ1J1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmdldFBzZXVkb1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJ1bGVTZXQ6OmdldFVuaXZlcnNhbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6
OmdldFBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0U2libGluZ1J1bGVzSW5E
ZWZhdWx0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5
bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpsb2FkRnVsbERlZmF1bHRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpsb2FkU2ltcGxlRGVmYXVsdFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OmxvYWRWaWV3U291cmNlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFJ1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciA+KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yIDw9KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hVQVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OlJ1bGVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6flJ1bGVTZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZVNldDo6YWRkVG9SdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFk
ZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUGFnZVJ1bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6UnVsZVNldDo6YWRkU3R5bGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxlY3RJZHNB
bmRTaWJsaW5nUnVsZXNGcm9tTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0Ojpjb2xs
ZWN0SWRzQW5kU2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OnNocmlua01hcFZlY3Rv
cnNUb0ZpdCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzaHJpbmtUb0ZpdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QpOgorICAg
ICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjphZGRNYXRjaGVkUnVsZSk6CisKIDIwMTEtMDItMDIgIE5hb2tpIFRha2FubyAg
PHRha2Fuby5uYW9raUBnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11
cmEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lv
biA3Njk1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUyLDczICszNTIsMzEgQEAgaWYgKGlkID09IHByb3BJRCkgeyBcCiAg
ICAgcmV0dXJuOyBcCiB9CiAKLWNsYXNzIENTU1J1bGVEYXRhIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDU1NSdWxlRGF0YSk7CitjbGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgQ1NT
UnVsZURhdGEodW5zaWduZWQgcG9zLCBDU1NTdHlsZVJ1bGUqIHIsIENTU1NlbGVjdG9yKiBzZWws
IENTU1J1bGVEYXRhKiBwcmV2ID0gMCkKLSAgICAgICAgOiBtX3Bvc2l0aW9uKHBvcykKLSAgICAg
ICAgLCBtX3J1bGUocikKLSAgICAgICAgLCBtX3NlbGVjdG9yKHNlbCkKLSAgICAgICAgLCBtX25l
eHQoMCkKKyAgICBSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxl
Y3RvciwgdW5zaWduZWQgcG9zaXRpb24pCisgICAgICAgIDogbV9ydWxlKHJ1bGUpCisgICAgICAg
ICwgbV9zZWxlY3RvcihzZWxlY3RvcikKKyAgICAgICAgLCBtX3Bvc2l0aW9uKHBvc2l0aW9uKQog
ICAgIHsKLSAgICAgICAgaWYgKHByZXYpCi0gICAgICAgICAgICBwcmV2LT5tX25leHQgPSB0aGlz
OwogICAgIH0KLQotICAgIH5DU1NSdWxlRGF0YSgpCi0gICAgewotICAgIH0KLQotICAgIHVuc2ln
bmVkIHBvc2l0aW9uKCkgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQotICAgIENTU1N0eWxlUnVsZSog
cnVsZSgpIHsgcmV0dXJuIG1fcnVsZTsgfQotICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIHsg
cmV0dXJuIG1fc2VsZWN0b3I7IH0KLSAgICBDU1NSdWxlRGF0YSogbmV4dCgpIHsgcmV0dXJuIG1f
bmV4dDsgfQorICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfQorICAgIENTU1N0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQor
ICAgIENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0K
IAogcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOwogICAgIENTU1N0eWxlUnVsZSog
bV9ydWxlOwogICAgIENTU1NlbGVjdG9yKiBtX3NlbGVjdG9yOwotICAgIENTU1J1bGVEYXRhKiBt
X25leHQ7Ci19OwotCi1jbGFzcyBDU1NSdWxlRGF0YUxpc3QgewotICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENTU1J1bGVEYXRhTGlzdCk7Ci1wdWJsaWM6Ci0gICAgQ1NTUnVsZURhdGFMaXN0KHVu
c2lnbmVkIHBvcywgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQotICAgICAg
ICA6IG1fZmlyc3QobmV3IENTU1J1bGVEYXRhKHBvcywgcnVsZSwgc2VsKSkKLSAgICAgICAgLCBt
X2xhc3QobV9maXJzdCkKLSAgICB7Ci0gICAgfQotCi0gICAgfkNTU1J1bGVEYXRhTGlzdCgpCi0g
ICAgewotICAgICAgICBDU1NSdWxlRGF0YSogcHRyOwotICAgICAgICBDU1NSdWxlRGF0YSogbmV4
dDsKLSAgICAgICAgcHRyID0gbV9maXJzdDsKLSAgICAgICAgd2hpbGUgKHB0cikgewotICAgICAg
ICAgICAgbmV4dCA9IHB0ci0+bmV4dCgpOwotICAgICAgICAgICAgZGVsZXRlIHB0cjsKLSAgICAg
ICAgICAgIHB0ciA9IG5leHQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBDU1NSdWxlRGF0YSog
Zmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2ZpcnN0OyB9Ci0gICAgQ1NTUnVsZURhdGEqIGxhc3Qo
KSBjb25zdCB7IHJldHVybiBtX2xhc3Q7IH0KLQotICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIHBv
cywgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKSB7IG1fbGFzdCA9IG5ldyBD
U1NSdWxlRGF0YShwb3MsIHJ1bGUsIHNlbCwgbV9sYXN0KTsgfQotCi1wcml2YXRlOgotICAgIENT
U1J1bGVEYXRhKiBtX2ZpcnN0OwotICAgIENTU1J1bGVEYXRhKiBtX2xhc3Q7CisgICAgdW5zaWdu
ZWQgbV9wb3NpdGlvbjsKIH07CiAKLWNsYXNzIENTU1J1bGVTZXQgewotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENTU1J1bGVTZXQpOworY2xhc3MgUnVsZVNldCB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUnVsZVNldCk7CiBwdWJsaWM6Ci0gICAgQ1NTUnVsZVNldCgpOwotICAgIH5DU1NS
dWxlU2V0KCk7CisgICAgUnVsZVNldCgpOworICAgIH5SdWxlU2V0KCk7CiAgICAgCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDU1NSdWxlRGF0YUxpc3QqPiBBdG9tUnVs
ZU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFZlY3RvcjxSdWxl
RGF0YT4qPiBBdG9tUnVsZU1hcDsKICAgICAKICAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENT
U1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3Rv
ciogPSAwKTsKIApAQCAtNDI3LDM0ICszODUsMzYgQEAgcHVibGljOgogICAgIHZvaWQgYWRkUGFn
ZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsKICAgICB2b2lkIGFk
ZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsCiAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsK
KyAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgdm9pZCBkaXNhYmxlQXV0b1Nocmlua1RvRml0
KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQogICAgIAotICAgIHZvaWQg
Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyhIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRz
LCBPd25QdHI8Q1NTUnVsZVNldD4mIHNpYmxpbmdSdWxlcykgY29uc3Q7CisgICAgdm9pZCBjb2xs
ZWN0SWRzQW5kU2libGluZ1J1bGVzKEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBpZHMsIE93
blB0cjxSdWxlU2V0PiYgc2libGluZ1J1bGVzKSBjb25zdDsKICAgICAKLSAgICBDU1NSdWxlRGF0
YUxpc3QqIGdldElEUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX2lkUnVs
ZXMuZ2V0KGtleSk7IH0KLSAgICBDU1NSdWxlRGF0YUxpc3QqIGdldENsYXNzUnVsZXMoQXRvbWlj
U3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KLSAgICBD
U1NSdWxlRGF0YUxpc3QqIGdldFRhZ1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgeyByZXR1
cm4gbV90YWdSdWxlcy5nZXQoa2V5KTsgfQotICAgIENTU1J1bGVEYXRhTGlzdCogZ2V0UHNldWRv
UnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSB7IHJldHVybiBtX3BzZXVkb1J1bGVzLmdldChr
ZXkpOyB9Ci0gICAgQ1NTUnVsZURhdGFMaXN0KiBnZXRVbml2ZXJzYWxSdWxlcygpIHsgcmV0dXJu
IG1fdW5pdmVyc2FsUnVsZXMuZ2V0KCk7IH0KLSAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFBhZ2VS
dWxlcygpIHsgcmV0dXJuIG1fcGFnZVJ1bGVzLmdldCgpOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1
bGVEYXRhPiogZ2V0SURSdWxlcyhBdG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJu
IG1faWRSdWxlcy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGdldENs
YXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2NsYXNzUnVs
ZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBnZXRUYWdSdWxlcyhB
dG9taWNTdHJpbmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7
IH0KKyAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBnZXRQc2V1ZG9SdWxlcyhBdG9taWNTdHJp
bmdJbXBsKiBrZXkpIGNvbnN0IHsgcmV0dXJuIG1fcHNldWRvUnVsZXMuZ2V0KGtleSk7IH0KKyAg
ICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBnZXRVbml2ZXJzYWxSdWxlcygpIGNvbnN0IHsgcmV0
dXJuICZtX3VuaXZlcnNhbFJ1bGVzOyB9CisgICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogZ2V0
UGFnZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fcGFnZVJ1bGVzOyB9CiAgICAgCiBwdWJsaWM6
CiAgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVzOwogICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxl
czsKICAgICBBdG9tUnVsZU1hcCBtX3RhZ1J1bGVzOwogICAgIEF0b21SdWxlTWFwIG1fcHNldWRv
UnVsZXM7Ci0gICAgT3duUHRyPENTU1J1bGVEYXRhTGlzdD4gbV91bml2ZXJzYWxSdWxlczsKLSAg
ICBPd25QdHI8Q1NTUnVsZURhdGFMaXN0PiBtX3BhZ2VSdWxlczsKKyAgICBWZWN0b3I8UnVsZURh
dGE+IG1fdW5pdmVyc2FsUnVsZXM7CisgICAgVmVjdG9yPFJ1bGVEYXRhPiBtX3BhZ2VSdWxlczsK
ICAgICB1bnNpZ25lZCBtX3J1bGVDb3VudDsKLSAgICB1bnNpZ25lZCBtX3BhZ2VSdWxlQ291bnQ7
CisgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CiB9OwogCi1zdGF0aWMgQ1NTUnVs
ZVNldCogZGVmYXVsdFN0eWxlOwotc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHls
ZTsKLXN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKLXN0YXRpYyBDU1NSdWxl
U2V0KiBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlOworc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRTdHls
ZTsKK3N0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CitzdGF0aWMgUnVsZVNldCog
ZGVmYXVsdFByaW50U3R5bGU7CitzdGF0aWMgUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHls
ZTsKIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKICAgICAK
LXN0YXRpYyBDU1NSdWxlU2V0KiBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZTsKK3N0YXRpYyBS
dWxlU2V0KiBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHlsZTsKIAogUmVuZGVyU3R5bGUqIENTU1N0
eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKQEAgLTQ3Myw3ICs0MzMsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudENhblVzZVNpbXBsZURlCiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb2xsZWN0U2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUoKQogewotICAgIE93blB0
cjxDU1NSdWxlU2V0PiBzaWJsaW5nUnVsZXM7CisgICAgT3duUHRyPFJ1bGVTZXQ+IHNpYmxpbmdS
dWxlczsKICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiBpZHM7CiAgICAgZGVmYXVsdFN0
eWxlLT5jb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzKGlkcywgc2libGluZ1J1bGVzKTsKICAgICBB
U1NFUlQoaWRzLmlzRW1wdHkoKSk7CkBAIC01NDYsMTAgKzUwNiwxMiBAQCBDU1NTdHlsZVNlbGVj
dG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAm
JiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVh
dG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUu
Z2V0KCkpKTsKIAotICAgIG1fYXV0aG9yU3R5bGUgPSBhZG9wdFB0cihuZXcgQ1NTUnVsZVNldCk7
CisgICAgbV9hdXRob3JTdHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKKyAgICAvLyBBZGRp
bmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgorICAgIG1f
YXV0aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKIAogICAgIC8vIEZJWE1FOiBU
aGlzIHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQotICAgIE93
blB0cjxDU1NSdWxlU2V0PiB0ZW1wVXNlclN0eWxlID0gYWRvcHRQdHIobmV3IENTU1J1bGVTZXQp
OworICAgIE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVT
ZXQpOwogICAgIGlmIChwYWdlVXNlclNoZWV0KQogICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRS
dWxlc0Zyb21TaGVldChwYWdlVXNlclNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOwogICAgIGlmIChw
YWdlR3JvdXBVc2VyU2hlZXRzKSB7CkBAIC01NjIsNyArNTI0LDcgQEAgQ1NTU3R5bGVTZWxlY3Rv
cjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHRl
bXBVc2VyU3R5bGUtPm1fcnVsZUNvdW50ID4gMCB8fCB0ZW1wVXNlclN0eWxlLT5tX3BhZ2VSdWxl
Q291bnQgPiAwKQorICAgIGlmICh0ZW1wVXNlclN0eWxlLT5tX3J1bGVDb3VudCA+IDAgfHwgdGVt
cFVzZXJTdHlsZS0+bV9wYWdlUnVsZXMuc2l6ZSgpID4gMCkKICAgICAgICAgbV91c2VyU3R5bGUg
PSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsKIAogICAgIC8vIEFkZCBydWxlcyBmcm9tIGVsZW1l
bnRzIGxpa2UgU1ZHJ3MgPGZvbnQtZmFjZT4KQEAgLTU3NSw4ICs1MzcsNyBAQCBDU1NTdHlsZVNl
bGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtCiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0
ID0gc3R5bGVTaGVldHMtPml0ZW0oaSk7CiAgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNo
ZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKQogICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1f
bWVkaXVtLCB0aGlzKTsKLSAgICB9Ci0gICAgCisgICAgfSAgICAKICAgICAvLyBDb2xsZWN0IGFs
bCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6Zmlyc3QtY2hpbGQgYW5k
IHNpbWlsYXIpCiAgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0eWxlc2hlZXRzLiBTdHls
ZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJlamVjdAogICAgIC8vIHNo
YXJpbmcgY2FuZGlkYXRlcy4KQEAgLTU4Nyw2ICs1NDgsMTAgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6
Q1NTU3R5bGVTZWxlY3RvcihEb2N1bQogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV91
c2VyU3R5bGUtPmNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXMobV9pZHNJblJ1bGVzLCBtX3NpYmxp
bmdSdWxlcyk7CiAKKyAgICBtX2F1dGhvclN0eWxlLT5zaHJpbmtUb0ZpdCgpOworICAgIGlmICht
X3NpYmxpbmdSdWxlcykKKyAgICAgICAgbV9zaWJsaW5nUnVsZXMtPnNocmlua1RvRml0KCk7CisK
ICAgICBpZiAoZG9jdW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPnN0
eWxlKCkpCiAgICAgICAgIGRvY3VtZW50LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5mb250KCkudXBk
YXRlKGZvbnRTZWxlY3RvcigpKTsKIH0KQEAgLTYyMiwxMyArNTg3LDEzIEBAIHN0YXRpYyB2b2lk
IGxvYWRGdWxsRGVmYXVsdFN0eWxlKCkKICAgICAgICAgQVNTRVJUKGRlZmF1bHRTdHlsZSk7CiAg
ICAgICAgIGRlbGV0ZSBkZWZhdWx0U3R5bGU7CiAgICAgICAgIHNpbXBsZURlZmF1bHRTdHlsZVNo
ZWV0LT5kZXJlZigpOwotICAgICAgICBkZWZhdWx0U3R5bGUgPSBuZXcgQ1NTUnVsZVNldDsKKyAg
ICAgICAgZGVmYXVsdFN0eWxlID0gbmV3IFJ1bGVTZXQ7CiAgICAgICAgIHNpbXBsZURlZmF1bHRT
dHlsZVNoZWV0ID0gMDsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoIWRlZmF1bHRTdHls
ZSk7Ci0gICAgICAgIGRlZmF1bHRTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OwotICAgICAgICBkZWZh
dWx0UHJpbnRTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OwotICAgICAgICBkZWZhdWx0UXVpcmtzU3R5
bGUgPSBuZXcgQ1NTUnVsZVNldDsKKyAgICAgICAgZGVmYXVsdFN0eWxlID0gbmV3IFJ1bGVTZXQ7
CisgICAgICAgIGRlZmF1bHRQcmludFN0eWxlID0gbmV3IFJ1bGVTZXQ7CisgICAgICAgIGRlZmF1
bHRRdWlya3NTdHlsZSA9IG5ldyBSdWxlU2V0OwogICAgIH0KIAogICAgIC8vIFN0cmljdC1tb2Rl
IHJ1bGVzLgpAQCAtNjYxLDkgKzYyNiw5IEBAIHN0YXRpYyB2b2lkIGxvYWRTaW1wbGVEZWZhdWx0
U3R5bGUoKQogICAgIEFTU0VSVCghZGVmYXVsdFN0eWxlKTsKICAgICBBU1NFUlQoIXNpbXBsZURl
ZmF1bHRTdHlsZVNoZWV0KTsKICAgICAKLSAgICBkZWZhdWx0U3R5bGUgPSBuZXcgQ1NTUnVsZVNl
dDsKLSAgICBkZWZhdWx0UHJpbnRTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OwotICAgIGRlZmF1bHRR
dWlya3NTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OworICAgIGRlZmF1bHRTdHlsZSA9IG5ldyBSdWxl
U2V0OworICAgIGRlZmF1bHRQcmludFN0eWxlID0gbmV3IFJ1bGVTZXQ7CisgICAgZGVmYXVsdFF1
aXJrc1N0eWxlID0gbmV3IFJ1bGVTZXQ7CiAKICAgICBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldCA9
IHBhcnNlVUFTaGVldChzaW1wbGVVc2VyQWdlbnRTdHlsZVNoZWV0LCBzdHJsZW4oc2ltcGxlVXNl
ckFnZW50U3R5bGVTaGVldCkpOwogICAgIGRlZmF1bHRTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
c2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQsIHNjcmVlbkV2YWwoKSk7CkBAIC02NzQsNyArNjM5LDcg
QEAgc3RhdGljIHZvaWQgbG9hZFNpbXBsZURlZmF1bHRTdHlsZSgpCiBzdGF0aWMgdm9pZCBsb2Fk
Vmlld1NvdXJjZVN0eWxlKCkKIHsKICAgICBBU1NFUlQoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUp
OwotICAgIGRlZmF1bHRWaWV3U291cmNlU3R5bGUgPSBuZXcgQ1NTUnVsZVNldDsKKyAgICBkZWZh
dWx0Vmlld1NvdXJjZVN0eWxlID0gbmV3IFJ1bGVTZXQ7CiAgICAgZGVmYXVsdFZpZXdTb3VyY2VT
dHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHNvdXJjZVVzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZihzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7
CiB9CiAKQEAgLTY4Myw3ICs2NDgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNo
ZWREZWNsYXJhCiAgICAgbV9tYXRjaGVkRGVjbHMuYXBwZW5kKGRlY2wpOwogfQogCi12b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RS
dWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3Zv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQog
ewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKQEAgLTcyOCwxNiArNjkzLDE3IEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAgICB9CiB9CiAKLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFMaXN0KiBydWxl
cywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogICAgIGlmICghcnVsZXMpCiAg
ICAgICAgIHJldHVybjsKLQotICAgIGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+Zmlyc3Qo
KTsgZDsgZCA9IGQtPm5leHQoKSkgewotICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBkLT5y
dWxlKCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBjb25zdCBSdWxlRGF0YSYgcnVs
ZURhdGEgPSBydWxlcy0+YXQoaSk7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVE
YXRhLnJ1bGUoKTsKICAgICAgICAgaWYgKG1fY2hlY2tlci5tX3NhbWVPcmlnaW5Pbmx5ICYmICFt
X2NoZWNrZXIubV9kb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuUmVxdWVzdChydWxlLT5i
YXNlVVJMKCkpKQogICAgICAgICAgICAgY29udGludWU7IAotICAgICAgICBpZiAoY2hlY2tTZWxl
Y3RvcihkLT5zZWxlY3RvcigpKSkgeworICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0
YS5zZWxlY3RvcigpKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3Bl
cnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAg
ICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsID0gcnVsZS0+ZGVjbGFy
YXRpb24oKTsKICAgICAgICAgICAgIGlmICghZGVjbCB8fCAoIWRlY2wtPmxlbmd0aCgpICYmICFp
bmNsdWRlRW1wdHlSdWxlcykpCkBAIC03NTcsMjAgKzcyMywyMCBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUlu
ZGV4ID0gbGFzdFJ1bGVJbmRleDsKIAogICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHJ1bGUg
dG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICAgICAgICAgICAgICBhZGRNYXRjaGVk
UnVsZShkKTsKKyAgICAgICAgICAgICAgICBhZGRNYXRjaGVkUnVsZSgmcnVsZURhdGEpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBvcGVyYXRvciA+
KENTU1J1bGVEYXRhJiByMSwgQ1NTUnVsZURhdGEmIHIyKQorc3RhdGljIGJvb2wgb3BlcmF0b3Ig
Pihjb25zdCBSdWxlRGF0YSYgcjEsIGNvbnN0IFJ1bGVEYXRhJiByMikKIHsKICAgICBpbnQgc3Bl
YzEgPSByMS5zZWxlY3RvcigpLT5zcGVjaWZpY2l0eSgpOwogICAgIGludCBzcGVjMiA9IHIyLnNl
bGVjdG9yKCktPnNwZWNpZmljaXR5KCk7CiAgICAgcmV0dXJuIChzcGVjMSA9PSBzcGVjMikgPyBy
MS5wb3NpdGlvbigpID4gcjIucG9zaXRpb24oKSA6IHNwZWMxID4gc3BlYzI7IAogfQogICAgIAot
c3RhdGljIGJvb2wgb3BlcmF0b3IgPD0oQ1NTUnVsZURhdGEmIHIxLCBDU1NSdWxlRGF0YSYgcjIp
CitzdGF0aWMgYm9vbCBvcGVyYXRvciA8PShjb25zdCBSdWxlRGF0YSYgcjEsIGNvbnN0IFJ1bGVE
YXRhJiByMikKIHsKICAgICByZXR1cm4gIShyMSA+IHIyKTsKIH0KQEAgLTc4NSw4ICs3NTEsOCBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMoCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGVuZCAtIDE7IGkgPiBzdGFydDsgaS0tKSB7CiAgICAgICAgICAgICBib29s
IHNvcnRlZCA9IHRydWU7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzdGFydDsgaiA8
IGk7IGorKykgewotICAgICAgICAgICAgICAgIENTU1J1bGVEYXRhKiBlbHQgPSBtX21hdGNoZWRS
dWxlc1tqXTsKLSAgICAgICAgICAgICAgICBDU1NSdWxlRGF0YSogZWx0MiA9IG1fbWF0Y2hlZFJ1
bGVzW2ogKyAxXTsKKyAgICAgICAgICAgICAgICBjb25zdCBSdWxlRGF0YSogZWx0ID0gbV9tYXRj
aGVkUnVsZXNbal07CisgICAgICAgICAgICAgICAgY29uc3QgUnVsZURhdGEqIGVsdDIgPSBtX21h
dGNoZWRSdWxlc1tqICsgMV07CiAgICAgICAgICAgICAgICAgaWYgKCplbHQgPiAqZWx0Mikgewog
ICAgICAgICAgICAgICAgICAgICBzb3J0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
bV9tYXRjaGVkUnVsZXNbal0gPSBlbHQyOwpAQCAtODA0LDggKzc3MCw4IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygKICAgICBzb3J0TWF0Y2hlZFJ1bGVzKHN0YXJ0
LCBtaWQpOwogICAgIHNvcnRNYXRjaGVkUnVsZXMobWlkLCBlbmQpOwogICAgIAotICAgIENTU1J1
bGVEYXRhKiBlbHQgPSBtX21hdGNoZWRSdWxlc1ttaWQgLSAxXTsKLSAgICBDU1NSdWxlRGF0YSog
ZWx0MiA9IG1fbWF0Y2hlZFJ1bGVzW21pZF07CisgICAgY29uc3QgUnVsZURhdGEqIGVsdCA9IG1f
bWF0Y2hlZFJ1bGVzW21pZCAtIDFdOworICAgIGNvbnN0IFJ1bGVEYXRhKiBlbHQyID0gbV9tYXRj
aGVkUnVsZXNbbWlkXTsKICAgICAKICAgICAvLyBIYW5kbGUgdGhlIGZhc3QgY29tbW9uIGNhc2Ug
KG9mIGVxdWFsIHNwZWNpZmljaXR5KS4gIFRoZSBsaXN0IG1heSBhbHJlYWR5CiAgICAgLy8gYmUg
Y29tcGxldGVseSBzb3J0ZWQuCkBAIC04MTQsNyArNzgwLDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKAogICAgIAogICAgIC8vIFdlIGhhdmUgdG8gbWVyZ2Ugc29y
dC4gIEVuc3VyZSBvdXIgbWVyZ2UgYnVmZmVyIGlzIGJpZyBlbm91Z2ggdG8gaG9sZAogICAgIC8v
IGFsbCB0aGUgaXRlbXMuCi0gICAgVmVjdG9yPENTU1J1bGVEYXRhKj4gcnVsZXNNZXJnZUJ1ZmZl
cjsKKyAgICBWZWN0b3I8Y29uc3QgUnVsZURhdGEqPiBydWxlc01lcmdlQnVmZmVyOwogICAgIHJ1
bGVzTWVyZ2VCdWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShlbmQgLSBzdGFydCk7IAogCiAg
ICAgdW5zaWduZWQgaTEgPSBzdGFydDsKQEAgLTExNjAsNyArMTEyNiw3IEBAIEFMV0FZU19JTkxJ
TkUgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWMKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0
Y2hVQVJ1bGVzKGludCYgZmlyc3RVQVJ1bGUsIGludCYgbGFzdFVBUnVsZSkKIHsKICAgICAvLyBG
aXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgotICAgIENTU1J1
bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVj
aWZpYygicHJpbnQiKQorICAgIFJ1bGVTZXQqIHVzZXJBZ2VudFN0eWxlU2hlZXQgPSBtX21lZGl1
bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQogICAgICAgICA/IGRlZmF1bHRQcmlu
dFN0eWxlIDogZGVmYXVsdFN0eWxlOwogICAgIG1hdGNoUnVsZXModXNlckFnZW50U3R5bGVTaGVl
dCwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKIApAQCAtMjg3NSwxMyArMjg0MSwx
MyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLUNTU1J1bGVTZXQ6OkNTU1J1bGVTZXQoKQorUnVsZVNldDo6UnVsZVNldCgpCiAgICAg
OiBtX3J1bGVDb3VudCgwKQotICAgICwgbV9wYWdlUnVsZUNvdW50KDApCisgICAgLCBtX2F1dG9T
aHJpbmtUb0ZpdEVuYWJsZWQodHJ1ZSkKIHsKIH0KIAotQ1NTUnVsZVNldDo6fkNTU1J1bGVTZXQo
KQorUnVsZVNldDo6flJ1bGVTZXQoKQogeyAKICAgICBkZWxldGVBbGxWYWx1ZXMobV9pZFJ1bGVz
KTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV9jbGFzc1J1bGVzKTsKQEAgLTI4OTAsMTkgKzI4NTYs
MTkgQEAgQ1NTUnVsZVNldDo6fkNTU1J1bGVTZXQoKQogfQogCiAKLXZvaWQgQ1NTUnVsZVNldDo6
YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKK3Zv
aWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVN
YXAmIG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVs
ZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBpZiAoIWtleSkgcmV0dXJuOwotICAgIENTU1J1
bGVEYXRhTGlzdCogcnVsZXMgPSBtYXAuZ2V0KGtleSk7CisgICAgVmVjdG9yPFJ1bGVEYXRhPiog
cnVsZXMgPSBtYXAuZ2V0KGtleSk7CiAgICAgaWYgKCFydWxlcykgewotICAgICAgICBydWxlcyA9
IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKTsKKyAgICAgICAg
cnVsZXMgPSBuZXcgVmVjdG9yPFJ1bGVEYXRhPjsKICAgICAgICAgbWFwLnNldChrZXksIHJ1bGVz
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcnVsZXMtPmFwcGVuZChtX3J1bGVDb3VudCsrLCBydWxl
LCBzZWwpOworICAgIH0KKyAgICBydWxlcy0+YXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9y
dWxlQ291bnQrKykpOwogfQogCi12b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxl
KiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQordm9pZCBSdWxlU2V0OjphZGRSdWxlKENTU1N0eWxl
UnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBpZiAoc2VsLT5tX21hdGNoID09
IENTU1NlbGVjdG9yOjpJZCkgewogICAgICAgICBhZGRUb1J1bGVTZXQoc2VsLT52YWx1ZSgpLmlt
cGwoKSwgbV9pZFJ1bGVzLCBydWxlLCBzZWwpOwpAQCAtMjkyNCwyMiArMjg5MCwxNSBAQCB2b2lk
IENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiByCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAvLyBKdXN0IHB1dCBpdCBpbiB0aGUgdW5pdmVyc2FsIHJ1bGUgc2V0LgotICAg
IGlmICghbV91bml2ZXJzYWxSdWxlcykKLSAgICAgICAgbV91bml2ZXJzYWxSdWxlcyA9IGFkb3B0
UHRyKG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX3VuaXZlcnNhbFJ1bGVzLT5hcHBlbmQobV9ydWxlQ291bnQrKywgcnVs
ZSwgc2VsKTsKKyAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWws
IG1fcnVsZUNvdW50KyspKTsKIH0KIAotdm9pZCBDU1NSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NT
dHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpCit2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VS
dWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKLSAgICBpZiAoIW1f
cGFnZVJ1bGVzKQotICAgICAgICBtX3BhZ2VSdWxlcyA9IGFkb3B0UHRyKG5ldyBDU1NSdWxlRGF0
YUxpc3QobV9wYWdlUnVsZUNvdW50KyssIHJ1bGUsIHNlbCkpOwotICAgIGVsc2UKLSAgICAgICAg
bV9wYWdlUnVsZXMtPmFwcGVuZChtX3BhZ2VSdWxlQ291bnQrKywgcnVsZSwgc2VsKTsKKyAgICBt
X3BhZ2VSdWxlcy5hcHBlbmQoUnVsZURhdGEocnVsZSwgc2VsLCBtX3BhZ2VSdWxlcy5zaXplKCkp
KTsKIH0KIAotdm9pZCBDU1NSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVj
dG9yKiBzdHlsZVNlbGVjdG9yKQordm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NT
dHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NT
dHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKQogewogICAgIGlmICghc2hlZXQpCiAgICAgICAg
IHJldHVybjsKQEAgLTI5ODgsOSArMjk0NywxMSBAQCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KENTU1N0CiAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNLZXlmcmFtZXNSdWxl
KCkpCiAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19j
YXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpdGVtKSk7CiAgICAgfQorICAgIGlmIChtX2F1
dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCisgICAgICAgIHNocmlua1RvRml0KCk7CiB9CiAKLXZvaWQg
Q1NTUnVsZVNldDo6YWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3ZvaWQgUnVsZVNl
dDo6YWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBpZiAocnVsZS0+aXNQ
YWdlUnVsZSgpKSB7CiAgICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19jYXN0
PENTU1BhZ2VSdWxlKj4ocnVsZSk7CkBAIC0zMDAxLDExICsyOTYyLDEzIEBAIHZvaWQgQ1NTUnVs
ZVNldDo6YWRkU3R5bGVSdWxlKENTU1N0eWxlUnUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNv
bGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiYgaWRzLCBPd25QdHI8Q1NTUnVsZVNldD4mIHNpYmxpbmdSdWxlcywgY29uc3QgQ1NTUnVsZURh
dGFMaXN0KiBydWxlcykKK3N0YXRpYyB2b2lkIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9t
TGlzdChIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8UnVsZVNldD4mIHNp
YmxpbmdSdWxlcywgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiYgcnVsZXMpCiB7Ci0gICAgZm9yIChD
U1NSdWxlRGF0YSogZGF0YSA9IHJ1bGVzLT5maXJzdCgpOyBkYXRhOyBkYXRhID0gZGF0YS0+bmV4
dCgpKSB7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSA9IHJ1bGVzW2ldOwogICAgICAgICBib29sIGZvdW5kU2libGluZ1NlbGVjdG9yID0gZmFs
c2U7Ci0gICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gZGF0YS0+c2VsZWN0b3Io
KTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgeworICAgICAg
ICBmb3IgKENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHJ1bGVEYXRhLnNlbGVjdG9yKCk7IHNlbGVj
dG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0b3J5KCkpIHsKICAgICAgICAgICAgIGlm
IChzZWxlY3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQgJiYgIXNlbGVjdG9yLT52YWx1
ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBpZHMuYWRkKHNlbGVjdG9yLT52YWx1ZSgp
LmltcGwoKSk7CiAgICAgICAgICAgICBpZiAoQ1NTU2VsZWN0b3IqIHNpbXBsZVNlbGVjdG9yID0g
c2VsZWN0b3ItPnNpbXBsZVNlbGVjdG9yKCkpIHsKQEAgLTMwMTgsMjggKzI5ODEsNDQgQEAgc3Rh
dGljIHZvaWQgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0ZybwogICAgICAgICB9CiAgICAgICAg
IGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikgewogICAgICAgICAgICAgaWYgKCFzaWJsaW5nUnVs
ZXMpCi0gICAgICAgICAgICAgICAgc2libGluZ1J1bGVzID0gYWRvcHRQdHIobmV3IENTU1J1bGVT
ZXQpOwotICAgICAgICAgICAgc2libGluZ1J1bGVzLT5hZGRSdWxlKGRhdGEtPnJ1bGUoKSwgZGF0
YS0+c2VsZWN0b3IoKSk7ICAgCisgICAgICAgICAgICAgICAgc2libGluZ1J1bGVzID0gYWRvcHRQ
dHIobmV3IFJ1bGVTZXQpOworICAgICAgICAgICAgc2libGluZ1J1bGVzLT5hZGRSdWxlKHJ1bGVE
YXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7ICAgCiAgICAgICAgIH0KICAgICB9CiB9
CiAKLXZvaWQgQ1NTUnVsZVNldDo6Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyhIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8Q1NTUnVsZVNldD4mIHNpYmxpbmdSdWxlcykg
Y29uc3QKK3ZvaWQgUnVsZVNldDo6Y29sbGVjdElkc0FuZFNpYmxpbmdSdWxlcyhIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiYgaWRzLCBPd25QdHI8UnVsZVNldD4mIHNpYmxpbmdSdWxlcykgY29u
c3QKIHsKICAgICBBdG9tUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9pZFJ1bGVzLmVu
ZCgpOwogICAgIGZvciAoQXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pZFJ1bGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdS
dWxlc0Zyb21MaXN0KGlkcywgc2libGluZ1J1bGVzLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY29s
bGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KGlkcywgc2libGluZ1J1bGVzLCAqaXQtPnNl
Y29uZCk7CiAgICAgZW5kID0gbV9jbGFzc1J1bGVzLmVuZCgpOwogICAgIGZvciAoQXRvbVJ1bGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jbGFzc1J1bGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkKLSAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxlc0Zyb21MaXN0KGlkcywgc2li
bGluZ1J1bGVzLCBpdC0+c2Vjb25kKTsKKyAgICAgICAgY29sbGVjdElkc0FuZFNpYmxpbmdSdWxl
c0Zyb21MaXN0KGlkcywgc2libGluZ1J1bGVzLCAqaXQtPnNlY29uZCk7CiAgICAgZW5kID0gbV90
YWdSdWxlcy5lbmQoKTsKICAgICBmb3IgKEF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdGFnUnVsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBjb2xsZWN0SWRz
QW5kU2libGluZ1J1bGVzRnJvbUxpc3QoaWRzLCBzaWJsaW5nUnVsZXMsIGl0LT5zZWNvbmQpOwor
ICAgICAgICBjb2xsZWN0SWRzQW5kU2libGluZ1J1bGVzRnJvbUxpc3QoaWRzLCBzaWJsaW5nUnVs
ZXMsICppdC0+c2Vjb25kKTsKICAgICBlbmQgPSBtX3BzZXVkb1J1bGVzLmVuZCgpOwogICAgIGZv
ciAoQXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wc2V1ZG9SdWxlcy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9t
TGlzdChpZHMsIHNpYmxpbmdSdWxlcywgaXQtPnNlY29uZCk7Ci0gICAgaWYgKG1fdW5pdmVyc2Fs
UnVsZXMpCi0gICAgICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChpZHMsIHNp
YmxpbmdSdWxlcywgbV91bml2ZXJzYWxSdWxlcy5nZXQoKSk7CisgICAgICAgIGNvbGxlY3RJZHNB
bmRTaWJsaW5nUnVsZXNGcm9tTGlzdChpZHMsIHNpYmxpbmdSdWxlcywgKml0LT5zZWNvbmQpOwor
ICAgIGNvbGxlY3RJZHNBbmRTaWJsaW5nUnVsZXNGcm9tTGlzdChpZHMsIHNpYmxpbmdSdWxlcywg
bV91bml2ZXJzYWxSdWxlcyk7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHZvaWQgc2hyaW5rTWFw
VmVjdG9yc1RvRml0KFJ1bGVTZXQ6OkF0b21SdWxlTWFwJiBtYXApCit7CisgICAgUnVsZVNldDo6
QXRvbVJ1bGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKKyAgICBmb3IgKFJ1bGVTZXQ6
OkF0b21SdWxlTWFwOjppdGVyYXRvciBpdCA9IG1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
CisgICAgICAgIGl0LT5zZWNvbmQtPnNocmlua1RvRml0KCk7Cit9CisgICAgCit2b2lkIFJ1bGVT
ZXQ6OnNocmlua1RvRml0KCkKK3sKKyAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9pZFJ1bGVz
KTsKKyAgICBzaHJpbmtNYXBWZWN0b3JzVG9GaXQobV9jbGFzc1J1bGVzKTsKKyAgICBzaHJpbmtN
YXBWZWN0b3JzVG9GaXQobV90YWdSdWxlcyk7CisgICAgc2hyaW5rTWFwVmVjdG9yc1RvRml0KG1f
cHNldWRvUnVsZXMpOworICAgIG1fdW5pdmVyc2FsUnVsZXMuc2hyaW5rVG9GaXQoKTsKKyAgICBt
X3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0zMTA4LDcgKzMwODcsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFwcGx5
RGVjbGFyYXRpb25zCiAgICAgfQogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFn
ZVJ1bGVzKENTU1J1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBh
Z2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBh
Z2UsIGNvbnN0IFN0cmluZyYgcGFnZU5hbWUpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIo
KTsKIApAQCAtMzEyOSwxNyArMzEwOCwxOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UGFnZVJ1bGVzKENTCiAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxl
c1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFMaXN0KiBydWxlcywgYm9vbCBpc0xl
ZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQordm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3Ry
aW5nJiBwYWdlTmFtZSkKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5uZXh0KCkp
IHsKLSAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gZC0+cnVsZSgpOwotICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTG9jYWxOYW1lID0gZC0+c2VsZWN0b3IoKS0+dGFnKCku
bG9jYWxOYW1lKCk7CisgICAgdW5zaWduZWQgc2l6ZSA9IHJ1bGVzLT5zaXplKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBjb25zdCBSdWxlRGF0
YSYgcnVsZURhdGEgPSBydWxlcy0+YXQoaSk7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9
IHJ1bGVEYXRhLnJ1bGUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3Rvckxv
Y2FsTmFtZSA9IHJ1bGVEYXRhLnNlbGVjdG9yKCktPnRhZygpLmxvY2FsTmFtZSgpOwogICAgICAg
ICBpZiAoc2VsZWN0b3JMb2NhbE5hbWUgIT0gc3RhckF0b20gJiYgc2VsZWN0b3JMb2NhbE5hbWUg
IT0gcGFnZU5hbWUpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgQ1NTU2VsZWN0b3I6
OlBzZXVkb1R5cGUgcHNldWRvVHlwZSA9IGQtPnNlbGVjdG9yKCktPnBzZXVkb1R5cGUoKTsKKyAg
ICAgICAgQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgcHNldWRvVHlwZSA9IHJ1bGVEYXRhLnNlbGVj
dG9yKCktPnBzZXVkb1R5cGUoKTsKICAgICAgICAgaWYgKChwc2V1ZG9UeXBlID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9MZWZ0UGFnZSAmJiAhaXNMZWZ0UGFnZSkKICAgICAgICAgICAgIHx8IChwc2V1
ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9SaWdodFBhZ2UgJiYgaXNMZWZ0UGFnZSkKICAg
ICAgICAgICAgIHx8IChwc2V1ZG9UeXBlID09IENTU1NlbGVjdG9yOjpQc2V1ZG9GaXJzdFBhZ2Ug
JiYgIWlzRmlyc3RQYWdlKSkKQEAgLTMxNTEsNyArMzEzMiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hQYWdlUnVsZXNGb3IKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IC8vIEFkZCB0aGlzIHJ1bGUgdG8gb3VyIGxpc3Qgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICAgICAg
YWRkTWF0Y2hlZFJ1bGUoZCk7CisgICAgICAgIGFkZE1hdGNoZWRSdWxlKCZydWxlRGF0YSk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlz
aW9uIDc2OTU0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDcgQEAgY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBD
U1NGb250RmFjZTsKIGNsYXNzIENTU0ZvbnRGYWNlUnVsZTsKIGNsYXNzIENTU0ltYWdlVmFsdWU7
Ci1jbGFzcyBDU1NSdWxlRGF0YTsKLWNsYXNzIENTU1J1bGVEYXRhTGlzdDsKIGNsYXNzIENTU1J1
bGVMaXN0OwotY2xhc3MgQ1NTUnVsZVNldDsKIGNsYXNzIENTU1NlbGVjdG9yOwogY2xhc3MgQ1NT
U3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5bGVTaGVldDsKQEAgLTYxLDYgKzU4LDggQEAgY2xhc3Mg
S2V5ZnJhbWVMaXN0OwogY2xhc3MgS2V5ZnJhbWVWYWx1ZTsKIGNsYXNzIE1lZGlhUXVlcnlFdmFs
dWF0b3I7CiBjbGFzcyBOb2RlOworY2xhc3MgUnVsZURhdGE7CitjbGFzcyBSdWxlU2V0OwogY2xh
c3MgU2V0dGluZ3M7CiBjbGFzcyBTdHlsZUltYWdlOwogY2xhc3MgU3R5bGVTaGVldDsKQEAgLTE4
MiwyNyArMTgxLDI3IEBAIHB1YmxpYzoKIAogICAgICAgICB2b2lkIGFkanVzdFJlbmRlclN0eWxl
KFJlbmRlclN0eWxlKiBzdHlsZVRvQWRqdXN0LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIEVs
ZW1lbnQqKTsKIAotICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKENTU1J1bGVEYXRhKiBydWxl
KSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQorICAgICAgICB2b2lkIGFkZE1hdGNo
ZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxl
KTsgfQogICAgICAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiogZGVjbCk7CiAKLSAgICAgICAgdm9pZCBtYXRjaFJ1bGVzKENTU1J1bGVTZXQq
LCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpOwotICAgICAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KENTU1J1bGVEYXRhTGlz
dCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgICAgIHZvaWQgbWF0Y2hSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
KyAgICAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+Kiwg
aW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKICAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQpOwogCiAgICAgICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KICAgICAg
ICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5kZXgs
IGludCBlbmRJbmRleCk7CiAKLSAgICAgICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhDU1NSdWxlU2V0
KiwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VO
YW1lKTsKLSAgICAgICAgdm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoQ1NTUnVsZURhdGFMaXN0
KiwgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VO
YW1lKTsKKyAgICAgICAgdm9pZCBtYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiwgYm9vbCBpc0xlZnRQ
YWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKTsKKyAgICAgICAg
dm9pZCBtYXRjaFBhZ2VSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGJvb2wg
aXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSk7CiAg
ICAgICAgIGJvb2wgaXNMZWZ0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKICAgICAgICAgYm9v
bCBpc1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShw
YWdlSW5kZXgpOyB9CiAgICAgICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29u
c3Q7CiAgICAgICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKICAgICAg
ICAgCi0gICAgICAgIE93blB0cjxDU1NSdWxlU2V0PiBtX2F1dGhvclN0eWxlOwotICAgICAgICBP
d25QdHI8Q1NTUnVsZVNldD4gbV91c2VyU3R5bGU7CisgICAgICAgIE93blB0cjxSdWxlU2V0PiBt
X2F1dGhvclN0eWxlOworICAgICAgICBPd25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7CiAgICAg
ICAgIAotICAgICAgICBPd25QdHI8Q1NTUnVsZVNldD4gbV9zaWJsaW5nUnVsZXM7CisgICAgICAg
IE93blB0cjxSdWxlU2V0PiBtX3NpYmxpbmdSdWxlczsKICAgICAgICAgSGFzaFNldDxBdG9taWNT
dHJpbmdJbXBsKj4gbV9pZHNJblJ1bGVzOwogCiAgICAgICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFu
Y2U7CkBAIC0yOTMsNyArMjkyLDcgQEAgcHVibGljOgogCiAgICAgICAgIC8vIEEgYnVmZmVyIHVz
ZWQgdG8gaG9sZCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgZm9yIGFuIGVsZW1lbnQsIGFuZCBh
IHRlbXBvcmFyeSBidWZmZXIgdXNlZCBmb3IKICAgICAgICAgLy8gbWVyZ2Ugc29ydGluZy4KLSAg
ICAgICAgVmVjdG9yPENTU1J1bGVEYXRhKiwgMzI+IG1fbWF0Y2hlZFJ1bGVzOworICAgICAgICBW
ZWN0b3I8Y29uc3QgUnVsZURhdGEqLCAzMj4gbV9tYXRjaGVkUnVsZXM7CiAKICAgICAgICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBtX3J1bGVMaXN0OwogICAgICAgICAK
</data>
<flag name="review"
          id="72419"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>