<?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>20908</bug_id>
          
          <creation_ts>2008-09-17 19:38:24 -0700</creation_ts>
          <short_desc>TransformOperations should not inherit from Vector</short_desc>
          <delta_ts>2008-09-18 18:13:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>91566</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-17 19:38:24 -0700</bug_when>
    <thetext>TransformOperations currently inherits from Vector. It should have a member variable instead.

Of course, it already does have a vector as a member variable, so really this whole class needs to be reworked. We should also make the difference between TransformOperation and TransformOperations clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91567</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-17 19:39:25 -0700</bug_when>
    <thetext>and by &quot;clearer&quot; I mean &quot;more clear&quot; :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91568</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-17 19:40:22 -0700</bug_when>
    <thetext>Same applies to AnimationList

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91682</commentid>
    <comment_count>3</comment_count>
      <attachid>23541</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-18 15:26:13 -0700</bug_when>
    <thetext>Created attachment 23541
Patch to fix bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91683</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2008-09-18 15:26:44 -0700</bug_when>
    <thetext>I also fixed AnimationList to no longer inherit from Vector&lt;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91688</commentid>
    <comment_count>5</comment_count>
      <attachid>23541</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-09-18 15:41:02 -0700</bug_when>
    <thetext>Comment on attachment 23541
Patch to fix bug

+    Animation* animation(size_t i) { return m_animations[i].get(); }
+    const Animation* animation(size_t i) const { return m_animations[i].get(); }
It seems like using operator[] here would be cleaner.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91697</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-09-18 17:01:42 -0700</bug_when>
    <thetext>Committed r36634
	M	WebCore/rendering/RenderLayer.cpp
	M	WebCore/rendering/style/AnimationList.cpp
	M	WebCore/rendering/style/TransformOperations.cpp
	M	WebCore/rendering/style/StyleRareNonInheritedData.cpp
	M	WebCore/rendering/style/RenderStyle.cpp
	M	WebCore/rendering/style/RenderStyle.h
	M	WebCore/rendering/style/AnimationList.h
	M	WebCore/rendering/style/TransformOperations.h
	M	WebCore/ChangeLog
	M	WebCore/css/CSSStyleSelector.cpp
	M	WebCore/css/CSSComputedStyleDeclaration.cpp
	M	WebCore/page/animation/CompositeAnimation.cpp
	M	WebCore/page/animation/KeyframeAnimation.cpp
	M	WebCore/page/animation/AnimationBase.cpp
	M	WebCore/page/animation/ImplicitAnimation.cpp

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91710</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-09-18 18:13:18 -0700</bug_when>
    <thetext>This led to some pretty ugly code. I think AnimationList and TransformOperations should have operator[] and a size() method.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23541</attachid>
            <date>2008-09-18 15:26:13 -0700</date>
            <delta_ts>2008-09-18 15:41:02 -0700</delta_ts>
            <desc>Patch to fix bug</desc>
            <filename>20908.patch</filename>
            <type>text/plain</type>
            <size>33376</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNjYyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTMgQEAKKzIwMDgtMDktMTggIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZp
eGVkIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkwOAorICAgICAg
ICBOb3cgVHJhbnNmb3JtT3BlcmF0aW9ucyBhbmQgQW5pbWF0aW9uTGlzdCBubyBsb25nZXIKKyAg
ICAgICAgaW5oZXJpdCBmcm9tIFZlY3Rvcjw+IGJ1dCByYXRoZXIgaGF2ZSBBUEkgdG8gYWNjZXNz
LgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb21wdXRlZFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICAq
IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRGdW5jKToKKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAg
ICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCk6Cisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZVJlZmxlY3Rpb25TdHlsZSk6CisgICAgICAgICogcmVuZGVy
aW5nL3N0eWxlL0FuaW1hdGlvbkxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9u
TGlzdDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0FuaW1hdGlvbkxp
c3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkxpc3Q6Om9wZXJhdG9yIT0pOgorICAg
ICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uTGlzdDo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpB
bmltYXRpb25MaXN0Ojppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkxpc3Q6
OnJlc2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25MaXN0OjpyZW1vdmUpOgorICAg
ICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uTGlzdDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkxpc3Q6OmFuaW1hdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1Jl
bmRlclN0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERh
dGE6OnVwZGF0ZUtleWZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTdHlsZTo6YXBw
bHlUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmFkanVzdEFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmFkanVzdFRyYW5zaXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjp0cmFuc2l0aW9uRm9yUHJvcGVydHkp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU3R5bGU6Omhhc1RyYW5zZm9ybSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL1RyYW5zZm9ybU9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3Jt
T3BlcmF0aW9uczo6VHJhbnNmb3JtT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpUcmFu
c2Zvcm1PcGVyYXRpb25zOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUv
VHJhbnNmb3JtT3BlcmF0aW9ucy5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0
aW9uczo6YXBwbHkpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uczo6b3Bl
cmF0aW9ucyk6CisKIDIwMDgtMDktMTggIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgY29udGFpbmluZ1dpbmRvdygpIGFuZCBzZXRDb250YWluaW5nV2luZG93
KCkgY3Jvc3MtcGxhdGZvcm0uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDM2NjIwKQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDcgKzM5NCw3IEBA
IHN0YXRpYyBJbnRSZWN0IHNpemluZ0JveChSZW5kZXJPYmplY3QqIHIKIAogc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7Ci0gICAgaWYgKCFyZW5kZXJlciB8fCByZW5kZXJlci0+c3R5bGUoKS0+dHJhbnNmb3JtKCku
aXNFbXB0eSgpKQorICAgIGlmICghcmVuZGVyZXIgfHwgcmVuZGVyZXItPnN0eWxlKCktPnRyYW5z
Zm9ybSgpLm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vbmUpOwogICAgIAogICAgIEludFJl
Y3QgYm94ID0gc2l6aW5nQm94KHJlbmRlcmVyKTsKQEAgLTEwNjUsNyArMTA2NSw3IEBAIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgIGNvbnN0IEFu
aW1hdGlvbkxpc3QqIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKICAgICAgICAgICAgIGlmICh0
KSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0LT5zaXplKCk7ICsr
aSkKLSAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoKCp0KVtpXS0+ZGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAg
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHQt
PmFuaW1hdGlvbihpKS0+ZGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25E
ZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKQEAgLTEwNzYsNyArMTA3Niw3IEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgIGNv
bnN0IEFuaW1hdGlvbkxpc3QqIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKICAgICAgICAgICAg
IGlmICh0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0LT5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoKCp0KVtpXS0+ZHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
KSk7CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKHQtPmFuaW1hdGlvbihpKS0+ZHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoUmVuZGVyU3R5bGU6OmluaXRp
YWxBbmltYXRpb25EdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKQEAgLTEw
ODcsNyArMTA4Nyw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMK
ICAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbkxpc3QqIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMo
KTsKICAgICAgICAgICAgIGlmICh0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB0LT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBUaW1p
bmdGdW5jdGlvbiYgdGYgPSAoKnQpW2ldLT50aW1pbmdGdW5jdGlvbigpOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGYgPSB0LT5hbmltYXRpb24oaSktPnRpbWlu
Z0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChDU1NUaW1pbmdG
dW5jdGlvblZhbHVlOjpjcmVhdGUodGYueDEoKSwgdGYueTEoKSwgdGYueDIoKSwgdGYueTIoKSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTExMDIsNyArMTEwMiw3IEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWMKICAgICAgICAgICAgIGNv
bnN0IEFuaW1hdGlvbkxpc3QqIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKICAgICAgICAgICAg
IGlmICh0KSB7CiAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0LT5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgcHJvcCA9ICgqdClbaV0tPnByb3Bl
cnR5KCk7CisgICAgICAgICAgICAgICAgICAgIGludCBwcm9wID0gdC0+YW5pbWF0aW9uKGkpLT5w
cm9wZXJ0eSgpOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAg
ICAgICAgICAgICAgICBpZiAocHJvcCA9PSBjQW5pbWF0ZU5vbmUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBuYW1lID0gIm5vbmUiOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJl
dmlzaW9uIDM2NjIwKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5OSwyMiArMTk5LDIyIEBAIGlmIChpc0luaGVyaXQpIHsgXAogICAgIEFu
aW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nlc3NBbmltYXRpb25zKCk7IFwKICAgICBj
b25zdCBBbmltYXRpb25MaXN0KiBwYXJlbnRMaXN0ID0gbV9wYXJlbnRTdHlsZS0+YW5pbWF0aW9u
cygpOyBcCiAgICAgc2l6ZV90IGkgPSAwLCBwYXJlbnRTaXplID0gcGFyZW50TGlzdCA/IHBhcmVu
dExpc3QtPnNpemUoKSA6IDA7IFwKLSAgICBmb3IgKCA7IGkgPCBwYXJlbnRTaXplICYmICgqcGFy
ZW50TGlzdClbaV0tPmlzIyNQcm9wIyNTZXQoKTsgKytpKSB7IFwKKyAgICBmb3IgKCA7IGkgPCBw
YXJlbnRTaXplICYmIHBhcmVudExpc3QtPmFuaW1hdGlvbihpKS0+aXMjI1Byb3AjI1NldCgpOyAr
K2kpIHsgXAogICAgICAgICBpZiAobGlzdC0+c2l6ZSgpIDw9IGkpIFwKICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAgICAgICAoKmxpc3QpW2ldLT5z
ZXQjI1Byb3AoKCpwYXJlbnRMaXN0KVtpXS0+cHJvcCgpKTsgXAorICAgICAgICBsaXN0LT5hbmlt
YXRpb24oaSktPnNldCMjUHJvcChwYXJlbnRMaXN0LT5hbmltYXRpb24oaSktPnByb3AoKSk7IFwK
ICAgICB9IFwKICAgICBcCiAgICAgLyogUmVzZXQgYW55IHJlbWFpbmluZyBhbmltYXRpb25zIHRv
IG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKICAgICBmb3IgKCA7IGkgPCBsaXN0LT5z
aXplKCk7ICsraSkgXAotICAgICAgICAoKmxpc3QpW2ldLT5jbGVhciMjUHJvcCgpOyBcCisgICAg
ICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+Y2xlYXIjI1Byb3AoKTsgXAogfSBlbHNlIGlmIChpc0lu
aXRpYWwpIHsgXAogICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nlc3NBbmlt
YXRpb25zKCk7IFwKICAgICBpZiAobGlzdC0+aXNFbXB0eSgpKSBcCiAgICAgICAgIGxpc3QtPmFw
cGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAgICgqbGlzdClbMF0tPnNldCMjUHJvcChS
ZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbiMjUHJvcCgpKTsgXAorICAgIGxpc3QtPmFuaW1h
dGlvbigwKS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uIyNQcm9wKCkp
OyBcCiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgXAotICAg
ICAgICAoKmxpc3QpWzBdLT5jbGVhciMjUHJvcCgpOyBcCisgICAgICAgIGxpc3QtPmFuaW1hdGlv
bigwKS0+Y2xlYXIjI1Byb3AoKTsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9BTklNQVRJT05fVkFM
VUUocHJvcCwgUHJvcCwgdmFsdWUpIHsgXApAQCAtMjI5LDE4ICsyMjksMTggQEAgaWYgKHZhbHVl
LT5pc1ZhbHVlTGlzdCgpKSB7IFwKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHZh
bHVlTGlzdC0+bGVuZ3RoKCk7IGkrKykgeyBcCiAgICAgICAgIGlmIChjaGlsZEluZGV4IDw9IGxp
c3QtPnNpemUoKSkgXAogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRl
KCkpOyBcCi0gICAgICAgIG1hcEFuaW1hdGlvbiMjUHJvcCgoKmxpc3QpW2NoaWxkSW5kZXhdLmdl
dCgpLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOyBcCisgICAgICAgIG1h
cEFuaW1hdGlvbiMjUHJvcChsaXN0LT5hbmltYXRpb24oY2hpbGRJbmRleCksIHZhbHVlTGlzdC0+
aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhpKSk7IFwKICAgICAgICAgKytjaGlsZEluZGV4OyBcCiAg
ICAgfSBcCiB9IGVsc2UgeyBcCiAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkgXAogICAgICAgICBs
aXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKLSAgICBtYXBBbmltYXRpb24jI1By
b3AoKCpsaXN0KVtjaGlsZEluZGV4XS5nZXQoKSwgdmFsdWUpOyBcCisgICAgbWFwQW5pbWF0aW9u
IyNQcm9wKGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpOyBcCiAgICAgY2hpbGRJ
bmRleCA9IDE7IFwKIH0gXAogZm9yICggOyBjaGlsZEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2No
aWxkSW5kZXgpIHsgXAogICAgIC8qIFJlc2V0IGFsbCByZW1haW5pbmcgYW5pbWF0aW9ucyB0byBu
b3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCi0gICAgKCpsaXN0KVtjaGlsZEluZGV4XS0+
Y2xlYXIjI1Byb3AoKTsgXAorICAgIGxpc3QtPmFuaW1hdGlvbihjaGlsZEluZGV4KS0+Y2xlYXIj
I1Byb3AoKTsgXAogfSBcCiB9CiAKQEAgLTI0OSwyMiArMjQ5LDIyIEBAIGlmIChpc0luaGVyaXQp
IHsgXAogICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0eWxlLT5hY2Nlc3NUcmFuc2l0aW9u
cygpOyBcCiAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogcGFyZW50TGlzdCA9IG1fcGFyZW50U3R5
bGUtPnRyYW5zaXRpb25zKCk7IFwKICAgICBzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBwYXJl
bnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDsgXAotICAgIGZvciAoIDsgaSA8IHBhcmVu
dFNpemUgJiYgKCpwYXJlbnRMaXN0KVtpXS0+aXMjI1Byb3AjI1NldCgpOyArK2kpIHsgXAorICAg
IGZvciAoIDsgaSA8IHBhcmVudFNpemUgJiYgcGFyZW50TGlzdC0+YW5pbWF0aW9uKGkpLT5pcyMj
UHJvcCMjU2V0KCk7ICsraSkgeyBcCiAgICAgICAgIGlmIChsaXN0LT5zaXplKCkgPD0gaSkgXAog
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpOyBcCi0gICAgICAg
ICgqbGlzdClbaV0tPnNldCMjUHJvcCgoKnBhcmVudExpc3QpW2ldLT5wcm9wKCkpOyBcCisgICAg
ICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+c2V0IyNQcm9wKHBhcmVudExpc3QtPmFuaW1hdGlvbihp
KS0+cHJvcCgpKTsgXAogICAgIH0gXAogICAgIFwKICAgICAvKiBSZXNldCBhbnkgcmVtYWluaW5n
IHRyYW5zaXRpb25zIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBzZXQuICovIFwKICAgICBmb3Ig
KCA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgXAotICAgICAgICAoKmxpc3QpW2ldLT5jbGVhciMj
UHJvcCgpOyBcCisgICAgICAgIGxpc3QtPmFuaW1hdGlvbihpKS0+Y2xlYXIjI1Byb3AoKTsgXAog
fSBlbHNlIGlmIChpc0luaXRpYWwpIHsgXAogICAgIEFuaW1hdGlvbkxpc3QqIGxpc3QgPSBtX3N0
eWxlLT5hY2Nlc3NUcmFuc2l0aW9ucygpOyBcCiAgICAgaWYgKGxpc3QtPmlzRW1wdHkoKSkgXAog
ICAgICAgICBsaXN0LT5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKLSAgICAoKmxpc3Qp
WzBdLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb24jI1Byb3AoKSk7IFwK
KyAgICBsaXN0LT5hbmltYXRpb24oMCktPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbEFu
aW1hdGlvbiMjUHJvcCgpKTsgXAogICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbGlzdC0+c2l6
ZSgpOyArK2kpIFwKLSAgICAgICAgKCpsaXN0KVswXS0+Y2xlYXIjI1Byb3AoKTsgXAorICAgICAg
ICBsaXN0LT5hbmltYXRpb24oMCktPmNsZWFyIyNQcm9wKCk7IFwKIH0KIAogI2RlZmluZSBIQU5E
TEVfVFJBTlNJVElPTl9WQUxVRShwcm9wLCBQcm9wLCB2YWx1ZSkgeyBcCkBAIC0yNzksMTggKzI3
OSwxOCBAQCBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAogICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKICAgICAgICAgaWYg
KGNoaWxkSW5kZXggPD0gbGlzdC0+c2l6ZSgpKSBcCiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
QW5pbWF0aW9uOjpjcmVhdGUoKSk7IFwKLSAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKCgqbGlz
dClbY2hpbGRJbmRleF0uZ2V0KCksIHZhbHVlTGlzdC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjayhp
KSk7IFwKKyAgICAgICAgbWFwQW5pbWF0aW9uIyNQcm9wKGxpc3QtPmFuaW1hdGlvbihjaGlsZElu
ZGV4KSwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsgXAogICAgICAgICAr
K2NoaWxkSW5kZXg7IFwKICAgICB9IFwKIH0gZWxzZSB7IFwKICAgICBpZiAobGlzdC0+aXNFbXB0
eSgpKSBcCiAgICAgICAgIGxpc3QtPmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTsgXAotICAg
IG1hcEFuaW1hdGlvbiMjUHJvcCgoKmxpc3QpW2NoaWxkSW5kZXhdLmdldCgpLCB2YWx1ZSk7IFwK
KyAgICBtYXBBbmltYXRpb24jI1Byb3AobGlzdC0+YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1
ZSk7IFwKICAgICBjaGlsZEluZGV4ID0gMTsgXAogfSBcCiBmb3IgKCA7IGNoaWxkSW5kZXggPCBs
aXN0LT5zaXplKCk7ICsrY2hpbGRJbmRleCkgeyBcCiAgICAgLyogUmVzZXQgYWxsIHJlbWFpbmlu
ZyB0cmFuc2l0aW9ucyB0byBub3QgaGF2ZSB0aGUgcHJvcGVydHkgc2V0LiAqLyBcCi0gICAgKCps
aXN0KVtjaGlsZEluZGV4XS0+Y2xlYXIjI1Byb3AoKTsgXAorICAgIGxpc3QtPmFuaW1hdGlvbihj
aGlsZEluZGV4KS0+Y2xlYXIjI1Byb3AoKTsgXAogfSBcCiB9CiAKQEAgLTU1NzYsNyArNTU3Niw3
IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3AKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFw
cGVuZChTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHN4LCBzeSwgZ2V0VHJhbnNmb3Jt
T3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlvblR5cGUoKSkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoc3gsIHN5LCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHZhbC0+b3BlcmF0aW9u
VHlwZSgpKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uOgpAQCAtNTYwMCw3ICs1NjAwLDcgQEAgYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcAogICAgICAgICAgICAgICAgICAgICBpZiAoIW9rKQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbnMuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KHR4LCB0eSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlvblR5cGUoKSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHR4LCB0eSwgZ2V0VHJhbnNmb3JtT3Bl
cmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlvblR5cGUoKSkpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjogewpAQCAtNTYxMCw3ICs1
NjEwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcAogICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEKQogICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUg
PSBncmFkMmRlZyhhbmdsZSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShh
bmdsZSwgZ2V0VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSh2YWwtPm9wZXJhdGlvblR5cGUoKSkpKTsK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKFJvdGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjoKQEAgLTU2MzgsNyArNTYzOCw3IEBAIGJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y3JlYXRlVHJhbnNmb3JtT3AKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoU2tld1RyYW5zZm9y
bU9wZXJhdGlvbjo6Y3JlYXRlKGFuZ2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlKHZhbC0+b3BlcmF0aW9uVHlwZSgpKSkpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2tld1RyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGFu
Z2xlWCwgYW5nbGVZLCBnZXRUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKHZhbC0+b3BlcmF0aW9uVHlw
ZSgpKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uOiB7CkBAIC01NjQ4LDcgKzU2NDgsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0
b3I6OmNyZWF0ZVRyYW5zZm9ybU9wCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGQgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygz
KSktPmdldEZsb2F0VmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDQp
KS0+Z2V0RmxvYXRWYWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBmbG9hdCBmID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkp
LT5nZXRGbG9hdFZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5k
KE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMsIGQsIGUsIGYpKTsKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuYXBwZW5kKE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKGEsIGIsIGMsIGQsIGUsIGYpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb246CkluZGV4
OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAJKHJldmlzaW9uIDM2NjIw
KQorKysgV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDIxICsxMzAsMjEgQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRp
b25zIGJsZW5kRgogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIHRyYW5zZm9ybSBmdW5jdGlvbiBsaXN0
LCB1c2UgdGhhdCB0byBkbyBhIHBlci1mdW5jdGlvbiBhbmltYXRpb24uIE90aGVyd2lzZSBkbyBh
IE1hdHJpeCBhbmltYXRpb24KICAgICBpZiAoYW5pbS0+aXNUcmFuc2Zvcm1GdW5jdGlvbkxpc3RW
YWxpZCgpKSB7Ci0gICAgICAgIHVuc2lnbmVkIGZyb21TaXplID0gZnJvbS5zaXplKCk7Ci0gICAg
ICAgIHVuc2lnbmVkIHRvU2l6ZSA9IHRvLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgZnJvbVNp
emUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIHRvU2l6ZSA9
IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7CiAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBtYXgoZnJv
bVNpemUsIHRvU2l6ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGZyb21PcCA9IChp
IDwgZnJvbVNpemUgJiYgIWZyb21baV0tPmlzSWRlbnRpdHkoKSkgPyBmcm9tW2ldLmdldCgpIDog
MDsKLSAgICAgICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IHRvT3AgPSAoaSA8IHRv
U2l6ZSAmJiAhdG9baV0tPmlzSWRlbnRpdHkoKSkgPyB0b1tpXS5nZXQoKSA6IDA7CisgICAgICAg
ICAgICBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplICYm
ICFmcm9tLm9wZXJhdGlvbnMoKVtpXS0+aXNJZGVudGl0eSgpKSA/IGZyb20ub3BlcmF0aW9ucygp
W2ldLmdldCgpIDogMDsKKyAgICAgICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IHRv
T3AgPSAoaSA8IHRvU2l6ZSAmJiAhdG8ub3BlcmF0aW9ucygpW2ldLT5pc0lkZW50aXR5KCkpID8g
dG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKICAgICAgICAgICAgIFJlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyB0b09wLT5ibGVuZChmcm9tT3AuZ2V0KCks
IHByb2dyZXNzKSA6IChmcm9tT3AgPyBmcm9tT3AtPmJsZW5kKDAsIHByb2dyZXNzLCB0cnVlKSA6
IDApOwogICAgICAgICAgICAgaWYgKGJsZW5kZWRPcCkKLSAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5h
cHBlbmQoYmxlbmRlZE9wKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFJl
ZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+IGlkZW50aXR5T3AgPSBJZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvT3AgPyB0b09wIDogaWRlbnRpdHlP
cCk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3Ag
PyB0b09wIDogaWRlbnRpdHlPcCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6IGlkZW50aXR5T3ApOworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChmcm9tT3AgPyBmcm9t
T3AgOiBpZGVudGl0eU9wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7
CkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJs
ZW5kRgogICAgICAgICB0b1QuYmxlbmQoZnJvbVQsIHByb2dyZXNzKTsKICAgICAgICAgCiAgICAg
ICAgIC8vIEFwcGVuZCB0aGUgcmVzdWx0Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUodG9ULmEoKSwgdG9ULmIoKSwgdG9ULmMoKSwgdG9ULmQo
KSwgdG9ULmUoKSwgdG9ULmYoKSkpOworICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVu
ZChNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh0b1QuYSgpLCB0b1QuYigpLCB0b1Qu
YygpLCB0b1QuZCgpLCB0b1QuZSgpLCB0b1QuZigpKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1
bHQ7CiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRp
b24uY3BwCShyZXZpc2lvbiAzNjYyMCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvCiAKICAgICAvLyBDaGVjayB0byBzZWUg
aWYgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCktPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvbiogYW5pbSA9ICgqdGFyZ2V0U3R5bGUtPnRyYW5zaXRp
b25zKCkpW2ldLmdldCgpOworICAgICAgICBjb25zdCBBbmltYXRpb24qIGFuaW0gPSB0YXJnZXRT
dHlsZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogICAgICAgICBkb3VibGUgZHVyYXRp
b24gPSBhbmltLT5kdXJhdGlvbigpOwogICAgICAgICBkb3VibGUgZGVsYXkgPSBhbmltLT5kZWxh
eSgpOwogCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0
ZUtleWZyYW1lQQogICAgIGlmICh0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKSB7CiAgICAgICAg
IGludCBudW1BbmltcyA9IHRhcmdldFN0eWxlLT5hbmltYXRpb25zKCktPnNpemUoKTsKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBjb25z
dCBBbmltYXRpb24qIGFuaW0gPSAoKnRhcmdldFN0eWxlLT5hbmltYXRpb25zKCkpW2ldLmdldCgp
OworICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBhbmltID0gdGFyZ2V0U3R5bGUtPmFuaW1h
dGlvbnMoKS0+YW5pbWF0aW9uKGkpOwogCiAgICAgICAgICAgICBpZiAoIWFuaW0tPmlzVmFsaWRB
bmltYXRpb24oKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE5OCw3ICsxOTgsNyBA
QCBSZW5kZXJTdHlsZSogQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlCiAgICAgLy8gdG8gZmls
bCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCiAgICAgaWYgKHRhcmdldFN0eWxl
LT5oYXNBbmltYXRpb25zKCkpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJn
ZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3Qg
QW5pbWF0aW9uKiBhbmltID0gKCp0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpKVtpXS5nZXQoKTsK
KyAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbiogYW5pbSA9IHRhcmdldFN0eWxlLT5hbmltYXRp
b25zKCktPmFuaW1hdGlvbihpKTsKIAogICAgICAgICAgICAgaWYgKGFuaW0tPmlzVmFsaWRBbmlt
YXRpb24oKSkgewogICAgICAgICAgICAgICAgIGlmIChLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJh
bWVBbmltID0gZ2V0S2V5ZnJhbWVBbmltYXRpb24oYW5pbS0+bmFtZSgpKSkKSW5kZXg6IFdlYkNv
cmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNjYy
MCkKKysrIFdlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzAsMjMgKzE3MCwyMyBAQCB2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2
YWxpZGF0ZVRyYW5zZm9yCiAgICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJm1f
ZnJvbVN0eWxlLT50cmFuc2Zvcm0oKTsKICAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0
b1ZhbCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOwogCi0gICAgaWYgKHZhbC0+aXNFbXB0eSgp
KQorICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHZhbCA9IHRv
VmFsOwogCi0gICAgaWYgKHZhbC0+aXNFbXB0eSgpKQorICAgIGlmICh2YWwtPm9wZXJhdGlvbnMo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgLy8gU2VlIGlmIHRo
ZSBrZXlmcmFtZXMgYXJlIHZhbGlkCiAgICAgaWYgKHZhbCAhPSB0b1ZhbCkgewogICAgICAgICAv
LyBBIGxpc3Qgb2YgbGVuZ3RoIDAgbWF0Y2hlcyBhbnl0aGluZwotICAgICAgICBpZiAoIXRvVmFs
LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCF0b1ZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHNpemVzIG9mIHRoZSBmdW5jdGlvbiBsaXN0cyBk
b24ndCBtYXRjaCwgdGhlIGxpc3RzIGRvbid0IG1hdGNoCi0gICAgICAgICAgICBpZiAodmFsLT5z
aXplKCkgIT0gdG9WYWwtPnNpemUoKSkKKyAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvbnMo
KS5zaXplKCkgIT0gdG9WYWwtPm9wZXJhdGlvbnMoKS5zaXplKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAKICAgICAgICAgICAgIC8vIElmIHRoZSB0eXBlcyBvZiBlYWNoIGZ1
bmN0aW9uIGFyZSBub3QgdGhlIHNhbWUsIHRoZSBsaXN0cyBkb24ndCBtYXRjaAotICAgICAgICAg
ICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YWwtPnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCF2YWwtPmF0KGopLT5pc1NhbWVUeXBlKCp0b1ZhbC0+YXQoaikpKQorICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB2YWwtPm9wZXJhdGlvbnMoKS5zaXplKCk7ICsr
aikgeworICAgICAgICAgICAgICAgIGlmICghdmFsLT5vcGVyYXRpb25zKClbal0tPmlzU2FtZVR5
cGUoKnRvVmFsLT5vcGVyYXRpb25zKClbal0pKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9hbmltYXRpb24v
S2V5ZnJhbWVBbmltYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9hbmltYXRp
b24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCShyZXZpc2lvbiAzNjYyMCkKKysrIFdlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMs
NyArMjEzLDcgQEAgdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2ZvcgogICAg
IFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZmlyc3RJdCA9IGVuZDsKICAg
ICAKICAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lcy0+YmVnaW5LZXlmcmFtZXMoKTsgaXQgIT0gZW5kOyArK2l0LCArK2ZpcnN0SW5k
ZXgpIHsKLSAgICAgICAgaWYgKGl0LT5zdHlsZS50cmFuc2Zvcm0oKS5zaXplKCkgPiAwKSB7Cisg
ICAgICAgIGlmIChpdC0+c3R5bGUudHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSA+IDAp
IHsKICAgICAgICAgICAgIGZpcnN0SXQgPSBpdDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0yMjksMTYgKzIyOSwxNiBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0
ZVRyYW5zZm9yCiAgICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbCA9ICZpdC0+
c3R5bGUudHJhbnNmb3JtKCk7CiAgICAgICAgIAogICAgICAgICAvLyBBIG51bGwgdHJhbnNmb3Jt
IG1hdGNoZXMgYW55dGhpbmcKLSAgICAgICAgaWYgKHZhbC0+aXNFbXB0eSgpKQorICAgICAgICBp
ZiAodmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgc2l6ZXMgb2YgdGhlIGZ1bmN0aW9uIGxpc3RzIGRv
bid0IG1hdGNoLCB0aGUgbGlzdHMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgaWYgKGZpcnN0VmFsLT5z
aXplKCkgIT0gdmFsLT5zaXplKCkpCisgICAgICAgIGlmIChmaXJzdFZhbC0+b3BlcmF0aW9ucygp
LnNpemUoKSAhPSB2YWwtPm9wZXJhdGlvbnMoKS5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgdHlwZXMgb2YgZWFjaCBmdW5jdGlvbiBhcmUg
bm90IHRoZSBzYW1lLCB0aGUgbGlzdHMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgZm9yIChzaXplX3Qg
aiA9IDA7IGogPCBmaXJzdFZhbC0+c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGlmICghZmly
c3RWYWwtPmF0KGopLT5pc1NhbWVUeXBlKCp2YWwtPmF0KGopKSkKKyAgICAgICAgZm9yIChzaXpl
X3QgaiA9IDA7IGogPCBmaXJzdFZhbC0+b3BlcmF0aW9ucygpLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICBpZiAoIWZpcnN0VmFsLT5vcGVyYXRpb25zKClbal0tPmlzU2FtZVR5cGUoKnZhbC0+
b3BlcmF0aW9ucygpW2pdKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAzNjYyMCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM5
NSwyNCArMjM5NSwyNCBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVSZWZsZWN0aW9uU3R5bGUo
CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyB0cmFuc2Zvcm07CiAgICAgc3dpdGNoIChyZW5kZXJl
cigpLT5zdHlsZSgpLT5ib3hSZWZsZWN0KCktPmRpcmVjdGlvbigpKSB7CiAgICAgICAgIGNhc2Ug
UmVmbGVjdGlvbkJlbG93OgotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQpLCBMZW5ndGgoMTAwLiwg
UGVyY2VudCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7Ci0gICAgICAgICAgICB0
cmFuc2Zvcm0uYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0
aCgwLCBGaXhlZCksIHJlbmRlcmVyKCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCks
IFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7Ci0gICAgICAgICAgICB0cmFuc2Zvcm0u
YXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoMS4wLCAtMS4wLCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbjo6U0NBTEUpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5vcGVyYXRp
b25zKCkuYXBwZW5kKFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgw
LCBGaXhlZCksIExlbmd0aCgxMDAuLCBQZXJjZW50KSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFO
U0xBVEUpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybS5vcGVyYXRpb25zKCkuYXBwZW5kKFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKExlbmd0aCgwLCBGaXhlZCksIHJlbmRlcmVy
KCktPnN0eWxlKCktPmJveFJlZmxlY3QoKS0+b2Zmc2V0KCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6
VFJBTlNMQVRFKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0ub3BlcmF0aW9ucygpLmFwcGVuZChT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKDEuMCwgLTEuMCwgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZWZs
ZWN0aW9uQWJvdmU6Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoMS4wLCAtMS4wLCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6U0NB
TEUpKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKDEwMC4sIFBlcmNlbnQpLCBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURSkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMCwgRml4ZWQp
LCByZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hSZWZsZWN0KCktPm9mZnNldCgpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLm9wZXJhdGlvbnMo
KS5hcHBlbmQoU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgxLjAsIC0xLjAsIFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLm9wZXJh
dGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3Ro
KDAsIEZpeGVkKSwgTGVuZ3RoKDEwMC4sIFBlcmNlbnQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDAsIEZpeGVkKSwgcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+Ym94UmVmbGVjdCgpLT5vZmZzZXQoKSwgVHJhbnNmb3JtT3BlcmF0aW9u
OjpUUkFOU0xBVEUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlZmxlY3Rp
b25SaWdodDoKLSAgICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEwMC4sIFBlcmNlbnQpLCBMZW5ndGgoMCwgRml4ZWQp
LCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURSkpOwotICAgICAgICAgICAgdHJhbnNmb3Jt
LmFwcGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShyZW5kZXJlcigpLT5z
dHlsZSgpLT5ib3hSZWZsZWN0KCktPm9mZnNldCgpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURSkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKC0xLjAsIDEuMCwgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFKSk7CisgICAgICAgICAgICB0cmFuc2Zvcm0ub3BlcmF0aW9ucygpLmFw
cGVuZChUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShMZW5ndGgoMTAwLiwgUGVy
Y2VudCksIExlbmd0aCgwLCBGaXhlZCksIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFKSk7
CisgICAgICAgICAgICB0cmFuc2Zvcm0ub3BlcmF0aW9ucygpLmFwcGVuZChUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZShyZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hSZWZsZWN0KCkt
Pm9mZnNldCgpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFU
RSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLm9wZXJhdGlvbnMoKS5hcHBlbmQoU2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgtMS4wLCAxLjAsIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpTQ0FMRSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVmbGVjdGlvbkxl
ZnQ6Ci0gICAgICAgICAgICB0cmFuc2Zvcm0uYXBwZW5kKFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoLTEuMCwgMS4wLCBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEUpKTsKLSAg
ICAgICAgICAgIHRyYW5zZm9ybS5hcHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoTGVuZ3RoKDEwMC4sIFBlcmNlbnQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1P
cGVyYXRpb246OlRSQU5TTEFURSkpOwotICAgICAgICAgICAgdHJhbnNmb3JtLmFwcGVuZChUcmFu
c2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShyZW5kZXJlcigpLT5zdHlsZSgpLT5ib3hS
ZWZsZWN0KCktPm9mZnNldCgpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLm9wZXJhdGlvbnMoKS5hcHBlbmQo
U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgtMS4wLCAxLjAsIFNjYWxlVHJhbnNmb3Jt
T3BlcmF0aW9uOjpTQ0FMRSkpOworICAgICAgICAgICAgdHJhbnNmb3JtLm9wZXJhdGlvbnMoKS5h
cHBlbmQoVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoTGVuZ3RoKDEwMC4sIFBl
cmNlbnQpLCBMZW5ndGgoMCwgRml4ZWQpLCBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURSkp
OworICAgICAgICAgICAgdHJhbnNmb3JtLm9wZXJhdGlvbnMoKS5hcHBlbmQoVHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUocmVuZGVyZXIoKS0+c3R5bGUoKS0+Ym94UmVmbGVjdCgp
LT5vZmZzZXQoKSwgTGVuZ3RoKDAsIEZpeGVkKSwgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xB
VEUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBuZXdTdHlsZS0+c2V0VHJhbnNm
b3JtKHRyYW5zZm9ybSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb25M
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9BbmltYXRpb25M
aXN0LmNwcAkocmV2aXNpb24gMzY2MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Bbmlt
YXRpb25MaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEwIEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgRklMTF9VTlNFVF9QUk9QRVJUWSh0ZXN0LCBwcm9wR2V0
LCBwcm9wU2V0KSBcCi1mb3IgKGkgPSAwOyBpIDwgc2l6ZSgpICYmICgqdGhpcylbaV0tPnRlc3Qo
KTsgKytpKSB7IH0gXAorZm9yIChpID0gMDsgaSA8IHNpemUoKSAmJiBhbmltYXRpb24oaSktPnRl
c3QoKTsgKytpKSB7IH0gXAogaWYgKGkgPCBzaXplKCkgJiYgaSAhPSAwKSB7IFwKICAgICBmb3Ig
KHNpemVfdCBqID0gMDsgaSA8IHNpemUoKTsgKytpLCArK2opIFwKLSAgICAgICAgKCp0aGlzKVtp
XS0+cHJvcFNldCgoKnRoaXMpW2pdLT5wcm9wR2V0KCkpOyBcCisgICAgICAgIGFuaW1hdGlvbihp
KS0+cHJvcFNldChhbmltYXRpb24oaiktPnByb3BHZXQoKSk7IFwKIH0KIAogdm9pZCBBbmltYXRp
b25MaXN0OjpmaWxsVW5zZXRQcm9wZXJ0aWVzKCkKQEAgLTQ5LDcgKzQ5LDcgQEAgYm9vbCBBbmlt
YXRpb25MaXN0OjpvcGVyYXRvcj09KGNvbnN0IEFuaQogICAgIGlmIChzaXplKCkgIT0gby5zaXpl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emUoKTsgKytpKQotICAgICAgICBpZiAoKmF0KGkpICE9ICpvLmF0KGkpKQorICAgICAgICBpZiAo
KmFuaW1hdGlvbihpKSAhPSAqby5hbmltYXRpb24oaSkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9B
bmltYXRpb25MaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQW5p
bWF0aW9uTGlzdC5oCShyZXZpc2lvbiAzNjYyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0FuaW1hdGlvbkxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDI3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQW5pbWF0aW9uTGlzdCA6IHB1YmxpYyBWZWN0b3I8
UmVmUHRyPEFuaW1hdGlvbj4gPiB7CitjbGFzcyBBbmltYXRpb25MaXN0IHsKIHB1YmxpYzoKICAg
ICB2b2lkIGZpbGxVbnNldFByb3BlcnRpZXMoKTsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QW5pbWF0aW9uTGlzdCYgbykgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFuaW1h
dGlvbkxpc3QmIG8pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsK
KyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlv
bnMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b25zLmlzRW1wdHkoKTsgfQorICAgIAorICAgIHZvaWQgcmVzaXplKHNpemVfdCBuKSB7IG1fYW5p
bWF0aW9ucy5yZXNpemUobik7IH0KKyAgICB2b2lkIHJlbW92ZShzaXplX3QgaSkgeyBtX2FuaW1h
dGlvbnMucmVtb3ZlKGkpOyB9CisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxBbmltYXRpb24+
IGFuaW0pIHsgbV9hbmltYXRpb25zLmFwcGVuZChhbmltKTsgfQorICAgIAorICAgIEFuaW1hdGlv
biogYW5pbWF0aW9uKHNpemVfdCBpKSB7IHJldHVybiBtX2FuaW1hdGlvbnNbaV0uZ2V0KCk7IH0K
KyAgICBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbihzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25zW2ldLmdldCgpOyB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxSZWZQ
dHI8QW5pbWF0aW9uPiA+IG1fYW5pbWF0aW9uczsKIH07ICAgIAogCiAKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDM2NjIwKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgs
OSArMTU4LDkgQEAgdm9pZCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp1cGRhdGVLZQogewog
ICAgIGlmIChtX2FuaW1hdGlvbnMpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FuaW1hdGlvbnMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKCptX2FuaW1hdGlv
bnMpW2ldLT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8S2V5
ZnJhbWVMaXN0PiBrZXlmcmFtZSA9IHN0eWxlU2VsZWN0b3ItPmZpbmRLZXlmcmFtZVJ1bGUoKCpt
X2FuaW1hdGlvbnMpW2ldLT5uYW1lKCkpOwotICAgICAgICAgICAgICAgICgqbV9hbmltYXRpb25z
KVtpXS0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUpOworICAgICAgICAgICAgaWYgKG1f
YW5pbWF0aW9ucy0+YW5pbWF0aW9uKGkpLT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSA9IHN0eWxlU2VsZWN0b3ItPmZp
bmRLZXlmcmFtZVJ1bGUobV9hbmltYXRpb25zLT5hbmltYXRpb24oaSktPm5hbWUoKSk7CisgICAg
ICAgICAgICAgICAgbV9hbmltYXRpb25zLT5hbmltYXRpb24oaSktPnNldEFuaW1hdGlvbktleWZy
YW1lKGtleWZyYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk0OSwx
MSArOTQ5LDExIEBAIHZvaWQgUmVuZGVyU3R5bGU6OmFwcGx5VHJhbnNmb3JtKEFmZmluZVQKICAg
ICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIG9ubHkgdHJhbnNmb3JtIGlzIGEg
dHJhbnNsYXRpb24sIHNpbmNlIHRoZSB0cmFuc2Zvcm0tb3JpZ2luIGlzIGlycmVsZXZhbnQKICAg
ICAvLyBpbiB0aGF0IGNhc2UuCiAgICAgYm9vbCBhcHBseVRyYW5zZm9ybU9yaWdpbiA9IGZhbHNl
OwotICAgIHVuc2lnbmVkIHMgPSByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0tPm1f
b3BlcmF0aW9ucy5zaXplKCk7CisgICAgdW5zaWduZWQgcyA9IHJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zLm9wZXJhdGlvbnMoKS5zaXplKCk7CiAgICAgdW5z
aWduZWQgaTsKICAgICBpZiAoaW5jbHVkZVRyYW5zZm9ybU9yaWdpbikgewogICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgczsgaSsrKSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9v
cGVyYXRpb25zW2ldLT5nZXRPcGVyYXRpb25UeXBlKCk7CisgICAgICAgICAgICBUcmFuc2Zvcm1P
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3Ry
YW5zZm9ybS0+bV9vcGVyYXRpb25zLm9wZXJhdGlvbnMoKVtpXS0+Z2V0T3BlcmF0aW9uVHlwZSgp
OwogICAgICAgICAgICAgaWYgKHR5cGUgIT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVf
WCAmJiAKICAgICAgICAgICAgICAgICAgICAgdHlwZSAhPSBUcmFuc2Zvcm1PcGVyYXRpb246OlRS
QU5TTEFURV9ZICYmIAogICAgICAgICAgICAgICAgICAgICB0eXBlICE9IFRyYW5zZm9ybU9wZXJh
dGlvbjo6VFJBTlNMQVRFKSB7CkBAIC05NjcsNyArOTY3LDcgQEAgdm9pZCBSZW5kZXJTdHlsZTo6
YXBwbHlUcmFuc2Zvcm0oQWZmaW5lVAogICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKHRyYW5z
Zm9ybU9yaWdpblgoKS5jYWxjRmxvYXRWYWx1ZShib3JkZXJCb3hTaXplLndpZHRoKCkpLCB0cmFu
c2Zvcm1PcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94U2l6ZS5oZWlnaHQoKSkpOwog
ICAgIAogICAgIGZvciAoaSA9IDA7IGkgPCBzOyBpKyspCi0gICAgICAgIHJhcmVOb25Jbmhlcml0
ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zW2ldLT5hcHBseSh0cmFuc2Zvcm0sIGJv
cmRlckJveFNpemUpOworICAgICAgICByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0t
Pm1fb3BlcmF0aW9ucy5vcGVyYXRpb25zKClbaV0tPmFwcGx5KHRyYW5zZm9ybSwgYm9yZGVyQm94
U2l6ZSk7CiAgICAgICAgIAogICAgIGlmIChhcHBseVRyYW5zZm9ybU9yaWdpbikKICAgICAgICAg
dHJhbnNmb3JtLnRyYW5zbGF0ZSgtdHJhbnNmb3JtT3JpZ2luWCgpLmNhbGNGbG9hdFZhbHVlKGJv
cmRlckJveFNpemUud2lkdGgoKSksIC10cmFuc2Zvcm1PcmlnaW5ZKCkuY2FsY0Zsb2F0VmFsdWUo
Ym9yZGVyQm94U2l6ZS5oZWlnaHQoKSkpOwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgdm9pZCBSZW5k
ZXJTdHlsZTo6YWRqdXN0QW5pbWF0aW9ucygpCiAKICAgICAvLyBnZXQgcmlkIG9mIGVtcHR5IHRy
YW5zaXRpb25zIGFuZCBhbnl0aGluZyBiZXlvbmQgdGhlbQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYW5pbWF0aW9uTGlzdC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCgqYW5pbWF0
aW9uTGlzdClbaV0tPmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYW5pbWF0aW9uTGlzdC0+YW5p
bWF0aW9uKGkpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGFuaW1hdGlvbkxpc3QtPnJlc2l6
ZShpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMDgzLDcgKzEwODMsNyBA
QCB2b2lkIFJlbmRlclN0eWxlOjphZGp1c3RUcmFuc2l0aW9ucygpCiAKICAgICAvLyBnZXQgcmlk
IG9mIGVtcHR5IHRyYW5zaXRpb25zIGFuZCBhbnl0aGluZyBiZXlvbmQgdGhlbQogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNpdGlvbkxpc3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IGlmICgoKnRyYW5zaXRpb25MaXN0KVtpXS0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICh0cmFu
c2l0aW9uTGlzdC0+YW5pbWF0aW9uKGkpLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHRyYW5z
aXRpb25MaXN0LT5yZXNpemUoaSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MTEwMSw3ICsxMTAxLDcgQEAgdm9pZCBSZW5kZXJTdHlsZTo6YWRqdXN0VHJhbnNpdGlvbnMoKQog
ICAgIC8vIGJ1dCB0aGUgbGlzdHMgdGVuZCB0byBiZSB2ZXJ5IHNob3J0LCBzbyBpdCBpcyBwcm9i
YWJseSBvawogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhbnNpdGlvbkxpc3QtPnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpKzE7IGogPCB0cmFuc2l0aW9uTGlz
dC0+c2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgIGlmICgoKnRyYW5zaXRpb25MaXN0KVtpXS0+
cHJvcGVydHkoKSA9PSAoKnRyYW5zaXRpb25MaXN0KVtqXS0+cHJvcGVydHkoKSkgeworICAgICAg
ICAgICAgaWYgKHRyYW5zaXRpb25MaXN0LT5hbmltYXRpb24oaSktPnByb3BlcnR5KCkgPT0gdHJh
bnNpdGlvbkxpc3QtPmFuaW1hdGlvbihqKS0+cHJvcGVydHkoKSkgewogICAgICAgICAgICAgICAg
IC8vIHRvc3MgaQogICAgICAgICAgICAgICAgIHRyYW5zaXRpb25MaXN0LT5yZW1vdmUoaSk7CiAg
ICAgICAgICAgICAgICAgaiA9IGk7CkBAIC0xMTI4LDcgKzExMjgsNyBAQCBjb25zdCBBbmltYXRp
b24qIFJlbmRlclN0eWxlOjp0cmFuc2l0aW9uCiB7CiAgICAgaWYgKHRyYW5zaXRpb25zKCkpIHsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFuc2l0aW9ucygpLT5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBwID0gKCp0cmFuc2l0aW9ucygpKVtp
XS5nZXQoKTsKKyAgICAgICAgICAgIGNvbnN0IEFuaW1hdGlvbiogcCA9IHRyYW5zaXRpb25zKCkt
PmFuaW1hdGlvbihpKTsKICAgICAgICAgICAgIGlmIChwLT5wcm9wZXJ0eSgpID09IGNBbmltYXRl
QWxsIHx8IHAtPnByb3BlcnR5KCkgPT0gcHJvcGVydHkpIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gcDsKICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuaAkocmV2aXNpb24gMzY2MjApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJT
dHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MTcsNyArODE3LDcgQEAgcHVibGljOgogICAgIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zOyB9CiAgICAgTGVuZ3Ro
IHRyYW5zZm9ybU9yaWdpblgoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV90cmFuc2Zvcm0tPm1feDsgfQogICAgIExlbmd0aCB0cmFuc2Zvcm1PcmlnaW5ZKCkgY29uc3Qg
eyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5tX3k7IH0KLSAgICBi
b29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuICFyYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bV90cmFuc2Zvcm0tPm1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1RyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuICFyYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0t
Pm1fb3BlcmF0aW9ucy5vcGVyYXRpb25zKCkuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBhcHBseVRy
YW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplLCBi
b29sIGluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4gPSB0cnVlKSBjb25zdDsKICAgICBib29sIGhhc01h
c2soKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tYXNrLmhhc0ltYWdl
KCkgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbWFza0JveEltYWdlLmhhc0ltYWdlKCk7IH0K
ICAgICAvLyBFbmQgQ1NTMyBHZXR0ZXJzCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9U
cmFuc2Zvcm1PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMzY2MjApCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksMTcgKzI5LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFRyYW5zZm9ybU9wZXJhdGlv
bnM6OlRyYW5zZm9ybU9wZXJhdGlvbnMoYm9vbCBtYWtlSWRlbnRpdHkpCiB7CiAgICAgaWYgKG1h
a2VJZGVudGl0eSkKLSAgICAgICAgYXBwZW5kKElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uOjpj
cmVhdGUoKSk7CisgICAgICAgIG1fb3BlcmF0aW9ucy5hcHBlbmQoSWRlbnRpdHlUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSgpKTsKIH0KIAogYm9vbCBUcmFuc2Zvcm1PcGVyYXRpb25zOjpvcGVy
YXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNvbnN0CiB7Ci0gICAgaWYgKHNp
emUoKSAhPSBvLnNpemUoKSkKKyAgICBpZiAobV9vcGVyYXRpb25zLnNpemUoKSAhPSBvLm1fb3Bl
cmF0aW9ucy5zaXplKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgdW5z
aWduZWQgcyA9IHNpemUoKTsKKyAgICB1bnNpZ25lZCBzID0gbV9vcGVyYXRpb25zLnNpemUoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgczsgaSsrKSB7Ci0gICAgICAgIGlmICgqYXQo
aSkgIT0gKm8uYXQoaSkpCisgICAgICAgIGlmICgqbV9vcGVyYXRpb25zW2ldICE9ICpvLm1fb3Bl
cmF0aW9uc1tpXSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9UcmFuc2Zvcm1PcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvVHJhbnNmb3JtT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAzNjYyMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1RyYW5zZm9ybU9wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbnMgOiBwdWJsaWMgVmVjdG9yPFJlZlB0cjxU
cmFuc2Zvcm1PcGVyYXRpb24+ID4geworY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9ucyB7CiBwdWJs
aWM6CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyhib29sIG1ha2VJZGVudGl0eSA9IGZhbHNlKTsK
ICAgICAKQEAgLTQzLDkgKzQzLDEyIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFwcGx5KGNv
bnN0IEludFNpemUmIHN6LCBBZmZpbmVUcmFuc2Zvcm0mIHQpIGNvbnN0CiAgICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBhdChp
KS0+YXBwbHkodCwgc3opOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vcGVy
YXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9vcGVyYXRpb25zW2ldLT5hcHBseSh0
LCBzeik7CiAgICAgfQorICAgIAorICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9u
PiA+JiBvcGVyYXRpb25zKCkgeyByZXR1cm4gbV9vcGVyYXRpb25zOyB9CisgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID4mIG9wZXJhdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX29wZXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4gPiBtX29wZXJhdGlvbnM7Cg==
</data>
<flag name="review"
          id="10539"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>