<?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>20770</bug_id>
          
          <creation_ts>2008-09-10 13:20:57 -0700</creation_ts>
          <short_desc>Make transform animation behavior match spec</short_desc>
          <delta_ts>2008-09-15 17:46:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>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>
          
          <blocked>20758</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dino</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>90793</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-10 13:20:57 -0700</bug_when>
    <thetext>The latest version of the CSS Animation and CSS Transition specs give rules for how to handle animation between transform lists. Basically, if the lists match in size and the corresponding operators in the list match, animation is done on an operation-by-operation basis. Otherwise, the lists are reduced to and AffineTransform and those are animated as described in https://bugs.webkit.org/show_bug.cgi?id=20667.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90794</commentid>
    <comment_count>1</comment_count>
      <attachid>23327</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-10 13:29:46 -0700</bug_when>
    <thetext>Created attachment 23327
Patch, including LayoutTest files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90899</commentid>
    <comment_count>2</comment_count>
      <attachid>23327</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-09-11 15:15:35 -0700</bug_when>
    <thetext>Comment on attachment 23327
Patch, including LayoutTest files

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90992</commentid>
    <comment_count>3</comment_count>
      <attachid>23382</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-12 17:09:49 -0700</bug_when>
    <thetext>Created attachment 23382
Replacement patch - now against changelist 36358</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91000</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-12 17:34:30 -0700</bug_when>
    <thetext>Committed r36362
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/style/RenderStyle.cpp
	M	WebCore/rendering/style/RenderStyle.h
	M	WebCore/ChangeLog
	M	WebCore/css/CSSStyleSelector.cpp
	M	WebCore/css/CSSStyleSelector.h
	M	WebCore/page/animation/AnimationBase.h
	M	WebCore/page/animation/ImplicitAnimation.h
	M	WebCore/page/animation/KeyframeAnimation.cpp
	M	WebCore/page/animation/KeyframeAnimation.h
	M	WebCore/page/animation/AnimationBase.cpp
	M	WebCore/page/animation/ImplicitAnimation.cpp
	M	LayoutTests/ChangeLog

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91286</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-15 17:46:30 -0700</bug_when>
    <thetext>Committed r36468
	M	LayoutTests/ChangeLog
	A	LayoutTests/transitions/transform-op-list-match.html
	A	LayoutTests/transitions/transform-op-list-no-match-expected.txt
	A	LayoutTests/transitions/transform-op-list-match-expected.txt
	A	LayoutTests/transitions/transform-op-list-no-match.html

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23327</attachid>
            <date>2008-09-10 13:29:46 -0700</date>
            <delta_ts>2008-09-12 17:09:49 -0700</delta_ts>
            <desc>Patch, including LayoutTest files</desc>
            <filename>20770.patch</filename>
            <type>text/plain</type>
            <size>70921</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjMyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTkgQEAKKzIwMDgtMDktMTAgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1h
a2UgdHJhbnNmb3JtIGFuaW1hdGlvbiBiZWhhdmlvciBtYXRjaCBzcGVjCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc3MAorCisgICAgICAgIFRlc3Rz
OiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCisgICAgICAgICAgICAg
ICB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OmdldFRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRl
VHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoK
KyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmJsZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXI6OmJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclNoYWRvdzo6YmxlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I6OmJsZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZVByb3BlcnR5TWFwKToKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uQmFzZTo6YmxlbmRQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjppc1RyYW5z
Zm9ybUZ1bmN0aW9uTGlzdFZhbGlkKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNp
dEFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6YW5p
bWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OnZhbGlkYXRlVHJhbnNm
b3JtRnVuY3Rpb25MaXN0KToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1h
dGlvbi5oOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlz
dCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6c2V0SW5kZXgpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
dXBkYXRlUmVmbGVjdGlvblN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVy
U3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uczo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6OmFwcGx5VHJhbnNmb3JtKToKKyAgICAgICAgKiByZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlv
bjo6KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbjo6aXNTYW1lVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjppc0lkZW50aXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpnZXRPcGVy
YXRpb25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9u
Ojppc1NhbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0
aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3Bl
cmF0aW9uOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJh
dGlvbjo6YmxlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b246OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmlzSWRlbnRpdHkpOgorICAgICAgICAoV2ViQ29yZTo6U2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmdldE9wZXJhdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb246OmlzU2FtZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6U2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb246OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmlzSWRlbnRpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpnZXRPcGVyYXRpb25UeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6aXNTYW1lVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoV2ViQ29yZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjphcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmFuZ2xlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjppc0lkZW50aXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmdldE9wZXJhdGlvblR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6aXNTYW1lVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmFwcGx5KToKKyAgICAgICAg
KFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjppc0lkZW50
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Z2V0
T3BlcmF0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmlzU2FtZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjppc0lkZW50aXR5KToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Z2V0T3BlcmF0aW9uVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmlzU2FtZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6YXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uczo6VHJhbnNmb3JtT3BlcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zOjphcHBseSk6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OnNpemUpOgorCiAyMDA4LTA5LTEwICBEYW4gQmVybnN0ZWlu
ICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzNjI3NSkKKysrIFdlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzQ5LDExMiArNDc0
OSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlQcm9wZXJ0eShpbnQKICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FO
RF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVl
TGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LT5sZW5ndGgo
KTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdmFsID0gc3RhdGljX2Nhc3Q8
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkp
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSog
Zmlyc3RWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c3dpdGNoICh2YWwtPm9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNm
b3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzeSA9
IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShzeCwgc3kpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9w
ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBvayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggdHggPSBM
ZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVu
Z3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0xlbmd0
aChmaXJzdFZhbHVlLCBtX3N0eWxlLCAmb2spOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvTGVuZ3RoKGZp
cnN0VmFsdWUsIG1fc3R5bGUsICZvayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0xlbmd0aChzZWNvbmRWYWx1
ZSwgbV9zdHlsZSwgJm9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5nZXRE
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9
IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
a2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlWSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUg
PSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZl
VHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5n
bGVZID0gYW5nbGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbmdsZVggPSBhbmdsZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNv
bmRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHJhZDJkZWco
YW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Vj
b25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gZ3JhZDJk
ZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpLT5nZXREb3VibGVWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGMgPSBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSktPmdldERvdWJsZVZh
bHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDMpKS0+Z2V0RG91
YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNCkpLT5n
ZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGYgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayg1
KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25z
LmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhLCBiLCBjLCBkLCBlLCBm
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fSAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpV
bmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgY3JlYXRlVHJhbnNm
b3JtT3BlcmF0aW9ucyh2YWx1ZSwgbV9zdHlsZSwgb3BlcmF0aW9ucyk7CiAgICAgICAgIG1fc3R5
bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTU2NjcsNCArNTU2MiwxMzcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNr
ZXI6OgogICAgIH0KIH0KIAorVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIGdldFRy
YW5zZm9ybU9wZXJhdGlvblR5cGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOworICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEVfWDsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFu
c2Zvcm1PcGVyYXRpb246OlNDQUxFX1k7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogICAgICByZXR1cm4gVHJhbnNmb3Jt
T3BlcmF0aW9uOjpUUkFOU0xBVEU7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246ICAgICByZXR1cm4gVHJhbnNmb3JtT3Bl
cmF0aW9uOjpUUkFOU0xBVEVfWDsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogICAgIHJldHVybiBUcmFuc2Zvcm1PcGVy
YXRpb246OlRSQU5TTEFURV9ZOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246ICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJh
dGlvbjo6Uk9UQVRFOworICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0tFVzsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zv
cm1PcGVyYXRpb246ICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWDsK
KyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVy
YXRpb246ICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWTsKKyAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
OiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDsKKyAgICAgICAgZGVm
YXVsdDogcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORTsKKyAgICB9CisgICAgcmV0dXJu
IFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORTsKK30KKworYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpj
cmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENTU1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSog
aW5TdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK3sKKyAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7CisgICAgaWYgKGluVmFsdWUgJiYgIWluVmFsdWUt
PmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAgICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0
aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihpblZhbHVlKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9
IGxpc3QtPmxlbmd0aCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdmFsID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKGkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZp
cnN0VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygwKSk7CisgICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHZh
bC0+b3BlcmF0aW9uVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgorICAg
ICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9y
bU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CisgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSBzeSA9IDEuMDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlU
cmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzZWNvbmRWYWx1ZS0+Z2V0
RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9ucy5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3ksIGdldFRy
YW5zZm9ybU9wZXJhdGlvblR5cGUodmFsLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNl
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246Cisg
ICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRy
YW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAg
ICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5n
dGgoMCwgRml4ZWQpOworICAgICAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwg
Rml4ZWQpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0g
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisg
ICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0xlbmd0aChmaXJzdFZhbHVlLCBp
blN0eWxlLCAmb2spOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAg
ICAgICAgICAgICB0eCA9IGNvbnZlcnRUb0xlbmd0aChmaXJzdFZhbHVlLCBpblN0eWxlLCAmb2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpICE9IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBjb252ZXJ0
VG9MZW5ndGgoc2Vjb25kVmFsdWUsIGluU3R5bGUsICZvayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0eCwgdHksIGdldFRyYW5zZm9y
bU9wZXJhdGlvblR5cGUodmFsLT5vcGVyYXRpb25UeXBlKCkpKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
ID0gcmFkMmRlZyhhbmdsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZpcnN0VmFs
dWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBl
KHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlv
bjogeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGVYID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIGFuZ2xlWSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBh
bmdsZSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19SQUQpCisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAg
YW5nbGUgPSBncmFkMmRlZyhhbmdsZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9w
ZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1P
cGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBhbmdsZTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVggPSBh
bmdsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHNlY29u
ZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWSA9IHJh
ZDJkZWcoYW5nbGVZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
c2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dS
QUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBncmFkMmRl
ZyhhbmdsZVkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLmFwcGVuZChTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGVYLCBh
bmdsZVksIGdldFRyYW5zZm9ybU9wZXJhdGlvblR5cGUodmFsLT5vcGVyYXRpb25UeXBlKCkpKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYSA9IGZpcnN0VmFsdWUtPmdldEZs
b2F0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgYiA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKS0+Z2V0Rmxv
YXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBjID0gc3RhdGljX2Nhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpLT5nZXRGbG9h
dFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygzKSktPmdldEZsb2F0
VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKS0+Z2V0RmxvYXRW
YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBmbG9hdCBmID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpLT5nZXRGbG9hdFZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKE1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMsIGQsIGUsIGYpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBvdXRPcGVyYXRpb25z
ID0gb3BlcmF0aW9uczsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gMzYyNzUpCisrKyBXZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEs
OCBAQCBwdWJsaWM6CiAKICAgICAgICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKERvY3VtZW50KiBk
b2MsIGNvbnN0IFdlYktpdENTU0tleWZyYW1lc1J1bGUqIHJ1bGUpOwogCisgICAgICAgIHN0YXRp
YyBib29sIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRl
clN0eWxlKiBpblN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gU2VsZWN0b3JNYXRjaCB7IFNlbGVjdG9yTWF0Y2hl
cywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CiAKSW5k
ZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkocmV2aXNpb24gMzYy
NzUpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03OCw2NSArNzgsOTMgQEAgdm9pZCBBbmltYXRpb25FdmVudERpc3BhdGNoZXI6
OnRpbWVyRmlyZQogICAgIG1fYW5pbS0+YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQobV9l
bGVtZW50LmdldCgpLCBtX25hbWUsIG1fcHJvcGVydHksIG1fcmVzZXQsIG1fZXZlbnRUeXBlLCBt
X2VsYXBzZWRUaW1lKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYmxlbmRGdW5jKGludCBmcm9t
LCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhj
b25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBpbnQgZnJvbSwgaW50IHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCiB7ICAKICAgICByZXR1cm4gaW50KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsK
IH0KIAotc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGRvdWJsZSBmcm9tLCBkb3VibGUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGJsZW5kRnVuYyhjb25z
dCBBbmltYXRpb25CYXNlKiBhbmltLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCiB7ICAKICAgICByZXR1cm4gZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3M7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGZsb2F0IGZyb20sIGZsb2F0IHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIGZsb2F0IGJsZW5kRnVuYyhjb25zdCBBbmlt
YXRpb25CYXNlKiBhbmltLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQog
eyAgCiAgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20p
ICogcHJvZ3Jlc3MpOwogfQogCi1zdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBD
b2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5s
aW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBjb25zdCBDb2xv
ciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7ICAKLSAgICByZXR1
cm4gQ29sb3IoYmxlbmRGdW5jKGZyb20ucmVkKCksIHRvLnJlZCgpLCBwcm9ncmVzcyksCi0gICAg
ICAgICAgICAgICAgIGJsZW5kRnVuYyhmcm9tLmdyZWVuKCksIHRvLmdyZWVuKCksIHByb2dyZXNz
KSwKLSAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20uYmx1ZSgpLCB0by5ibHVlKCksIHBy
b2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20uYWxwaGEoKSwgdG8uYWxw
aGEoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gQ29sb3IoYmxlbmRGdW5jKGFuaW0sIGZyb20u
cmVkKCksIHRvLnJlZCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhh
bmltLCBmcm9tLmdyZWVuKCksIHRvLmdyZWVuKCksIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAg
ICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYmx1ZSgpLCB0by5ibHVlKCksIHByb2dyZXNzKSwKKyAg
ICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYWxwaGEoKSwgdG8uYWxwaGEoKSwg
cHJvZ3Jlc3MpKTsKIH0KIAotc3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IExl
bmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlu
bGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGNvbnN0IExl
bmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAg
cmV0dXJuIHRvLmJsZW5kKGZyb20sIHByb2dyZXNzKTsKIH0KIAotc3RhdGljIGlubGluZSBJbnRT
aXplIGJsZW5kRnVuYyhjb25zdCBJbnRTaXplJiBmcm9tLCBjb25zdCBJbnRTaXplJiB0bywgZG91
YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBJbnRTaXplIGJsZW5kRnVuYyhjb25zdCBBbmlt
YXRpb25CYXNlKiBhbmltLCBjb25zdCBJbnRTaXplJiBmcm9tLCBjb25zdCBJbnRTaXplJiB0bywg
ZG91YmxlIHByb2dyZXNzKQogeyAgCi0gICAgcmV0dXJuIEludFNpemUoYmxlbmRGdW5jKGZyb20u
d2lkdGgoKSwgdG8ud2lkdGgoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgIGJsZW5k
RnVuYyhmcm9tLmhlaWdodCgpLCB0by5oZWlnaHQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4g
SW50U2l6ZShibGVuZEZ1bmMoYW5pbSwgZnJvbS53aWR0aCgpLCB0by53aWR0aCgpLCBwcm9ncmVz
cyksCisgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uaGVpZ2h0KCksIHRv
LmhlaWdodCgpLCBwcm9ncmVzcykpOwogfQogCi1zdGF0aWMgaW5saW5lIFNoYWRvd0RhdGEqIGJs
ZW5kRnVuYyhjb25zdCBTaGFkb3dEYXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91
YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBTaGFkb3dEYXRhKiBibGVuZEZ1bmMoY29uc3Qg
QW5pbWF0aW9uQmFzZSogYW5pbSwgY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93
RGF0YSogdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIEFTU0VSVChmcm9tICYmIHRvKTsK
LSAgICByZXR1cm4gbmV3IFNoYWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9n
cmVzcyksIGJsZW5kRnVuYyhmcm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20tPmJsdXIsIHRvLT5ibHVyLCBwcm9ncmVzcyks
IGJsZW5kRnVuYyhmcm9tLT5jb2xvciwgdG8tPmNvbG9yLCBwcm9ncmVzcykpOworICAgIHJldHVy
biBuZXcgU2hhZG93RGF0YShibGVuZEZ1bmMoYW5pbSwgZnJvbS0+eCwgdG8tPngsIHByb2dyZXNz
KSwgYmxlbmRGdW5jKGFuaW0sIGZyb20tPnksIHRvLT55LCBwcm9ncmVzcyksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+Ymx1ciwgdG8tPmJsdXIsIHBy
b2dyZXNzKSwgYmxlbmRGdW5jKGFuaW0sIGZyb20tPmNvbG9yLCB0by0+Y29sb3IsIHByb2dyZXNz
KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBi
bGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKIHsgICAgCi0gICAgLy8gQmxlbmQgYW55IG9wZXJhdGlvbnMgd2hvc2UgdHlwZXMgYWN0dWFs
bHkgbWF0Y2ggdXAuICBPdGhlcndpc2UgZG9uJ3QgYm90aGVyLgotICAgIHVuc2lnbmVkIGZyb21T
aXplID0gZnJvbS5zaXplKCk7Ci0gICAgdW5zaWduZWQgdG9TaXplID0gdG8uc2l6ZSgpOwotICAg
IHVuc2lnbmVkIHNpemUgPSBtYXgoZnJvbVNpemUsIHRvU2l6ZSk7CiAgICAgVHJhbnNmb3JtT3Bl
cmF0aW9ucyByZXN1bHQ7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewotICAgICAgICBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBmcm9tT3AgPSBpIDwgZnJvbVNp
emUgPyBmcm9tW2ldIDogMDsKLSAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gdG9P
cCA9IGkgPCB0b1NpemUgPyB0b1tpXSA6IDA7Ci0gICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVy
YXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyB0b09wLT5ibGVuZChmcm9tT3AuZ2V0KCksIHByb2dy
ZXNzKSA6IGZyb21PcC0+YmxlbmQoMCwgcHJvZ3Jlc3MsIHRydWUpOwotICAgICAgICBpZiAoYmxl
bmRlZE9wKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOworICAgIAorICAg
IC8vIElmIHdlIGhhdmUgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8g
YSBwZXItZnVuY3Rpb24gYW5pbWF0aW9uLiBPdGhlcndpc2UgZG8gYSBNYXRyaXggYW5pbWF0aW9u
CisgICAgaWYgKGFuaW0tPmlzVHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQoKSkgeworICAgICAg
ICB1bnNpZ25lZCBmcm9tU2l6ZSA9IGZyb20uc2l6ZSgpOworICAgICAgICB1bnNpZ25lZCB0b1Np
emUgPSB0by5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtYXgoZnJvbVNpemUsIHRv
U2l6ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNp
emUgJiYgIWZyb21baV0tPmlzSWRlbnRpdHkoKSkgPyBmcm9tW2ldLmdldCgpIDogMDsKKyAgICAg
ICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IHRvT3AgPSAoaSA8IHRvU2l6ZSAmJiAh
dG9baV0tPmlzSWRlbnRpdHkoKSkgPyB0b1tpXS5nZXQoKSA6IDA7CisgICAgICAgICAgICBSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gdG9PcC0+YmxlbmQoZnJv
bU9wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJvbU9wID8gZnJvbU9wLT5ibGVuZCgwLCBwcm9ncmVz
cywgdHJ1ZSkgOiAwKTsKKyAgICAgICAgICAgIGlmIChibGVuZGVkT3ApCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChibGVuZGVkT3ApOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gaWRlbnRpdHlPcCA9IElkZW50aXR5
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBpZiAocHJvZ3Jl
c3MgPiAwLjUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9PcCA/IHRvT3Ag
OiBpZGVudGl0eU9wKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogaWRlbnRpdHlPcCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDb252ZXJ0IHRoZSBUcmFu
c2Zvcm1PcGVyYXRpb25zIGludG8gbWF0cmljZXMKKyAgICAgICAgSW50U2l6ZSBzaXplID0gYW5p
bS0+cmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkuc2l6ZSgpOworICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gZnJvbVQ7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0b1Q7CisgICAgICAgIGZyb20uYXBw
bHkoc2l6ZSwgZnJvbVQpOworICAgICAgICB0by5hcHBseShzaXplLCB0b1QpOworICAgICAgICAK
KyAgICAgICAgdG9ULmJsZW5kKGZyb21ULCBwcm9ncmVzcyk7CisgICAgICAgIAorICAgICAgICAv
LyBBcHBlbmQgdGhlIHJlc3VsdAorICAgICAgICByZXN1bHQuYXBwZW5kKE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKHRvVC5hKCksIHRvVC5iKCksIHRvVC5jKCksIHRvVC5kKCksIHRv
VC5lKCksIHRvVC5mKCkpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGlubGluZSBFVmlzaWJpbGl0eSBibGVuZEZ1bmMoRVZpc2liaWxpdHkgZnJvbSwgRVZpc2liaWxp
dHkgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgRVZpc2liaWxpdHkgYmxlbmRG
dW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIEVWaXNpYmlsaXR5IGZyb20sIEVWaXNpYmls
aXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAgICAgLy8gQW55IG5vbi16ZXJvIHJlc3VsdCBt
ZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUuICBPbmx5IGF0IDAgZG8g
d2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQogICAgIC8vIGludmlzaWJsZS4gICBUaGUgaW52
aXNpYmxlIHZhbHVlIHdlIHVzZSAoSElEREVOIHZzLiBDT0xMQVBTRSkgZGVwZW5kcyBvbiB0aGUg
c3BlY2lmaWVkIGZyb20vdG8gdmFsdWVzLgpAQCAtMTQ0LDcgKzE3Miw3IEBAIHN0YXRpYyBpbmxp
bmUgRVZpc2liaWxpdHkgYmxlbmRGdW5jKEVWaXMKICAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBW
SVNJQkxFID8gMS4gOiAwLjsKICAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKICAgICAgICAgcmV0
dXJuIHRvOwotICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoZnJvbVZhbCwgdG9WYWwsIHBy
b2dyZXNzKTsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRv
VmFsLCBwcm9ncmVzcyk7CiAgICAgcmV0dXJuIHJlc3VsdCA+IDAuID8gVklTSUJMRSA6ICh0byAh
PSBWSVNJQkxFID8gdG8gOiBmcm9tKTsKIH0KIApAQCAtMTU1LDcgKzE4Myw3IEBAIHB1YmxpYzoK
ICAgICB7IH0KICAgICB2aXJ0dWFsIH5Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgeyB9CiAgICAgdmly
dHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0PTA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNv
bnN0PTA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2cpIGNvbnN0PTA7CiAgICAgCiAgICAgaW50IHByb3BlcnR5KCkgY29u
c3QgeyByZXR1cm4gbV9wcm9wOyB9CiAgICAgCkBAIC0xODgsOSArMjE2LDkgQEAgcHVibGljOgog
ICAgICwgbV9zZXR0ZXIoc2V0dGVyKQogICAgIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBi
bGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25z
dCBBbmltYXRpb25CYXNlKiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAogICAgIHsKLSAg
ICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0
ZXIpKCksIHByb2cpKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwg
KGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5
V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIHByb2cpKTsKICAgICB9CiAgICAgCiBwcm90
ZWN0ZWQ6CkBAIC0yMTYsNyArMjQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNv
bnN0CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2cpIGNvbnN0CiAgICAgewogICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dh
ID0gKGEtPiptX2dldHRlcikoKTsKICAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YiA9IChiLT4q
bV9nZXR0ZXIpKCk7CkBAIC0yMjcsNyArMjU1LDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIXNo
YWRvd2IpCiAgICAgICAgICAgICBzaGFkb3diID0gJmRlZmF1bHRTaGFkb3dEYXRhOwogICAgICAg
ICAKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoc2hhZG93YSwgc2hhZG93Yiwg
cHJvZyksIGZhbHNlKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwg
c2hhZG93YSwgc2hhZG93YiwgcHJvZyksIGZhbHNlKTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpA
QCAtMjU0LDcgKzI4Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0
b0NvbG9yOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUq
IGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUg
cHJvZykgY29uc3QKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQW5pbWF0aW9uQmFzZSog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKICAgICB7CiAgICAgICAgIENvbG9yIGZyb21D
b2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7CiAgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1f
Z2V0dGVyKSgpOwpAQCAtMjYyLDcgKzI5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZyb21D
b2xvciA9IGEtPmNvbG9yKCk7CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAg
ICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9nKSk7CisgICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZykpOwogICAgIH0K
ICAgICAKIHByaXZhdGU6CkBAIC0zMjMsOCArMzUxLDYgQEAgc3RhdGljIHZvaWQgZW5zdXJlUHJv
cGVydHlNYXAoKQogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8Y29uc3QgSW50U2l6ZSY+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tUmln
aHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpKTsKICAgICAgICAgZ1Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPEVWaXNpYmlsaXR5PihDU1NQcm9wZXJ0
eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpYmlsaXR5KSk7CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZS
ZW5kZXJTdHlsZTo6c2V0Wm9vbSkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IHRoZXNl
IG1pZ2h0IGJlIGludmFsaWQgY29sb3JzLCBuZWVkIHRvIGNoZWNrIGZvciB0aGF0CiAgICAgICAg
IGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxp
ZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNv
bHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IpKTsKICAgICAg
ICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6
dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VDb2xvcikpOwogICAg
ICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6
dGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yKSk7CkBAIC0zNjMs
NiArMzg5LDcgQEAgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYQogLCBt
X2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbio+KHRyYW5zaXRpb24pKQogLCBtX2NvbXBB
bmltKGNvbXBBbmltKQogLCBtX3dhaXRpbmdGb3JFbmRFdmVudChmYWxzZSkKKywgbV90cmFuc2Zv
cm1GdW5jdGlvbkxpc3RWYWxpZChmYWxzZSkKIHsKICAgICBlbnN1cmVQcm9wZXJ0eU1hcCgpOwog
fQpAQCAtNDEyLDcgKzQzOSw3IEBAIGludCBBbmltYXRpb25CYXNlOjpnZXROdW1Qcm9wZXJ0aWVz
KCkKIAogICAgIAogLy8gc3RhdGljIC0gcmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBzdGFydCBz
b2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCi1ib29sIEFuaW1hdGlvbkJhc2U6OmJsZW5kUHJvcGVy
dGllcyhpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykKK2Jvb2wgQW5pbWF0aW9uQmFzZTo6Ymxl
bmRQcm9wZXJ0aWVzKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGludCBwcm9wLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9nKQogewogICAgIGlmIChwcm9wID09IGNBbmltYXRlQWxsKSB7CiAgICAgICAgIEFT
U0VSVCgwKTsKQEAgLTQyMiw3ICs0NDksNyBAQCBib29sIEFuaW1hdGlvbkJhc2U6OmJsZW5kUHJv
cGVydGllcyhpbnQgCiAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytp
KSB7CiAgICAgICAgICAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gKCpnUHJvcGVy
dHlXcmFwcGVycylbaV07CiAgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkg
ewotICAgICAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGRzdCwgYSwgYiwgcHJvZyk7CisgICAg
ICAgICAgICAgICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9nKTsKICAgICAg
ICAgICAgICAgICBuZWVkc1RpbWVyID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtNDM0LDcgKzQ2MSw3IEBAIGJvb2wgQW5pbWF0aW9uQmFzZTo6YmxlbmRQcm9wZXJ0aWVzKGlu
dCAKICAgICAgICAgaW50IGkgPSBnUHJvcGVydHlXcmFwcGVyTWFwW3Byb3BJbmRleF07CiAgICAg
ICAgIGlmIChpID49IDApIHsKICAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBw
ZXIgPSAoKmdQcm9wZXJ0eVdyYXBwZXJzKVtpXTsKLSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5k
KGRzdCwgYSwgYiwgcHJvZyk7CisgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3Qs
IGEsIGIsIHByb2cpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9
CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkocmV2aXNpb24gMzYy
NzUpCisrKyBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDYgKzI0NCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICFwb3N0QWN0
aXZlKCkgJiYgYWZmZWN0c1Byb3BlcnR5KHByb3BlcnR5KTsKICAgICB9CiAgICAgICAgIAorICAg
IGJvb2wgaXNUcmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQ7IH0KKwogcHJvdGVjdGVkOgogICAgIEVsZW1lbnQqIGVs
ZW1lbnRGb3JFdmVudERpc3BhdGNoKCk7CiAgICAgCkBAIC0yNjYsNyArMjY4LDcgQEAgcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBpbnQgZ2V0TnVtUHJvcGVydGllcygpOwogICAgIAogICAgIC8vIFJl
dHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0aW9uIHRpbWVycwot
ICAgIHN0YXRpYyBib29sIGJsZW5kUHJvcGVydGllcyhpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Zyk7CisgICAgc3RhdGljIGJvb2wgYmxlbmRQcm9wZXJ0aWVzKGNvbnN0IEFuaW1hdGlvbkJhc2Uq
IGFuaW0sIGludCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKTsKICAgICAKICAgICBzdGF0aWMgdm9p
ZCBzZXRDaGFuZ2VkKE5vZGUqIG5vZGUpOwogICAgIApAQCAtMjg1LDYgKzI4Nyw3IEBAIHByb3Rl
Y3RlZDoKICAgICBSZWZQdHI8QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKICAgICBDb21wb3NpdGVB
bmltYXRpb24qIG1fY29tcEFuaW07CiAgICAgYm9vbCBtX3dhaXRpbmdGb3JFbmRFdmVudDsKKyAg
ICBib29sIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQ7CiAKIHByaXZhdGU6CiB9OwpJbmRl
eDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAJKHJldmlz
aW9uIDM2Mjc1KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBJbXBsaWNpdEFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdAogICAgICAgICBhbmltYXRlZFN0eWxlID0gbmV3IChyZW5kZXJl
ci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRhcmdldFN0eWxlKTsKICAgICAKICAgICBk
b3VibGUgcHJvZyA9IHByb2dyZXNzKDEsIDApOwotICAgIGJvb2wgbmVlZHNBbmltID0gYmxlbmRQ
cm9wZXJ0aWVzKG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxl
LCBtX3RvU3R5bGUsIHByb2cpOworICAgIGJvb2wgbmVlZHNBbmltID0gYmxlbmRQcm9wZXJ0aWVz
KHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBt
X3RvU3R5bGUsIHByb2cpOwogICAgIGlmIChuZWVkc0FuaW0pCiAgICAgICAgIHNldEFuaW1hdGlu
ZygpOwogfQpAQCAtMTI1LDYgKzEyNSw5IEBAIHZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0
KFJlbmRlck9iamUKICAgICAvLyByZXN0YXJ0IHRoZSB0cmFuc2l0aW9uCiAgICAgaWYgKGZyb20g
JiYgdG8pCiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9SRVNUQVJUX0FO
SU1BVElPTiwgLTEpOworICAgICAgICAKKyAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBhbmltYXRp
b24gbGlzdAorICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCk7CiB9CiAKIHZvaWQg
SW1wbGljaXRBbmltYXRpb246OnNldE92ZXJyaWRkZW4oYm9vbCBiKQpAQCAtMTQ4LDcgKzE1MSw0
MyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjppc1RhcmdldFByb3BlcnR5CiB2b2lkIEltcGxp
Y2l0QW5pbWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKGludCBwcm9wLCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlKQogewogICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jlc3MoMSwgMCk7
Ci0gICAgYmxlbmRQcm9wZXJ0aWVzKHByb3AsIGN1cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUsIG1f
dG9TdHlsZSwgcHJvZyk7CisgICAgYmxlbmRQcm9wZXJ0aWVzKHRoaXMsIHByb3AsIGN1cnJlbnRT
dHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZyk7CiB9ICAgIAogICAgIAordm9pZCBJ
bXBsaWNpdEFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKQoreworICAg
IG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1f
ZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJm1fZnJvbVN0eWxlLT50cmFuc2Zvcm0o
KTsKKyAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0b1ZhbCA9ICZtX3RvU3R5bGUtPnRy
YW5zZm9ybSgpOworCisgICAgaWYgKHZhbC0+aXNFbXB0eSgpKQorICAgICAgICB2YWwgPSB0b1Zh
bDsKKworICAgIGlmICh2YWwtPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAvLyBTZWUgaWYgdGhlIGtleWZyYW1lcyBhcmUgdmFsaWQKKyAgICBpZiAodmFsICE9IHRv
VmFsKSB7CisgICAgICAgIC8vIEEgbGlzdCBvZiBsZW5ndGggMCBtYXRjaGVzIGFueXRoaW5nCisg
ICAgICAgIGlmICghdG9WYWwtPmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHNp
emVzIG9mIHRoZSBmdW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgdGhlIGxpc3RzIGRvbid0IG1h
dGNoCisgICAgICAgICAgICBpZiAodmFsLT5zaXplKCkgIT0gdG9WYWwtPnNpemUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIHR5cGVz
IG9mIGVhY2ggZnVuY3Rpb24gYXJlIG5vdCB0aGUgc2FtZSwgdGhlIGxpc3RzIGRvbid0IG1hdGNo
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHZhbC0+c2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXZhbC0+YXQoaiktPmlzU2FtZVR5cGUoKnRvVmFsLT5hdChq
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEtleWZyYW1lcyBhcmUgdmFsaWQKKyAgICBtX3RyYW5zZm9ybUZ1
bmN0aW9uTGlzdFZhbGlkID0gdHJ1ZTsKK30KKwogfQpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmlt
YXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkocmV2aXNpb24gMzYyNzUpCisrKyBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYg
Kzc5LDggQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIo
RG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlwZSk7ICAgIAogICAgIGJvb2wgc2Vu
ZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJpbmcmIGluRXZlbnRUeXBlLCBkb3VibGUg
aW5FbGFwc2VkVGltZSk7CiAgICAgCisgICAgdm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9u
TGlzdCgpOworCiBwcml2YXRlOgogICAgIGludCBtX3RyYW5zaXRpb25Qcm9wZXJ0eTsgICAvLyBU
cmFuc2l0aW9uIHByb3BlcnR5IGFzIHNwZWNpZmllZCBpbiB0aGUgUmVuZGVyU3R5bGUuIE1heSBi
ZSBjQW5pbWF0ZUFsbAogICAgIGludCBtX2FuaW1hdGluZ1Byb3BlcnR5OyAgICAvLyBTcGVjaWZp
YyBwcm9wZXJ0eSBmb3IgdGhpcyBJbXBsaWNpdEFuaW1hdGlvbgpJbmRleDogV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHJldmlzaW9uIDM2Mjc1KQorKysg
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDExICsyNywxMiBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgogI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5o
IgotI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwNiw3
ICsxMDcsNyBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0CiAKICAg
ICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fa2V5ZnJhbWVzLT5lbmRQcm9w
ZXJ0aWVzKCk7CiAgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9r
ZXlmcmFtZXMtPmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
aWYgKGJsZW5kUHJvcGVydGllcygqaXQsIGFuaW1hdGVkU3R5bGUsIGZyb21TdHlsZSwgdG9TdHls
ZSwgcHJvZykpCisgICAgICAgIGlmIChibGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRl
ZFN0eWxlLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2cpKQogICAgICAgICAgICAgc2V0QW5pbWF0
aW5nKCk7CiAgICAgfQogfQpAQCAtMTg5LDQgKzE5MCw1MiBAQCBib29sIEtleWZyYW1lQW5pbWF0
aW9uOjphZmZlY3RzUHJvcGVydHkoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpCit7CisgICAgbV90
cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCA9IGZhbHNlOworICAgIAorICAgIGlmICghbV9rZXlm
cmFtZXMuZ2V0KCkgfHwgbV9rZXlmcmFtZXMtPnNpemUoKSA8IDIgfHwgIW1fa2V5ZnJhbWVzLT5j
b250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBt
X2tleWZyYW1lcy0+ZW5kS2V5ZnJhbWVzKCk7CisKKyAgICAvLyBFbXB0eSB0cmFuc2Zvcm1zIG1h
dGNoIGFueXRoaW5nLCBzbyBmaW5kIHRoZSBmaXJzdCBub24tZW1wdHkgZW50cnkgYXMgdGhlIHJl
ZmVyZW5jZQorICAgIHNpemVfdCBmaXJzdEluZGV4ID0gMDsKKyAgICBWZWN0b3I8S2V5ZnJhbWVW
YWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGZpcnN0SXQgPSBlbmQ7CisgICAgCisgICAgZm9yIChWZWN0
b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMtPmJlZ2lu
S2V5ZnJhbWVzKCk7IGl0ICE9IGVuZDsgKytpdCwgKytmaXJzdEluZGV4KSB7CisgICAgICAgIGlm
IChpdC0+c3R5bGUudHJhbnNmb3JtKCkuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgZmlyc3RJ
dCA9IGl0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
aWYgKGZpcnN0SXQgPT0gZW5kKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJmZpcnN0SXQtPnN0eWxlLnRyYW5zZm9y
bSgpOworICAgIAorICAgIC8vIFNlZSBpZiB0aGUga2V5ZnJhbWVzIGFyZSB2YWxpZAorICAgIGZv
ciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGZpcnN0SXQrMTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZh
bCA9ICZpdC0+c3R5bGUudHJhbnNmb3JtKCk7CisgICAgICAgIAorICAgICAgICAvLyBBIG51bGwg
dHJhbnNmb3JtIG1hdGNoZXMgYW55dGhpbmcKKyAgICAgICAgaWYgKHZhbC0+aXNFbXB0eSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgc2l6ZXMg
b2YgdGhlIGZ1bmN0aW9uIGxpc3RzIGRvbid0IG1hdGNoLCB0aGUgbGlzdHMgZG9uJ3QgbWF0Y2gK
KyAgICAgICAgaWYgKGZpcnN0VmFsLT5zaXplKCkgIT0gdmFsLT5zaXplKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgdHlwZXMgb2YgZWFjaCBmdW5j
dGlvbiBhcmUgbm90IHRoZSBzYW1lLCB0aGUgbGlzdHMgZG9uJ3QgbWF0Y2gKKyAgICAgICAgZm9y
IChzaXplX3QgaiA9IDA7IGogPCBmaXJzdFZhbC0+c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAg
IGlmICghZmlyc3RWYWwtPmF0KGopLT5pc1NhbWVUeXBlKCp2YWwtPmF0KGopKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBLZXlmcmFtZXMgYXJl
IHZhbGlkCisgICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCA9IHRydWU7Cit9CisKIH0K
SW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgJKHJldmlz
aW9uIDM2Mjc1KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICAsIG1fbmFtZShh
bmltYXRpb24tPm5hbWUoKSkKICAgICAsIG1faW5kZXgoaW5kZXgpCiAgICAgeworICAgICAgICAv
LyBTZXQgdGhlIHRyYW5zZm9ybSBhbmltYXRpb24gbGlzdAorICAgICAgICB2YWxpZGF0ZVRyYW5z
Zm9ybUZ1bmN0aW9uTGlzdCgpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfktleWZyYW1lQW5pbWF0
aW9uKCkKQEAgLTYwLDYgKzYyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmFtZShjb25zdCBT
dHJpbmcmIHMpIHsgbV9uYW1lID0gczsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIGludCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KKyAgICB2b2lkIHNldEluZGV4KGludCBpKSB7IG1faW5kZXggPSBpOyB9CiAK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIApAQCAtNzYsNiArNzksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBzZW5kQW5pbWF0aW9u
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBpbkV2ZW50VHlwZSwgZG91YmxlIGluRWxhcHNlZFRp
bWUpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5
KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCk7
CiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGtleWZyYW1lcyB0aGF0IHdlIGFyZSBibGVuZGluZy4K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDM2Mjc1KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDE0LDI0
ICsyNDE0LDI0IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSgKICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25zIHRyYW5zZm9ybTsKICAgICBzd2l0Y2ggKHJlbmRlcmVyKCkt
PnN0eWxlKCktPmJveFJlZmxlY3QoKS0+ZGlyZWN0aW9uKCkpIHsKICAgICAgICAgY2FzZSBSZWZs
ZWN0aW9uQmVsb3c6Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgxMDAuLCBQZXJj
ZW50KSkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5i
b3hSZWZsZWN0KCktPm9mZnNldCgpKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMS4wLCAtMS4wKSk7CisgICAgICAgICAgICB0
cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCgwLCBGaXhlZCksIExlbmd0aCgxMDAuLCBQZXJjZW50KSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEUpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSwgcmVuZGVyZXIoKS0+c3R5bGUo
KS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEUp
KTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246
OmNyZWF0ZSgxLjAsIC0xLjAsIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkFib3ZlOgotICAgICAgICAg
ICAgdHJhbnNmb3JtLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDEuMCwg
LTEuMCkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMTAwLiwgUGVyY2VudCkp
KTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym94UmVm
bGVjdCgpLT5vZmZzZXQoKSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDEuMCwgLTEuMCwgU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aCgxMDAuLCBQZXJj
ZW50KSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEUpKTsKKyAgICAgICAgICAgIHRyYW5z
Zm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAs
IEZpeGVkKSwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKSwgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFJlZmxlY3Rpb25SaWdodDoKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEwMC4sIFBlcmNlbnQpLCBM
ZW5ndGgoMCwgRml4ZWQpKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxl
Y3QoKS0+b2Zmc2V0KCksIExlbmd0aCgwLCBGaXhlZCkpKTsKLSAgICAgICAgICAgIHRyYW5zZm9y
bS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgtMS4wLCAxLjApKTsKKyAg
ICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDEwMC4sIFBlcmNlbnQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShyZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hS
ZWZsZWN0KCktPm9mZnNldCgpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKC0xLjAsIDEuMCwgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OlND
QUxFKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uTGVmdDoK
LSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZSgtMS4wLCAxLjApKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEwMC4sIFBlcmNlbnQpLCBMZW5ndGgo
MCwgRml4ZWQpKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+
b2Zmc2V0KCksIExlbmd0aCgwLCBGaXhlZCkpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBl
bmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgtMS4wLCAxLjAsIFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uOjpTQ0FMRSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMTAwLiwgUGVyY2VudCksIExl
bmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7CisgICAgICAg
ICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCksIExlbmd0aCgwLCBG
aXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgbmV3U3R5bGUtPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gMzYyNzUpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgogCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9y
LmgiCkBAIC00NzIsMTIgKzQ3NCwxMiBAQCBib29sIFN0eWxlVHJhbnNmb3JtRGF0YTo6b3BlcmF0
b3I9PShjb25zCiAKIGJvb2wgVHJhbnNmb3JtT3BlcmF0aW9uczo6b3BlcmF0b3I9PShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zJiBvKSBjb25zdAogewotICAgIGlmIChtX29wZXJhdGlvbnMuc2l6
ZSgpICE9IG8ubV9vcGVyYXRpb25zLnNpemUoKSkKKyAgICBpZiAoc2l6ZSgpICE9IG8uc2l6ZSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgIHVuc2lnbmVkIHMgPSBtX29w
ZXJhdGlvbnMuc2l6ZSgpOworICAgIHVuc2lnbmVkIHMgPSBzaXplKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHM7IGkrKykgewotICAgICAgICBpZiAoKm1fb3BlcmF0aW9uc1tpXSAh
PSAqby5tX29wZXJhdGlvbnNbaV0pCisgICAgICAgIGlmICgqYXQoaSkgIT0gKm8uYXQoaSkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApAQCAtNDg2LDYyICs0ODgsNjIg
QEAgYm9vbCBUcmFuc2Zvcm1PcGVyYXRpb25zOjpvcGVyYXRvcj09KGNvbgogCiBQYXNzUmVmUHRy
PFRyYW5zZm9ybU9wZXJhdGlvbj4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9J
ZGVudGl0eSkKIHsKLSAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTY2FsZU9wZXJhdGlvbigpKQor
ICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKICAgICAgICAgcmV0dXJu
IHRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV94ICsgKDEuIC0gbV94KSAqIHByb2dyZXNz
LCBtX3kgKyAoMS4gLSBtX3kpICogcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX3ggKyAoMS4gLSBtX3gpICogcHJvZ3Jlc3MsIG1feSAr
ICgxLiAtIG1feSkgKiBwcm9ncmVzcywgbV90eXBlKTsKICAgICAKICAgICBjb25zdCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24qPihmcm9tKTsKICAgICBkb3VibGUgZnJvbVggPSBmcm9tT3AgPyBmcm9tT3At
Pm1feCA6IDEuOwogICAgIGRvdWJsZSBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogMS47
Ci0gICAgcmV0dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbVggKyAobV94
IC0gZnJvbVgpICogcHJvZ3Jlc3MsIGZyb21ZICsgKG1feSAtIGZyb21ZKSAqIHByb2dyZXNzKTsK
KyAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShmcm9tWCArIChtX3gg
LSBmcm9tWCkgKiBwcm9ncmVzcywgZnJvbVkgKyAobV95IC0gZnJvbVkpICogcHJvZ3Jlc3MsIG1f
dHlwZSk7CiB9CiAKIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKLSAgICBpZiAoZnJvbSAmJiAhZnJv
bS0+aXNSb3RhdGVPcGVyYXRpb24oKSkKKyAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlw
ZSgqdGhpcykpCiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIAogICAgIGlmIChibGVuZFRvSWRl
bnRpdHkpCi0gICAgICAgIHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSht
X2FuZ2xlIC0gbV9hbmdsZSAqIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIFJvdGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1fYW5nbGUgLSBtX2FuZ2xlICogcHJvZ3Jlc3MsIG1fdHlw
ZSk7CiAgICAgCiAgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBz
dGF0aWNfY2FzdDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKICAgICBk
b3VibGUgZnJvbUFuZ2xlID0gZnJvbU9wID8gZnJvbU9wLT5tX2FuZ2xlIDogMDsKLSAgICByZXR1
cm4gUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbUFuZ2xlICsgKG1fYW5nbGUg
LSBmcm9tQW5nbGUpICogcHJvZ3Jlc3MpOworICAgIHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShmcm9tQW5nbGUgKyAobV9hbmdsZSAtIGZyb21BbmdsZSkgKiBwcm9ncmVz
cywgbV90eXBlKTsKIH0KIAogUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91
YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKLSAgICBpZiAoZnJvbSAmJiAh
ZnJvbS0+aXNTa2V3T3BlcmF0aW9uKCkpCisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5
cGUoKnRoaXMpKQogICAgICAgICByZXR1cm4gdGhpczsKICAgICAKICAgICBpZiAoYmxlbmRUb0lk
ZW50aXR5KQotICAgICAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1f
YW5nbGVYIC0gbV9hbmdsZVggKiBwcm9ncmVzcywgbV9hbmdsZVkgLSBtX2FuZ2xlWSAqIHByb2dy
ZXNzKTsKKyAgICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX2Fu
Z2xlWCAtIG1fYW5nbGVYICogcHJvZ3Jlc3MsIG1fYW5nbGVZIC0gbV9hbmdsZVkgKiBwcm9ncmVz
cywgbV90eXBlKTsKICAgICAKICAgICBjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9t
T3AgPSBzdGF0aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJvbSk7CiAg
ICAgZG91YmxlIGZyb21BbmdsZVggPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGVYIDogMDsKICAg
ICBkb3VibGUgZnJvbUFuZ2xlWSA9IGZyb21PcCA/IGZyb21PcC0+bV9hbmdsZVkgOiAwOwotICAg
IHJldHVybiBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbUFuZ2xlWCArIChtX2Fu
Z2xlWCAtIGZyb21BbmdsZVgpICogcHJvZ3Jlc3MsIGZyb21BbmdsZVkgKyAobV9hbmdsZVkgLSBm
cm9tQW5nbGVZKSAqIHByb2dyZXNzKTsKKyAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlv
bjo6Y3JlYXRlKGZyb21BbmdsZVggKyAobV9hbmdsZVggLSBmcm9tQW5nbGVYKSAqIHByb2dyZXNz
LCBmcm9tQW5nbGVZICsgKG1fYW5nbGVZIC0gZnJvbUFuZ2xlWSkgKiBwcm9ncmVzcywgbV90eXBl
KTsKIH0KIAogUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFRyYW5zbGF0ZVRyYW5zZm9y
bU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUg
cHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQogewotICAgIGlmIChmcm9tICYmICFmcm9t
LT5pc1RyYW5zbGF0ZU9wZXJhdGlvbigpKQorICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVU
eXBlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9J
ZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3Jl
YXRlKExlbmd0aChtX3gudHlwZSgpKS5ibGVuZChtX3gsIHByb2dyZXNzKSwgTGVuZ3RoKG1feS50
eXBlKCkpLmJsZW5kKG1feSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aChtX3gudHlwZSgpKS5ibGVuZChtX3gsIHBy
b2dyZXNzKSwgTGVuZ3RoKG1feS50eXBlKCkpLmJsZW5kKG1feSwgcHJvZ3Jlc3MpLCBtX3R5cGUp
OwogCiAgICAgY29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0
aWNfY2FzdDxjb25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKICAgICBM
ZW5ndGggZnJvbVggPSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6IExlbmd0aChtX3gudHlwZSgpKTsK
ICAgICBMZW5ndGggZnJvbVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1feSA6IExlbmd0aChtX3kudHlw
ZSgpKTsKLSAgICByZXR1cm4gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV94
LmJsZW5kKGZyb21YLCBwcm9ncmVzcyksIG1feS5ibGVuZChmcm9tWSwgcHJvZ3Jlc3MpKTsKKyAg
ICByZXR1cm4gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV94LmJsZW5kKGZy
b21YLCBwcm9ncmVzcyksIG1feS5ibGVuZChmcm9tWSwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogfQog
CiBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
OjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywg
Ym9vbCBibGVuZFRvSWRlbnRpdHkpCiB7Ci0gICAgaWYgKGZyb20gJiYgIWZyb20tPmlzTWF0cml4
T3BlcmF0aW9uKCkpCisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQog
ICAgICAgICByZXR1cm4gdGhpczsKIAogICAgIC8vIGNvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJh
dGlvbnMgaW50byBtYXRyaWNlcwpAQCAtMTY5Miw3ICsxNjk0LDEwIEBAIHZvaWQgUmVuZGVyU3R5
bGU6OmFwcGx5VHJhbnNmb3JtKEFmZmluZVQKICAgICB1bnNpZ25lZCBpOwogICAgIGlmIChpbmNs
dWRlVHJhbnNmb3JtT3JpZ2luKSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyBpKyspIHsK
LSAgICAgICAgICAgIGlmICghcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5tX29w
ZXJhdGlvbnNbaV0tPmlzVHJhbnNsYXRlT3BlcmF0aW9uKCkpIHsKKyAgICAgICAgICAgIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlID0gcmFyZU5vbkluaGVyaXRlZERhdGEt
Pm1fdHJhbnNmb3JtLT5tX29wZXJhdGlvbnNbaV0tPmdldE9wZXJhdGlvblR5cGUoKTsKKyAgICAg
ICAgICAgIGlmICh0eXBlICE9IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1ggJiYgCisg
ICAgICAgICAgICAgICAgICAgIHR5cGUgIT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WSAmJiAKKyAgICAgICAgICAgICAgICAgICAgdHlwZSAhPSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURSkgewogICAgICAgICAgICAgICAgIGFwcGx5VHJhbnNmb3JtT3JpZ2luID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMzYyNzUpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTUsMTU3ICs2MTUs
MjE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFRyYW5zZm9ybU9wZXJhdGlvbj4gewogcHVibGljOgorICAgIGVudW0gT3BlcmF0aW9u
VHlwZSB7IFNDQUxFX1gsIFNDQUxFX1ksIFNDQUxFLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBUUkFOU0xBVEVfWCwgVFJBTlNMQVRFX1ksIFRSQU5TTEFURSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgUk9UQVRFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBTS0VXX1gsIFNLRVdf
WSwgU0tFVywgCisgICAgICAgICAgICAgICAgICAgICAgICAgTUFUUklYLCBJREVOVElUWSwgTk9O
RQorICAgICAgICAgICAgICAgICAgICAgICB9OworICAgIAogICAgIHZpcnR1YWwgflRyYW5zZm9y
bU9wZXJhdGlvbigpIHsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0ID0gMDsKICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9
CisgICAgCisgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgSW50U2l6ZSYgYm9yZGVy
Qm94U2l6ZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mLCBj
b25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdCA9IDA7CiAgICAgCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFs
c2UpID0gMDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTY2FsZU9wZXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUm90YXRlT3BlcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTa2V3T3BlcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc2xhdGVP
cGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc01h
dHJpeE9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBPcGVy
YXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorfTsKKworY2xhc3MgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMg
VHJhbnNmb3JtT3BlcmF0aW9uCit7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SWRl
bnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uKCkpOworICAgIH0KKyAgICAg
ICAgCisgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBJREVOVElUWTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0g
SURFTlRJVFk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbiYgbykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1NhbWVUeXBlKG8p
OworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3Jt
T3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBw
cm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBJZGVudGl0eVRyYW5zZm9ybU9wZXJh
dGlvbigpCisgICAgeworICAgIH0KKwogfTsKIAogY2xhc3MgU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBzeCwgZG91Ymxl
IHN5KQorICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
PiBjcmVhdGUoZG91YmxlIHN4LCBkb3VibGUgc3ksIE9wZXJhdGlvblR5cGUgdHlwZSkKICAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oc3gs
IHN5KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24oc3gsIHN5LCB0eXBlKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGlzU2NhbGVPcGVy
YXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzSWRlbnRp
dHkoKSBjb25zdCB7IHJldHVybiBtX3ggPT0gMSAmJiAgbV95ID09IDE7IH0KKyAgICB2aXJ0dWFs
IE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYg
bykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gbV90eXBlOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNv
bnN0CiAgICAgewotICAgICAgICBpZiAoby5pc1NjYWxlT3BlcmF0aW9uKCkpIHsKLSAgICAgICAg
ICAgIGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBzID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7Ci0gICAgICAgICAgICByZXR1cm4gbV94ID09
IHMtPm1feCAmJiBtX3kgPT0gcy0+bV95OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFpc1NhbWVUeXBlKG8pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogcyA9IHN0YXRpY19jYXN0
PGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOworICAgICAgICByZXR1cm4gbV94
ID09IHMtPm1feCAmJiBtX3kgPT0gcy0+bV95OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBh
cHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94
U2l6ZSkKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0CiAgICAgewogICAgICAgICB0cmFu
c2Zvcm0uc2NhbGUobV94LCBtX3kpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50
aXR5ID0gZmFsc2UpOwogCiBwcml2YXRlOgotICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKGRv
dWJsZSBzeCwgZG91YmxlIHN5KQotICAgICAgICA6IG1feChzeCksIG1feShzeSkKKyAgICBTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgc3gsIGRvdWJsZSBzeSwgT3BlcmF0aW9uVHlwZSB0
eXBlKQorICAgICAgICA6IG1feChzeCksIG1feShzeSksIG1fdHlwZSh0eXBlKQogICAgIHsKICAg
ICB9CiAgICAgICAgIAogICAgIGRvdWJsZSBtX3g7CiAgICAgZG91YmxlIG1feTsKKyAgICBPcGVy
YXRpb25UeXBlIG1fdHlwZTsKIH07CiAKIGNsYXNzIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiA6
IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGRvdWJsZSBhbmdsZSkKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUg
YW5nbGUsIE9wZXJhdGlvblR5cGUgdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGFuZ2xlKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGFuZ2xlLCB0eXBlKSk7CiAgICAg
fQogCi0gICAgdmlydHVhbCBib29sIGlzUm90YXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9h
bmdsZSA9PSAwOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9u
VHlwZSgpID09IG1fdHlwZTsgfQogCiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKG8uaXNSb3Rh
dGVPcGVyYXRpb24oKSkgewotICAgICAgICAgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uKiByID0gc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8p
OwotICAgICAgICAgICAgcmV0dXJuIG1fYW5nbGUgPT0gci0+bV9hbmdsZTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uKiByID0gc3RhdGljX2Nhc3Q8Y29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8p
OworICAgICAgICByZXR1cm4gbV9hbmdsZSA9PSByLT5tX2FuZ2xlOwogICAgIH0KICAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IElu
dFNpemUmIGJvcmRlckJveFNpemUpCisgICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAogICAg
IHsKICAgICAgICAgdHJhbnNmb3JtLnJvdGF0ZShtX2FuZ2xlKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+
IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBi
b29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKICAgICAKKyAgICBkb3VibGUgYW5nbGUoKSBj
b25zdCB7IHJldHVybiBtX2FuZ2xlOyB9CisKIHByaXZhdGU6Ci0gICAgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKGRvdWJsZSBhbmdsZSkKLSAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKQorICAgIFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgYW5nbGUsIE9wZXJhdGlvblR5cGUgdHlwZSkK
KyAgICAgICAgOiBtX2FuZ2xlKGFuZ2xlKSwgbV90eXBlKHR5cGUpCiAgICAgewogICAgIH0KIAog
ICAgIGRvdWJsZSBtX2FuZ2xlOworICAgIE9wZXJhdGlvblR5cGUgbV90eXBlOwogfTsKIAogY2xh
c3MgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+IGNy
ZWF0ZShkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5n
bGVZLCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oYW5nbGVYLCBhbmdsZVkpKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGFuZ2xlWCwgYW5nbGVZLCB0
eXBlKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGlzU2tld09wZXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fYW5nbGVYID09IDAgJiYgbV9hbmdsZVkgPT0gMDsgfQorICAgIHZpcnR1YWwgT3Bl
cmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBj
b25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QK
ICAgICB7Ci0gICAgICAgIGlmICghby5pc1NrZXdPcGVyYXRpb24oKSkKKyAgICAgICAgaWYgKCFp
c1NhbWVUeXBlKG8pKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjb25zdCBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBzID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2tld1RyYW5zZm9y
bU9wZXJhdGlvbio+KCZvKTsKICAgICAgICAgcmV0dXJuIG1fYW5nbGVYID09IHMtPm1fYW5nbGVY
ICYmIG1fYW5nbGVZID09IHMtPm1fYW5nbGVZOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBh
cHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94
U2l6ZSkKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0CiAgICAgewogICAgICAgICB0cmFu
c2Zvcm0uc2tldyhtX2FuZ2xlWCwgbV9hbmdsZVkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5ID0gZmFsc2UpOwogICAgIAogcHJpdmF0ZToKLSAgICBTa2V3VHJhbnNmb3Jt
T3BlcmF0aW9uKGRvdWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVkpCi0gICAgICAgIDogbV9hbmds
ZVgoYW5nbGVYKSwgbV9hbmdsZVkoYW5nbGVZKQorICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24o
ZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSwgT3BlcmF0aW9uVHlwZSB0eXBlKQorICAgICAg
ICA6IG1fYW5nbGVYKGFuZ2xlWCksIG1fYW5nbGVZKGFuZ2xlWSksIG1fdHlwZSh0eXBlKQogICAg
IHsKICAgICB9CiAgICAgCiAgICAgZG91YmxlIG1fYW5nbGVYOwogICAgIGRvdWJsZSBtX2FuZ2xl
WTsKKyAgICBPcGVyYXRpb25UeXBlIG1fdHlwZTsKIH07CiAKIGNsYXNzIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNv
bnN0IExlbmd0aCYgdHgsIGNvbnN0IExlbmd0aCYgdHkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoY29uc3QgTGVuZ3RoJiB0eCwgY29u
c3QgTGVuZ3RoJiB0eSwgT3BlcmF0aW9uVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24odHgsIHR5KSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKHR4LCB0
eSwgdHlwZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1RyYW5zbGF0ZU9wZXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgp
IGNvbnN0IHsgcmV0dXJuIG1feC5jYWxjRmxvYXRWYWx1ZSgxKSA9PSAwICYmIG1feS5jYWxjRmxv
YXRWYWx1ZSgxKSA9PSAwOyB9CisgICAgdmlydHVhbCBPcGVyYXRpb25UeXBlIGdldE9wZXJhdGlv
blR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1l
VHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3Bl
cmF0aW9uVHlwZSgpID09IG1fdHlwZTsgfQogCiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFv
LmlzVHJhbnNsYXRlT3BlcmF0aW9uKCkpCisgICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY29uc3QgVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKiB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uKj4oJm8pOwogICAgICAgICByZXR1cm4gbV94ID09IHQtPm1feCAmJiBtX3kgPT0gdC0+bV95
OwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkKKyAgICB2aXJ0dWFsIGJvb2wgYXBw
bHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNp
emUpIGNvbnN0CiAgICAgewogICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKG1feC5jYWxjRmxv
YXRWYWx1ZShib3JkZXJCb3hTaXplLndpZHRoKCkpLCBtX3kuY2FsY0Zsb2F0VmFsdWUoYm9yZGVy
Qm94U2l6ZS5oZWlnaHQoKSkpOworICAgICAgICByZXR1cm4gbV94LnR5cGUoKSA9PSBQZXJjZW50
IHx8IG1feS50eXBlKCkgPT0gUGVyY2VudDsKICAgICB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7CiAKIHBy
aXZhdGU6Ci0gICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKGNvbnN0IExlbmd0aCYgdHgs
IGNvbnN0IExlbmd0aCYgdHkpCi0gICAgICAgIDogbV94KHR4KSwgbV95KHR5KQorICAgIFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5
LCBPcGVyYXRpb25UeXBlIHR5cGUpCisgICAgICAgIDogbV94KHR4KSwgbV95KHR5KSwgbV90eXBl
KHR5cGUpCiAgICAgewogICAgIH0KIAogICAgIExlbmd0aCBtX3g7CiAgICAgTGVuZ3RoIG1feTsK
KyAgICBPcGVyYXRpb25UeXBlIG1fdHlwZTsKIH07CiAKIGNsYXNzIE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24gewpAQCAtNzc1LDIxICs4MzIsMjQg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbihhLCBiLCBjLCBkLCBlLCBmKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGlz
TWF0cml4T3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gbV9hID09IDEgJiYgbV9iID09IDAgJiYgbV9j
ID09IDAgJiYgbV9kID09IDEgJiYgbV9lID09IDAgJiYgbV9mID09IDA7IH0KKyAgICB2aXJ0dWFs
IE9wZXJhdGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIE1BVFJJWDsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYg
bykgY29uc3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gTUFUUklYOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNv
bnN0CiAgICAgewotICAgICAgICBpZiAoby5pc01hdHJpeE9wZXJhdGlvbigpKSB7Ci0gICAgICAg
ICAgICBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIG0gPSBzdGF0aWNfY2FzdDxjb25z
dCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7Ci0gICAgICAgICAgICByZXR1cm4gbV9h
ID09IG0tPm1fYSAmJiBtX2IgPT0gbS0+bV9iICYmIG1fYyA9PSBtLT5tX2MgJiYgbV9kID09IG0t
Pm1fZCAmJiBtX2UgPT0gbS0+bV9lICYmIG1fZiA9PSBtLT5tX2Y7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
KiBtID0gc3RhdGljX2Nhc3Q8Y29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOwor
ICAgICAgICByZXR1cm4gbV9hID09IG0tPm1fYSAmJiBtX2IgPT0gbS0+bV9iICYmIG1fYyA9PSBt
LT5tX2MgJiYgbV9kID09IG0tPm1fZCAmJiBtX2UgPT0gbS0+bV9lICYmIG1fZiA9PSBtLT5tX2Y7
CiAgICAgfQogCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKQorICAgIHZpcnR1YWwgYm9vbCBhcHBs
eShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6
ZSkgY29uc3QKICAgICB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9hLCBtX2Is
IG1fYywgbV9kLCBtX2UsIG1fZik7CiAgICAgICAgIHRyYW5zZm9ybSA9IG1hdHJpeCAqIHRyYW5z
Zm9ybTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiog
ZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKQEAg
LTgwOCwxOCArODY4LDI0IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fZjsKIH07CiAKLWNsYXNz
IFRyYW5zZm9ybU9wZXJhdGlvbnMgeworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9ucyA6IHB1Ymxp
YyBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPiB7CiBwdWJsaWM6CisgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyhib29sIG1ha2VJZGVudGl0eSA9IGZhbHNlKQorICAgIHsKKyAgICAg
ICAgaWYgKG1ha2VJZGVudGl0eSkKKyAgICAgICAgICAgIGFwcGVuZChJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKCkpOworICAgIH0KKyAgICAKICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvKSBjb25zdCB7CiAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG8pOwogICAgIH0KICAgICAKLSAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX29wZXJhdGlvbnMuaXNFbXB0eSgpOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX29wZXJhdGlvbnMuc2l6ZSgpOyB9Ci0gICAgY29uc3QgUmVmUHRyPFRyYW5zZm9ybU9w
ZXJhdGlvbj4mIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9u
cy5hdChpKTsgfQotCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgUmVmUHRyPFRyYW5zZm9ybU9wZXJh
dGlvbj4mIG9wKSB7IHJldHVybiBtX29wZXJhdGlvbnMuYXBwZW5kKG9wKTsgfQorICAgIHZvaWQg
YXBwbHkoY29uc3QgSW50U2l6ZSYgc3osIEFmZmluZVRyYW5zZm9ybSYgdCkgY29uc3QKKyAgICB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKKyAgICAgICAg
ICAgIGF0KGkpLT5hcHBseSh0LCBzeik7CisgICAgfQogCiBwcml2YXRlOgogICAgIFZlY3RvcjxS
ZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+IG1fb3BlcmF0aW9uczsKQEAgLTI0NjcsNiArMjUz
Myw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNsZWFyKCkgeyBtX2tleWZyYW1lcy5jbGVh
cigpOyBtX3Byb3BlcnRpZXMuY2xlYXIoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5ZnJhbWVzLmlzRW1wdHkoKTsgfQorICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9rZXlmcmFtZXMuc2l6ZSgpOyB9CiAgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+
Ojpjb25zdF9pdGVyYXRvciBiZWdpbktleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJh
bWVzLmJlZ2luKCk7IH0KICAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9y
IGVuZEtleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmVuZCgpOyB9CiAKSW5k
ZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDM2MzIyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDktMTAgIENocmlzIE1hcnJpbiAgPGNtYXJy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIE1ha2UgdHJhbnNmb3JtIGFuaW1hdGlvbiBiZWhhdmlvciBtYXRjaCBzcGVjCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDc3MAorCisgICAg
ICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2gtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRj
aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zZm9ybS1v
cC1saXN0LW5vLW1hdGNoLmh0bWw6IEFkZGVkLgorCiAyMDA4LTA5LTEwICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KSW5kZXg6IExheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNo
LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1tYXRjaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQm94IHNob3VsZCBzcGluIDU0MCBkZWdyZWVzIGJl
Y2F1c2UgdGhhdCBpcyB0aGUgc3BlY2lmaWVkIHJvdGF0aW9uIGFuZCB0aGUgdHJhbnNmb3JtIG9w
ZXJhdGlvbiBsaXN0cyBtYXRjaCwgc28gd2Ugc2hvdWxkIGFuaW1hdGUgZWFjaCBvcGVyYXRpb24g
c2VwYXJhdGVseS4KKworUEFTUwpJbmRleDogTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNm
b3JtLW9wLWxpc3QtbWF0Y2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4OSBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1s
NC9sb29zZS5kdGQiPgorCis8aHRtbCBsYW5nPSJlbiI+Cis8aGVhZD4KKyAgPG1ldGEgaHR0cC1l
cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgor
ICA8dGl0bGU+VHJhbnNpdGlvbiBCZXR3ZWVuIFRyYW5zZm9ybSBPcGVyYXRpb24gTGlzdHMgV2hp
Y2ggTWF0Y2g8L3RpdGxlPgorICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4i
PgorICAgICNib3ggeworICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICAgIHdpZHRoOiAxMDBweDsK
KyAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7CisgICAgICAtd2Via2l0LXRyYW5zZm9ybTog
dHJhbnNsYXRlWCgwcHgpIHJvdGF0ZSgwZGVnKTsKKyAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1k
dXJhdGlvbjogMnM7CisgICAgICAtd2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBs
aW5lYXI7CisgICAgICAtd2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHk6IC13ZWJraXQtdHJhbnNm
b3JtOworICAgIH0KKyAgPC9zdHlsZT4KKyAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
IGNoYXJzZXQ9InV0Zi04Ij4KKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHJlc3VsdCA9
ICJQQVNTIjsKKyAgICBjb25zdCBkZWZhdWx0VG9sZXJhbmNlID0gMTA7CisgICAgCisgICAgZnVu
Y3Rpb24gaXNFcXVhbChhY3R1YWwsIGRlc2lyZWQsIHRvbGVyYW5jZSkKKyAgICB7CisgICAgICAg
IGlmICh0b2xlcmFuY2UgPT0gdW5kZWZpbmVkIHx8IHRvbGVyYW5jZSA9PSAwKQorICAgICAgICAg
ICAgdG9sZXJhbmNlID0gZGVmYXVsdFRvbGVyYW5jZTsKKyAgICAgICAgdmFyIGRpZmYgPSBNYXRo
LmFicyhhY3R1YWwgLSBkZXNpcmVkKTsKKyAgICAgICAgcmV0dXJuIGRpZmYgPCB0b2xlcmFuY2U7
CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGNoYW5nZVZhbHVlcygpCisgICAgeworICAgICAg
ICB2YXIgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpOworICAgICAgICBib3gu
c3R5bGUud2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uID0gIjAuMXMiOworICAgIH0KKyAgICAKKyAg
ICBmdW5jdGlvbiBjaGVjayhleHBlY3RlZCkKKyAgICB7CisgICAgICAgIGlmIChyZXN1bHQgIT0g
IlBBU1MiKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIHZhciB0
ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcp
KS53ZWJraXRUcmFuc2Zvcm07CisgICAgICAgIHZhciBhID0gdC5zcGxpdCgiKCIpOworICAgICAg
ICBhID0gYVsxXS5zcGxpdCgiLCIpOworICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmFjb3MoYVsw
XSkgKiAxODAgLyBNYXRoLlBJOworICAgICAgICBpZiAoIWlzRXF1YWwoYW5nbGUsIGV4cGVjdGVk
KSkKKyAgICAgICAgICAgIHJlc3VsdCA9ICJGQUlMKHdhczoiK3QubTQxKyIsIHMvYjowKSI7Cisg
ICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHN0YXJ0VGltZW91dCgpCisgICAgeworICAgICAgICBz
ZXRUaW1lb3V0KCJjaGVjaygxMzUpIiwgNTAwKTsKKyAgICAgICAgc2V0VGltZW91dCgiY2hlY2so
OTApIiwgMTAwMCk7CisgICAgICAgIAorICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5pbm5l
ckhUTUwgPSByZXN1bHQ7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgfSwgMTEwMCk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHN0YXJ0KCkKKyAg
ICB7CisgICAgICAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94Jyk7Cisg
ICAgICAgIGJveC5zdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSAndHJhbnNsYXRlWCgwcHgpIHJvdGF0
ZSg1NDBkZWcpJzsKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoInN0YXJ0VGltZW91dCgpIiwg
MCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc3Rh
cnQsIGZhbHNlKTsKKyAgICAKKyAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHA+CitC
b3ggc2hvdWxkIHNwaW4gNTQwIGRlZ3JlZXMgYmVjYXVzZSB0aGF0IGlzIHRoZSBzcGVjaWZpZWQg
cm90YXRpb24gYW5kIHRoZSB0cmFuc2Zvcm0gb3BlcmF0aW9uIGxpc3RzIG1hdGNoLAorc28gd2Ug
c2hvdWxkIGFuaW1hdGUgZWFjaCBvcGVyYXRpb24gc2VwYXJhdGVseS4KKzwvcD4KKzxkaXYgaWQ9
ImJveCI+Cis8L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdCI+Cis8L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1h
dGNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90
cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorQm94IHNob3VsZCBzcGluIG9ubHkg
MTgwIGRlZ3JlZXMgZXZlbiB0aG91Z2ggdGhlIG9wZXJhdGlvbiBzcGVjaWZpZXMgYSAwIHRvIDU0
MCBkZWdyZWUgYW5pbWF0aW9uLiBUaGlzIGlzIGJlY2F1c2UgdGhlIG9wZXJhdGlvbiBsaXN0cyBk
b24ndCBtYXRjaCwgc28gaXQgZmFsbHMgYmFjayB0byBtYXRyaXggYW5pbWF0aW9uLCB3aGljaCBu
b3JtYWxpemVzIHRoZSBhbmdsZSB0byBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzLgorCitQQVNT
CkluZGV4OiBMYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRj
aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1v
cC1saXN0LW5vLW1hdGNoLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkwIEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBU
cmFuc2l0aW9uYWwvL0VOIgorICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0
ZCI+CisKKzxodG1sIGxhbmc9ImVuIj4KKzxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJDb250
ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+CisgIDx0aXRsZT5U
cmFuc2l0aW9uIEJldHdlZW4gVHJhbnNmb3JtIE9wZXJhdGlvbiBMaXN0cyBXaGljaCBEb24ndCBN
YXRjaDwvdGl0bGU+CisgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+Cisg
ICAgI2JveCB7CisgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgd2lkdGg6IDEwMHB4OworICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogYmx1ZTsKKyAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFu
c2xhdGVYKDBweCkgcm90YXRlKDBkZWcpOworICAgICAgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0
aW9uOiAyczsKKyAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVh
cjsKKyAgICAgIC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTogLXdlYmtpdC10cmFuc2Zvcm07
CisgICAgfQorICA8L3N0eWxlPgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hh
cnNldD0idXRmLTgiPgorICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgcmVzdWx0ID0gIlBB
U1MiOworICAgIGNvbnN0IGRlZmF1bHRUb2xlcmFuY2UgPSAxMDsKKyAgICAKKyAgICBmdW5jdGlv
biBpc0VxdWFsKGFjdHVhbCwgZGVzaXJlZCwgdG9sZXJhbmNlKQorICAgIHsKKyAgICAgICAgaWYg
KHRvbGVyYW5jZSA9PSB1bmRlZmluZWQgfHwgdG9sZXJhbmNlID09IDApCisgICAgICAgICAgICB0
b2xlcmFuY2UgPSBkZWZhdWx0VG9sZXJhbmNlOworICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJz
KGFjdHVhbCAtIGRlc2lyZWQpOworICAgICAgICByZXR1cm4gZGlmZiA8IHRvbGVyYW5jZTsKKyAg
ICB9CisgICAgCisgICAgZnVuY3Rpb24gY2hhbmdlVmFsdWVzKCkKKyAgICB7CisgICAgICAgIHZh
ciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94Jyk7CisgICAgICAgIGJveC5zdHls
ZS53ZWJraXRUcmFuc2l0aW9uRHVyYXRpb24gPSAiMC4xcyI7CisgICAgfQorICAgIAorICAgIGZ1
bmN0aW9uIGNoZWNrKGV4cGVjdGVkKQorICAgIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSAiUEFT
UyIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgdmFyIHQgPSB3
aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm94JykpLndl
YmtpdFRyYW5zZm9ybTsKKyAgICAgICAgdmFyIGEgPSB0LnNwbGl0KCIoIik7CisgICAgICAgIGEg
PSBhWzFdLnNwbGl0KCIsIik7CisgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYWNvcyhhWzBdKSAq
IDE4MCAvIE1hdGguUEk7CisgICAgICAgIGlmICghaXNFcXVhbChhbmdsZSwgZXhwZWN0ZWQpKQor
ICAgICAgICAgICAgcmVzdWx0ID0gIkZBSUwod2FzOiIrdC5tNDErIiwgcy9iOjApIjsKKyAgICB9
CisgICAgCisgICAgZnVuY3Rpb24gc3RhcnRUaW1lb3V0KCkKKyAgICB7CisgICAgICAgIHNldFRp
bWVvdXQoImNoZWNrKDQ1KSIsIDUwMCk7CisgICAgICAgIHNldFRpbWVvdXQoImNoZWNrKDkwKSIs
IDEwMDApOworICAgICAgICAKKyAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0JykuaW5uZXJIVE1M
ID0gcmVzdWx0OworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
ICAgIH0sIDExMDApOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBzdGFydCgpCisgICAgewor
ICAgICAgICB2YXIgYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JveCcpOworICAgICAg
ICBib3guc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ3JvdGF0ZSg1NDBkZWcpJzsKKyAgICAgICAg
d2luZG93LnNldFRpbWVvdXQoInN0YXJ0VGltZW91dCgpIiwgMCk7CisgICAgfQorICAgIAorICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgc3RhcnQsIGZhbHNlKTsKKyAgICAKKyAg
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHA+CitCb3ggc2hvdWxkIHNwaW4gb25seSAx
ODAgZGVncmVlcyBldmVuIHRob3VnaCB0aGUgb3BlcmF0aW9uIHNwZWNpZmllcyBhIDAgdG8gNTQw
IGRlZ3JlZSBhbmltYXRpb24uCitUaGlzIGlzIGJlY2F1c2UgdGhlIG9wZXJhdGlvbiBsaXN0cyBk
b24ndCBtYXRjaCwgc28gaXQgZmFsbHMgYmFjayB0byBtYXRyaXggYW5pbWF0aW9uLCB3aGljaCAK
K25vcm1hbGl6ZXMgdGhlIGFuZ2xlIHRvIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXMuCis8L3A+
Cis8ZGl2IGlkPSJib3giPgorPC9kaXY+Cis8ZGl2IGlkPSJyZXN1bHQiPgorPC9kaXY+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="10399"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23382</attachid>
            <date>2008-09-12 17:09:49 -0700</date>
            <delta_ts>2008-09-12 17:09:49 -0700</delta_ts>
            <desc>Replacement patch - now against changelist 36358</desc>
            <filename>20770.patch</filename>
            <type>text/plain</type>
            <size>62819</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDM2MzU4KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDA2LDI0
ICsyNDA2LDI0IEBACiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2Zvcm07CiAgICAgc3dp
dGNoIChyZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpKSB7CiAg
ICAgICAgIGNhc2UgUmVmbGVjdGlvbkJlbG93OgotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQpLCBM
ZW5ndGgoMTAwLiwgUGVyY2VudCkpKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSwgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKSkpOwotICAgICAgICAgICAgdHJh
bnNmb3JtLmFwcGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDEuMCwgLTEuMCkp
OworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMTAwLiwgUGVyY2VudCksIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5k
KFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIHJl
bmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCksIFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMS4wLCAtMS4wLCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bjo6U0NBTEUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rpb25B
Ym92ZToKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b246OmNyZWF0ZSgxLjAsIC0xLjApKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3Ro
KDEwMC4sIFBlcmNlbnQpKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIHJlbmRlcmVyKCkt
PnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHRyYW5zZm9y
bS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgxLjAsIC0xLjAsIFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQpLCBM
ZW5ndGgoMTAwLiwgUGVyY2VudCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7Cisg
ICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6
Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3Qo
KS0+b2Zmc2V0KCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBSZWZsZWN0aW9uUmlnaHQ6Ci0gICAgICAgICAgICB0cmFu
c2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgx
MDAuLCBQZXJjZW50KSwgTGVuZ3RoKDAsIEZpeGVkKSkpOwotICAgICAgICAgICAgdHJhbnNmb3Jt
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShyZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3hSZWZsZWN0KCktPm9mZnNldCgpLCBMZW5ndGgoMCwgRml4ZWQpKSk7Ci0gICAg
ICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
LTEuMCwgMS4wKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgxMDAuLCBQZXJjZW50KSwgTGVuZ3RoKDAsIEZp
eGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEUpKTsKKyAgICAgICAgICAgIHRyYW5z
Zm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocmVuZGVyZXIo
KS0+c3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEUpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBl
bmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgtMS4wLCAxLjAsIFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uOjpTQ0FMRSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
UmVmbGVjdGlvbkxlZnQ6Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoLTEuMCwgMS4wKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0u
YXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgxMDAuLCBQ
ZXJjZW50KSwgTGVuZ3RoKDAsIEZpeGVkKSkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVu
ZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShyZW5kZXJlcigpLT5zdHlsZSgp
LT5ib3hSZWZsZWN0KCktPm9mZnNldCgpLCBMZW5ndGgoMCwgRml4ZWQpKSk7CisgICAgICAgICAg
ICB0cmFuc2Zvcm0uYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoLTEuMCwg
MS4wLCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEUpKTsKKyAgICAgICAgICAgIHRyYW5z
Zm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEw
MC4sIFBlcmNlbnQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5T
TEFURSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZShyZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hSZWZsZWN0KCktPm9mZnNl
dCgpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIG5ld1N0eWxlLT5zZXRUcmFuc2Zvcm0odHJh
bnNmb3JtKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJl
dmlzaW9uIDM2MzU4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKIAorI2luY2x1ZGUgPGFsZ29yaXRobT4KKwogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkZvbnRTZWxlY3Rvci5oIgpAQCAtNDcyLDEyICs0NzQsMTIgQEAKIAogYm9vbCBUcmFuc2Zv
cm1PcGVyYXRpb25zOjpvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNv
bnN0CiB7Ci0gICAgaWYgKG1fb3BlcmF0aW9ucy5zaXplKCkgIT0gby5tX29wZXJhdGlvbnMuc2l6
ZSgpKQorICAgIGlmIChzaXplKCkgIT0gby5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCi0gICAgdW5zaWduZWQgcyA9IG1fb3BlcmF0aW9ucy5zaXplKCk7CisgICAgdW5z
aWduZWQgcyA9IHNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgczsgaSsrKSB7
Ci0gICAgICAgIGlmICgqbV9vcGVyYXRpb25zW2ldICE9ICpvLm1fb3BlcmF0aW9uc1tpXSkKKyAg
ICAgICAgaWYgKCphdChpKSAhPSAqby5hdChpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCkBAIC00ODYsNjIgKzQ4OCw2MiBAQAogCiBQYXNzUmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9y
bU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkK
IHsKLSAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTY2FsZU9wZXJhdGlvbigpKQorICAgIGlmIChm
cm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAg
ICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIFNjYWxlVHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUobV94ICsgKDEuIC0gbV94KSAqIHByb2dyZXNzLCBtX3kgKyAo
MS4gLSBtX3kpICogcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb246OmNyZWF0ZShtX3ggKyAoMS4gLSBtX3gpICogcHJvZ3Jlc3MsIG1feSArICgxLiAtIG1f
eSkgKiBwcm9ncmVzcywgbV90eXBlKTsKICAgICAKICAgICBjb25zdCBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24qPihmcm9tKTsKICAgICBkb3VibGUgZnJvbVggPSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6IDEu
OwogICAgIGRvdWJsZSBmcm9tWSA9IGZyb21PcCA/IGZyb21PcC0+bV95IDogMS47Ci0gICAgcmV0
dXJuIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbVggKyAobV94IC0gZnJvbVgp
ICogcHJvZ3Jlc3MsIGZyb21ZICsgKG1feSAtIGZyb21ZKSAqIHByb2dyZXNzKTsKKyAgICByZXR1
cm4gU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShmcm9tWCArIChtX3ggLSBmcm9tWCkg
KiBwcm9ncmVzcywgZnJvbVkgKyAobV95IC0gZnJvbVkpICogcHJvZ3Jlc3MsIG1fdHlwZSk7CiB9
CiAKIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNz
LCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKLSAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNSb3Rh
dGVPcGVyYXRpb24oKSkKKyAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNTYW1lVHlwZSgqdGhpcykp
CiAgICAgICAgIHJldHVybiB0aGlzOwogICAgIAogICAgIGlmIChibGVuZFRvSWRlbnRpdHkpCi0g
ICAgICAgIHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX2FuZ2xlIC0g
bV9hbmdsZSAqIHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKG1fYW5nbGUgLSBtX2FuZ2xlICogcHJvZ3Jlc3MsIG1fdHlwZSk7CiAgICAg
CiAgICAgY29uc3QgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0aWNfY2Fz
dDxjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKICAgICBkb3VibGUgZnJv
bUFuZ2xlID0gZnJvbU9wID8gZnJvbU9wLT5tX2FuZ2xlIDogMDsKLSAgICByZXR1cm4gUm90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbUFuZ2xlICsgKG1fYW5nbGUgLSBmcm9tQW5n
bGUpICogcHJvZ3Jlc3MpOworICAgIHJldHVybiBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShmcm9tQW5nbGUgKyAobV9hbmdsZSAtIGZyb21BbmdsZSkgKiBwcm9ncmVzcywgbV90eXBl
KTsKIH0KIAogUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dy
ZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKLSAgICBpZiAoZnJvbSAmJiAhZnJvbS0+aXNT
a2V3T3BlcmF0aW9uKCkpCisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMp
KQogICAgICAgICByZXR1cm4gdGhpczsKICAgICAKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQot
ICAgICAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1fYW5nbGVYIC0g
bV9hbmdsZVggKiBwcm9ncmVzcywgbV9hbmdsZVkgLSBtX2FuZ2xlWSAqIHByb2dyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShtX2FuZ2xlWCAtIG1f
YW5nbGVYICogcHJvZ3Jlc3MsIG1fYW5nbGVZIC0gbV9hbmdsZVkgKiBwcm9ncmVzcywgbV90eXBl
KTsKICAgICAKICAgICBjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0
aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJvbSk7CiAgICAgZG91Ymxl
IGZyb21BbmdsZVggPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGVYIDogMDsKICAgICBkb3VibGUg
ZnJvbUFuZ2xlWSA9IGZyb21PcCA/IGZyb21PcC0+bV9hbmdsZVkgOiAwOwotICAgIHJldHVybiBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoZnJvbUFuZ2xlWCArIChtX2FuZ2xlWCAtIGZy
b21BbmdsZVgpICogcHJvZ3Jlc3MsIGZyb21BbmdsZVkgKyAobV9hbmdsZVkgLSBmcm9tQW5nbGVZ
KSAqIHByb2dyZXNzKTsKKyAgICByZXR1cm4gU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KGZyb21BbmdsZVggKyAobV9hbmdsZVggLSBmcm9tQW5nbGVYKSAqIHByb2dyZXNzLCBmcm9tQW5n
bGVZICsgKG1fYW5nbGVZIC0gZnJvbUFuZ2xlWSkgKiBwcm9ncmVzcywgbV90eXBlKTsKIH0KIAog
UGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3Ms
IGJvb2wgYmxlbmRUb0lkZW50aXR5KQogewotICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1RyYW5z
bGF0ZU9wZXJhdGlvbigpKQorICAgIGlmIChmcm9tICYmICFmcm9tLT5pc1NhbWVUeXBlKCp0aGlz
KSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkK
LSAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aChtX3gudHlwZSgpKS5ibGVuZChtX3gsIHByb2dyZXNzKSwgTGVuZ3RoKG1feS50eXBlKCkpLmJs
ZW5kKG1feSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgcmV0dXJuIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKExlbmd0aChtX3gudHlwZSgpKS5ibGVuZChtX3gsIHByb2dyZXNzKSwg
TGVuZ3RoKG1feS50eXBlKCkpLmJsZW5kKG1feSwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogCiAgICAg
Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0aWNfY2FzdDxj
b25zdCBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qPihmcm9tKTsKICAgICBMZW5ndGggZnJv
bVggPSBmcm9tT3AgPyBmcm9tT3AtPm1feCA6IExlbmd0aChtX3gudHlwZSgpKTsKICAgICBMZW5n
dGggZnJvbVkgPSBmcm9tT3AgPyBmcm9tT3AtPm1feSA6IExlbmd0aChtX3kudHlwZSgpKTsKLSAg
ICByZXR1cm4gVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV94LmJsZW5kKGZy
b21YLCBwcm9ncmVzcyksIG1feS5ibGVuZChmcm9tWSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4g
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobV94LmJsZW5kKGZyb21YLCBwcm9n
cmVzcyksIG1feS5ibGVuZChmcm9tWSwgcHJvZ3Jlc3MpLCBtX3R5cGUpOwogfQogCiBQYXNzUmVm
UHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZChj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVu
ZFRvSWRlbnRpdHkpCiB7Ci0gICAgaWYgKGZyb20gJiYgIWZyb20tPmlzTWF0cml4T3BlcmF0aW9u
KCkpCisgICAgaWYgKGZyb20gJiYgIWZyb20tPmlzU2FtZVR5cGUoKnRoaXMpKQogICAgICAgICBy
ZXR1cm4gdGhpczsKIAogICAgIC8vIGNvbnZlcnQgdGhlIFRyYW5zZm9ybU9wZXJhdGlvbnMgaW50
byBtYXRyaWNlcwpAQCAtMTY5Miw3ICsxNjk0LDEwIEBACiAgICAgdW5zaWduZWQgaTsKICAgICBp
ZiAoaW5jbHVkZVRyYW5zZm9ybU9yaWdpbikgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgczsg
aSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9y
bS0+bV9vcGVyYXRpb25zW2ldLT5pc1RyYW5zbGF0ZU9wZXJhdGlvbigpKSB7CisgICAgICAgICAg
ICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zW2ldLT5nZXRPcGVyYXRpb25UeXBlKCk7
CisgICAgICAgICAgICBpZiAodHlwZSAhPSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9Y
ICYmIAorICAgICAgICAgICAgICAgICAgICB0eXBlICE9IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJB
TlNMQVRFX1kgJiYgCisgICAgICAgICAgICAgICAgICAgIHR5cGUgIT0gVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEUpIHsKICAgICAgICAgICAgICAgICBhcHBseVRyYW5zZm9ybU9yaWdpbiA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDM2MzU4KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjE1LDE1
NyArNjE1LDIxNCBAQAogCiBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291
bnRlZDxUcmFuc2Zvcm1PcGVyYXRpb24+IHsKIHB1YmxpYzoKKyAgICBlbnVtIE9wZXJhdGlvblR5
cGUgeyBTQ0FMRV9YLCBTQ0FMRV9ZLCBTQ0FMRSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
VFJBTlNMQVRFX1gsIFRSQU5TTEFURV9ZLCBUUkFOU0xBVEUsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgIFJPVEFURSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgU0tFV19YLCBTS0VXX1ks
IFNLRVcsIAorICAgICAgICAgICAgICAgICAgICAgICAgIE1BVFJJWCwgSURFTlRJVFksIE5PTkUK
KyAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAKICAgICB2aXJ0dWFsIH5UcmFuc2Zvcm1P
cGVyYXRpb24oKSB7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24mKSBjb25zdCA9IDA7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvKTsgfQor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgPSAwOwogCi0gICAgdmly
dHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEludFNpemUmIGJvcmRlckJv
eFNpemUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QgPSAwOwogICAgIAogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNl
KSA9IDA7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlzU2NhbGVPcGVyYXRpb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JvdGF0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzU2tld09wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzVHJhbnNsYXRlT3Bl
cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNNYXRy
aXhPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgT3BlcmF0
aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBp
c1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIH07CiAKK2NsYXNzIElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGljIFRy
YW5zZm9ybU9wZXJhdGlvbgoreworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbigpKTsKKyAgICB9CisgICAgICAg
IAorICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1
cm4gSURFTlRJVFk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9uVHlwZSgpID09IElE
RU5USVRZOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24mIG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNTYW1lVHlwZShvKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5zZm9ybU9w
ZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRp
b24oKQorICAgIHsKKyAgICB9CisKK307CisKIGNsYXNzIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
IDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgc3gsIGRvdWJsZSBz
eSkKKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4g
Y3JlYXRlKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKHN4LCBz
eSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
KHN4LCBzeSwgdHlwZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1NjYWxlT3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0lkZW50aXR5
KCkgY29uc3QgeyByZXR1cm4gbV94ID09IDEgJiYgIG1feSA9PSAxOyB9CisgICAgdmlydHVhbCBP
cGVyYXRpb25UeXBlIGdldE9wZXJhdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNTYW1lVHlwZShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8p
IGNvbnN0IHsgcmV0dXJuIG8uZ2V0T3BlcmF0aW9uVHlwZSgpID09IG1fdHlwZTsgfQogCiAgICAg
dmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25z
dAogICAgIHsKLSAgICAgICAgaWYgKG8uaXNTY2FsZU9wZXJhdGlvbigpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiogcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICAgICAgcmV0dXJuIG1feCA9PSBz
LT5tX3ggJiYgbV95ID09IHMtPm1feTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgY29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHMgPSBzdGF0aWNfY2FzdDxj
b25zdCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKKyAgICAgICAgcmV0dXJuIG1feCA9
PSBzLT5tX3ggJiYgbV95ID09IHMtPm1feTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNp
emUpCisgICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNm
b3JtLnNjYWxlKG1feCwgbV95KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSA9IGZhbHNlKTsKIAogcHJpdmF0ZToKLSAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihkb3Vi
bGUgc3gsIGRvdWJsZSBzeSkKLSAgICAgICAgOiBtX3goc3gpLCBtX3koc3kpCisgICAgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24oZG91YmxlIHN4LCBkb3VibGUgc3ksIE9wZXJhdGlvblR5cGUgdHlw
ZSkKKyAgICAgICAgOiBtX3goc3gpLCBtX3koc3kpLCBtX3R5cGUodHlwZSkKICAgICB7CiAgICAg
fQogICAgICAgICAKICAgICBkb3VibGUgbV94OwogICAgIGRvdWJsZSBtX3k7CisgICAgT3BlcmF0
aW9uVHlwZSBtX3R5cGU7CiB9OwogCiBjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBw
dWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShkb3VibGUgYW5nbGUpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIGFu
Z2xlLCBPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihhbmdsZSkpOworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihhbmdsZSwgdHlwZSkpOwogICAgIH0K
IAotICAgIHZpcnR1YWwgYm9vbCBpc1JvdGF0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5n
bGUgPT0gMDsgfQorICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5cGUoY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJhdGlvblR5
cGUoKSA9PSBtX3R5cGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChvLmlzUm90YXRl
T3BlcmF0aW9uKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
biogciA9IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsK
LSAgICAgICAgICAgIHJldHVybiBtX2FuZ2xlID09IHItPm1fYW5nbGU7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
biogciA9IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsK
KyAgICAgICAgcmV0dXJuIG1fYW5nbGUgPT0gci0+bV9hbmdsZTsKICAgICB9CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRT
aXplJiBib3JkZXJCb3hTaXplKQorICAgIHZpcnR1YWwgYm9vbCBhcHBseShBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QKICAgICB7
CiAgICAgICAgIHRyYW5zZm9ybS5yb3RhdGUobV9hbmdsZSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBi
bGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9v
bCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7CiAgICAgCisgICAgZG91YmxlIGFuZ2xlKCkgY29u
c3QgeyByZXR1cm4gbV9hbmdsZTsgfQorCiBwcml2YXRlOgotICAgIFJvdGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbihkb3VibGUgYW5nbGUpCi0gICAgICAgIDogbV9hbmdsZShhbmdsZSkKKyAgICBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb24oZG91YmxlIGFuZ2xlLCBPcGVyYXRpb25UeXBlIHR5cGUpCisg
ICAgICAgIDogbV9hbmdsZShhbmdsZSksIG1fdHlwZSh0eXBlKQogICAgIHsKICAgICB9CiAKICAg
ICBkb3VibGUgbV9hbmdsZTsKKyAgICBPcGVyYXRpb25UeXBlIG1fdHlwZTsKIH07CiAKIGNsYXNz
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVh
dGUoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xlWSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uPiBjcmVhdGUoZG91YmxlIGFuZ2xlWCwgZG91YmxlIGFuZ2xl
WSwgT3BlcmF0aW9uVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGFuZ2xlWCwgYW5nbGVZKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU2tld1RyYW5zZm9ybU9wZXJhdGlvbihhbmdsZVgsIGFuZ2xlWSwgdHlw
ZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc1NrZXdPcGVyYXRpb24oKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBjb25zdCB7IHJl
dHVybiBtX2FuZ2xlWCA9PSAwICYmIG1fYW5nbGVZID09IDA7IH0KKyAgICB2aXJ0dWFsIE9wZXJh
dGlvblR5cGUgZ2V0T3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1NhbWVUeXBlKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29u
c3QgeyByZXR1cm4gby5nZXRPcGVyYXRpb25UeXBlKCkgPT0gbV90eXBlOyB9CiAKICAgICB2aXJ0
dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0CiAg
ICAgewotICAgICAgICBpZiAoIW8uaXNTa2V3T3BlcmF0aW9uKCkpCisgICAgICAgIGlmICghaXNT
YW1lVHlwZShvKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY29uc3QgU2tl
d1RyYW5zZm9ybU9wZXJhdGlvbiogcyA9IHN0YXRpY19jYXN0PGNvbnN0IFNrZXdUcmFuc2Zvcm1P
cGVyYXRpb24qPigmbyk7CiAgICAgICAgIHJldHVybiBtX2FuZ2xlWCA9PSBzLT5tX2FuZ2xlWCAm
JiBtX2FuZ2xlWSA9PSBzLT5tX2FuZ2xlWTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBw
bHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNp
emUpCisgICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNm
b3JtLnNrZXcobV9hbmdsZVgsIG1fYW5nbGVZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGJsZW5kKGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5k
VG9JZGVudGl0eSA9IGZhbHNlKTsKICAgICAKIHByaXZhdGU6Ci0gICAgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbihkb3VibGUgYW5nbGVYLCBkb3VibGUgYW5nbGVZKQotICAgICAgICA6IG1fYW5nbGVY
KGFuZ2xlWCksIG1fYW5nbGVZKGFuZ2xlWSkKKyAgICBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGRv
dWJsZSBhbmdsZVgsIGRvdWJsZSBhbmdsZVksIE9wZXJhdGlvblR5cGUgdHlwZSkKKyAgICAgICAg
OiBtX2FuZ2xlWChhbmdsZVgpLCBtX2FuZ2xlWShhbmdsZVkpLCBtX3R5cGUodHlwZSkKICAgICB7
CiAgICAgfQogICAgIAogICAgIGRvdWJsZSBtX2FuZ2xlWDsKICAgICBkb3VibGUgbV9hbmdsZVk7
CisgICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7CiB9OwogCiBjbGFzcyBUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+IGNyZWF0ZShjb25z
dCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gY3JlYXRlKGNvbnN0IExlbmd0aCYgdHgsIGNvbnN0
IExlbmd0aCYgdHksIE9wZXJhdGlvblR5cGUgdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKHR4LCB0eSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih0eCwgdHks
IHR5cGUpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUcmFuc2xhdGVPcGVyYXRpb24o
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzSWRlbnRpdHkoKSBj
b25zdCB7IHJldHVybiBtX3guY2FsY0Zsb2F0VmFsdWUoMSkgPT0gMCAmJiBtX3kuY2FsY0Zsb2F0
VmFsdWUoMSkgPT0gMDsgfQorICAgIHZpcnR1YWwgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25U
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdmlydHVhbCBib29sIGlzU2FtZVR5
cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiBvLmdldE9wZXJh
dGlvblR5cGUoKSA9PSBtX3R5cGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7Ci0gICAgICAgIGlmICghby5p
c1RyYW5zbGF0ZU9wZXJhdGlvbigpKQorICAgICAgICBpZiAoIWlzU2FtZVR5cGUobykpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbiogdCA9IHN0YXRpY19jYXN0PGNvbnN0IFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bio+KCZvKTsKICAgICAgICAgcmV0dXJuIG1feCA9PSB0LT5tX3ggJiYgbV95ID09IHQtPm1feTsK
ICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpCisgICAgdmlydHVhbCBib29sIGFwcGx5
KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXpl
KSBjb25zdAogICAgIHsKICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtX3guY2FsY0Zsb2F0
VmFsdWUoYm9yZGVyQm94U2l6ZS53aWR0aCgpKSwgbV95LmNhbGNGbG9hdFZhbHVlKGJvcmRlckJv
eFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgcmV0dXJuIG1feC50eXBlKCkgPT0gUGVyY2VudCB8
fCBtX3kudHlwZSgpID09IFBlcmNlbnQ7CiAgICAgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFRyYW5zZm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9t
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwogCiBwcml2
YXRlOgotICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBMZW5ndGgmIHR4LCBj
b25zdCBMZW5ndGgmIHR5KQotICAgICAgICA6IG1feCh0eCksIG1feSh0eSkKKyAgICBUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb24oY29uc3QgTGVuZ3RoJiB0eCwgY29uc3QgTGVuZ3RoJiB0eSwg
T3BlcmF0aW9uVHlwZSB0eXBlKQorICAgICAgICA6IG1feCh0eCksIG1feSh0eSksIG1fdHlwZSh0
eXBlKQogICAgIHsKICAgICB9CiAKICAgICBMZW5ndGggbV94OwogICAgIExlbmd0aCBtX3k7Cisg
ICAgT3BlcmF0aW9uVHlwZSBtX3R5cGU7CiB9OwogCiBjbGFzcyBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uIHsKQEAgLTc3NSwyMSArODMyLDI0IEBA
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGEs
IGIsIGMsIGQsIGUsIGYpKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXhPcGVy
YXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzSWRlbnRp
dHkoKSBjb25zdCB7IHJldHVybiBtX2EgPT0gMSAmJiBtX2IgPT0gMCAmJiBtX2MgPT0gMCAmJiBt
X2QgPT0gMSAmJiBtX2UgPT0gMCAmJiBtX2YgPT0gMDsgfQorICAgIHZpcnR1YWwgT3BlcmF0aW9u
VHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gTUFUUklYOyB9CisgICAgdmly
dHVhbCBib29sIGlzU2FtZVR5cGUoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7
IHJldHVybiBvLmdldE9wZXJhdGlvblR5cGUoKSA9PSBNQVRSSVg7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7
Ci0gICAgICAgIGlmIChvLmlzTWF0cml4T3BlcmF0aW9uKCkpIHsKLSAgICAgICAgICAgIGNvbnN0
IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAgICAgICAgIHJldHVybiBtX2EgPT0gbS0+bV9h
ICYmIG1fYiA9PSBtLT5tX2IgJiYgbV9jID09IG0tPm1fYyAmJiBtX2QgPT0gbS0+bV9kICYmIG1f
ZSA9PSBtLT5tX2UgJiYgbV9mID09IG0tPm1fZjsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghaXNTYW1lVHlwZShvKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIG0gPSBzdGF0
aWNfY2FzdDxjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7CisgICAgICAgIHJl
dHVybiBtX2EgPT0gbS0+bV9hICYmIG1fYiA9PSBtLT5tX2IgJiYgbV9jID09IG0tPm1fYyAmJiBt
X2QgPT0gbS0+bV9kICYmIG1fZSA9PSBtLT5tX2UgJiYgbV9mID09IG0tPm1fZjsKICAgICB9CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0
IEludFNpemUmIGJvcmRlckJveFNpemUpCisgICAgdmlydHVhbCBib29sIGFwcGx5KEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAog
ICAgIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2EsIG1fYiwgbV9jLCBtX2Qs
IG1fZSwgbV9mKTsKICAgICAgICAgdHJhbnNmb3JtID0gbWF0cml4ICogdHJhbnNmb3JtOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4gYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwpAQCAtODA4LDE5ICs4
NjgsMjUgQEAKICAgICBkb3VibGUgbV9mOwogfTsKIAotY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9u
cyB7CitjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zIDogcHVibGljIFZlY3RvcjxSZWZQdHI8VHJh
bnNmb3JtT3BlcmF0aW9uPiA+IHsKIHB1YmxpYzoKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zKGJv
b2wgbWFrZUlkZW50aXR5ID0gZmFsc2UpCisgICAgeworICAgICAgICBpZiAobWFrZUlkZW50aXR5
KQorICAgICAgICAgICAgYXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUo
KSk7CisgICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIG8pIGNvbnN0IHsKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5pc0Vt
cHR5KCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5z
aXplKCk7IH0KLSAgICBjb25zdCBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0b3Jb
XShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zLmF0KGkpOyB9CisgICAgdm9p
ZCBhcHBseShjb25zdCBJbnRTaXplJiBzeiwgQWZmaW5lVHJhbnNmb3JtJiB0KSBjb25zdAorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemUoKTsgKytpKQorICAgICAg
ICAgICAgYXQoaSktPmFwcGx5KHQsIHN6KTsKKyAgICB9CiAKLSAgICB2b2lkIGFwcGVuZChjb25z
dCBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3ApIHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5h
cHBlbmQob3ApOyB9Ci0KIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxUcmFuc2Zvcm1PcGVy
YXRpb24+ID4gbV9vcGVyYXRpb25zOwogfTsKQEAgLTI0NjcsNiArMjUzMyw3IEBACiAgICAgCiAg
ICAgdm9pZCBjbGVhcigpIHsgbV9rZXlmcmFtZXMuY2xlYXIoKTsgbV9wcm9wZXJ0aWVzLmNsZWFy
KCk7IH0KICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5pc0Vt
cHR5KCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLnNp
emUoKTsgfQogICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5L
ZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5iZWdpbigpOyB9CiAgICAgVmVj
dG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmRLZXlmcmFtZXMoKSBjb25zdCB7
IHJldHVybiBtX2tleWZyYW1lcy5lbmQoKTsgfQogCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMzYzNTgpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSwxMDIgQEAKICAgICAg
ICAgKiBwYWdlL21hYy9GcmFtZU1hYy5tbToKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpub2Rl
SW1hZ2UpOgogCisyMDA4LTA5LTEwICBDaHJpcyBNYXJyaW4gIDxjbWFycmluQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIHRy
YW5zZm9ybSBhbmltYXRpb24gYmVoYXZpb3IgbWF0Y2ggc3BlYworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NzAKKworICAgICAgICBUZXN0czogdHJh
bnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbAorICAgICAgICAgICAgICAgdHJh
bnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAorCisgICAgICAgICogY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRUcmFuc2Zvcm1PcGVyYXRp
b25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbnMpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyOjpibGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVdyYXBwZXJTaGFkb3c6OmJsZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yOjpibGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjplbnN1cmVQcm9wZXJ0eU1hcCk6CisgICAgICAgIChXZWJDb3JlOjpB
bmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkJhc2U6OmJsZW5kUHJvcGVydGllcyk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6aXNUcmFuc2Zvcm1G
dW5jdGlvbkxpc3RWYWxpZCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmlt
YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmltYXRpb246OnJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1
bmN0aW9uTGlzdCk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
aDoKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmg6CisgICAgICAgIChX
ZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnNldEluZGV4KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0
ZVJlZmxlY3Rpb25TdHlsZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM6Om9wZXJhdG9yPT0p
OgorICAgICAgICAoV2ViQ29yZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpibGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclN0eWxlOjphcHBseVRyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246Oik6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb246OmlzU2FtZVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6aXNJZGVudGl0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6Z2V0T3BlcmF0aW9u
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6aXNT
YW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
bjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6SWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246
OmJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpJ
ZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY2FsZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uOjppc0lkZW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpnZXRPcGVyYXRpb25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uOjppc1NhbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uOjphcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbjo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Um90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjppc0lkZW50aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Z2V0T3BlcmF0aW9uVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmlzU2FtZVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOjphbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6aXNJZGVudGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpnZXRPcGVyYXRpb25UeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmlzU2FtZVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6aXNJZGVudGl0eSk6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmdldE9wZXJh
dGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
Ojppc1NhbWVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbjo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6aXNJZGVudGl0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmdldE9wZXJhdGlvblR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOjppc1NhbWVUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAg
IChXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmFwcGx5KToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM6OlRyYW5zZm9ybU9wZXJhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uczo6YXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6S2V5ZnJhbWVMaXN0OjpzaXplKToKKwogMjAwOC0wOS0wOCAgQ2hyaXMgTWFycmluICA8Y21h
cnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dApJbmRleDog
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDM2MzU4KQorKysgV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NzgsMTEyICs0Nzc4LDcg
QEAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRM
RV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5zZm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBs
aXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKLSAgICAgICAgICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdmFsID0g
c3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPihsaXN0LT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKGkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKTsKLSAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgc3dpdGNoICh2YWwtPm9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICAgICAg
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBzeSA9IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJh
dGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3Bl
cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0
RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0g
c2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0g
c3g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShzeCwgc3kpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBM
ZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgTGVu
Z3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
WVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNv
bnZlcnRUb0xlbmd0aChmaXJzdFZhbHVlLCBtX3N0eWxlLCAmb2spOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4ID0gY29udmVy
dFRvTGVuZ3RoKGZpcnN0VmFsdWUsIG1fc3R5bGUsICZvayk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRUb0xlbmd0
aChzZWNvbmRWYWx1ZSwgbV9zdHlsZSwgJm9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBw
ZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJz
dFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZp
cnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbnMuYXBwZW5kKFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIGFuZ2xlWSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
b3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJh
ZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5nbGVZID0gYW5nbGU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVggPSBhbmdsZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzZWNvbmRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
WSA9IHJhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0dSQUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5n
bGVZID0gZ3JhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhID0gZmlyc3RWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpLT5nZXRE
b3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGMgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSkt
PmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZCA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDMpKS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBl
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soNCkpLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZG91
YmxlIGYgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjayg1KSktPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25zLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhLCBi
LCBjLCBkLCBlLCBmKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfSAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAg
Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyh2YWx1ZSwgbV9zdHlsZSwgb3BlcmF0aW9ucyk7CiAg
ICAgICAgIG1fc3R5bGUtPnNldFRyYW5zZm9ybShvcGVyYXRpb25zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTU2OTYsNCArNTU5MSwxMzcgQEAKICAgICB9CiB9CiAKK1RyYW5zZm9ybU9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpT
Q0FMRTsKKyAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNm
b3JtT3BlcmF0aW9uOiAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g7
CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9w
ZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOworICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb246ICAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOworICAgICAg
ICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0
aW9uOiAgICAgcmV0dXJuIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g7CisgICAgICAg
IGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRp
b246ICAgICByZXR1cm4gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWTsKKyAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOiAg
ICAgICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURTsKKyAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICAg
IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVc7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICByZXR1cm4g
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uOiAgICAgICAgICByZXR1cm4gVHJhbnNm
b3JtT3BlcmF0aW9uOjpTS0VXX1k7CisgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjogICAgICAgICByZXR1cm4gVHJhbnNmb3JtT3Bl
cmF0aW9uOjpNQVRSSVg7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiBUcmFuc2Zvcm1PcGVyYXRp
b246Ok5PTkU7CisgICAgfQorICAgIHJldHVybiBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU7Cit9
CisKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NW
YWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMm
IG91dE9wZXJhdGlvbnMpCit7CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwor
ICAgIGlmIChpblZhbHVlICYmICFpblZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAg
ICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaW5WYWx1
ZSk7CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUqIHZhbCA9IHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
Kj4obGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpOworICAgICAgICAg
ICAgIAorICAgICAgICAgICAgc3dpdGNoICh2YWwtPm9wZXJhdGlvblR5cGUoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAg
ICAgICAgZG91YmxlIHN4ID0gMS4wOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3kgPSAx
LjA7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0
VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFs
LT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5z
Zm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPmxl
bmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
eSA9IHN4OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoc3gsIHN5LCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHZhbC0+b3Bl
cmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgICAg
ICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFu
c2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSBj
b252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgaW5TdHlsZSwgJm9rKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9MZW5n
dGgoZmlyc3RWYWx1ZSwgaW5TdHlsZSwgJm9rKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWwtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWwtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvTGVuZ3RoKHNlY29uZFZhbHVlLCBpblN0eWxl
LCAmb2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlm
ICghb2spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUodHgsIHR5LCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHZhbC0+b3BlcmF0aW9u
VHlwZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZp
cnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJz
dFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCisg
ICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOworICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19HUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBn
cmFkMmRlZyhhbmdsZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25zLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhbmds
ZSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb246
CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFu
c2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAgZG91
YmxlIGFuZ2xlWCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVkgPSAwOwor
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYW5nbGUgPSByYWQyZGVnKGFuZ2xlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Zmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JB
RCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5nbGUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAg
ICAgICAgYW5nbGVZID0gYW5nbGU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYW5nbGVYID0gYW5nbGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhbmdsZVkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZFZhbHVlLT5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhbmdsZVkgPSByYWQyZGVnKGFuZ2xlWSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZFZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYW5nbGVZID0gZ3JhZDJkZWcoYW5nbGVZKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGEgPSBmaXJzdFZhbHVlLT5nZXRGbG9hdFZhbHVlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IGIgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdp
dGhvdXRCb3VuZHNDaGVjaygxKSktPmdldEZsb2F0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgYyA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDIpKS0+Z2V0RmxvYXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBkID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRo
b3V0Qm91bmRzQ2hlY2soMykpLT5nZXRGbG9hdFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAg
IGZsb2F0IGUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjayg0KSktPmdldEZsb2F0VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZmxvYXQgZiA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDUpKS0+Z2V0RmxvYXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLmFwcGVuZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShhLCBiLCBj
LCBkLCBlLCBmKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3du
VHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgb3V0T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmgJKHJldmlzaW9uIDM2MzU4KQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTEsNiArMTUxLDggQEAKIAogICAgICAgICB2b2lkIGFkZEtleWZy
YW1lU3R5bGUoRG9jdW1lbnQqIGRvYywgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVs
ZSk7CiAKKyAgICAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NW
YWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMm
IG91dE9wZXJhdGlvbnMpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBTZWxlY3Rvck1h
dGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHkgfTsKIApJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmgJKHJldmlzaW9uIDM2MzU4KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsOCBAQAogICAgICAgICByZXR1cm4g
IXBvc3RBY3RpdmUoKSAmJiBhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpOwogICAgIH0KIAorICAg
IGJvb2wgaXNUcmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJh
bnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQ7IH0KKyAgICAKIHByb3RlY3RlZDoKICAgICBFbGVtZW50
KiBlbGVtZW50Rm9yRXZlbnREaXNwYXRjaCgpOwogCkBAIC0yNjMsNyArMjY1LDcgQEAKICAgICBz
dGF0aWMgaW50IGdldE51bVByb3BlcnRpZXMoKTsKIAogICAgIC8vIFJldHVybiB0cnVlIGlmIHdl
IG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0aW9uIHRpbWVycwotICAgIHN0YXRpYyBib29s
IGJsZW5kUHJvcGVydGllcyhpbnQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpOworICAgIHN0
YXRpYyBib29sIGJsZW5kUHJvcGVydGllcyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBpbnQg
cHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpOwogICAgIAogICAgIHN0YXRpYyB2b2lkIHNldENo
YW5nZWQoTm9kZSopOwogCkBAIC0yODIsNiArMjg0LDcgQEAKICAgICBSZWZQdHI8QW5pbWF0aW9u
PiBtX2FuaW1hdGlvbjsKICAgICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29tcEFuaW07CiAgICAg
Ym9vbCBtX3dhaXRpbmdGb3JFbmRFdmVudDsKKyAgICBib29sIG1fdHJhbnNmb3JtRnVuY3Rpb25M
aXN0VmFsaWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCShyZXZpc2lvbiAzNjM1OCkKKysrIFdl
YkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNjYsNiArNjYsOCBAQAogICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9j
dW1lbnQ6Okxpc3RlbmVyVHlwZSk7ICAgIAogICAgIGJvb2wgc2VuZFRyYW5zaXRpb25FdmVudChj
b25zdCBBdG9taWNTdHJpbmcmLCBkb3VibGUgZWxhcHNlZFRpbWUpOwogCisgICAgdm9pZCB2YWxp
ZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOworCiBwcml2YXRlOgogICAgIGludCBtX3RyYW5z
aXRpb25Qcm9wZXJ0eTsgICAvLyBUcmFuc2l0aW9uIHByb3BlcnR5IGFzIHNwZWNpZmllZCBpbiB0
aGUgUmVuZGVyU3R5bGUuIE1heSBiZSBjQW5pbWF0ZUFsbAogICAgIGludCBtX2FuaW1hdGluZ1By
b3BlcnR5OyAgICAvLyBTcGVjaWZpYyBwcm9wZXJ0eSBmb3IgdGhpcyBJbXBsaWNpdEFuaW1hdGlv
bgpJbmRleDogV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAJ
KHJldmlzaW9uIDM2MzU4KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1h
dGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDEwICsyNywxMCBAQAogICovCiAKICNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgotCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgog
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKIApAQCAt
MTE0LDcgKzExNCw3IEBACiAKICAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fa2V5ZnJhbWVzLT5lbmRQcm9wZXJ0aWVzKCk7CiAgICAgZm9yIChIYXNoU2V0PGludD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMtPmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGJsZW5kUHJvcGVydGllcygqaXQsIGFuaW1hdGVkU3R5
bGUsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZykpCisgICAgICAgIGlmIChibGVuZFByb3BlcnRp
ZXModGhpcywgKml0LCBhbmltYXRlZFN0eWxlLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2cpKQog
ICAgICAgICAgICAgc2V0QW5pbWF0aW5nKCk7CiAgICAgfQogfQpAQCAtMTk4LDQgKzE5OCw1MiBA
QAogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRh
dGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKQoreworICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0
VmFsaWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fa2V5ZnJhbWVzLmdldCgpIHx8IG1fa2V5
ZnJhbWVzLT5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1lcy0+Y29udGFpbnNQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxL
ZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZXMtPmVuZEtleWZy
YW1lcygpOworCisgICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmlu
ZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UKKyAgICBzaXplX3Qg
Zmlyc3RJbmRleCA9IDA7CisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRv
ciBmaXJzdEl0ID0gZW5kOworICAgIAorICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBl
bmQ7ICsraXQsICsrZmlyc3RJbmRleCkgeworICAgICAgICBpZiAoaXQtPnN0eWxlLnRyYW5zZm9y
bSgpLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIGZpcnN0SXQgPSBpdDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmIChmaXJzdEl0ID09IGVuZCkK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiBmaXJzdFZhbCA9ICZmaXJzdEl0LT5zdHlsZS50cmFuc2Zvcm0oKTsKKyAgICAKKyAgICAvLyBT
ZWUgaWYgdGhlIGtleWZyYW1lcyBhcmUgdmFsaWQKKyAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZh
bHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBmaXJzdEl0KzE7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWwgPSAmaXQtPnN0eWxlLnRyYW5z
Zm9ybSgpOworICAgICAgICAKKyAgICAgICAgLy8gQSBudWxsIHRyYW5zZm9ybSBtYXRjaGVzIGFu
eXRoaW5nCisgICAgICAgIGlmICh2YWwtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHNpemVzIG9mIHRoZSBmdW5jdGlvbiBsaXN0
cyBkb24ndCBtYXRjaCwgdGhlIGxpc3RzIGRvbid0IG1hdGNoCisgICAgICAgIGlmIChmaXJzdFZh
bC0+c2l6ZSgpICE9IHZhbC0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAK
KyAgICAgICAgLy8gSWYgdGhlIHR5cGVzIG9mIGVhY2ggZnVuY3Rpb24gYXJlIG5vdCB0aGUgc2Ft
ZSwgdGhlIGxpc3RzIGRvbid0IG1hdGNoCisgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
Zmlyc3RWYWwtPnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBpZiAoIWZpcnN0VmFsLT5hdChq
KS0+aXNTYW1lVHlwZSgqdmFsLT5hdChqKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gS2V5ZnJhbWVzIGFyZSB2YWxpZAorICAgIG1fdHJhbnNm
b3JtRnVuY3Rpb25MaXN0VmFsaWQgPSB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCShyZXZp
c2lvbiAzNjM1OCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOCBAQAogICAgICAgICAsIG1fbmFtZShhbmlt
YXRpb24tPm5hbWUoKSkKICAgICAgICAgLCBtX2luZGV4KGluZGV4KQogICAgIHsKKyAgICAgICAg
Ly8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uIGxpc3QKKyAgICAgICAgdmFsaWRhdGVUcmFu
c2Zvcm1GdW5jdGlvbkxpc3QoKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1h
dGlvbigpOwpAQCAtNzIsNiArNzQsOCBAQAogCiAgICAgdmlydHVhbCBib29sIGFmZmVjdHNQcm9w
ZXJ0eShpbnQpIGNvbnN0OwogCisgICAgdm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlz
dCgpOworCiBwcml2YXRlOgogICAgIC8vIFRoZSBrZXlmcmFtZXMgdGhhdCB3ZSBhcmUgYmxlbmRp
bmcuCiAgICAgUmVmUHRyPEtleWZyYW1lTGlzdD4gbV9rZXlmcmFtZXM7CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDM2MzU4KQorKysgV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNjUgKzc3LDg3IEBACiAgICAgbV9hbmltLT5hbmltYXRpb25FdmVudERpc3BhdGNoZXJGaXJl
ZChtX2VsZW1lbnQuZ2V0KCksIG1fbmFtZSwgbV9wcm9wZXJ0eSwgbV9yZXNldCwgbV9ldmVudFR5
cGUsIG1fZWxhcHNlZFRpbWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBibGVuZEZ1bmMoaW50
IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBpbnQgYmxlbmRG
dW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBw
cm9ncmVzcykKIHsgIAogICAgIHJldHVybiBpbnQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jl
c3MpOwogfQogCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1bmMoZG91YmxlIGZyb20sIGRv
dWJsZSB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5j
KGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKIHsgIAogICAgIHJldHVybiBmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVz
czsKIH0KIAotc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoZmxvYXQgZnJvbSwgZmxvYXQg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0
IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCiB7ICAKICAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChmcm9tICsgKHRvIC0g
ZnJvbSkgKiBwcm9ncmVzcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRp
YyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGNvbnN0
IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAotICAg
IHJldHVybiBDb2xvcihibGVuZEZ1bmMoZnJvbS5yZWQoKSwgdG8ucmVkKCksIHByb2dyZXNzKSwK
LSAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGZyb20uZ3JlZW4oKSwgdG8uZ3JlZW4oKSwgcHJv
Z3Jlc3MpLAotICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5ibHVlKCksIHRvLmJsdWUo
KSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS5hbHBoYSgpLCB0
by5hbHBoYSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBDb2xvcihibGVuZEZ1bmMoYW5pbSwg
ZnJvbS5yZWQoKSwgdG8ucmVkKCksIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgYmxlbmRG
dW5jKGFuaW0sIGZyb20uZ3JlZW4oKSwgdG8uZ3JlZW4oKSwgcHJvZ3Jlc3MpLAorICAgICAgICAg
ICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5ibHVlKCksIHRvLmJsdWUoKSwgcHJvZ3Jlc3Mp
LAorICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5hbHBoYSgpLCB0by5hbHBo
YSgpLCBwcm9ncmVzcykpOwogfQogCi1zdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29u
c3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0
aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQW5pbWF0aW9uQmFzZSogYW5pbSwgY29u
c3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7ICAK
ICAgICByZXR1cm4gdG8uYmxlbmQoZnJvbSwgcHJvZ3Jlc3MpOwogfQogCi1zdGF0aWMgaW5saW5l
IEludFNpemUgYmxlbmRGdW5jKGNvbnN0IEludFNpemUmIGZyb20sIGNvbnN0IEludFNpemUmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIEludFNpemUgYmxlbmRGdW5jKGNvbnN0
IEFuaW1hdGlvbkJhc2UqIGFuaW0sIGNvbnN0IEludFNpemUmIGZyb20sIGNvbnN0IEludFNpemUm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7ICAKLSAgICByZXR1cm4gSW50U2l6ZShibGVuZEZ1bmMo
ZnJvbS53aWR0aCgpLCB0by53aWR0aCgpLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAg
YmxlbmRGdW5jKGZyb20uaGVpZ2h0KCksIHRvLmhlaWdodCgpLCBwcm9ncmVzcykpOworICAgIHJl
dHVybiBJbnRTaXplKGJsZW5kRnVuYyhhbmltLCBmcm9tLndpZHRoKCksIHRvLndpZHRoKCksIHBy
b2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5oZWlnaHQo
KSwgdG8uaGVpZ2h0KCksIHByb2dyZXNzKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU2hhZG93RGF0
YSogYmxlbmRGdW5jKGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCitzdGF0aWMgaW5saW5lIFNoYWRvd0RhdGEqIGJsZW5kRnVuYyhj
b25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBjb25zdCBTaGFkb3dEYXRhKiBmcm9tLCBjb25zdCBT
aGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAgQVNTRVJUKGZyb20gJiYg
dG8pOwotICAgIHJldHVybiBuZXcgU2hhZG93RGF0YShibGVuZEZ1bmMoZnJvbS0+eCwgdG8tPngs
IHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPnksIHRvLT55LCBwcm9ncmVzcyksIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS0+Ymx1ciwgdG8tPmJsdXIsIHByb2dy
ZXNzKSwgYmxlbmRGdW5jKGZyb20tPmNvbG9yLCB0by0+Y29sb3IsIHByb2dyZXNzKSk7CisgICAg
cmV0dXJuIG5ldyBTaGFkb3dEYXRhKGJsZW5kRnVuYyhhbmltLCBmcm9tLT54LCB0by0+eCwgcHJv
Z3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+eSwgdG8tPnksIHByb2dyZXNzKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLT5ibHVyLCB0by0+Ymx1
ciwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJv
Z3Jlc3MpKTsKIH0KIAotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVu
Yyhjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiB0bywgZG91YmxlIHByb2dyZXNzKQorc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRp
b25zIGJsZW5kRnVuYyhjb25zdCBBbmltYXRpb25CYXNlKiBhbmltLCBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHBy
b2dyZXNzKQogeyAgICAKLSAgICAvLyBCbGVuZCBhbnkgb3BlcmF0aW9ucyB3aG9zZSB0eXBlcyBh
Y3R1YWxseSBtYXRjaCB1cC4gIE90aGVyd2lzZSBkb24ndCBib3RoZXIuCi0gICAgdW5zaWduZWQg
ZnJvbVNpemUgPSBmcm9tLnNpemUoKTsKLSAgICB1bnNpZ25lZCB0b1NpemUgPSB0by5zaXplKCk7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IG1heChmcm9tU2l6ZSwgdG9TaXplKTsKICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25zIHJlc3VsdDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7Ci0gICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGZyb21PcCA9IGkgPCBm
cm9tU2l6ZSA/IGZyb21baV0gOiAwOwotICAgICAgICBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9u
PiB0b09wID0gaSA8IHRvU2l6ZSA/IHRvW2ldIDogMDsKLSAgICAgICAgUmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IHRvT3AtPmJsZW5kKGZyb21PcC5nZXQoKSwg
cHJvZ3Jlc3MpIDogZnJvbU9wLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSk7Ci0gICAgICAgIGlm
IChibGVuZGVkT3ApCi0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJsZW5kZWRPcCk7CisKKyAg
IC8vIElmIHdlIGhhdmUgYSB0cmFuc2Zvcm0gZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8g
YSBwZXItZnVuY3Rpb24gYW5pbWF0aW9uLiBPdGhlcndpc2UgZG8gYSBNYXRyaXggYW5pbWF0aW9u
CisgICBpZiAoYW5pbS0+aXNUcmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCgpKSB7CisgICAgICAg
dW5zaWduZWQgZnJvbVNpemUgPSBmcm9tLnNpemUoKTsKKyAgICAgICB1bnNpZ25lZCB0b1NpemUg
PSB0by5zaXplKCk7CisgICAgICAgdW5zaWduZWQgc2l6ZSA9IG1heChmcm9tU2l6ZSwgdG9TaXpl
KTsKKyAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUgJiYg
IWZyb21baV0tPmlzSWRlbnRpdHkoKSkgPyBmcm9tW2ldLmdldCgpIDogMDsKKyAgICAgICAgICAg
UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplICYmICF0b1tpXS0+
aXNJZGVudGl0eSgpKSA/IHRvW2ldLmdldCgpIDogMDsKKyAgICAgICAgICAgUmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IHRvT3AtPmJsZW5kKGZyb21PcC5nZXQo
KSwgcHJvZ3Jlc3MpIDogKGZyb21PcCA/IGZyb21PcC0+YmxlbmQoMCwgcHJvZ3Jlc3MsIHRydWUp
IDogMCk7CisgICAgICAgICAgIGlmIChibGVuZGVkT3ApCisgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgUmVm
UHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gaWRlbnRpdHlPcCA9IElkZW50aXR5VHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgIGlmIChwcm9ncmVzcyA+IDAuNSkKKyAg
ICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvT3AgPyB0b09wIDogaWRlbnRpdHlPcCk7
CisgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChm
cm9tT3AgPyBmcm9tT3AgOiBpZGVudGl0eU9wKTsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAg
IH0gZWxzZSB7CisgICAgICAgLy8gQ29udmVydCB0aGUgVHJhbnNmb3JtT3BlcmF0aW9ucyBpbnRv
IG1hdHJpY2VzCisgICAgICAgSW50U2l6ZSBzaXplID0gYW5pbS0+cmVuZGVyZXIoKS0+Ym9yZGVy
Qm94KCkuc2l6ZSgpOworICAgICAgIEFmZmluZVRyYW5zZm9ybSBmcm9tVDsKKyAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gdG9UOworICAgICAgIGZyb20uYXBwbHkoc2l6ZSwgZnJvbVQpOworICAgICAg
IHRvLmFwcGx5KHNpemUsIHRvVCk7CisgICAgICAgCisgICAgICAgdG9ULmJsZW5kKGZyb21ULCBw
cm9ncmVzcyk7CisgICAgICAgCisgICAgICAgLy8gQXBwZW5kIHRoZSByZXN1bHQKKyAgICAgICBy
ZXN1bHQuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHRvVC5hKCksIHRv
VC5iKCksIHRvVC5jKCksIHRvVC5kKCksIHRvVC5lKCksIHRvVC5mKCkpKTsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGlubGluZSBFVmlzaWJpbGl0eSBibGVuZEZ1bmMo
RVZpc2liaWxpdHkgZnJvbSwgRVZpc2liaWxpdHkgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3N0YXRp
YyBpbmxpbmUgRVZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0s
IEVWaXNpYmlsaXR5IGZyb20sIEVWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7CiAg
ICAgLy8gQW55IG5vbi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRv
IGJlIHZpc2libGUuICBPbmx5IGF0IDAgZG8gd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQog
ICAgIC8vIGludmlzaWJsZS4gICBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoSElEREVOIHZz
LiBDT0xMQVBTRSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFsdWVzLgpAQCAt
MTQzLDcgKzE2NSw3IEBACiAgICAgZG91YmxlIHRvVmFsID0gdG8gPT0gVklTSUJMRSA/IDEuIDog
MC47CiAgICAgaWYgKGZyb21WYWwgPT0gdG9WYWwpCiAgICAgICAgIHJldHVybiB0bzsKLSAgICBk
b3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7CisgICAg
ZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3Mp
OwogICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZJU0lCTEUgOiAodG8gIT0gVklTSUJMRSA/IHRv
IDogZnJvbSk7CiB9CiAKQEAgLTE1Niw3ICsxNzgsNyBAQAogCiAgICAgdmlydHVhbCB+UHJvcGVy
dHlXcmFwcGVyQmFzZSgpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNz
KSBjb25zdCA9IDA7CiAKICAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3A7
IH0KIApAQCAtMTkxLDkgKzIxMyw5IEBACiAgICAgewogICAgIH0KICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CisgICAgdmlydHVhbCB2b2lk
IGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdAogICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoKGEtPipQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxUPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dldHRl
cikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCBwcm9ncmVz
cykpOwogICAgIH0KIAogcHJvdGVjdGVkOgpAQCAtMjIwLDcgKzI0Miw3IEBACiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3QKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQW5pbWF0aW9uQmFz
ZSogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0CiAgICAgewogICAgICAgICBTaGFk
b3dEYXRhKiBzaGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKICAgICAgICAgU2hhZG93RGF0YSog
c2hhZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7CkBAIC0yMzEsNyArMjUzLDcgQEAKICAgICAgICAg
aWYgKCFzaGFkb3dCKQogICAgICAgICAgICAgc2hhZG93QiA9ICZkZWZhdWx0U2hhZG93RGF0YTsK
IAotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhzaGFkb3dBLCBzaGFkb3dCLCBw
cm9ncmVzcyksIGZhbHNlKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5p
bSwgc2hhZG93QSwgc2hhZG93QiwgcHJvZ3Jlc3MpLCBmYWxzZSk7CiAgICAgfQogCiBwcml2YXRl
OgpAQCAtMjU5LDcgKzI4MSw3IEBACiAgICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xv
cjsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IEFuaW1hdGlvbkJhc2UqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdAogICAgIHsKICAgICAgICAgQ29sb3IgZnJvbUNv
bG9yID0gKGEtPiptX2dldHRlcikoKTsKICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9n
ZXR0ZXIpKCk7CkBAIC0yNjcsNyArMjg5LDcgQEAKICAgICAgICAgICAgIGZyb21Db2xvciA9IGEt
PmNvbG9yKCk7CiAgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCiAgICAgICAgICAgICB0
b0NvbG9yID0gYi0+Y29sb3IoKTsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMo
ZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIp
KGJsZW5kRnVuYyhhbmltLCBmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtMzI4LDggKzM1MCw2IEBACiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBJbnRTaXplJj4oQ1NTUHJvcGVydHlX
ZWJraXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21S
aWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cykpOwog
ICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8RVZp
c2liaWxpdHk+KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5
LCAmUmVuZGVyU3R5bGU6OnNldFZpc2liaWxpdHkpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBl
cnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpvb20sICZS
ZW5kZXJTdHlsZTo6em9vbSwgJlJlbmRlclN0eWxlOjpzZXRab29tKSk7Ci0KLSAgICAgICAgLy8g
RklYTUU6IHRoZXNlIG1pZ2h0IGJlIGludmFsaWQgY29sb3JzLCBuZWVkIHRvIGNoZWNrIGZvciB0
aGF0CiAgICAgICAgIGdQcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OmNvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29s
b3IpKTsKICAgICAgICAgZ1Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsICZS
ZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VD
b2xvcikpOwogICAgICAgICBnUHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsICZS
ZW5kZXJTdHlsZTo6dGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9y
KSk7CkBAIC0zNjgsNiArMzg4LDcgQEAKICAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5p
bWF0aW9uKj4odHJhbnNpdGlvbikpCiAgICAgLCBtX2NvbXBBbmltKGNvbXBBbmltKQogICAgICwg
bV93YWl0aW5nRm9yRW5kRXZlbnQoZmFsc2UpCisgICAgLCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlz
dFZhbGlkKGZhbHNlKQogewogfQogCkBAIC00MTMsNyArNDM0LDcgQEAKIH0KIAogLy8gUmV0dXJu
cyB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwotYm9vbCBBbmltYXRp
b25CYXNlOjpibGVuZFByb3BlcnRpZXMoaW50IHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQor
Ym9vbCBBbmltYXRpb25CYXNlOjpibGVuZFByb3BlcnRpZXMoY29uc3QgQW5pbWF0aW9uQmFzZSog
YW5pbSwgaW50IHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQogewogICAgIEFTU0VSVChwcm9w
ICE9IGNBbmltYXRlQWxsKTsKICAgICAvLyBGSVhNRTogV2h5IGNhbiB0aGlzIGhhcHBlbj8KQEAg
LTQyNiw3ICs0NDcsNyBAQAogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG47
ICsraSkgewogICAgICAgICAgICAgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9ICgqZ1By
b3BlcnR5V3JhcHBlcnMpW2ldOwogICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMoYSwg
YikpIHsKLSAgICAgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChkc3QsIGEsIGIsIHByb2dyZXNz
KTsKKyAgICAgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dy
ZXNzKTsKICAgICAgICAgICAgICAgICBuZWVkc1RpbWVyID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtNDM4LDcgKzQ1OSw3IEBACiAgICAgICAgIGludCBpID0gZ1Byb3BlcnR5
V3JhcHBlck1hcFtwcm9wSW5kZXhdOwogICAgICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgICAg
ICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gKCpnUHJvcGVydHlXcmFwcGVycylbaV07
Ci0gICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICAg
ICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkocmV2aXNpb24gMzYzNTgpCisrKyBX
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMsNyArODMsNyBAQAogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0
YXJnZXRTdHlsZSk7CiAKLSAgICBpZiAoYmxlbmRQcm9wZXJ0aWVzKG1fYW5pbWF0aW5nUHJvcGVy
dHksIGFuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2dyZXNzKDEsIDAp
KSkKKyAgICBpZiAoYmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFu
aW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2dyZXNzKDEsIDApKSkKICAg
ICAgICAgc2V0QW5pbWF0aW5nKCk7CiB9CiAKQEAgLTEzNSw2ICsxMzUsOSBAQAogICAgIC8vIFJl
c3RhcnQgdGhlIHRyYW5zaXRpb24KICAgICBpZiAoZnJvbSAmJiB0bykKICAgICAgICAgdXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXRSZXN0YXJ0QW5pbWF0aW9uLCAtMSk7Cisg
ICAgICAgIAorICAgIC8vIHNldCB0aGUgdHJhbnNmb3JtIGFuaW1hdGlvbiBsaXN0CisgICAgdmFs
aWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKTsKIH0KIAogdm9pZCBJbXBsaWNpdEFuaW1hdGlv
bjo6c2V0T3ZlcnJpZGRlbihib29sIGIpCkBAIC0xNTgsNyArMTYxLDQzIEBACiAKIHZvaWQgSW1w
bGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoaW50IHByb3AsIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUpCiB7Ci0gICAgYmxlbmRQcm9wZXJ0aWVzKHByb3AsIGN1cnJl
bnRTdHlsZSwgbV9mcm9tU3R5bGUsIG1fdG9TdHlsZSwgcHJvZ3Jlc3MoMSwgMCkpOworICAgIGJs
ZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wLCBjdXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLCBtX3Rv
U3R5bGUsIHByb2dyZXNzKDEsIDApKTsKIH0KIAordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6dmFs
aWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKQoreworICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25M
aXN0VmFsaWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5
bGUpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0
aW9ucyogdmFsID0gJm1fZnJvbVN0eWxlLT50cmFuc2Zvcm0oKTsKKyAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiB0b1ZhbCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOworCisgICAgaWYg
KHZhbC0+aXNFbXB0eSgpKQorICAgICAgICB2YWwgPSB0b1ZhbDsKKworICAgIGlmICh2YWwtPmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAvLyBTZWUgaWYgdGhlIGtl
eWZyYW1lcyBhcmUgdmFsaWQKKyAgICBpZiAodmFsICE9IHRvVmFsKSB7CisgICAgICAgIC8vIEEg
bGlzdCBvZiBsZW5ndGggMCBtYXRjaGVzIGFueXRoaW5nCisgICAgICAgIGlmICghdG9WYWwtPmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHNpemVzIG9mIHRoZSBmdW5jdGlvbiBs
aXN0cyBkb24ndCBtYXRjaCwgdGhlIGxpc3RzIGRvbid0IG1hdGNoCisgICAgICAgICAgICBpZiAo
dmFsLT5zaXplKCkgIT0gdG9WYWwtPnNpemUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIHR5cGVzIG9mIGVhY2ggZnVuY3Rpb24gYXJl
IG5vdCB0aGUgc2FtZSwgdGhlIGxpc3RzIGRvbid0IG1hdGNoCisgICAgICAgICAgICBmb3IgKHNp
emVfdCBqID0gMDsgaiA8IHZhbC0+c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXZhbC0+YXQoaiktPmlzU2FtZVR5cGUoKnRvVmFsLT5hdChqKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEtl
eWZyYW1lcyBhcmUgdmFsaWQKKyAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkID0gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMzYzNTgp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDE4
IEBACiAgICAgICAgICogY3NzMy9rZXlmcmFtZXMtcnVsZS1leHBlY3RlZC50eHQ6CiAgICAgICAg
ICogY3NzMy9rZXlmcmFtZXMtcnVsZS5odG1sOgogCisyMDA4LTA5LTEwICBDaHJpcyBNYXJyaW4g
IDxjbWFycmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBNYWtlIHRyYW5zZm9ybSBhbmltYXRpb24gYmVoYXZpb3IgbWF0Y2ggc3Bl
YworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3NzAK
KworICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0
Y2guaHRtbDogQWRkZWQuCisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qt
bm8tbWF0Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sOiBBZGRlZC4KKwogMjAwOC0wOS0wOCAgQ2hyaXMg
TWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBI
eWF0dAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>