<?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>20793</bug_id>
          
          <creation_ts>2008-09-12 01:29:42 -0700</creation_ts>
          <short_desc>Clean up WebCore/page/animation</short_desc>
          <delta_ts>2008-09-12 11:41:42 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>mitz</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90916</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-12 01:29:42 -0700</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90917</commentid>
    <comment_count>1</comment_count>
      <attachid>23365</attachid>
    <who name="">mitz</who>
    <bug_when>2008-09-12 01:31:03 -0700</bug_when>
    <thetext>Created attachment 23365
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90923</commentid>
    <comment_count>2</comment_count>
      <attachid>23365</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-12 07:27:55 -0700</bug_when>
    <thetext>Comment on attachment 23365
Cleanup

Super duper awesome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90949</commentid>
    <comment_count>3</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-09-12 11:41:42 -0700</bug_when>
    <thetext>&lt;http://trac.webkit.org/changeset/36351&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23365</attachid>
            <date>2008-09-12 01:31:03 -0700</date>
            <delta_ts>2008-09-12 07:27:55 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>20793_r1.diff</filename>
            <type>text/plain</type>
            <size>57961</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjM0OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMDgtMDktMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc5MyBjbGVhbiB1cCBwYWdl
L2FuaW1hdGlvbgorCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHA6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAg
ICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9u
L0ltcGxpY2l0QW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVB
bmltYXRpb24uY3BwOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
Lmg6CisKIDIwMDgtMDktMTEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZCBhIHJlbmRlcmVkSW1hZ2UgbWV0aG9kIHRvIERPTU5vZGUgdG8gZ2V0IGFu
IGltYWdlCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDM2MzQ4KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMjggKzQxLDI4IEBAIGNs
YXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlIHsKIHB1YmxpYzoKICAgICBBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZShGcmFtZSopOwogICAgIH5BbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSgpOwotICAgIAorCiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhY2Nlc3NDb21wb3NpdGVBbmlt
YXRpb24oUmVuZGVyT2JqZWN0Kik7CiAgICAgYm9vbCBjbGVhcihSZW5kZXJPYmplY3QqKTsKLSAg
ICAKKwogICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZT4qKTsKICAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0gICAgCisK
ICAgICB2b2lkIHVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXJGaXJlZChUaW1lcjxBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZT4qKTsKICAgICB2b2lkIHN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0
Y2hlcigpOwotICAgIAorCiAgICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4g
IW1fY29tcG9zaXRlQW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KLSAgICAKLSAgICB2b2lkIHN1c3Bl
bmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7Ci0gICAgdm9pZCByZXN1bWVBbmltYXRp
b25zKERvY3VtZW50KiBkb2N1bWVudCk7Ci0gICAgCisKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRp
b25zKERvY3VtZW50Kik7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKERvY3VtZW50Kik7CisK
ICAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgCi0gICAgYm9vbCBpc0FuaW1hdGluZ1By
b3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5LCBib29sIGlz
UnVubmluZ05vdykgY29uc3Q7Ci0gICAgCisKKyAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHlP
blJlbmRlcmVyKFJlbmRlck9iamVjdCosIGludCBwcm9wZXJ0eSwgYm9vbCBpc1J1bm5pbmdOb3cp
IGNvbnN0OworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBD
b21wb3NpdGVBbmltYXRpb24qPiBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA7Ci0gICAgCisKICAg
ICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXAgbV9jb21wb3NpdGVBbmltYXRpb25zOwogICAgIFRp
bWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBtX2FuaW1hdGlvblRpbWVyOwogICAgIFRp
bWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNo
ZXI7CkBAIC03MCw5ICs3MCw5IEBAIHByaXZhdGU6CiB9OwogCiBBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUqIGZyYW1lKQotOiBtX2Fu
aW1hdGlvblRpbWVyKHRoaXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9u
VGltZXJGaXJlZCkKLSwgbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKHRoaXMsICZBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKQotLCBt
X2ZyYW1lKGZyYW1lKQorICAgIDogbV9hbmltYXRpb25UaW1lcih0aGlzLCAmQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX3VwZGF0ZVJlbmRl
cmluZ0Rpc3BhdGNoZXIodGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVS
ZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQpCisgICAgLCBtX2ZyYW1lKGZyYW1lKQogewogfQogCkBA
IC05NCw3ICs5NCw3IEBAIENvbXBvc2l0ZUFuaW1hdGlvbiogQW5pbWF0aW9uQ29udHJvbGxlclAK
IGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiB7CiAgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBP
UiB3ZSBhcmUgc3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAvLyBkbyBhIHNldENo
YW5nZWQoKSB3aGVuIHN1c3BlbmRlZAorICAgIC8vIGRvIGEgc2V0Q2hhbmdlZCgpIHdoZW4gc3Vz
cGVuZGVkKS4KICAgICBDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRl
QW5pbWF0aW9ucy50YWtlKHJlbmRlcmVyKTsKICAgICBpZiAoIWFuaW1hdGlvbikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTA3LDE5ICsxMDcsMTYgQEAgYm9vbCBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6Y2xlYXIoUgogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5
bGVBdmFpbGFibGUoKQogewogICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRl
cmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKLSAgICBm
b3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCi0gICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyAr
K2l0KSB7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpCiAgICAgICAgIGl0LT5zZWNvbmQtPnN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgfQogfQog
CiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcigp
CiB7CiAgICAgYm9vbCBhbmltYXRpbmcgPSBmYWxzZTsKLSAgICAKKwogICAgIFJlbmRlck9iamVj
dEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRl
QW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCi0gICAgICAg
ICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmlt
YXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CiAgICAgICAgIGlmICghY29tcEFuaW0tPnN1c3Bl
bmRlZCgpICYmIGNvbXBBbmltLT5hbmltYXRpbmcoKSkgewogICAgICAgICAgICAgYW5pbWF0aW5n
ID0gdHJ1ZTsKQEAgLTEzNiwxNiArMTMzLDE0IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnVwZGF0ZUEKIAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRl
UmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
PiopCiB7Ci0gICAgaWYgKG1fZnJhbWUgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgIGlm
IChtX2ZyYW1lICYmIG1fZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOwotICAgIH0KIH0KIAogdm9pZCBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCkKIHsKLSAgICBp
ZiAoIW1fdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlci5pc0FjdGl2ZSgpKSB7CisgICAgaWYgKCFt
X3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIuaXNBY3RpdmUoKSkKICAgICAgICAgbV91cGRhdGVS
ZW5kZXJpbmdEaXNwYXRjaGVyLnN0YXJ0T25lU2hvdCgwKTsKLSAgICB9CiB9CiAKIHZvaWQgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU+KiB0aW1lcikKQEAgLTE1NCwyOSArMTQ5LDI4IEBAIHZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGkKICAgICAvLyB1cGRhdGVSZW5kZXJp
bmcuICBJdCB3aWxsIHRoZW4gY2FsbCBiYWNrIHRvIHVzIHdpdGggbmV3IGluZm9ybWF0aW9uLgog
ICAgIGJvb2wgYW5pbWF0aW5nID0gZmFsc2U7CiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
Ojpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVu
ZCgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKLSAgICAgICAgIGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5m
aXJzdDsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsg
KytpdCkgewogICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29u
ZDsKICAgICAgICAgaWYgKCFjb21wQW5pbS0+c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmFuaW1h
dGluZygpKSB7CiAgICAgICAgICAgICBhbmltYXRpbmcgPSB0cnVlOwogICAgICAgICAgICAgY29t
cEFuaW0tPnNldEFuaW1hdGluZyhmYWxzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSByZW5kZXJlci0+ZWxlbWVudCgpOworCisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gaXQtPmZpcnN0LT5lbGVtZW50KCk7CiAgICAgICAgICAgICBBU1NFUlQoIW5vZGUgfHwgKG5v
ZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsKICAg
ICAgICAgICAgIG5vZGUtPnNldENoYW5nZWQoQW5pbWF0aW9uU3R5bGVDaGFuZ2UpOwogICAgICAg
ICB9CiAgICAgfQotICAgIAorCiAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVy
aW5nKCk7Ci0gICAgCisKICAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOwogfQogCi1ib29sIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihS
ZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykgY29uc3QK
K2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzQW5pbWF0aW5nUHJvcGVydHlPblJl
bmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGludCBwcm9wZXJ0eSwgYm9vbCBpc1J1bm5p
bmdOb3cpIGNvbnN0CiB7Ci0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KG9iaik7Ci0gICAgaWYgKCFhbmltYXRpb24pIHJldHVybiBm
YWxzZTsKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5nZXQocmVuZGVyZXIpOworICAgIGlmICghYW5pbWF0aW9uKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHBy
b3BlcnR5LCBpc1J1bm5pbmdOb3cpOwogfQpAQCAtMTg0LDggKzE3OCw3IEBAIGJvb2wgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OmlzQW5pbWEKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBSZW5k
ZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25N
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAot
ICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgeworICAgIGZvciAoUmVuZGVyT2Jq
ZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CiAgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CiAgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiog
Y29tcEFuaW0gPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkg
PT0gZG9jdW1lbnQpCkBAIC0xOTgsOCArMTkxLDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6c3VzcGVuZAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVzdW1l
QW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgUmVuZGVyT2JqZWN0QW5pbWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRp
b25zLmVuZCgpOwotICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKLSAgICAgICAgIGl0ICE9
IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewogICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVy
ID0gaXQtPmZpcnN0OwogICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQt
PnNlY29uZDsKICAgICAgICAgaWYgKHJlbmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQpA
QCAtMjEwLDEwICsyMDIsOSBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1
bWVBCiB9CiAKIEFuaW1hdGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUq
IGZyYW1lKQotOiBtX2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZyYW1lKSkK
LSwgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMoMCkKKyAgICA6IG1fZGF0YShuZXcgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUoZnJhbWUpKQorICAgICwgbV9udW1TdHlsZUF2YWlsYWJsZVdh
aXRlcnMoMCkKIHsKLSAgICAKIH0KIAogQW5pbWF0aW9uQ29udHJvbGxlcjo6fkFuaW1hdGlvbkNv
bnRyb2xsZXIoKQpAQCAtMjI1LDcgKzIxNiw3IEBAIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y2FuY2VsQW5pbWF0aW8KIHsKICAgICBpZiAoIW1fZGF0YS0+aGFzQW5pbWF0aW9ucygpKQogICAg
ICAgICByZXR1cm47Ci0gICAgCisKICAgICBpZiAobV9kYXRhLT5jbGVhcihyZW5kZXJlcikpIHsK
ICAgICAgICAgTm9kZSogbm9kZSA9IHJlbmRlcmVyLT5lbGVtZW50KCk7CiAgICAgICAgIEFTU0VS
VCghbm9kZSB8fCAobm9kZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdl
Q2FjaGUoKSkpOwpAQCAtMjM1LDE2ICsyMjYsMTUgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVy
OjpjYW5jZWxBbmltYXRpbwogCiBSZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBk
YXRlQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogbmV3U3R5
bGUpCiB7ICAgIAotICAgIC8vIGRvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGluIHRoZSBjYWNo
ZQorICAgIC8vIERvbid0IGRvIGFueXRoaW5nIGlmIHdlJ3JlIGluIHRoZSBjYWNoZQogICAgIGlm
ICghcmVuZGVyZXItPmRvY3VtZW50KCkgfHwgcmVuZGVyZXItPmRvY3VtZW50KCktPmluUGFnZUNh
Y2hlKCkpCiAgICAgICAgIHJldHVybiBuZXdTdHlsZTsKLSAgICAKKwogICAgIFJlbmRlclN0eWxl
KiBvbGRTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgIAotICAgIGlmICgoIW9sZFN0eWxl
IHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkp
KSAmJiAKLSAgICAgICAgICAgICAgICAgICAgICAgICghbmV3U3R5bGUtPmFuaW1hdGlvbnMoKSAm
JiAhbmV3U3R5bGUtPnRyYW5zaXRpb25zKCkpKQorCisgICAgaWYgKCghb2xkU3R5bGUgfHwgKCFv
bGRTdHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJhbnNpdGlvbnMoKSkpICYmICgh
bmV3U3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAhbmV3U3R5bGUtPnRyYW5zaXRpb25zKCkpKQogICAg
ICAgICByZXR1cm4gbmV3U3R5bGU7Ci0gICAgCisKICAgICBSZW5kZXJTdHlsZSogYmxlbmRlZFN0
eWxlID0gbmV3U3R5bGU7CiAgICAgCiAgICAgLy8gRmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGlt
cGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0YWJsZS4gIFdlIHRoZW4gY29tcGFyZSB0aGVt
CkBAIC0yNTIsMTIgKzI0MiwxMiBAQCBSZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6
dXBkYXRlCiAgICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0aW9uLiAgV2Ug
dGhlbiBkbyBhIGJsZW5kIHRvIGdldCBuZXcgdmFsdWVzIGFuZCB3ZSByZXR1cm4KICAgICAvLyBh
IG5ldyBzdHlsZS4KICAgICBBU1NFUlQocmVuZGVyZXItPmVsZW1lbnQoKSk7IC8vIEZJWE1FOiBX
ZSBkbyBub3QgYW5pbWF0ZSBnZW5lcmF0ZWQgY29udGVudCB5ZXQuCi0gICAgCisKICAgICBDb21w
b3NpdGVBbmltYXRpb24qIHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+YWNjZXNzQ29tcG9z
aXRlQW5pbWF0aW9uKHJlbmRlcmVyKTsKICAgICBibGVuZGVkU3R5bGUgPSByZW5kZXJlckFuaW1h
dGlvbnMtPmFuaW1hdGUocmVuZGVyZXIsIG9sZFN0eWxlLCBuZXdTdHlsZSk7Ci0gICAgCisKICAg
ICBtX2RhdGEtPnVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0gICAgCisKICAgICBpZiAoYmxlbmRl
ZFN0eWxlICE9IG5ld1N0eWxlKSB7CiAgICAgICAgIC8vIElmIHRoZSBhbmltYXRpb25zL3RyYW5z
aXRpb25zIGNoYW5nZSBvcGFjaXR5IG9yIHRyYW5zZm9ybSwgd2UgbmVlZWQgdG8gdXBkYXRlCiAg
ICAgICAgIC8vIHRoZSBzdHlsZSB0byBpbXBvc2UgdGhlIHN0YWNraW5nIHJ1bGVzLiBOb3RlIHRo
YXQgdGhpcyBpcyBhbHNvCkBAIC0yNjgsMjEgKzI1OCwyMSBAQCBSZW5kZXJTdHlsZSogQW5pbWF0
aW9uQ29udHJvbGxlcjo6dXBkYXRlCiAgICAgcmV0dXJuIGJsZW5kZWRTdHlsZTsKIH0KIAotdm9p
ZCBBbmltYXRpb25Db250cm9sbGVyOjpzZXRBbmltYXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0
KiBvYmosIGRvdWJsZSB0KQordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzZXRBbmltYXRpb25T
dGFydFRpbWUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgZG91YmxlIHQpCiB7Ci0gICAgQ29tcG9z
aXRlQW5pbWF0aW9uKiByZW5kZXJlckFuaW1hdGlvbnMgPSBtX2RhdGEtPmFjY2Vzc0NvbXBvc2l0
ZUFuaW1hdGlvbihvYmopOworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogcmVuZGVyZXJBbmltYXRp
b25zID0gbV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmltYXRpb24ocmVuZGVyZXIpOwogICAgIHJl
bmRlcmVyQW5pbWF0aW9ucy0+c2V0QW5pbWF0aW9uU3RhcnRUaW1lKHQpOwogfQogCi12b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OnNldFRyYW5zaXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiBv
YmosIGludCBwcm9wZXJ0eSwgZG91YmxlIHQpCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNl
dFRyYW5zaXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IHByb3BlcnR5
LCBkb3VibGUgdCkKIHsKLSAgICBDb21wb3NpdGVBbmltYXRpb24qIHJlbmRlcmVyQW5pbWF0aW9u
cyA9IG1fZGF0YS0+YWNjZXNzQ29tcG9zaXRlQW5pbWF0aW9uKG9iaik7CisgICAgQ29tcG9zaXRl
QW5pbWF0aW9uKiByZW5kZXJlckFuaW1hdGlvbnMgPSBtX2RhdGEtPmFjY2Vzc0NvbXBvc2l0ZUFu
aW1hdGlvbihyZW5kZXJlcik7CiAgICAgcmVuZGVyZXJBbmltYXRpb25zLT5zZXRUcmFuc2l0aW9u
U3RhcnRUaW1lKHByb3BlcnR5LCB0KTsKIH0KIAotYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjpp
c0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3Bl
cnR5LCBib29sIGlzUnVubmluZ05vdykgY29uc3QKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6
aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50
IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRh
LT5pc0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihvYmosIHByb3BlcnR5LCBpc1J1bm5pbmdO
b3cpOworICAgIHJldHVybiBtX2RhdGEtPmlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKHJl
bmRlcmVyLCBwcm9wZXJ0eSwgaXNSdW5uaW5nTm93KTsKIH0KIAogdm9pZCBBbmltYXRpb25Db250
cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0zMDIsMTAg
KzI5MiwxMCBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0VXBkYXRlUmVuCiAKIHZv
aWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3R5bGVBdmFpbGFibGUoKQogewotICAgIGlmIChtX251
bVN0eWxlQXZhaWxhYmxlV2FpdGVycyA9PSAwKQorICAgIGlmICghbV9udW1TdHlsZUF2YWlsYWJs
ZVdhaXRlcnMpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIG1fZGF0YS0+c3R5bGVBdmFp
bGFibGUoKTsKIH0KIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDM2MzQ4KQor
KysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDggKzI5LDYgQEAKICNpZm5kZWYgQW5pbWF0aW9uQ29udHJvbGxlcl9oCiAj
ZGVmaW5lIEFuaW1hdGlvbkNvbnRyb2xsZXJfaAogCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7CkBA
IC0zOSwzNSArMzcsNDAgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFz
cyBSZW5kZXJTdHlsZTsKIAotY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlcgoteworY2xhc3MgQW5p
bWF0aW9uQ29udHJvbGxlciB7CiBwdWJsaWM6CiAgICAgQW5pbWF0aW9uQ29udHJvbGxlcihGcmFt
ZSopOwogICAgIH5BbmltYXRpb25Db250cm9sbGVyKCk7Ci0gICAgCisKICAgICB2b2lkIGNhbmNl
bEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CiAgICAgUmVuZGVyU3R5bGUqIHVwZGF0ZUFuaW1h
dGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKLSAgICAKLSAgICB2
b2lkIHNldEFuaW1hdGlvblN0YXJ0VGltZShSZW5kZXJPYmplY3QqIG9iaiwgZG91YmxlIHQpOwot
ICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShSZW5kZXJPYmplY3QqIG9iaiwgaW50IHBy
b3BlcnR5LCBkb3VibGUgdCk7Ci0gICAgCi0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5T25S
ZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05v
dykgY29uc3Q7Ci0gICAgCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVudCogZG9j
dW1lbnQpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpOwor
CisgICAgdm9pZCBzZXRBbmltYXRpb25TdGFydFRpbWUoUmVuZGVyT2JqZWN0KiwgZG91YmxlIHQp
OworICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShSZW5kZXJPYmplY3QqLCBpbnQgcHJv
cGVydHksIGRvdWJsZSB0KTsKKworICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVy
ZXIoUmVuZGVyT2JqZWN0KiwgaW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykgY29uc3Q7
CisKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50Kik7CisgICAgdm9pZCByZXN1
bWVBbmltYXRpb25zKERvY3VtZW50Kik7CiAgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcigp
OwotICAgIAorCiAgICAgdm9pZCBzdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKLSAg
ICAKKwogICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKTsKLSAgICAKLSAgICB2b2lkIHNldFdhaXRp
bmdGb3JTdHlsZUF2YWlsYWJsZShib29sIHdhaXRpbmcpIHsgaWYgKHdhaXRpbmcpIG1fbnVtU3R5
bGVBdmFpbGFibGVXYWl0ZXJzKys7IGVsc2UgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMtLTsg
fQotICAgIAorCisgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCB3YWl0
aW5nKQorICAgIHsKKyAgICAgICAgaWYgKHdhaXRpbmcpCisgICAgICAgICAgICBtX251bVN0eWxl
QXZhaWxhYmxlV2FpdGVycysrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX251bVN0eWxl
QXZhaWxhYmxlV2FpdGVycy0tOworICAgIH0KKwogcHJpdmF0ZToKICAgICBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZSogbV9kYXRhOwotICAgIHVpbnQzMl90IG1fbnVtU3R5bGVBdmFpbGFibGVX
YWl0ZXJzOyAgICAKKyAgICB1bnNpZ25lZCBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVyczsgICAg
CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIEFu
aW1hdGlvbkNvbnRyb2xsZXJfaApJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMzYzNDgpCisrKyBXZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsy
OCwxMiBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0
aW9uLmgiCisKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCisjaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkltcGxpY2l0QW5pbWF0aW9uLmgiCiAjaW5jbHVk
ZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw3
ICs0OCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAv
LyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCwgd2UgZG9uJ3QgZG8gdHJhbnNpdGlvbnMKICAgICBp
ZiAoIWN1cnJlbnRTdHlsZSB8fCAhdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCisKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1
cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0
IEFuaW1hdGlvbiogYW5pbSA9ICgqdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpW2ldLmdldCgp
OwpAQCAtNTcsMjEgKzU4LDE5IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW8KICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBlbXB0eSB0cmFuc2l0aW9uLCBza2lwIGl0
CiAgICAgICAgIGlmIChkdXJhdGlvbiA9PSAwICYmIGRlbGF5IDw9IDApCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgIAorCiAgICAgICAgIGludCBwcm9wID0gYW5pbS0+cHJvcGVydHko
KTsKIAogICAgICAgICBpZiAocHJvcCA9PSBjQW5pbWF0ZU5vbmUpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgCisKICAgICAgICAgYm9vbCBhbGwgPSBwcm9wID09IGNBbmltYXRlQWxs
OwotICAgICAgICAKKwogICAgICAgICAvLyBIYW5kbGUgYm90aCB0aGUgJ2FsbCcgYW5kIHNpbmds
ZSBwcm9wZXJ0eSBjYXNlcy4gRm9yIHRoZSBzaW5nbGUgcHJvcCBjYXNlLCB3ZSBtYWtlIG9ubHkg
b25lIHBhc3MKLSAgICAgICAgLy8gdGhyb3VnaCB0aGUgbG9vcAotICAgICAgICBmb3IgKGludCBw
cm9wZXJ0eUluZGV4ID0gMDsgOyArK3Byb3BlcnR5SW5kZXgpIHsKKyAgICAgICAgLy8gdGhyb3Vn
aCB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChpbnQgcHJvcGVydHlJbmRleCA9IDA7IHByb3BlcnR5
SW5kZXggPCBBbmltYXRpb25CYXNlOjpnZXROdW1Qcm9wZXJ0aWVzKCk7ICsrcHJvcGVydHlJbmRl
eCkgewogICAgICAgICAgICAgaWYgKGFsbCkgewotICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eUluZGV4ID49IEFuaW1hdGlvbkJhc2U6OmdldE51bVByb3BlcnRpZXMoKSkKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBuZXh0IHByb3AKKyAg
ICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkKICAgICAgICAgICAgICAgICBw
cm9wID0gQW5pbWF0aW9uQmFzZTo6Z2V0UHJvcGVydHlBdEluZGV4KHByb3BlcnR5SW5kZXgpOwog
ICAgICAgICAgICAgfQogCkBAIC04MSw3ICs4MCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
Ojp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJl
bnQgdHJhbnNpdGlvbiBmb3IgdGhpcyBwcm9wCiAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlv
biogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wKTsKICAgICAgICAgICAgIGJvb2wg
ZXF1YWwgPSB0cnVlOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChpbXBsQW5pbSkg
ewogICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIG9uZSwgaGFzIG91ciB0YXJnZXQgY2hhbmdl
ZD8KICAgICAgICAgICAgICAgICBpZiAoIWltcGxBbmltLT5pc1RhcmdldFByb3BlcnR5RXF1YWwo
cHJvcCwgdGFyZ2V0U3R5bGUpKSB7CkBAIC05NCw3ICs5Myw3IEBAIHZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVUcmFuc2l0aW8KICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UgbmVl
ZCB0byBzdGFydCBhIG5ldyB0cmFuc2l0aW9uCiAgICAgICAgICAgICAgICAgZXF1YWwgPSBBbmlt
YXRpb25CYXNlOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHls
ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCFlcXVh
bCkgewogICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KICAgICAgICAg
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbmV3IEltcGxpY2l0QW5pbWF0
aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oYW5pbSksIHByb3AsIHJlbmRlcmVyLCB0aGlzKTsK
QEAgLTExMyw2OSArMTEyLDY3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlm
cmFtZUEKICAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlv
bnMsIGFuZCBkaWRuJ3QgaGF2ZSBhbnkgYmVmb3JlCiAgICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRp
b25zLmlzRW1wdHkoKSAmJiAhdGFyZ2V0U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIAorCiAgICAgLy8gTm90aGluZyB0byBkbyBpZiB0aGUgY3VycmVudCBhbmQg
dGFyZ2V0IGFuaW1hdGlvbnMgYXJlIHRoZSBzYW1lCiAgICAgaWYgKGN1cnJlbnRTdHlsZSAmJiBj
dXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9u
cygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoodGFyZ2V0U3R5bGUtPmFu
aW1hdGlvbnMoKSkpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICBpbnQgbnVtQW5p
bXMgPSAwOwogICAgIGJvb2wgYW5pbXNDaGFuZ2VkID0gZmFsc2U7Ci0gICAgCi0gICAgLy8gc2Vl
IGlmIHRoZSBsaXN0cyBtYXRjaAorCisgICAgLy8gU2VlIGlmIHRoZSBsaXN0cyBtYXRjaAogICAg
IGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7CisgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewogICAgICAgICAgICAgY29uc3Qg
QW5pbWF0aW9uKiBhbmltID0gKCp0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKVtpXS5nZXQoKTsK
LSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIWFuaW0tPmlzVmFsaWRBbmltYXRpb24o
KSkKICAgICAgICAgICAgICAgICBhbmltc0NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIG5hbWUoYW5pbS0+bmFtZSgpKTsKLSAg
ICAgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2ZBbmltID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuZ2V0KG5hbWUuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlv
bioga2ZBbmltID0gZ2V0S2V5ZnJhbWVBbmltYXRpb24oYW5pbS0+bmFtZSgpKTsKICAgICAgICAg
ICAgICAgICBpZiAoIWtmQW5pbSB8fCAha2ZBbmltLT5hbmltYXRpb25zTWF0Y2goYW5pbSkpCiAg
ICAgICAgICAgICAgICAgICAgIGFuaW1zQ2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoYW5pbSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYW5pbWF0aW9ucyBtYXRjaCwgYnV0IHBsYXkgc3RhdGVzIG1heSBkaWZmZXIuIHVw
ZGF0ZSBpZiBuZWVkZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGtmQW5pbS0+dXBkYXRlUGxh
eVN0YXRlKGFuaW0tPnBsYXlTdGF0ZSgpID09IEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBz
YXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2UgdGhlIHBsYXkgc3Rh
dGUgaGFzIGNoYW5nZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGtmQW5pbS0+c2V0QW5pbWF0
aW9uKGFuaW0pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEFuaW1hdGlvbnMgbWF0Y2gsIGJ1dCBwbGF5IHN0YXRl
cyBtYXkgZGlmZmVyLiBVcGRhdGUgaWYgbmVlZGVkLgorICAgICAgICAgICAgICAgICAgICBrZkFu
aW0tPnVwZGF0ZVBsYXlTdGF0ZShhbmltLT5wbGF5U3RhdGUoKSA9PSBBbmltUGxheVN0YXRlUGxh
eWluZyk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBzYXZlZCBhbmltYXRpb24g
dG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2UgdGhlIHBsYXkgc3RhdGUgaGFzIGNoYW5nZWQu
CisgICAgICAgICAgICAgICAgICAgIGtmQW5pbS0+c2V0QW5pbWF0aW9uKGFuaW0pOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsrbnVtQW5pbXM7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoIWFuaW1zQ2hhbmdlZCAmJiBtX2tleWZyYW1l
QW5pbWF0aW9ucy5zaXplKCkgIT0gbnVtQW5pbXMpCiAgICAgICAgIGFuaW1zQ2hhbmdlZCA9IHRy
dWU7CiAKICAgICBpZiAoIWFuaW1zQ2hhbmdlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
YW5pbWF0aW9ucyBoYXZlIGNoYW5nZWQsIHVwZGF0ZSB0aGUgbGlzdAorICAgIC8vIEFuaW1hdGlv
bnMgaGF2ZSBjaGFuZ2VkLCB1cGRhdGUgdGhlIGxpc3QuCiAgICAgcmVzZXRBbmltYXRpb25zKHJl
bmRlcmVyKTsKIAogICAgIGlmICghdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgLy8gYWRkIGFsbCB0aGUgbmV3IGFuaW1hdGlvbnMKKyAgICAvLyBBZGQg
YWxsIHRoZSBuZXcgYW5pbWF0aW9ucwogICAgIGludCBpbmRleCA9IDA7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7ICsraSkgewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewogICAgICAgICBjb25zdCBB
bmltYXRpb24qIGFuaW0gPSAoKnRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpW2ldLmdldCgpOwog
CiAgICAgICAgIGlmICghYW5pbS0+aXNWYWxpZEFuaW1hdGlvbigpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgLy8gZG9uJ3QgYm90aGVyIGFkZGluZyB0aGUg
YW5pbWF0aW9uIGlmIGl0IGhhcyBubyBrZXlmcmFtZXMgb3Igd29uJ3QgYW5pbWF0ZQotICAgICAg
ICBpZiAoKGFuaW0tPmR1cmF0aW9uKCkgfHwgYW5pbS0+ZGVsYXkoKSkgJiYgYW5pbS0+aXRlcmF0
aW9uQ291bnQoKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhbmltLT5rZXlmcmFtZUxpc3QoKS5nZXQoKSAmJiAhYW5pbS0+a2V5ZnJhbWVMaXN0KCktPmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtmYW5pbSA9IG5ldyBL
ZXlmcmFtZUFuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbio+KGFuaW0pLCByZW5kZXJlciwg
aW5kZXgrKywgdGhpcyk7Ci0gICAgICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5zZXQoa2Zh
bmltLT5uYW1lKCkuaW1wbCgpLCBrZmFuaW0pOworCisgICAgICAgIC8vIERvbid0IGJvdGhlciBh
ZGRpbmcgdGhlIGFuaW1hdGlvbiBpZiBpdCBoYXMgbm8ga2V5ZnJhbWVzIG9yIHdvbid0IGFuaW1h
dGUKKyAgICAgICAgaWYgKChhbmltLT5kdXJhdGlvbigpIHx8IGFuaW0tPmRlbGF5KCkpICYmIGFu
aW0tPml0ZXJhdGlvbkNvdW50KCkKKyAgICAgICAgICAgICAgICAmJiBhbmltLT5rZXlmcmFtZUxp
c3QoKSAmJiAhYW5pbS0+a2V5ZnJhbWVMaXN0KCktPmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
S2V5ZnJhbWVBbmltYXRpb24qIGtmQW5pbSA9IG5ldyBLZXlmcmFtZUFuaW1hdGlvbihjb25zdF9j
YXN0PEFuaW1hdGlvbio+KGFuaW0pLCByZW5kZXJlciwgaW5kZXgrKywgdGhpcyk7CisgICAgICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5zZXQoa2ZBbmltLT5uYW1lKCkuaW1wbCgpLCBrZkFu
aW0pOwogICAgICAgICB9CiAgICAgfQogfQogCi1LZXlmcmFtZUFuaW1hdGlvbiogQ29tcG9zaXRl
QW5pbWF0aW9uOjpmaW5kS2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
KQorS2V5ZnJhbWVBbmltYXRpb24qIENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0S2V5ZnJhbWVBbmlt
YXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewogICAgIHJldHVybiBtX2tleWZyYW1l
QW5pbWF0aW9ucy5nZXQobmFtZS5pbXBsKCkpOwogfQpAQCAtMTgzLDE5ICsxODAsMTcgQEAgS2V5
ZnJhbWVBbmltYXRpb24qIENvbXBvc2l0ZUFuaW1hdGlvbjo6ZgogUmVuZGVyU3R5bGUqIENvbXBv
c2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7CiAgICAg
UmVuZGVyU3R5bGUqIHJlc3VsdFN0eWxlID0gMDsKLSAgICAKKwogICAgIC8vIFdlIGRvbid0IGRv
IGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFy
dHVwKQogICAgIHVwZGF0ZVRyYW5zaXRpb25zKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdl
dFN0eWxlKTsKLSAgICAKKwogICAgIGlmIChjdXJyZW50U3R5bGUpIHsKICAgICAgICAgLy8gTm93
IHRoYXQgd2UgaGF2ZSB0cmFuc2l0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJv
dXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVtCiAgICAgICAgIC8vIHRvIGZpbGwg
aW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVlZGVkLgogICAgICAgICBDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwog
ICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiAgYW5pbSA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBpZiAo
YW5pbSkgeworICAgICAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNl
Y29uZCkKICAgICAgICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJy
ZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7Ci0gICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTIwOCw0NyArMjAzLDQ1IEBAIFJlbmRlclN0eWxlKiBDb21wb3Np
dGVBbmltYXRpb246OmFuaW1hdGUKICAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbiogYW5pbSA9
ICgqdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSlbaV0uZ2V0KCk7CiAKICAgICAgICAgICAgIGlm
IChhbmltLT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBBdG9taWNTdHJp
bmcgbmFtZShhbmltLT5uYW1lKCkpOwotICAgICAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9u
KiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFtZS5pbXBsKCkpOwot
ICAgICAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0pCisgICAgICAgICAgICAgICAgaWYgKEtl
eWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBnZXRLZXlmcmFtZUFuaW1hdGlvbihhbmlt
LT5uYW1lKCkpKQogICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPmFuaW1hdGUodGhp
cywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGNsZWFudXBGaW5pc2hl
ZEFuaW1hdGlvbnMocmVuZGVyZXIpOwogCiAgICAgcmV0dXJuIHJlc3VsdFN0eWxlID8gcmVzdWx0
U3R5bGUgOiB0YXJnZXRTdHlsZTsKIH0KIAogLy8gImFuaW1hdGluZyIgbWVhbnMgdGhhdCBzb21l
dGhpbmcgaXMgcnVubmluZyB0aGF0IHJlcXVpcmVzIHRoZSB0aW1lciB0byBrZWVwIGZpcmluZwot
Ly8gKGUuZy4gYSB0cmFuc2l0aW9uKQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldEFuaW1h
dGluZyhib29sIGluQW5pbWF0aW5nKQorLy8gKGUuZy4gYSB0cmFuc2l0aW9uKS4KK3ZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpCiB7Ci0gICAgQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9u
cy5lbmQoKTsKLSAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0aW9uID0gaXQtPnNlY29uZDsKLSAgICAgICAg
dHJhbnNpdGlvbi0+c2V0QW5pbWF0aW5nKGluQW5pbWF0aW5nKTsKKyAgICBDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsr
aXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25k
OworICAgICAgICB0cmFuc2l0aW9uLT5zZXRBbmltYXRpbmcoYW5pbWF0aW5nKTsKICAgICB9CiAK
LSAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkg
eworICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5p
bWF0aW9uc0VuZDsgKytpdCkgewogICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0
LT5zZWNvbmQ7Ci0gICAgICAgIGFuaW0tPnNldEFuaW1hdGluZyhpbkFuaW1hdGluZyk7CisgICAg
ICAgIGFuaW0tPnNldEFuaW1hdGluZyhhbmltYXRpbmcpOwogICAgIH0KIH0KIAogYm9vbCBDb21w
b3NpdGVBbmltYXRpb246OmFuaW1hdGluZygpCiB7Ci0gICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKLSAgICBmb3Ig
KENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qICB0cmFuc2l0aW9uID0gaXQtPnNlY29uZDsKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7
CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKKyAg
ICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kOwogICAgICAg
ICBpZiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5hbmltYXRpbmcoKSAmJiB0cmFuc2l0aW9u
LT5ydW5uaW5nKCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAg
QW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5lbmQoKTsKLSAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKKwor
ICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgewogICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5z
ZWNvbmQ7CiAgICAgICAgIGlmIChhbmltICYmICFhbmltLT5wYXVzZWQoKSAmJiBhbmltLT5hbmlt
YXRpbmcoKSAmJiBhbmltLT5hY3RpdmUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAt
MjYxLDE0ICsyNTQsMTQgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc2V0VHJhbnNpdGlv
bgogewogICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZDsK
ICAgICAgICAgdHJhbnNpdGlvbi0+cmVzZXQocmVuZGVyZXIpOwogICAgICAgICBkZWxldGUgdHJh
bnNpdGlvbjsKICAgICB9CiAgICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOwogfQogCi12b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6cmVzZXRBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
Cit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzZXRBbmltYXRpb25zKFJlbmRlck9iamVjdCop
CiB7CiAgICAgZGVsZXRlQWxsVmFsdWVzKG1fa2V5ZnJhbWVBbmltYXRpb25zKTsKICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jbGVhcigpOwpAQCAtMjc4LDU3ICsyNzEsNTUgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OmNsZWFudXBGaW5pc2hlZAogewogICAgIGlmIChzdXNwZW5kZWQoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gTWFrZSBhIGxpc3Qgb2YgdHJhbnNpdGlv
bnMgdG8gYmUgZGVsZXRlZAogICAgIFZlY3RvcjxpbnQ+IGZpbmlzaGVkVHJhbnNpdGlvbnM7Ci0g
ICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFu
c2l0aW9ucy5lbmQoKTsKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CiAKLSAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAh
PSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewogICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQ7CiAgICAgICAgIGlmICghYW5pbSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBpZiAoYW5pbS0+cG9zdEFjdGl2ZSgpICYmICFhbmltLT53YWl0aW5nRm9yRW5k
RXZlbnQoKSkKICAgICAgICAgICAgIGZpbmlzaGVkVHJhbnNpdGlvbnMuYXBwZW5kKGFuaW0tPmFu
aW1hdGluZ1Byb3BlcnR5KCkpOwogICAgIH0KLSAgICAKKwogICAgIC8vIERlbGV0ZSB0aGVtCi0g
ICAgZm9yIChWZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQgPSBmaW5pc2hlZFRyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IGZpbmlzaGVkVHJhbnNpdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
SW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBtX3RyYW5zaXRpb25zLmdldCgqaXQpOwotICAgICAg
ICBpZiAoYW5pbSkgeworICAgIHNpemVfdCBmaW5pc2hlZFRyYW5zaXRpb25Db3VudCA9IGZpbmlz
aGVkVHJhbnNpdGlvbnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmluaXNo
ZWRUcmFuc2l0aW9uQ291bnQ7ICsraSkgeworICAgICAgICBpZiAoSW1wbGljaXRBbmltYXRpb24q
IGFuaW0gPSBtX3RyYW5zaXRpb25zLnRha2UoZmluaXNoZWRUcmFuc2l0aW9uc1tpXSkpIHsKICAg
ICAgICAgICAgIGFuaW0tPnJlc2V0KHJlbmRlcmVyKTsKICAgICAgICAgICAgIGRlbGV0ZSBhbmlt
OwogICAgICAgICB9Ci0gICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKCppdCk7CiAgICAgfQog
CiAgICAgLy8gTWFrZSBhIGxpc3Qgb2YgYW5pbWF0aW9ucyB0byBiZSBkZWxldGVkCiAgICAgVmVj
dG9yPEF0b21pY1N0cmluZ0ltcGwqPiBmaW5pc2hlZEFuaW1hdGlvbnM7Ci0gICAgQW5pbWF0aW9u
TmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQo
KTsKKyAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAKLSAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0g
a2ZlbmQ7ICsraXQpIHsKKyAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsg
KytpdCkgewogICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CiAg
ICAgICAgIGlmICghYW5pbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYW5p
bS0+cG9zdEFjdGl2ZSgpICYmICFhbmltLT53YWl0aW5nRm9yRW5kRXZlbnQoKSkKICAgICAgICAg
ICAgIGZpbmlzaGVkQW5pbWF0aW9ucy5hcHBlbmQoYW5pbS0+bmFtZSgpLmltcGwoKSk7CiAgICAg
fQotICAgIAotICAgIC8vIGRlbGV0ZSB0aGVtCi0gICAgZm9yIChWZWN0b3I8QXRvbWljU3RyaW5n
SW1wbCo+OjppdGVyYXRvciBpdCA9IGZpbmlzaGVkQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBm
aW5pc2hlZEFuaW1hdGlvbnMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVBbmltYXRp
b24qIGtmYW5pbSA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmdldCgqaXQpOwotICAgICAgICBpZiAo
a2ZhbmltKSB7Ci0gICAgICAgICAgICBrZmFuaW0tPnJlc2V0KHJlbmRlcmVyKTsKLSAgICAgICAg
ICAgIGRlbGV0ZSBrZmFuaW07CisKKyAgICAvLyBEZWxldGUgdGhlbQorICAgIHNpemVfdCBmaW5p
c2hlZEFuaW1hdGlvbkNvdW50ID0gZmluaXNoZWRBbmltYXRpb25zLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZpbmlzaGVkQW5pbWF0aW9uQ291bnQ7ICsraSkgeworICAgICAg
ICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy50YWtl
KGZpbmlzaGVkQW5pbWF0aW9uc1tpXSkpIHsKKyAgICAgICAgICAgIGFuaW0tPnJlc2V0KHJlbmRl
cmVyKTsKKyAgICAgICAgICAgIGRlbGV0ZSBhbmltOwogICAgICAgICB9Ci0gICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLnJlbW92ZSgqaXQpOwogICAgIH0KIH0KIAogdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OnNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCkKIHsKLSAgICAvLyBzZXQg
c3RhcnQgdGltZSBvbiBhbGwgYW5pbWF0aW9ucyB3YWl0aW5nIGZvciBpdAotICAgIEFuaW1hdGlv
bk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5k
KCk7Ci0gICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7CisgICAgLy8gU2V0
IHN0YXJ0IHRpbWUgb24gYWxsIGFuaW1hdGlvbnMgd2FpdGluZyBmb3IgaXQKKyAgICBBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQo
KTsKKyAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKICAgICAgICAgaWYgKGFuaW0gJiYgYW5p
bS0+d2FpdGluZ0ZvclN0YXJ0VGltZSgpKQogICAgICAgICAgICAgYW5pbS0+dXBkYXRlU3RhdGVN
YWNoaW5lKEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXRTdGFydFRpbWVTZXQsIHQp
OwpAQCAtMzUwLDE4ICszNDEsMTcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRB
bmltYXRpbwogewogICAgIGlmIChtX3N1c3BlbmRlZCkKICAgICAgICAgcmV0dXJuOwotICAgIAor
CiAgICAgbV9zdXNwZW5kZWQgPSB0cnVlOwogCi0gICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3Rf
aXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEFu
aW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSBpdC0+c2Vjb25kOwotICAgICAgICBpZiAoYW5pbSkKKyAgICBBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
ZW5kKCk7CisgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsK
KyAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZCkKICAgICAg
ICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShmYWxzZSk7CiAgICAgfQogCi0gICAgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5l
bmQoKTsKLSAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1f
dHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlv
bnNFbmQ7ICsraXQpIHsKICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vj
b25kOwogICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAg
YW5pbS0+dXBkYXRlUGxheVN0YXRlKGZhbHNlKTsKQEAgLTM3MiwxOCArMzYyLDE4IEBAIHZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb24KIHsKICAgICBpZiAoIW1fc3VzcGVu
ZGVkKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwot
ICAgIAotICAgIEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyAr
K2l0KSB7CisKKyAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25z
RW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChBbmltYXRpb25OYW1l
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5wbGF5U3RhdGVQbGF5
aW5nKCkpCiAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUodHJ1ZSk7CiAgICAgfQot
ICAgIAotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0
cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgSW1wbGljaXRBbmltYXRp
b24qIGFuaW0gPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHls
ZSgpKQogICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKHRydWUpOwpAQCAtNDE5LDI4
ICs0MDksMjEgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN0eWxlQXZhaWxhYmxlKAogewog
ICAgIGlmIChtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycyA9PSAwKQogICAgICAgICByZXR1cm47
Ci0gICAgCisKICAgICAvLyBXZSBoYXZlIHRvIGdvIHRocm91Z2ggYW5pbWF0aW9ucyBpbiB0aGUg
b3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIgaW4KICAgICAvLyB0aGUgc3R5bGUsIGJlY2F1c2Ug
b3JkZXIgbWF0dGVycyBmb3IgYWRkaXRpdml0eS4KICAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRp
b24qPiBhbmltYXRpb25zKG1fa2V5ZnJhbWVBbmltYXRpb25zLnNpemUoKSk7Ci0gICAgQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5l
bmQoKTsKLSAgICBzaXplX3QgaSA9IDA7Ci0gICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5k
OyArK2l0KSB7Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsK
LSAgICAgICAgLy8gV2UgY2FuJ3QganVzdCBpbnNlcnQgYmFzZWQgb24gYW5pbS0+aW5kZXgoKSBi
ZWNhdXNlIGludmFsaWQgYW5pbWF0aW9ucyBkb24ndAotICAgICAgICAvLyBtYWtlIGl0IGludG8g
dGhlIGhhc2guCi0gICAgICAgIGFuaW1hdGlvbnNbaSsrXSA9IGFuaW07Ci0gICAgfQorICAgIGNv
cHlWYWx1ZXNUb1ZlY3RvcihtX2tleWZyYW1lQW5pbWF0aW9ucywgYW5pbWF0aW9ucyk7CiAKICAg
ICBpZiAoYW5pbWF0aW9ucy5zaXplKCkgPiAxKQogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGFu
aW1hdGlvbnMuYmVnaW4oKSwgYW5pbWF0aW9ucy5lbmQoKSwgY29tcGFyZUFuaW1hdGlvbkluZGlj
ZXMpOwotICAgIAotICAgIGZvciAoaSA9IDA7IGkgPCBhbmltYXRpb25zLnNpemUoKTsgKytpKSB7
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGlvbnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBhbmltYXRpb25zW2ldOwogICAgICAg
ICBpZiAoYW5pbSAmJiBhbmltLT53YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoKSkKICAgICAgICAg
ICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0
ZUlucHV0U3R5bGVBdmFpbGFibGUsIC0xKTsKICAgICB9Ci0gICAgCisKICAgICBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgp
OwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBJbXBs
aWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CkBAIC00NTEsMjIgKzQzNCwyMiBAQCB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3R5bGVBdmFpbGFibGUoCiAKIGJvb2wgQ29tcG9zaXRl
QW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KGludCBwcm9wZXJ0eSwgYm9vbCBpc1J1bm5p
bmdOb3cpIGNvbnN0CiB7Ci0gICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Iga2Zl
bmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEFuaW1hdGlvbk5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0ga2ZlbmQ7ICsraXQpIHsKKyAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBh
bmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChBbmlt
YXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKICAgICAgICAgS2V5ZnJhbWVBbmlt
YXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0Fu
aW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBpc1J1bm5pbmdOb3cpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIAotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Cisg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKICAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOwogICAgICAgICBpZiAoYW5p
bSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBpc1J1bm5pbmdOb3cpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KLSAg
ICAKKwogdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFdhaXRpbmdGb3JTdHlsZUF2YWlsYWJs
ZShib29sIHdhaXRpbmcpCiB7CiAgICAgaWYgKHdhaXRpbmcpCkBAIC00NzUsNSArNDU4LDUgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFdhaXRpbmdGb3JTdAogICAgICAgICBtX251bVN0
eWxlQXZhaWxhYmxlV2FpdGVycy0tOwogICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+c2V0V2Fp
dGluZ0ZvclN0eWxlQXZhaWxhYmxlKHdhaXRpbmcpOwogfQotICAgIAotfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5p
bWF0aW9uLmgJKHJldmlzaW9uIDM2MzQ4KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNjggKzM3LDY5IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBSZW5k
ZXJTdHlsZTsKLWNsYXNzIFJlbmRlck9iamVjdDsKLWNsYXNzIEtleWZyYW1lQW5pbWF0aW9uOwog
Y2xhc3MgSW1wbGljaXRBbmltYXRpb247CitjbGFzcyBLZXlmcmFtZUFuaW1hdGlvbjsKK2NsYXNz
IFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclN0eWxlOwogCiAvLyBBIENvbXBvc2l0ZUFuaW1h
dGlvbiByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBhbmltYXRpb25zIHRoYXQgYXJlIHJ1bm5p
bmcKIC8vIG9uIGEgc2luZ2xlIFJlbmRlck9iamVjdCwgc3VjaCBhcyBhIG51bWJlciBvZiBwcm9w
ZXJ0aWVzIHRyYW5zaXRpb25pbmcgYXQgb25jZS4KIGNsYXNzIENvbXBvc2l0ZUFuaW1hdGlvbiA6
IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6CiAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKEFu
aW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgOiBtX3N1c3BlbmRl
ZChmYWxzZSkKLSAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVy
KQotICAgICwgbV9udW1TdHlsZUF2YWlsYWJsZVdhaXRlcnMoMCkKLSAgICB7IH0KKyAgICAgICAg
OiBtX3N1c3BlbmRlZChmYWxzZSkKKyAgICAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5p
bWF0aW9uQ29udHJvbGxlcikKKyAgICAgICAgLCBtX251bVN0eWxlQXZhaWxhYmxlV2FpdGVycygw
KQorICAgIHsKKyAgICB9CiAgICAgCiAgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpOwotICAgICAg
ICAKKwogICAgIFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7Ci0gICAgCi0g
ICAgdm9pZCBzZXRBbmltYXRpbmcoYm9vbCBpbkFuaW1hdGluZyk7CisKKyAgICB2b2lkIHNldEFu
aW1hdGluZyhib29sKTsKICAgICBib29sIGFuaW1hdGluZygpOwotICAgIAorCiAgICAgYm9vbCBo
YXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0
aW9ucy5jb250YWlucyhwcm9wKTsgfQotICAgIAorCiAgICAgdm9pZCByZXNldFRyYW5zaXRpb25z
KFJlbmRlck9iamVjdCopOwogICAgIHZvaWQgcmVzZXRBbmltYXRpb25zKFJlbmRlck9iamVjdCop
OwotICAgIAorCiAgICAgdm9pZCBjbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKFJlbmRlck9iamVj
dCopOwogCiAgICAgdm9pZCBzZXRBbmltYXRpb25TdGFydFRpbWUoZG91YmxlIHQpOwogICAgIHZv
aWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKLSAgICAK
KwogICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHJlc3VtZUFuaW1hdGlv
bnMoKTsKICAgICBib29sIHN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVkOyB9
Ci0gICAgCisKICAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9wZXJ0
eSk7CiAgICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGludCBwcm9w
ZXJ0eSk7Ci0gICAgCisKICAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgCisKICAgICBi
b29sIGlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5LCBib29sIGlzUnVubmluZ05vdykg
Y29uc3Q7Ci0gICAgCi0gICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoYm9vbCB3
YWl0aW5nKTsKKworICAgIHZvaWQgc2V0V2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKGJvb2wpOwog
CiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUpOwotICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiB0YXJnZXRTdHlsZSk7CisgICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5
bGUpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7
CisKKyAgICBLZXlmcmFtZUFuaW1hdGlvbiogZ2V0S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQXRv
bWljU3RyaW5nJik7CiAKLSAgICBLZXlmcmFtZUFuaW1hdGlvbiogZmluZEtleWZyYW1lQW5pbWF0
aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Ci0gICAgCiBwcml2YXRlOgogICAgIHR5cGVk
ZWYgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj4gQ1NTUHJvcGVydHlUcmFuc2l0aW9u
c01hcDsKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEtleWZyYW1lQW5p
bWF0aW9uKj4gIEFuaW1hdGlvbk5hbWVNYXA7Ci0gICAgCi0gICAgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcCAgIG1fdHJhbnNpdGlvbnM7Ci0gICAgQW5pbWF0aW9uTmFtZU1hcCAgICAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zOwotICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBt
X3N1c3BlbmRlZDsKLSAgICBBbmltYXRpb25Db250cm9sbGVyKiAgICAgICAgbV9hbmltYXRpb25D
b250cm9sbGVyOwotICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBtX251bVN0eWxlQXZh
aWxhYmxlV2FpdGVyczsKKworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXAgbV90cmFuc2l0
aW9uczsKKyAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmltYXRpb25zOworICAgIGJv
b2wgbV9zdXNwZW5kZWQ7CisgICAgQW5pbWF0aW9uQ29udHJvbGxlciogbV9hbmltYXRpb25Db250
cm9sbGVyOworICAgIHVuc2lnbmVkIG1fbnVtU3R5bGVBdmFpbGFibGVXYWl0ZXJzOwogfTsKIAot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBDb21wb3NpdGVB
bmltYXRpb25faApJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1h
dGlvbi5jcHAJKHJldmlzaW9uIDM2MzQ4KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDczICszNSw4MyBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBJbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBpbnQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pCi06IEFuaW1h
dGlvbkJhc2UodHJhbnNpdGlvbiwgcmVuZGVyZXIsIGNvbXBBbmltKQotLCBtX3RyYW5zaXRpb25Q
cm9wZXJ0eSh0cmFuc2l0aW9uLT5wcm9wZXJ0eSgpKQotLCBtX2FuaW1hdGluZ1Byb3BlcnR5KGFu
aW1hdGluZ1Byb3BlcnR5KQotLCBtX292ZXJyaWRkZW4oZmFsc2UpCi0sIG1fZnJvbVN0eWxlKDAp
Ci0sIG1fdG9TdHlsZSgwKQorICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5kZXJl
ciwgY29tcEFuaW0pCisgICAgLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSh0cmFuc2l0aW9uLT5wcm9w
ZXJ0eSgpKQorICAgICwgbV9hbmltYXRpbmdQcm9wZXJ0eShhbmltYXRpbmdQcm9wZXJ0eSkKKyAg
ICAsIG1fb3ZlcnJpZGRlbihmYWxzZSkKKyAgICAsIG1fZnJvbVN0eWxlKDApCisgICAgLCBtX3Rv
U3R5bGUoMCkKIHsKICAgICBBU1NFUlQoYW5pbWF0aW5nUHJvcGVydHkgIT0gY0FuaW1hdGVBbGwp
OwogfQorCitJbXBsaWNpdEFuaW1hdGlvbjo6fkltcGxpY2l0QW5pbWF0aW9uKCkKK3sKKyAgICBB
U1NFUlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOworCisgICAgLy8gSWYgd2Ugd2VyZSB3
YWl0aW5nIGZvciBhbiBlbmQgZXZlbnQsIHdlIG5lZWQgdG8gZmluaXNoIHRoZSBhbmltYXRpb24g
dG8gbWFrZSBzdXJlIG5vIG9sZAorICAgIC8vIGFuaW1hdGlvbnMgc3RpY2sgYXJvdW5kIGluIHRo
ZSBsb3dlciBsZXZlbHMKKyAgICBBU1NFUlQoIXdhaXRpbmdGb3JFbmRFdmVudCgpIHx8ICFtX29i
amVjdCk7CiAgICAgCisgICAgLy8gRG8gdGhlIGNsZWFudXAgaGVyZSBpbnN0ZWFkIG9mIGluIHRo
ZSBiYXNlIGNsYXNzIHNvIHRoZSBzcGVjaWFsaXplZCBtZXRob2RzIGdldCBjYWxsZWQKKyAgICBp
ZiAoIXBvc3RBY3RpdmUoKSkKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXRFbmRBbmltYXRpb24sIC0xKTsgICAgIAorfQorCiBib29sIEltcGxpY2l0QW5pbWF0
aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGlu
TGlzdGVuZXJUeXBlKQogewogICAgIHJldHVybiBtX29iamVjdC0+ZG9jdW1lbnQoKS0+aGFzTGlz
dGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKIH0KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCit2b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJl
bmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSkKIHsKICAgICBpZiAocGF1c2VkKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAKKwogICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1h
dGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVk
IGFuaW1hdGlvbi4KLSAgICAvLyBTbyBqdXN0IHJldHVybi4gRXZlcnl0aGluZyBpcyBhbHJlYWR5
IGFsbCBjbGVhbmVkIHVwCisgICAgLy8gU28ganVzdCByZXR1cm4uIEV2ZXJ5dGhpbmcgaXMgYWxy
ZWFkeSBhbGwgY2xlYW5lZCB1cC4KICAgICBpZiAocG9zdEFjdGl2ZSgpKQogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBSZXNldCB0byBzdGFydCB0aGUgdHJhbnNpdGlvbiBpZiB3ZSBhcmUgbmV3
CiAgICAgaWYgKGlzTmV3KCkpCiAgICAgICAgIHJlc2V0KHJlbmRlcmVyLCBjdXJyZW50U3R5bGUs
IHRhcmdldFN0eWxlKTsKLSAgICAKKwogICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlvbi4K
ICAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1ha2Ug
b25lIGlmIG5lZWRlZAogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAgICAgYW5pbWF0ZWRT
dHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRT
dHlsZSk7Ci0gICAgCi0gICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcygxLCAwKTsKLSAgICBib29s
IG5lZWRzQW5pbSA9IGJsZW5kUHJvcGVydGllcyhtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRl
ZFN0eWxlLCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlLCBwcm9nKTsKLSAgICBpZiAobmVlZHNBbmlt
KQorCisgICAgaWYgKGJsZW5kUHJvcGVydGllcyhtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRl
ZFN0eWxlLCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlLCBwcm9ncmVzcygxLCAwKSkpCiAgICAgICAg
IHNldEFuaW1hdGluZygpOwogfQogCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlv
bkVuZChkb3VibGUgaW5FbGFwc2VkVGltZSkKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246Om9uQW5p
bWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSkKIHsKLSAgICBpZiAoIXNlbmRUcmFuc2l0aW9u
RXZlbnQoRXZlbnROYW1lczo6d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBpbkVsYXBzZWRUaW1l
KSkgeworICAgIGlmICghc2VuZFRyYW5zaXRpb25FdmVudChFdmVudE5hbWVzOjp3ZWJraXRUcmFu
c2l0aW9uRW5kRXZlbnQsIGVsYXBzZWRUaW1lKSkgewogICAgICAgICAvLyBXZSBkaWRuJ3QgZGlz
cGF0Y2ggYW4gZXZlbnQsIHdoaWNoIHdvdWxkIGNhbGwgZW5kQW5pbWF0aW9uKCksIHNvIHdlJ2xs
IGp1c3QgY2FsbCBpdCBoZXJlLgogICAgICAgICBlbmRBbmltYXRpb24odHJ1ZSk7CiAgICAgfQog
fQogCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgaW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKQorYm9vbCBJbXBs
aWNpdEFuaW1hdGlvbjo6c2VuZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGV2
ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQogewotICAgIGlmIChpbkV2ZW50VHlwZSA9PSBF
dmVudE5hbWVzOjp3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQpIHsKKyAgICBpZiAoZXZlbnRUeXBl
ID09IEV2ZW50TmFtZXM6OndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCkgewogICAgICAgICBEb2N1
bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5E
X0xJU1RFTkVSOwotICAgICAgICAKKwogICAgICAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlz
dGVuZXIobGlzdGVuZXJUeXBlKSkgewotICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRGb3JFdmVudERpc3BhdGNoKCk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudCkgeworICAg
ICAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9yRXZlbnREaXNwYXRjaCgp
KSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3BlcnR5TmFtZTsKICAgICAgICAgICAgICAg
ICBpZiAobV90cmFuc2l0aW9uUHJvcGVydHkgIT0gY0FuaW1hdGVBbGwpCi0gICAgICAgICAgICAg
ICAgICAgIHByb3BlcnR5TmFtZSA9IFN0cmluZyhnZXRQcm9wZXJ0eU5hbWUoKENTU1Byb3BlcnR5
SUQpbV90cmFuc2l0aW9uUHJvcGVydHkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lID0gZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KG1fdHJhbnNp
dGlvblByb3BlcnR5KSk7CiAgICAgICAgICAgICAgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyLnN0YXJ0VGlt
ZXIoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBtX3RyYW5zaXRpb25Qcm9wZXJ0eSwgdHJ1ZSwgaW5F
dmVudFR5cGUsIGluRWxhcHNlZFRpbWUpOworICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uRXZl
bnREaXNwYXRjaGVyLnN0YXJ0VGltZXIoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBtX3RyYW5zaXRp
b25Qcm9wZXJ0eSwgdHJ1ZSwgZXZlbnRUeXBlLCBlbGFwc2VkVGltZSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIERpZCBkaXNwYXRjaCBhbiBldmVudAogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOyAvLyBEaWRuJ3QgZGlz
cGF0Y2ggYW4gZXZlbnQKIH0KIApAQCAtMTEzLDI2ICsxMjMsMjcgQEAgdm9pZCBJbXBsaWNpdEFu
aW1hdGlvbjo6cmVzZXQoUmVuZGVyT2JqZQogICAgICAgICBtX2Zyb21TdHlsZS0+ZGVyZWYocmVu
ZGVyZXItPnJlbmRlckFyZW5hKCkpOwogICAgIGlmIChtX3RvU3R5bGUpCiAgICAgICAgIG1fdG9T
dHlsZS0+ZGVyZWYocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpOwotICAgIAorCiAgICAgbV9mcm9t
U3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oZnJvbSk7ICAgLy8gaXQgaXMgcmVhZC1v
bmx5LCBvdGhlciB0aGFuIHRoZSByZWYKICAgICBpZiAobV9mcm9tU3R5bGUpCiAgICAgICAgIG1f
ZnJvbVN0eWxlLT5yZWYoKTsKLSAgICAKKwogICAgIG1fdG9TdHlsZSA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyU3R5bGUqPih0byk7ICAgICAgIC8vIGl0IGlzIHJlYWQtb25seSwgb3RoZXIgdGhhbiB0aGUg
cmVmCiAgICAgaWYgKG1fdG9TdHlsZSkKICAgICAgICAgbV90b1N0eWxlLT5yZWYoKTsKLSAgICAK
LSAgICAvLyByZXN0YXJ0IHRoZSB0cmFuc2l0aW9uCisKKyAgICAvLyBSZXN0YXJ0IHRoZSB0cmFu
c2l0aW9uCiAgICAgaWYgKGZyb20gJiYgdG8pCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0UmVzdGFydEFuaW1hdGlvbiwgLTEpOwogfQogCiB2b2lkIEltcGxp
Y2l0QW5pbWF0aW9uOjpzZXRPdmVycmlkZGVuKGJvb2wgYikKIHsKLSAgICBpZiAoYiAhPSBtX292
ZXJyaWRkZW4pIHsKLSAgICAgICAgbV9vdmVycmlkZGVuID0gYjsKLSAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKG1fb3ZlcnJpZGRlbiA/IEFuaW1hdGlvblN0YXRlSW5wdXRQYXVzZU92ZXJyaWRl
IDogQW5pbWF0aW9uU3RhdGVJbnB1dFJlc3VtZU92ZXJyaWRlLCAtMSk7Ci0gICAgfQorICAgIGlm
IChiID09IG1fb3ZlcnJpZGRlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9vdmVycmlkZGVu
ID0gYjsKKyAgICB1cGRhdGVTdGF0ZU1hY2hpbmUobV9vdmVycmlkZGVuID8gQW5pbWF0aW9uU3Rh
dGVJbnB1dFBhdXNlT3ZlcnJpZGUgOiBBbmltYXRpb25TdGF0ZUlucHV0UmVzdW1lT3ZlcnJpZGUs
IC0xKTsKIH0KIAogYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KGludCBw
cm9wZXJ0eSkgY29uc3QKQEAgLTE0Nyw4ICsxNTgsNyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9u
Ojppc1RhcmdldFByb3BlcnR5CiAKIHZvaWQgSW1wbGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVy
dHlWYWx1ZUluU3R5bGUoaW50IHByb3AsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUpCiB7Ci0g
ICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcygxLCAwKTsKLSAgICBibGVuZFByb3BlcnRpZXMocHJv
cCwgY3VycmVudFN0eWxlLCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlLCBwcm9nKTsKLX0gICAgCi0g
ICAgCisgICAgYmxlbmRQcm9wZXJ0aWVzKHByb3AsIGN1cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUs
IG1fdG9TdHlsZSwgcHJvZ3Jlc3MoMSwgMCkpOwogfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCShyZXZp
c2lvbiAzNjM0OCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNTcgKzM4LDQ0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IC8vIGZvciBhIHNpbmdsZSBSZW5kZXJPYmplY3QuCiBjbGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6
IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24qIHRyYW5zaXRpb24sIGludCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSk7ICAgIAotICAg
IHZpcnR1YWwgfkltcGxpY2l0QW5pbWF0aW9uKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghbV9m
cm9tU3R5bGUgJiYgIW1fdG9TdHlsZSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSB3ZXJl
IHdhaXRpbmcgZm9yIGFuIGVuZCBldmVudCwgd2UgbmVlZCB0byBmaW5pc2ggdGhlIGFuaW1hdGlv
biB0byBtYWtlIHN1cmUgbm8gb2xkCi0gICAgICAgIC8vIGFuaW1hdGlvbnMgc3RpY2sgYXJvdW5k
IGluIHRoZSBsb3dlciBsZXZlbHMKLSAgICAgICAgaWYgKHdhaXRpbmdGb3JFbmRFdmVudCgpICYm
IG1fb2JqZWN0KQotICAgICAgICAgICAgQVNTRVJUKDApOwotICAgICAgICAKLSAgICAgICAgLy8g
RG8gdGhlIGNsZWFudXAgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZSBiYXNlIGNsYXNzIHNvIHRoZSBz
cGVjaWFsaXplZCBtZXRob2RzIGdldCBjYWxsZWQKLSAgICAgICAgaWYgKCFwb3N0QWN0aXZlKCkp
Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFu
aW1hdGlvbiwgLTEpOyAgICAgCi0gICAgfQorICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFu
aW1hdGlvbiosIGludCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRl
QW5pbWF0aW9uKik7CisgICAgdmlydHVhbCB+SW1wbGljaXRBbmltYXRpb24oKTsKICAgICAKICAg
ICBpbnQgdHJhbnNpdGlvblByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9uUHJv
cGVydHk7IH0KICAgICBpbnQgYW5pbWF0aW5nUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGluZ1Byb3BlcnR5OyB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5k
KGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShD
b21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSog
dGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSk7Ci0gICAgdmlydHVhbCB2
b2lkIHJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
ID0gMCwgY29uc3QgUmVuZGVyU3R5bGUqIHRvID0gMCk7Ci0gICAgCi0gICAgdm9pZCBzZXRPdmVy
cmlkZGVuKGJvb2wgYik7CisKKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91Ymxl
IGVsYXBzZWRUaW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1h
dGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20gPSAwLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gPSAwKTsKKworICAgIHZvaWQgc2V0
T3ZlcnJpZGRlbihib29sKTsKICAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsg
cmV0dXJuIG1fb3ZlcnJpZGRlbjsgfQotICAgIAorCiAgICAgdmlydHVhbCBib29sIHNob3VsZEZp
cmVFdmVudHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29s
IGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OwotICAgIAorCisgICAgdmlydHVh
bCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQpIGNvbnN0OworCiAgICAgYm9vbCBoYXNTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZnJvbVN0eWxlICYmIG1fdG9TdHlsZTsgfQotICAgIAotICAgIGJv
b2wgaXNUYXJnZXRQcm9wZXJ0eUVxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUpOwogCi0gICAgdm9pZCBibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKGludCBwcm9w
LCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlKTsKLSAgICAKKyAgICBib29sIGlzVGFyZ2V0UHJv
cGVydHlFcXVhbChpbnQsIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisKKyAgICB2
b2lkIGJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoaW50LCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlKTsKKwogcHJvdGVjdGVkOgotICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIo
RG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlwZSk7ICAgIAotICAgIGJvb2wgc2Vu
ZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGluRXZlbnRUeXBlLCBkb3VibGUg
aW5FbGFwc2VkVGltZSk7Ci0gICAgCisgICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5l
cihEb2N1bWVudDo6TGlzdGVuZXJUeXBlKTsgICAgCisgICAgYm9vbCBzZW5kVHJhbnNpdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYsIGRvdWJsZSBlbGFwc2VkVGltZSk7CisKIHByaXZhdGU6
CiAgICAgaW50IG1fdHJhbnNpdGlvblByb3BlcnR5OyAgIC8vIFRyYW5zaXRpb24gcHJvcGVydHkg
YXMgc3BlY2lmaWVkIGluIHRoZSBSZW5kZXJTdHlsZS4gTWF5IGJlIGNBbmltYXRlQWxsCiAgICAg
aW50IG1fYW5pbWF0aW5nUHJvcGVydHk7ICAgIC8vIFNwZWNpZmljIHByb3BlcnR5IGZvciB0aGlz
IEltcGxpY2l0QW5pbWF0aW9uCiAgICAgYm9vbCBtX292ZXJyaWRkZW47ICAgICAgICAgIC8vIHRy
dWUgd2hlbiB0aGVyZSBpcyBhIGtleWZyYW1lIGFuaW1hdGlvbiB0aGF0IG92ZXJyaWRlcyB0aGUg
dHJhbnNpdGlvbmluZyBwcm9wZXJ0eQotICAgIAorCiAgICAgLy8gVGhlIHR3byBzdHlsZXMgdGhh
dCB3ZSBhcmUgYmxlbmRpbmcuCiAgICAgUmVuZGVyU3R5bGUqIG1fZnJvbVN0eWxlOwogICAgIFJl
bmRlclN0eWxlKiBtX3RvU3R5bGU7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZgorI2VuZGlmIC8vIEltcGxpY2l0QW5pbWF0aW9uX2gKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNjM0OCkKKysr
IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw1MiArMjgsNjAgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IktleWZyYW1lQW5pbWF0aW9uLmgiCisKICNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIK
LSNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlN5c3RlbVRpbWUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitLZXlmcmFtZUFuaW1hdGlv
bjo6fktleWZyYW1lQW5pbWF0aW9uKCkKK3sKKyAgICAvLyBEbyB0aGUgY2xlYW51cCBoZXJlIGlu
c3RlYWQgb2YgaW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhlIHNwZWNpYWxpemVkIG1ldGhvZHMgZ2V0
IGNhbGxlZAorICAgIGlmICghcG9zdEFjdGl2ZSgpKQorICAgICAgICB1cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlvbiwgLTEpOworfQorCiB2b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJn
ZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKQogewotICAgIC8vIGlmIHdlIGhh
dmUgbm90IHlldCBzdGFydGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwg
c28ganVzdCBzdGFydCB0aGUgYW5pbWF0aW9uIGlmIG5lZWRlZAorICAgIC8vIElmIHdlIGhhdmUg
bm90IHlldCBzdGFydGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28g
anVzdCBzdGFydCB0aGUgYW5pbWF0aW9uIGlmIG5lZWRlZC4KICAgICBpZiAoaXNOZXcoKSAmJiBt
X2FuaW1hdGlvbi0+cGxheVN0YXRlKCkgPT0gQW5pbVBsYXlTdGF0ZVBsYXlpbmcpCiAgICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0U3RhcnRBbmltYXRpb24sIC0x
KTsKLSAgICAKKwogICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBp
cyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1h
dGlvbi4KLSAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxl
CisgICAgLy8gSWYgc28sIHdlIG5lZWQgdG8gc2VuZCBiYWNrIHRoZSB0YXJnZXRTdHlsZS4KICAg
ICBpZiAocG9zdEFjdGl2ZSgpKSB7CiAgICAgICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAg
ICAgICAgIGFuaW1hdGVkU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odGFyZ2V0U3R5
bGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gaWYgd2UgYXJlIHdhaXRpbmcg
Zm9yIHRoZSBzdGFydCB0aW1lciwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHll
dAorICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIsIHdlIGRvbid0
IHdhbnQgdG8gY2hhbmdlIHRoZSBzdHlsZSB5ZXQuCiAgICAgLy8gU3BlY2lhbCBjYXNlIC0gaWYg
dGhlIGRlbGF5IHRpbWUgaXMgMCwgdGhlbiB3ZSBkbyB3YW50IHRvIHNldCB0aGUgZmlyc3QgZnJh
bWUgb2YgdGhlCi0gICAgLy8gYW5pbWF0aW9uIHJpZ2h0IGF3YXkuIFRoaXMgYXZvaWRzIGEgZmxh
c2ggd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0cworICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5
LiBUaGlzIGF2b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMuCiAgICAgaWYg
KHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9hbmltYXRpb24tPmRlbGF5KCkgPiAwKQogICAgICAgICBy
ZXR1cm47Ci0gICAgCisKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVu
dCBhYm91dCBkZXRlcm1pbmluZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3
ZWVuLgotICAgIC8vIFdlIHNob3VsZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZwot
ICAgIAotICAgIC8vIGZpbmQgdGhlIGZpcnN0IGtleQotICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9
IChtX3N0YXJ0VGltZSA+IDApID8gKCghcGF1c2VkKCkgPyBjdXJyZW50VGltZSgpIDogbV9wYXVz
ZVRpbWUpIC0gbV9zdGFydFRpbWUpIDogMC4wOwotICAgIGlmIChlbGFwc2VkVGltZSA8IDAuMCkK
LSAgICAgICAgZWxhcHNlZFRpbWUgPSAwLjA7Ci0gICAgICAgIAotICAgIGRvdWJsZSB0ID0gbV9h
bmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSkgOiAxLjA7Ci0gICAgaW50IGkgPSAoaW50KSB0OworICAgIC8vIFdlIHNob3VsZCBjYWNo
ZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KKworICAgIC8vIEZpbmQgdGhlIGZpcnN0IGtl
eQorICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IChtX3N0YXJ0VGltZSA+IDApID8gKCghcGF1c2Vk
KCkgPyBjdXJyZW50VGltZSgpIDogbV9wYXVzZVRpbWUpIC0gbV9zdGFydFRpbWUpIDogMDsKKyAg
ICBpZiAoZWxhcHNlZFRpbWUgPCAwKQorICAgICAgICBlbGFwc2VkVGltZSA9IDA7CisKKyAgICBk
b3VibGUgdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpID8gKGVsYXBzZWRUaW1lIC8gbV9hbmlt
YXRpb24tPmR1cmF0aW9uKCkpIDogMTsKKyAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4odCk7
CiAgICAgdCAtPSBpOwogICAgIGlmIChtX2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgJiYgKGkgJiAx
KSkKICAgICAgICAgdCA9IDEgLSB0OwogCiAgICAgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IDA7
CiAgICAgUmVuZGVyU3R5bGUqIHRvU3R5bGUgPSAwOwotICAgIGRvdWJsZSBzY2FsZSA9IDEuMDsK
LSAgICBkb3VibGUgb2Zmc2V0ID0gMC4wOworICAgIGRvdWJsZSBzY2FsZSA9IDE7CisgICAgZG91
YmxlIG9mZnNldCA9IDA7CiAgICAgaWYgKG1fa2V5ZnJhbWVzLmdldCgpKSB7CiAgICAgICAgIFZl
Y3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZXMtPmVu
ZEtleWZyYW1lcygpOwogICAgICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy0+YmVnaW5LZXlmcmFtZXMoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CkBAIC04NSwyMyArOTMsMjMgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0
ZShDb21wb3NpdAogICAgICAgICAgICAgICAgIHRvU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0
eWxlKj4oJihpdC0+c3R5bGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBvZmZzZXQgPSBpdC0+a2V5OwogICAgICAg
ICAgICAgZnJvbVN0eWxlID0gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KCYoaXQtPnN0eWxlKSk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gaWYgZWl0aGVyIHN0eWxlIGlzIDAgd2Ug
aGF2ZSBhbiBpbnZhbGlkIGNhc2UsIGp1c3Qgc3RvcCB0aGUgYW5pbWF0aW9uCisKKyAgICAvLyBJ
ZiBlaXRoZXIgc3R5bGUgaXMgMCB3ZSBoYXZlIGFuIGludmFsaWQgY2FzZSwganVzdCBzdG9wIHRo
ZSBhbmltYXRpb24uCiAgICAgaWYgKCFmcm9tU3R5bGUgfHwgIXRvU3R5bGUpIHsKICAgICAgICAg
dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRFbmRBbmltYXRpb24sIC0xKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBydW4gYSBjeWNsZSBvZiBhbmlt
YXRpb24uCi0gICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBz
byBtYWtlIG9uZSBpZiBuZWVkZWQKKworICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlvbi4K
KyAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1ha2Ug
b25lIGlmIG5lZWRlZC4KICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCiAgICAgICAgIGFuaW1hdGVk
U3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0
U3R5bGUpOwotICAgIAorCiAgICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcyhzY2FsZSwgb2Zmc2V0
KTsKIAogICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZXMt
PmVuZFByb3BlcnRpZXMoKTsKQEAgLTExMSw1MSArMTE5LDUyIEBAIHZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmFuaW1hdGUoQ29tcG9zaXQKICAgICB9CiB9CiAKLXZvaWQgS2V5ZnJhbWVBbmltYXRp
b246OmVuZEFuaW1hdGlvbihib29sIHJlc2V0KQordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6ZW5k
QW5pbWF0aW9uKGJvb2wpCiB7CiAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0
ZWQpIHN0eWxlCiAgICAgaWYgKG1fb2JqZWN0KQogICAgICAgICBzZXRDaGFuZ2VkKG1fb2JqZWN0
LT5lbGVtZW50KCkpOwogfQogCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzaG91bGRTZW5kRXZl
bnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGluTGlzdGVuZXJUeXBlKQorYm9v
bCBLZXlmcmFtZUFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6
Okxpc3RlbmVyVHlwZSBsaXN0ZW5lclR5cGUpCiB7Ci0gICAgcmV0dXJuIG1fb2JqZWN0LT5kb2N1
bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOworICAgIHJldHVybiBtX29i
amVjdC0+ZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKGxpc3RlbmVyVHlwZSk7CiB9Ci0gICAg
Ci12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBpbkVsYXBz
ZWRUaW1lKQorCit2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJs
ZSBlbGFwc2VkVGltZSkKIHsKLSAgICBzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Vi
a2l0QW5pbWF0aW9uU3RhcnRFdmVudCwgaW5FbGFwc2VkVGltZSk7CisgICAgc2VuZEFuaW1hdGlv
bkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQsIGVsYXBzZWRUaW1l
KTsKIH0KIAotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25JdGVyYXRpb24oZG91
YmxlIGluRWxhcHNlZFRpbWUpCit2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvbkl0
ZXJhdGlvbihkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0gICAgc2VuZEFuaW1hdGlvbkV2ZW50KEV2
ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50LCBpbkVsYXBzZWRUaW1lKTsK
KyAgICBzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0
aW9uRXZlbnQsIGVsYXBzZWRUaW1lKTsKIH0KIAotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25B
bmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpCit2b2lkIEtleWZyYW1lQW5pbWF0aW9u
OjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCiB7Ci0gICAgaWYgKCFzZW5kQW5p
bWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQsIGluRWxhcHNl
ZFRpbWUpKSB7CisgICAgaWYgKCFzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0
QW5pbWF0aW9uRW5kRXZlbnQsIGVsYXBzZWRUaW1lKSkgewogICAgICAgICAvLyBXZSBkaWRuJ3Qg
ZGlzcGF0Y2ggYW4gZXZlbnQsIHdoaWNoIHdvdWxkIGNhbGwgZW5kQW5pbWF0aW9uKCksIHNvIHdl
J2xsIGp1c3QgY2FsbCBpdCBoZXJlLgogICAgICAgICBlbmRBbmltYXRpb24odHJ1ZSk7CiAgICAg
fQogfQogCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3Qg
QXRvbWljU3RyaW5nJiBpbkV2ZW50VHlwZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpCitib29sIEtl
eWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKIHsKICAgICBEb2N1bWVudDo6TGlzdGVuZXJU
eXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoaW5FdmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Vi
a2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQpCisgICAgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5h
bWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCkKICAgICAgICAgbGlzdGVuZXJUeXBl
ID0gRG9jdW1lbnQ6OkFOSU1BVElPTklURVJBVElPTl9MSVNURU5FUjsKLSAgICBlbHNlIGlmIChp
bkV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCkKKyAgICBl
bHNlIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQp
CiAgICAgICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05FTkRfTElTVEVORVI7
Ci0gICAgZWxzZQorICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoZXZlbnRUeXBlID09IEV2ZW50
TmFtZXM6OndlYmtpdEFuaW1hdGlvblN0YXJ0RXZlbnQpOwogICAgICAgICBsaXN0ZW5lclR5cGUg
PSBEb2N1bWVudDo6QU5JTUFUSU9OU1RBUlRfTElTVEVORVI7Ci0gICAgCisgICAgfQorCiAgICAg
aWYgKHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKGxpc3RlbmVyVHlwZSkpIHsKLSAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JFdmVudERpc3BhdGNoKCk7Ci0gICAgICAgIGlm
IChlbGVtZW50KSB7CisgICAgICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvckV2
ZW50RGlzcGF0Y2goKSkgewogICAgICAgICAgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQgPSB0cnVl
OwotICAgICAgICAgICAgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXIuc3RhcnRUaW1lcihlbGVt
ZW50LCBtX25hbWUsIC0xLCB0cnVlLCBpbkV2ZW50VHlwZSwgaW5FbGFwc2VkVGltZSk7CisgICAg
ICAgICAgICBtX2FuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlci5zdGFydFRpbWVyKGVsZW1lbnQsIG1f
bmFtZSwgLTEsIHRydWUsIGV2ZW50VHlwZSwgZWxhcHNlZFRpbWUpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7IC8vIERpZCBkaXNwYXRjaCBhbiBldmVudAogICAgICAgICB9CiAgICAgfQpAQCAt
MTgzLDEwICsxOTIsMTAgQEAgYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5
KAogewogICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZXMt
PmVuZFByb3BlcnRpZXMoKTsKICAgICBmb3IgKEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2tleWZyYW1lcy0+YmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBpZiAoKCppdCkgPT0gcHJvcGVydHkpCisgICAgICAgIGlmICgqaXQgPT0gcHJvcGVy
dHkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShyZXZpc2lvbiAzNjM0OCkKKysrIFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMjIg
KzQwLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEtleWZyYW1lQW5pbWF0aW9uIDog
cHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgogICAgIEtleWZyYW1lQW5pbWF0aW9uKGNv
bnN0IEFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBpbnQgaW5k
ZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pCi0gICAgOiBBbmltYXRpb25CYXNlKGFu
aW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBBbmltKQotICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9u
LT5rZXlmcmFtZUxpc3QoKSkKLSAgICAsIG1fbmFtZShhbmltYXRpb24tPm5hbWUoKSkKLSAgICAs
IG1faW5kZXgoaW5kZXgpCisgICAgICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24sIHJlbmRl
cmVyLCBjb21wQW5pbSkKKyAgICAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRpb24tPmtleWZyYW1l
TGlzdCgpKQorICAgICAgICAsIG1fbmFtZShhbmltYXRpb24tPm5hbWUoKSkKKyAgICAgICAgLCBt
X2luZGV4KGluZGV4KQogICAgIHsKICAgICB9CiAKLSAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1h
dGlvbigpCi0gICAgewotICAgICAgICAvLyBEbyB0aGUgY2xlYW51cCBoZXJlIGluc3RlYWQgb2Yg
aW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhlIHNwZWNpYWxpemVkIG1ldGhvZHMgZ2V0IGNhbGxlZAot
ICAgICAgICBpZiAoIXBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGlu
ZShBbmltYXRpb25TdGF0ZUlucHV0RW5kQW5pbWF0aW9uLCAtMSk7Ci0gICAgfQorICAgIHZpcnR1
YWwgfktleWZyYW1lQW5pbWF0aW9uKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21w
b3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJn
ZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRl
clN0eWxlKiYgYW5pbWF0ZWRTdHlsZSk7CiAKICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
JiBzKSB7IG1fbmFtZSA9IHM7IH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWU7IH0KQEAgLTY0LDE4ICs1OCwxOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25TdGFydChkb3VibGUgaW5FbGFw
c2VkVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBp
bkVsYXBzZWRUaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGlu
RWxhcHNlZFRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBl
bGFwc2VkVGltZSk7CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJs
ZSBlbGFwc2VkVGltZSk7CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBl
bGFwc2VkVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlvbihib29sIHJlc2V0KTsK
IAogICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKTsKLSAgICAKKwogICAgIGJvb2wgc2hvdWxk
U2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlw
ZSk7ICAgIAotICAgIGJvb2wgc2VuZEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
aW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKLSAgICAKLSAgICB2aXJ0dWFsIGJv
b2wgYWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3Q7CisgICAgYm9vbCBzZW5kQW5p
bWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiwgZG91YmxlIGVsYXBzZWRUaW1lKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJvcGVydHkoaW50KSBjb25zdDsKIAogcHJpdmF0ZToK
ICAgICAvLyBUaGUga2V5ZnJhbWVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgpAQCAtODUsNiArNzks
NiBAQCBwcml2YXRlOgogICAgIGludCBtX2luZGV4OwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBLZXlmcmFtZUFuaW1hdGlvbl9oCg==
</data>
<flag name="review"
          id="10423"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>