<?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>37349</bug_id>
          
          <creation_ts>2010-04-09 12:28:55 -0700</creation_ts>
          <short_desc>[RenderStyle Cleanup] Clean up BorderValue, CollapsedBorderValue, BorderData and OutlineValue</short_desc>
          <delta_ts>2010-04-09 14:13:43 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>210847</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-04-09 12:28:55 -0700</bug_when>
    <thetext>Make them all have the same style (classes with m_ members and accessors for those members).  Let RenderStyle poke the members directly for setting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210860</commentid>
    <comment_count>1</comment_count>
      <attachid>52981</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-04-09 13:01:23 -0700</bug_when>
    <thetext>Created attachment 52981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210863</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-09 13:02:27 -0700</bug_when>
    <thetext>Attachment 52981 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/rendering/style/BorderValue.h:44:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/style/BorderValue.h:49:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/style/BorderData.h:86:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 3 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210866</commentid>
    <comment_count>3</comment_count>
      <attachid>52981</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-04-09 13:09:24 -0700</bug_when>
    <thetext>Comment on attachment 52981
Patch

&gt;  class BorderData {
&gt; +friend class RenderStyle;

I think we normally put friend declarations at the start of &quot;private:&quot; sections. But maybe that&apos;s not as common as I think? (Same goes for BorderValue and CollapsedBorderValue.)

&gt; +    Color color() const { return m_borderColor; }

Could make this return a const Color&amp; while you&apos;re at it.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210872</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-04-09 13:22:11 -0700</bug_when>
    <thetext>Fixed in r57355.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210921</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-09 14:11:19 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57355 might have broken SnowLeopard Intel Release (Tests)
The following changes are on the blame list:
http://trac.webkit.org/changeset/57355
http://trac.webkit.org/changeset/57356</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210924</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-09 14:13:43 -0700</bug_when>
    <thetext>Looks like our flaky XMLHttpRequest woes on Snow Leopard aren&apos;t over:
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r57358%20(8003)/http/tests/xmlhttprequest/basic-auth-pretty-diff.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52981</attachid>
            <date>2010-04-09 13:01:23 -0700</date>
            <delta_ts>2010-04-09 13:09:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>44364</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzM1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI4IEBACisyMDEwLTA0LTA5ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzM0OSwgUmVuZGVy
U3R5bGUgY2xlYW51cC4gIFdvcmtpbmcgZnJvbSB0aGUgb3V0c2lkZSBpbiB0bworICAgICAgICBi
cmluZyBzb21lIHN0eWxlIGNvbnNpc3RlbmN5IHRvIFJlbmRlclN0eWxlIGFuZCBpdHMgYXNzb2Np
YXRlZCBjbGFzc2VzLiAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlCisgICAgICAgIGJvcmRlciBh
bmQgb3V0bGluZSBjbGFzc2VzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjYWxjQm9yZGVyTGVmdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpvdXRlckJvcmRlclRvcCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6b3V0ZXJCb3JkZXJCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGU6Om91dGVyQm9yZGVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6
b3V0ZXJCb3JkZXJSaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQm9yZGVycyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclRvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckJvdHRvbSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckxlZnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJSaWdodCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckRh
dGE6Omhhc0JvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJEYXRhOjpoYXNCb3JkZXJS
YWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVyRGF0YTo6Ym9yZGVyTGVmdFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckRhdGE6OmJvcmRlclJpZ2h0V2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6Qm9yZGVyRGF0YTo6Ym9yZGVyVG9wV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6Qm9yZGVyRGF0YTo6Ym9yZGVyQm90dG9tV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qm9y
ZGVyRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJEYXRhOjpsZWZ0
KToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckRhdGE6OnJpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OkJvcmRlckRhdGE6OnRvcCk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJEYXRhOjpib3R0
b20pOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVyRGF0YTo6aW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Qm9yZGVyRGF0YTo6dG9wTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJEYXRh
Ojp0b3BSaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJEYXRhOjpib3R0b21MZWZ0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckRhdGE6OmJvdHRvbVJpZ2h0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3R5bGUvQm9yZGVyVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlclZh
bHVlOjpCb3JkZXJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJWYWx1ZTo6bm9uWmVy
byk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJWYWx1ZTo6aXNUcmFuc3BhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpCb3JkZXJWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3Jl
OjpCb3JkZXJWYWx1ZTo6Y29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVyVmFsdWU6Ondp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlclZhbHVlOjpzdHlsZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL0NvbGxhcHNlZEJvcmRlclZhbHVlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb2xsYXBzZWRCb3JkZXJWYWx1ZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29sbGFwc2VkQm9yZGVyVmFsdWU6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbGxhcHNlZEJvcmRlclZhbHVlOjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xsYXBz
ZWRCb3JkZXJWYWx1ZTo6ZXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbGxhcHNlZEJvcmRl
clZhbHVlOjpjb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZTo6
aXNUcmFuc3BhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZTo6
cHJlY2VkZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpDb2xsYXBzZWRCb3JkZXJWYWx1ZTo6b3Bl
cmF0b3I9PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL091dGxpbmVWYWx1ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6T3V0bGluZVZhbHVlOjpPdXRsaW5lVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6T3V0bGluZVZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Ok91dGxp
bmVWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Ok91dGxpbmVWYWx1ZTo6aXNBdXRv
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldEJvcmRlclJhZGlpRm9yUmVjdCk6CisgICAgICAgICog
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0
ZWRGbGFnczo6Ym9yZGVyTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6
Ym9yZGVyUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlclRv
cCk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyQm90dG9tKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyVG9wTGVmdFJhZGl1cyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMpOgorICAgICAgICAo
V2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlckJvdHRvbUxlZnRSYWRpdXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJMZWZ0U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlckxlZnRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyTGVmdElzVHJhbnNwYXJlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlclJpZ2h0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlclJpZ2h0Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlclJpZ2h0SXNUcmFuc3BhcmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyVG9wU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5oZXJpdGVkRmxhZ3M6OmJvcmRlclRvcENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkluaGVyaXRlZEZsYWdzOjpib3JkZXJUb3BJc1RyYW5zcGFyZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpib3JkZXJCb3R0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmhlcml0ZWRGbGFnczo6Ym9yZGVyQm90dG9tQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SW5oZXJpdGVkRmxhZ3M6OmJvcmRlckJvdHRvbUlzVHJhbnNwYXJlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5oZXJpdGVkRmxhZ3M6Om91dGxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmhlcml0ZWRGbGFnczo6b3V0bGluZVN0eWxlSXNBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
aGVyaXRlZEZsYWdzOjpvdXRsaW5lQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVk
RmxhZ3M6Om91dGxpbmVPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6
OmNvbHVtblJ1bGVDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6cmVz
ZXRCb3JkZXJUb3ApOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnJlc2V0Qm9y
ZGVyUmlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnJlc2V0Qm9yZGVy
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpyZXNldEJvcmRlckxl
ZnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnJlc2V0Qm9yZGVySW1hZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6OnJlc2V0Qm9yZGVyVG9wTGVmdFJh
ZGl1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6cmVzZXRCb3JkZXJUb3BS
aWdodFJhZGl1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFnczo6cmVzZXRCb3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdzOjpy
ZXNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRl
ZEZsYWdzOjpzZXRCb3JkZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRGbGFn
czo6c2V0Qm9yZGVyVG9wTGVmdFJhZGl1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0ZWRG
bGFnczo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJp
dGVkRmxhZ3M6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5oZXJpdGVkRmxhZ3M6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkluaGVyaXRlZEZsYWdzOjpzZXRCb3JkZXJMZWZ0V2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5oZXJpdGVkRmxhZ3M6OnNldEJvcmRlckxlZnRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbmhlcml0ZWRGbGFnczo6c2V0Qm9yZGVyTGVmdENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpzZXRCb3JkZXJSaWdodFdpZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpzZXRCb3JkZXJSaWdodFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpzZXRCb3JkZXJSaWdodENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkluaGVyaXRlZEZsYWdzOjpzZXRCb3JkZXJUb3BXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbmhlcml0ZWRGbGFnczo6c2V0Qm9yZGVyVG9wU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5oZXJpdGVkRmxhZ3M6OnNldEJvcmRlclRvcENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
aGVyaXRlZEZsYWdzOjpzZXRCb3JkZXJCb3R0b21XaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bmhlcml0ZWRGbGFnczo6c2V0Qm9yZGVyQm90dG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5oZXJpdGVkRmxhZ3M6OnNldEJvcmRlckJvdHRvbUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkluaGVyaXRlZEZsYWdzOjpzZXRPdXRsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5o
ZXJpdGVkRmxhZ3M6OnNldE91dGxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmhlcml0
ZWRGbGFnczo6c2V0T3V0bGluZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZs
YWdzOjpzZXRPdXRsaW5lT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkluaGVyaXRlZEZsYWdz
OjpzZXRDb2x1bW5SdWxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW5oZXJpdGVkRmxhZ3M6
OnNldENvbHVtblJ1bGVXaWR0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVs
dGlDb2xEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZU11bHRpQ29sRGF0YTo6cnVsZVdp
ZHRoKToKKwogMjAxMC0wNC0wOSAgSmVyZW15IE9ybG93ICA8am9ybG93QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAJKHJldmlzaW9uIDU3MjkxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjQsNyArNzI0LDcgQEAgaW50IFJlbmRlclRh
YmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgICAgIGlmICh0Yi5zdHlsZSgpID09IEJI
SURERU4pCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKHRiLnN0eWxlKCkgPiBC
SElEREVOKQotICAgICAgICAgICAgYm9yZGVyV2lkdGggPSB0Yi53aWR0aDsKKyAgICAgICAgICAg
IGJvcmRlcldpZHRoID0gdGIud2lkdGgoKTsKIAogICAgICAgICBpbnQgbGVmdG1vc3RDb2x1bW4g
PSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwgPyBudW1FZmZDb2xzKCkgLSAxIDogMDsKICAg
ICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEdyb3VwID0gY29sRWxlbWVudChsZWZ0bW9zdENvbHVt
bik7CkBAIC03MzMsNyArNzMzLDcgQEAgaW50IFJlbmRlclRhYmxlOjpjYWxjQm9yZGVyTGVmdCgp
IGNvbnN0CiAgICAgICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPiBCSElEREVOKQot
ICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oZ2Iud2lkdGgpKTsKKyAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1h
eChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdiLndpZHRoKCkpKTsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBmaXJzdE5vbkVtcHR5
U2VjdGlvbiA9IG1faGVhZCA/IG1faGVhZCA6IChtX2ZpcnN0Qm9keSA/IG1fZmlyc3RCb2R5IDog
bV9mb290KTsKQEAgLTc0Niw3ICs3NDYsNyBAQCBpbnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJM
ZWZ0KCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAgICAgaWYg
KHNiLnN0eWxlKCkgPiBCSElEREVOKQotICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4
KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2Iud2lkdGgpKTsKKyAgICAgICAg
ICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHNiLndpZHRoKCkpKTsKIAogICAgICAgICAgICAgY29uc3QgUmVuZGVyVGFibGVTZWN0aW9u
OjpDZWxsU3RydWN0JiBjcyA9IGZpcnN0Tm9uRW1wdHlTZWN0aW9uLT5jZWxsQXQoMCwgbGVmdG1v
c3RDb2x1bW4pOwogICAgICAgICAgICAgCkBAIC03NjAsOSArNzYwLDkgQEAgaW50IFJlbmRlclRh
YmxlOjpjYWxjQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwogCiAgICAgICAgICAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBCSElEREVOKQotICAgICAgICAg
ICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGNiLndpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4
KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2Iud2lkdGgoKSkpOwogICAgICAg
ICAgICAgICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERFTikKLSAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYi53
aWR0aCkpOworICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0
aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJiLndpZHRoKCkpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gYm9yZGVyV2lkdGggLyAyOwpAQCAtNzgzLDcgKzc4Myw3
IEBAIGludCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAgICAgICAgaWYg
KHRiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBp
ZiAodGIuc3R5bGUoKSA+IEJISURERU4pCi0gICAgICAgICAgICBib3JkZXJXaWR0aCA9IHRiLndp
ZHRoOworICAgICAgICAgICAgYm9yZGVyV2lkdGggPSB0Yi53aWR0aCgpOwogCiAgICAgICAgIGlu
dCByaWdodG1vc3RDb2x1bW4gPSBzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwgPyAwIDogbnVt
RWZmQ29scygpIC0gMTsKICAgICAgICAgUmVuZGVyVGFibGVDb2wqIGNvbEdyb3VwID0gY29sRWxl
bWVudChyaWdodG1vc3RDb2x1bW4pOwpAQCAtNzkyLDcgKzc5Miw3IEBAIGludCBSZW5kZXJUYWJs
ZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAgICAgICAgICAgIGlmIChnYi5zdHlsZSgpID09
IEJISURERU4pCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBpZiAoZ2Iu
c3R5bGUoKSA+IEJISURERU4pCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9y
ZGVyV2lkdGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihnYi53aWR0aCkpOworICAgICAgICAgICAg
ICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
Z2Iud2lkdGgoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBSZW5kZXJUYWJsZVNl
Y3Rpb24qIGZpcnN0Tm9uRW1wdHlTZWN0aW9uID0gbV9oZWFkID8gbV9oZWFkIDogKG1fZmlyc3RC
b2R5ID8gbV9maXJzdEJvZHkgOiBtX2Zvb3QpOwpAQCAtODA1LDcgKzgwNSw3IEBAIGludCBSZW5k
ZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKIAogICAgICAgICAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElEREVOKQotICAgICAgICAgICAg
ICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c2Iud2lkdGgpKTsKKyAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0
aCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNiLndpZHRoKCkpKTsKIAogICAgICAgICAgICAgY29u
c3QgUmVuZGVyVGFibGVTZWN0aW9uOjpDZWxsU3RydWN0JiBjcyA9IGZpcnN0Tm9uRW1wdHlTZWN0
aW9uLT5jZWxsQXQoMCwgcmlnaHRtb3N0Q29sdW1uKTsKICAgICAgICAgICAgIApAQCAtODE5LDkg
KzgxOSw5IEBAIGludCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlclJpZ2h0KCkgY29uc3QKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgICAgICAgICBpZiAoY2Iuc3R5bGUo
KSA+IEJISURERU4pCi0gICAgICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gbWF4KGJvcmRl
cldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2Iud2lkdGgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihjYi53aWR0aCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKHJiLnN0eWxlKCkgPiBCSElEREVO
KQotICAgICAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0aCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJiLndpZHRoKSk7CisgICAgICAgICAgICAgICAgICAgIGJvcmRl
cldpZHRoID0gbWF4KGJvcmRlcldpZHRoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmIud2lkdGgo
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiAoYm9yZGVyV2lk
dGggKyAxKSAvIDI7CkBAIC04NzIsNyArODcyLDcgQEAgaW50IFJlbmRlclRhYmxlOjpvdXRlckJv
cmRlclRvcCgpIGNvbnN0CiAgICAgaWYgKHRiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKHRiLnN0eWxlKCkgPiBCSElEREVOKQotICAgICAgICBib3JkZXJX
aWR0aCA9IG1heChib3JkZXJXaWR0aCwgc3RhdGljX2Nhc3Q8aW50Pih0Yi53aWR0aCAvIDIpKTsK
KyAgICAgICAgYm9yZGVyV2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PGludD4o
dGIud2lkdGgoKSAvIDIpKTsKICAgICByZXR1cm4gYm9yZGVyV2lkdGg7CiB9CiAKQEAgLTg5OCw3
ICs4OTgsNyBAQCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyQm90dG9tKCkgY29uCiAgICAg
aWYgKHRiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHRi
LnN0eWxlKCkgPiBCSElEREVOKQotICAgICAgICBib3JkZXJXaWR0aCA9IG1heChib3JkZXJXaWR0
aCwgc3RhdGljX2Nhc3Q8aW50PigodGIud2lkdGggKyAxKSAvIDIpKTsKKyAgICAgICAgYm9yZGVy
V2lkdGggPSBtYXgoYm9yZGVyV2lkdGgsIHN0YXRpY19jYXN0PGludD4oKHRiLndpZHRoKCkgKyAx
KSAvIDIpKTsKICAgICByZXR1cm4gYm9yZGVyV2lkdGg7CiB9CiAKQEAgLTkxMyw3ICs5MTMsNyBA
QCBpbnQgUmVuZGVyVGFibGU6Om91dGVyQm9yZGVyTGVmdCgpIGNvbnN0CiAgICAgaWYgKHRiLnN0
eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHRiLnN0eWxlKCkg
PiBCSElEREVOKQotICAgICAgICBib3JkZXJXaWR0aCA9IHRiLndpZHRoIC8gMjsKKyAgICAgICAg
Ym9yZGVyV2lkdGggPSB0Yi53aWR0aCgpIC8gMjsKIAogICAgIGJvb2wgYWxsSGlkZGVuID0gdHJ1
ZTsKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CkBAIC05NDMsNyArOTQzLDcgQEAgaW50IFJl
bmRlclRhYmxlOjpvdXRlckJvcmRlclJpZ2h0KCkgY29ucwogICAgIGlmICh0Yi5zdHlsZSgpID09
IEJISURERU4pCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICh0Yi5zdHlsZSgpID4gQkhJRERF
TikKLSAgICAgICAgYm9yZGVyV2lkdGggPSAodGIud2lkdGggKyAxKSAvIDI7CisgICAgICAgIGJv
cmRlcldpZHRoID0gKHRiLndpZHRoKCkgKyAxKSAvIDI7CiAKICAgICBib29sIGFsbEhpZGRlbiA9
IHRydWU7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiA1NzI5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIsNyBAQCBz
dGF0aWMgQ29sbGFwc2VkQm9yZGVyVmFsdWUgY29tcGFyZUJvcmRlCiAgICAgICAgIHJldHVybiBi
b3JkZXIxLnN0eWxlKCkgPiBib3JkZXIyLnN0eWxlKCkgPyBib3JkZXIxIDogYm9yZGVyMjsKICAg
ICAKICAgICAvLyBUaGUgYm9yZGVyIGhhdmUgdGhlIHNhbWUgd2lkdGggYW5kIHN0eWxlLiAgUmVs
eSBvbiBwcmVjZWRlbmNlIChjZWxsIG92ZXIgcm93IG92ZXIgcm93IGdyb3VwLCBldGMuKQotICAg
IHJldHVybiBib3JkZXIxLnByZWNlZGVuY2UgPj0gYm9yZGVyMi5wcmVjZWRlbmNlID8gYm9yZGVy
MSA6IGJvcmRlcjI7CisgICAgcmV0dXJuIGJvcmRlcjEucHJlY2VkZW5jZSgpID49IGJvcmRlcjIu
cHJlY2VkZW5jZSgpID8gYm9yZGVyMSA6IGJvcmRlcjI7CiB9CiAKIENvbGxhcHNlZEJvcmRlclZh
bHVlIFJlbmRlclRhYmxlQ2VsbDo6Y29sbGFwc2VkTGVmdEJvcmRlcihib29sIHJ0bCkgY29uc3QK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24g
NTcyOTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MjAsMTMgKzcyMCwxMyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpj
YWxjT3V0ZXJCb3JkZXJUCiAgICAgaWYgKHNiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAg
cmV0dXJuIC0xOwogICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKLSAgICAgICAgYm9yZGVy
V2lkdGggPSBzYi53aWR0aDsKKyAgICAgICAgYm9yZGVyV2lkdGggPSBzYi53aWR0aCgpOwogCiAg
ICAgY29uc3QgQm9yZGVyVmFsdWUmIHJiID0gZmlyc3RDaGlsZCgpLT5zdHlsZSgpLT5ib3JkZXJU
b3AoKTsKICAgICBpZiAocmIuc3R5bGUoKSA9PSBCSElEREVOKQogICAgICAgICByZXR1cm4gLTE7
Ci0gICAgaWYgKHJiLnN0eWxlKCkgPiBCSElEREVOICYmIHJiLndpZHRoID4gYm9yZGVyV2lkdGgp
Ci0gICAgICAgIGJvcmRlcldpZHRoID0gcmIud2lkdGg7CisgICAgaWYgKHJiLnN0eWxlKCkgPiBC
SElEREVOICYmIHJiLndpZHRoKCkgPiBib3JkZXJXaWR0aCkKKyAgICAgICAgYm9yZGVyV2lkdGgg
PSByYi53aWR0aCgpOwogCiAgICAgYm9vbCBhbGxIaWRkZW4gPSB0cnVlOwogICAgIGZvciAoaW50
IGMgPSAwOyBjIDwgdG90YWxDb2xzOyBjKyspIHsKQEAgLTc0MiwxNyArNzQyLDE3IEBAIGludCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlclQKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBhbGxIaWRkZW4gPSBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChnYi5zdHlsZSgpID4gQkhJRERFTiAmJiBnYi53aWR0aCA+IGJv
cmRlcldpZHRoKQotICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoID0gZ2Iud2lkdGg7Ci0gICAg
ICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4gJiYgY2Iud2lkdGggPiBib3JkZXJXaWR0
aCkKLSAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoOworICAgICAgICAgICAg
aWYgKGdiLnN0eWxlKCkgPiBCSElEREVOICYmIGdiLndpZHRoKCkgPiBib3JkZXJXaWR0aCkKKyAg
ICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGdiLndpZHRoKCk7CisgICAgICAgICAgICBpZiAo
Y2Iuc3R5bGUoKSA+IEJISURERU4gJiYgY2Iud2lkdGgoKSA+IGJvcmRlcldpZHRoKQorICAgICAg
ICAgICAgICAgIGJvcmRlcldpZHRoID0gY2Iud2lkdGgoKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGlmIChjYi5zdHlsZSgpID09IEJISURERU4pCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgYWxsSGlkZGVuID0gZmFs
c2U7Ci0gICAgICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4gJiYgY2Iud2lkdGggPiBi
b3JkZXJXaWR0aCkKLSAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoOworICAg
ICAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBCSElEREVOICYmIGNiLndpZHRoKCkgPiBib3JkZXJX
aWR0aCkKKyAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoKCk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgaWYgKGFsbEhpZGRlbikKQEAgLTc3MywxMyArNzczLDEzIEBAIGludCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckIKICAgICBpZiAoc2Iuc3R5bGUoKSA9
PSBCSElEREVOKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKHNiLnN0eWxlKCkgPiBCSElE
REVOKQotICAgICAgICBib3JkZXJXaWR0aCA9IHNiLndpZHRoOworICAgICAgICBib3JkZXJXaWR0
aCA9IHNiLndpZHRoKCk7CiAKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgcmIgPSBsYXN0Q2hpbGQo
KS0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tKCk7CiAgICAgaWYgKHJiLnN0eWxlKCkgPT0gQkhJRERF
TikKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERFTiAmJiBy
Yi53aWR0aCA+IGJvcmRlcldpZHRoKQotICAgICAgICBib3JkZXJXaWR0aCA9IHJiLndpZHRoOwor
ICAgIGlmIChyYi5zdHlsZSgpID4gQkhJRERFTiAmJiByYi53aWR0aCgpID4gYm9yZGVyV2lkdGgp
CisgICAgICAgIGJvcmRlcldpZHRoID0gcmIud2lkdGgoKTsKIAogICAgIGJvb2wgYWxsSGlkZGVu
ID0gdHJ1ZTsKICAgICBmb3IgKGludCBjID0gMDsgYyA8IHRvdGFsQ29sczsgYysrKSB7CkBAIC03
OTUsMTcgKzc5NSwxNyBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJC
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgYWxsSGlkZGVuID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA+IEJI
SURERU4gJiYgZ2Iud2lkdGggPiBib3JkZXJXaWR0aCkKLSAgICAgICAgICAgICAgICBib3JkZXJX
aWR0aCA9IGdiLndpZHRoOwotICAgICAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBCSElEREVOICYm
IGNiLndpZHRoID4gYm9yZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBj
Yi53aWR0aDsKKyAgICAgICAgICAgIGlmIChnYi5zdHlsZSgpID4gQkhJRERFTiAmJiBnYi53aWR0
aCgpID4gYm9yZGVyV2lkdGgpCisgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGggPSBnYi53aWR0
aCgpOworICAgICAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBCSElEREVOICYmIGNiLndpZHRoKCkg
PiBib3JkZXJXaWR0aCkKKyAgICAgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoKCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoY2Iuc3R5bGUoKSA9PSBCSElEREVO
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIGFsbEhpZGRlbiA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBC
SElEREVOICYmIGNiLndpZHRoID4gYm9yZGVyV2lkdGgpCi0gICAgICAgICAgICAgICAgYm9yZGVy
V2lkdGggPSBjYi53aWR0aDsKKyAgICAgICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTiAm
JiBjYi53aWR0aCgpID4gYm9yZGVyV2lkdGgpCisgICAgICAgICAgICAgICAgYm9yZGVyV2lkdGgg
PSBjYi53aWR0aCgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChhbGxIaWRkZW4pCkBAIC04
MjYsNyArODI2LDcgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyTAog
ICAgIGlmIChzYi5zdHlsZSgpID09IEJISURERU4pCiAgICAgICAgIHJldHVybiAtMTsKICAgICBp
ZiAoc2Iuc3R5bGUoKSA+IEJISURERU4pCi0gICAgICAgIGJvcmRlcldpZHRoID0gc2Iud2lkdGg7
CisgICAgICAgIGJvcmRlcldpZHRoID0gc2Iud2lkdGgoKTsKIAogICAgIGludCBsZWZ0bW9zdENv
bHVtbiA9IHJ0bCA/IHRvdGFsQ29scyAtIDEgOiAwOwogICAgIFJlbmRlclRhYmxlQ29sKiBjb2xH
cm91cCA9IHRhYmxlKCktPmNvbEVsZW1lbnQobGVmdG1vc3RDb2x1bW4pOwpAQCAtODM0LDggKzgz
NCw4IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNPdXRlckJvcmRlckwKICAgICAgICAg
Y29uc3QgQm9yZGVyVmFsdWUmIGdiID0gY29sR3JvdXAtPnN0eWxlKCktPmJvcmRlckxlZnQoKTsK
ICAgICAgICAgaWYgKGdiLnN0eWxlKCkgPT0gQkhJRERFTikKICAgICAgICAgICAgIHJldHVybiAt
MTsKLSAgICAgICAgaWYgKGdiLnN0eWxlKCkgPiBCSElEREVOICYmIGdiLndpZHRoID4gYm9yZGVy
V2lkdGgpCi0gICAgICAgICAgICBib3JkZXJXaWR0aCA9IGdiLndpZHRoOworICAgICAgICBpZiAo
Z2Iuc3R5bGUoKSA+IEJISURERU4gJiYgZ2Iud2lkdGgoKSA+IGJvcmRlcldpZHRoKQorICAgICAg
ICAgICAgYm9yZGVyV2lkdGggPSBnYi53aWR0aCgpOwogICAgIH0KIAogICAgIGJvb2wgYWxsSGlk
ZGVuID0gdHJ1ZTsKQEAgLTg1MCwxMCArODUwLDEwIEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246
OmNhbGNPdXRlckJvcmRlckwKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBhbGxIaWRkZW4gPSBmYWxzZTsKLSAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBC
SElEREVOICYmIGNiLndpZHRoID4gYm9yZGVyV2lkdGgpCi0gICAgICAgICAgICBib3JkZXJXaWR0
aCA9IGNiLndpZHRoOwotICAgICAgICBpZiAocmIuc3R5bGUoKSA+IEJISURERU4gJiYgcmIud2lk
dGggPiBib3JkZXJXaWR0aCkKLSAgICAgICAgICAgIGJvcmRlcldpZHRoID0gcmIud2lkdGg7Cisg
ICAgICAgIGlmIChjYi5zdHlsZSgpID4gQkhJRERFTiAmJiBjYi53aWR0aCgpID4gYm9yZGVyV2lk
dGgpCisgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGNiLndpZHRoKCk7CisgICAgICAgIGlmIChy
Yi5zdHlsZSgpID4gQkhJRERFTiAmJiByYi53aWR0aCgpID4gYm9yZGVyV2lkdGgpCisgICAgICAg
ICAgICBib3JkZXJXaWR0aCA9IHJiLndpZHRoKCk7CiAgICAgfQogICAgIGlmIChhbGxIaWRkZW4p
CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTg3Myw3ICs4NzMsNyBAQCBpbnQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpjYWxjT3V0ZXJCb3JkZXJSCiAgICAgaWYgKHNiLnN0eWxlKCkgPT0gQkhJRERFTikK
ICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChzYi5zdHlsZSgpID4gQkhJRERFTikKLSAgICAg
ICAgYm9yZGVyV2lkdGggPSBzYi53aWR0aDsKKyAgICAgICAgYm9yZGVyV2lkdGggPSBzYi53aWR0
aCgpOwogCiAgICAgaW50IHJpZ2h0bW9zdENvbHVtbiA9IHJ0bCA/IDAgOiB0b3RhbENvbHMgLSAx
OwogICAgIFJlbmRlclRhYmxlQ29sKiBjb2xHcm91cCA9IHRhYmxlKCktPmNvbEVsZW1lbnQocmln
aHRtb3N0Q29sdW1uKTsKQEAgLTg4MSw4ICs4ODEsOCBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9u
OjpjYWxjT3V0ZXJCb3JkZXJSCiAgICAgICAgIGNvbnN0IEJvcmRlclZhbHVlJiBnYiA9IGNvbEdy
b3VwLT5zdHlsZSgpLT5ib3JkZXJSaWdodCgpOwogICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA9PSBC
SElEREVOKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoZ2Iuc3R5bGUoKSA+
IEJISURERU4gJiYgZ2Iud2lkdGggPiBib3JkZXJXaWR0aCkKLSAgICAgICAgICAgIGJvcmRlcldp
ZHRoID0gZ2Iud2lkdGg7CisgICAgICAgIGlmIChnYi5zdHlsZSgpID4gQkhJRERFTiAmJiBnYi53
aWR0aCgpID4gYm9yZGVyV2lkdGgpCisgICAgICAgICAgICBib3JkZXJXaWR0aCA9IGdiLndpZHRo
KCk7CiAgICAgfQogCiAgICAgYm9vbCBhbGxIaWRkZW4gPSB0cnVlOwpAQCAtODk3LDEwICs4OTcs
MTAgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY091dGVyQm9yZGVyUgogICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGFsbEhpZGRlbiA9IGZhbHNl
OwotICAgICAgICBpZiAoY2Iuc3R5bGUoKSA+IEJISURERU4gJiYgY2Iud2lkdGggPiBib3JkZXJX
aWR0aCkKLSAgICAgICAgICAgIGJvcmRlcldpZHRoID0gY2Iud2lkdGg7Ci0gICAgICAgIGlmIChy
Yi5zdHlsZSgpID4gQkhJRERFTiAmJiByYi53aWR0aCA+IGJvcmRlcldpZHRoKQotICAgICAgICAg
ICAgYm9yZGVyV2lkdGggPSByYi53aWR0aDsKKyAgICAgICAgaWYgKGNiLnN0eWxlKCkgPiBCSElE
REVOICYmIGNiLndpZHRoKCkgPiBib3JkZXJXaWR0aCkKKyAgICAgICAgICAgIGJvcmRlcldpZHRo
ID0gY2Iud2lkdGgoKTsKKyAgICAgICAgaWYgKHJiLnN0eWxlKCkgPiBCSElEREVOICYmIHJiLndp
ZHRoKCkgPiBib3JkZXJXaWR0aCkKKyAgICAgICAgICAgIGJvcmRlcldpZHRoID0gcmIud2lkdGgo
KTsKICAgICB9CiAgICAgaWYgKGFsbEhpZGRlbikKICAgICAgICAgcmV0dXJuIC0xOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQm9yZGVyRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaAkocmV2aXNpb24gNTcyOTEpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9Cb3JkZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDc2
ICszMiw5MCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBCb3JkZXJEYXRhIHsKK2Zy
aWVuZCBjbGFzcyBSZW5kZXJTdHlsZTsKIHB1YmxpYzoKLSAgICBCb3JkZXJWYWx1ZSBsZWZ0Owot
ICAgIEJvcmRlclZhbHVlIHJpZ2h0OwotICAgIEJvcmRlclZhbHVlIHRvcDsKLSAgICBCb3JkZXJW
YWx1ZSBib3R0b207Ci0KLSAgICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKLQotICAgIEludFNpemUg
dG9wTGVmdDsKLSAgICBJbnRTaXplIHRvcFJpZ2h0OwotICAgIEludFNpemUgYm90dG9tTGVmdDsK
LSAgICBJbnRTaXplIGJvdHRvbVJpZ2h0OwotCiAgICAgYm9vbCBoYXNCb3JkZXIoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgYm9vbCBoYXZlSW1hZ2UgPSBpbWFnZS5oYXNJbWFnZSgpOwotICAgICAg
ICByZXR1cm4gbGVmdC5ub25aZXJvKCFoYXZlSW1hZ2UpIHx8IHJpZ2h0Lm5vblplcm8oIWhhdmVJ
bWFnZSkgfHwgdG9wLm5vblplcm8oIWhhdmVJbWFnZSkgfHwgYm90dG9tLm5vblplcm8oIWhhdmVJ
bWFnZSk7CisgICAgICAgIGJvb2wgaGF2ZUltYWdlID0gbV9pbWFnZS5oYXNJbWFnZSgpOworICAg
ICAgICByZXR1cm4gbV9sZWZ0Lm5vblplcm8oIWhhdmVJbWFnZSkgfHwgbV9yaWdodC5ub25aZXJv
KCFoYXZlSW1hZ2UpIHx8IG1fdG9wLm5vblplcm8oIWhhdmVJbWFnZSkgfHwgbV9ib3R0b20ubm9u
WmVybyghaGF2ZUltYWdlKTsKICAgICB9CiAKICAgICBib29sIGhhc0JvcmRlclJhZGl1cygpIGNv
bnN0CiAgICAgewotICAgICAgICBpZiAodG9wTGVmdC53aWR0aCgpID4gMCkKKyAgICAgICAgaWYg
KG1fdG9wTGVmdC53aWR0aCgpID4gMCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBpZiAodG9wUmlnaHQud2lkdGgoKSA+IDApCisgICAgICAgIGlmIChtX3RvcFJpZ2h0LndpZHRo
KCkgPiAwKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChib3R0b21MZWZ0
LndpZHRoKCkgPiAwKQorICAgICAgICBpZiAobV9ib3R0b21MZWZ0LndpZHRoKCkgPiAwKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChib3R0b21SaWdodC53aWR0aCgpID4g
MCkKKyAgICAgICAgaWYgKG1fYm90dG9tUmlnaHQud2lkdGgoKSA+IDApCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKICAgICB1bnNp
Z25lZCBzaG9ydCBib3JkZXJMZWZ0V2lkdGgoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFp
bWFnZS5oYXNJbWFnZSgpICYmIChsZWZ0LnN0eWxlKCkgPT0gQk5PTkUgfHwgbGVmdC5zdHlsZSgp
ID09IEJISURERU4pKQorICAgICAgICBpZiAoIW1faW1hZ2UuaGFzSW1hZ2UoKSAmJiAobV9sZWZ0
LnN0eWxlKCkgPT0gQk5PTkUgfHwgbV9sZWZ0LnN0eWxlKCkgPT0gQkhJRERFTikpCiAgICAgICAg
ICAgICByZXR1cm4gMDsgCi0gICAgICAgIHJldHVybiBsZWZ0LndpZHRoOworICAgICAgICByZXR1
cm4gbV9sZWZ0LndpZHRoKCk7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIHNob3J0IGJvcmRl
clJpZ2h0V2lkdGgoKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFpbWFnZS5oYXNJbWFnZSgp
ICYmIChyaWdodC5zdHlsZSgpID09IEJOT05FIHx8IHJpZ2h0LnN0eWxlKCkgPT0gQkhJRERFTikp
CisgICAgICAgIGlmICghbV9pbWFnZS5oYXNJbWFnZSgpICYmIChtX3JpZ2h0LnN0eWxlKCkgPT0g
Qk5PTkUgfHwgbV9yaWdodC5zdHlsZSgpID09IEJISURERU4pKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIHJldHVybiByaWdodC53aWR0aDsKKyAgICAgICAgcmV0dXJuIG1fcmlnaHQu
d2lkdGgoKTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVyVG9wV2lkdGgo
KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFpbWFnZS5oYXNJbWFnZSgpICYmICh0b3Auc3R5
bGUoKSA9PSBCTk9ORSB8fCB0b3Auc3R5bGUoKSA9PSBCSElEREVOKSkKKyAgICAgICAgaWYgKCFt
X2ltYWdlLmhhc0ltYWdlKCkgJiYgKG1fdG9wLnN0eWxlKCkgPT0gQk5PTkUgfHwgbV90b3Auc3R5
bGUoKSA9PSBCSElEREVOKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4g
dG9wLndpZHRoOworICAgICAgICByZXR1cm4gbV90b3Aud2lkdGgoKTsKICAgICB9CiAgICAgCiAg
ICAgdW5zaWduZWQgc2hvcnQgYm9yZGVyQm90dG9tV2lkdGgoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgaWYgKCFpbWFnZS5oYXNJbWFnZSgpICYmIChib3R0b20uc3R5bGUoKSA9PSBCTk9ORSB8fCBi
b3R0b20uc3R5bGUoKSA9PSBCSElEREVOKSkKKyAgICAgICAgaWYgKCFtX2ltYWdlLmhhc0ltYWdl
KCkgJiYgKG1fYm90dG9tLnN0eWxlKCkgPT0gQk5PTkUgfHwgbV9ib3R0b20uc3R5bGUoKSA9PSBC
SElEREVOKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4gYm90dG9tLndp
ZHRoOworICAgICAgICByZXR1cm4gbV9ib3R0b20ud2lkdGgoKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEJvcmRlckRhdGEmIG8pIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gbGVmdCA9PSBvLmxlZnQgJiYgcmlnaHQgPT0gby5yaWdodCAmJiB0b3AgPT0gby50
b3AgJiYgYm90dG9tID09IG8uYm90dG9tICYmIGltYWdlID09IG8uaW1hZ2UgJiYKLSAgICAgICAg
ICAgICAgIHRvcExlZnQgPT0gby50b3BMZWZ0ICYmIHRvcFJpZ2h0ID09IG8udG9wUmlnaHQgJiYg
Ym90dG9tTGVmdCA9PSBvLmJvdHRvbUxlZnQgJiYgYm90dG9tUmlnaHQgPT0gby5ib3R0b21SaWdo
dDsKKyAgICAgICAgcmV0dXJuIG1fbGVmdCA9PSBvLm1fbGVmdCAmJiBtX3JpZ2h0ID09IG8ubV9y
aWdodCAmJiBtX3RvcCA9PSBvLm1fdG9wICYmIG1fYm90dG9tID09IG8ubV9ib3R0b20gJiYgbV9p
bWFnZSA9PSBvLm1faW1hZ2UgJiYKKyAgICAgICAgICAgICAgIG1fdG9wTGVmdCA9PSBvLm1fdG9w
TGVmdCAmJiBtX3RvcFJpZ2h0ID09IG8ubV90b3BSaWdodCAmJiBtX2JvdHRvbUxlZnQgPT0gby5t
X2JvdHRvbUxlZnQgJiYgbV9ib3R0b21SaWdodCA9PSBvLm1fYm90dG9tUmlnaHQ7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCb3JkZXJEYXRhJiBvKSBjb25zdAogICAg
IHsKICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQorICAgIAorICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3Qg
Qm9yZGVyVmFsdWUmIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorICAgIGNvbnN0
IEJvcmRlclZhbHVlJiB0b3AoKSBjb25zdCB7IHJldHVybiBtX3RvcDsgfQorICAgIGNvbnN0IEJv
cmRlclZhbHVlJiBib3R0b20oKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbTsgfQorICAgIAorICAg
IGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0K
KyAgICAKKyAgICBjb25zdCBJbnRTaXplJiB0b3BMZWZ0KCkgY29uc3QgeyByZXR1cm4gbV90b3BM
ZWZ0OyB9CisgICAgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3Rv
cFJpZ2h0OyB9CisgICAgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCgpIGNvbnN0IHsgcmV0dXJu
IG1fYm90dG9tTGVmdDsgfQorICAgIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9ib3R0b21SaWdodDsgfQorICAgIAorcHJpdmF0ZToKKyAgICBCb3JkZXJWYWx1
ZSBtX2xlZnQ7CisgICAgQm9yZGVyVmFsdWUgbV9yaWdodDsKKyAgICBCb3JkZXJWYWx1ZSBtX3Rv
cDsKKyAgICBCb3JkZXJWYWx1ZSBtX2JvdHRvbTsKKworICAgIE5pbmVQaWVjZUltYWdlIG1faW1h
Z2U7CisKKyAgICBJbnRTaXplIG1fdG9wTGVmdDsKKyAgICBJbnRTaXplIG1fdG9wUmlnaHQ7Cisg
ICAgSW50U2l6ZSBtX2JvdHRvbUxlZnQ7CisgICAgSW50U2l6ZSBtX2JvdHRvbVJpZ2h0OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUv
Qm9yZGVyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Cb3Jk
ZXJWYWx1ZS5oCShyZXZpc2lvbiA1NzI5MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jv
cmRlclZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDI3ICszMSwyMiBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBCb3JkZXJWYWx1ZSB7CitmcmllbmQgY2xhc3MgUmVuZGVyU3R5
bGU7CiBwdWJsaWM6CiAgICAgQm9yZGVyVmFsdWUoKQotICAgICAgICA6IHdpZHRoKDMpCisgICAg
ICAgIDogbV93aWR0aCgzKQogICAgICAgICAsIG1fc3R5bGUoQk5PTkUpCiAgICAgewogICAgIH0K
IAotICAgIENvbG9yIGNvbG9yOwotICAgIHVuc2lnbmVkIHdpZHRoIDogMTI7Ci0gICAgdW5zaWdu
ZWQgbV9zdHlsZSA6IDQ7IC8vIEVCb3JkZXJTdHlsZSAKLQotICAgIEVCb3JkZXJTdHlsZSBzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVCb3JkZXJTdHlsZT4obV9zdHlsZSk7IH0K
LSAgICAKICAgICBib29sIG5vblplcm8oYm9vbCBjaGVja1N0eWxlID0gdHJ1ZSkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiB3aWR0aCAhPSAwICYmICghY2hlY2tTdHlsZSB8fCBtX3N0eWxl
ICE9IEJOT05FKTsKKyAgICAgICAgcmV0dXJuIHdpZHRoKCkgIT0gMCAmJiAoIWNoZWNrU3R5bGUg
fHwgbV9zdHlsZSAhPSBCTk9ORSk7CiAgICAgfQogCiAgICAgYm9vbCBpc1RyYW5zcGFyZW50KCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBjb2xvci5pc1ZhbGlkKCkgJiYgY29sb3IuYWxw
aGEoKSA9PSAwOworICAgICAgICByZXR1cm4gbV9jb2xvci5pc1ZhbGlkKCkgJiYgbV9jb2xvci5h
bHBoYSgpID09IDA7CiAgICAgfQogCiAgICAgYm9vbCBpc1Zpc2libGUoYm9vbCBjaGVja1N0eWxl
ID0gdHJ1ZSkgY29uc3QKQEAgLTYxLDEzICs1NiwyMiBAQCBwdWJsaWM6CiAKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQm9yZGVyVmFsdWUmIG8pIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gd2lkdGggPT0gby53aWR0aCAmJiBtX3N0eWxlID09IG8ubV9zdHlsZSAmJiBjb2xvciA9PSBv
LmNvbG9yOworICAgICAgICByZXR1cm4gbV93aWR0aCA9PSBvLm1fd2lkdGggJiYgbV9zdHlsZSA9
PSBvLm1fc3R5bGUgJiYgbV9jb2xvciA9PSBvLm1fY29sb3I7CiAgICAgfQogCiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEJvcmRlclZhbHVlJiBvKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQorICAgIAorICAgIGNvbnN0IENvbG9yJiBjb2xvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KKyAgICB1bnNpZ25lZCBzaG9ydCB3aWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAgICBFQm9yZGVyU3R5bGUgc3R5bGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxFQm9yZGVyU3R5bGU+KG1fc3R5bGUpOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBDb2xvciBtX2NvbG9yOworICAgIHVuc2lnbmVkIG1fd2lkdGggOiAxMjsKKyAgICB1
bnNpZ25lZCBtX3N0eWxlIDogNDsgLy8gRUJvcmRlclN0eWxlIAogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQ29sbGFwc2VkQm9yZGVy
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9Db2xsYXBzZWRC
b3JkZXJWYWx1ZS5oCShyZXZpc2lvbiA1NzI5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxl
L0NvbGxhcHNlZEJvcmRlclZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDM4ICsyOSw0MiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSB7
CitjbGFzcyBDb2xsYXBzZWRCb3JkZXJWYWx1ZSB7CitmcmllbmQgY2xhc3MgUmVuZGVyU3R5bGU7
CitwdWJsaWM6CiAgICAgQ29sbGFwc2VkQm9yZGVyVmFsdWUoKQotICAgICAgICA6IGJvcmRlcigw
KQotICAgICAgICAsIHByZWNlZGVuY2UoQk9GRikKKyAgICAgICAgOiBtX2JvcmRlcigwKQorICAg
ICAgICAsIG1fcHJlY2VkZW5jZShCT0ZGKQogICAgIHsKICAgICB9CiAKICAgICBDb2xsYXBzZWRC
b3JkZXJWYWx1ZShjb25zdCBCb3JkZXJWYWx1ZSogYiwgQ29sb3IgYywgRUJvcmRlclByZWNlZGVu
Y2UgcCkKLSAgICAgICAgOiBib3JkZXIoYikKLSAgICAgICAgLCBib3JkZXJDb2xvcihjKQotICAg
ICAgICAsIHByZWNlZGVuY2UocCkKKyAgICAgICAgOiBtX2JvcmRlcihiKQorICAgICAgICAsIG1f
Ym9yZGVyQ29sb3IoYykKKyAgICAgICAgLCBtX3ByZWNlZGVuY2UocCkKICAgICB7CiAgICAgfQog
Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gYm9yZGVyICYmIGJvcmRlci0+bm9uWmVy
bygpID8gYm9yZGVyLT53aWR0aCA6IDA7IH0KLSAgICBFQm9yZGVyU3R5bGUgc3R5bGUoKSBjb25z
dCB7IHJldHVybiBib3JkZXIgPyBib3JkZXItPnN0eWxlKCkgOiBCSElEREVOOyB9Ci0gICAgYm9v
bCBleGlzdHMoKSBjb25zdCB7IHJldHVybiBib3JkZXI7IH0KLSAgICBDb2xvciBjb2xvcigpIGNv
bnN0IHsgcmV0dXJuIGJvcmRlckNvbG9yOyB9Ci0gICAgYm9vbCBpc1RyYW5zcGFyZW50KCkgY29u
c3QgeyByZXR1cm4gYm9yZGVyID8gYm9yZGVyLT5pc1RyYW5zcGFyZW50KCkgOiB0cnVlOyB9Ci0g
ICAgCisgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXIgJiYgbV9ib3JkZXIt
Pm5vblplcm8oKSA/IG1fYm9yZGVyLT53aWR0aCgpIDogMDsgfQorICAgIEVCb3JkZXJTdHlsZSBz
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyID8gbV9ib3JkZXItPnN0eWxlKCkgOiBCSElE
REVOOyB9CisgICAgYm9vbCBleGlzdHMoKSBjb25zdCB7IHJldHVybiBtX2JvcmRlcjsgfQorICAg
IENvbG9yIGNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9ib3JkZXJDb2xvcjsgfQorICAgIGJvb2wg
aXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyID8gbV9ib3JkZXItPmlzVHJh
bnNwYXJlbnQoKSA6IHRydWU7IH0KKyAgICBFQm9yZGVyUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9wcmVjZWRlbmNlOyB9CisKICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ29sbGFwc2VkQm9yZGVyVmFsdWUmIG8pIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoIWJv
cmRlcikKLSAgICAgICAgICAgIHJldHVybiAhby5ib3JkZXI7Ci0gICAgICAgIGlmICghby5ib3Jk
ZXIpCisgICAgICAgIGlmICghbV9ib3JkZXIpCisgICAgICAgICAgICByZXR1cm4gIW8ubV9ib3Jk
ZXI7CisgICAgICAgIGlmICghby5tX2JvcmRlcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgcmV0dXJuICpib3JkZXIgPT0gKm8uYm9yZGVyICYmIGJvcmRlckNvbG9yID09IG8u
Ym9yZGVyQ29sb3IgJiYgcHJlY2VkZW5jZSA9PSBvLnByZWNlZGVuY2U7CisgICAgICAgIHJldHVy
biAqbV9ib3JkZXIgPT0gKm8ubV9ib3JkZXIgJiYgbV9ib3JkZXJDb2xvciA9PSBvLm1fYm9yZGVy
Q29sb3IgJiYgbV9wcmVjZWRlbmNlID09IG8ubV9wcmVjZWRlbmNlOwogICAgIH0KLSAgICAKLSAg
ICBjb25zdCBCb3JkZXJWYWx1ZSogYm9yZGVyOwotICAgIENvbG9yIGJvcmRlckNvbG9yOwotICAg
IEVCb3JkZXJQcmVjZWRlbmNlIHByZWNlZGVuY2U7ICAgIAorCitwcml2YXRlOgorICAgIGNvbnN0
IEJvcmRlclZhbHVlKiBtX2JvcmRlcjsKKyAgICBDb2xvciBtX2JvcmRlckNvbG9yOworICAgIEVC
b3JkZXJQcmVjZWRlbmNlIG1fcHJlY2VkZW5jZTsgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9PdXRsaW5lVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9PdXRsaW5lVmFsdWUuaAkocmV2aXNp
b24gNTcyOTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9PdXRsaW5lVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIE91dGxpbmVWYWx1ZSA6IHB1YmxpYyBCb3JkZXJWYWx1ZSB7CitmcmllbmQgY2xhc3MgUmVu
ZGVyU3R5bGU7CiBwdWJsaWM6CiAgICAgT3V0bGluZVZhbHVlKCkKLSAgICAgICAgOiBfb2Zmc2V0
KDApCi0gICAgICAgICwgX2F1dG8oZmFsc2UpCisgICAgICAgIDogbV9vZmZzZXQoMCkKKyAgICAg
ICAgLCBtX2lzQXV0byhmYWxzZSkKICAgICB7CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBPdXRsaW5lVmFsdWUmIG8pIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
d2lkdGggPT0gby53aWR0aCAmJiBtX3N0eWxlID09IG8ubV9zdHlsZSAmJiBjb2xvciA9PSBvLmNv
bG9yICYmIF9vZmZzZXQgPT0gby5fb2Zmc2V0ICYmIF9hdXRvID09IG8uX2F1dG87CisgICAgICAg
IHJldHVybiBtX3dpZHRoID09IG8ubV93aWR0aCAmJiBtX3N0eWxlID09IG8ubV9zdHlsZSAmJiBt
X2NvbG9yID09IG8ubV9jb2xvciAmJiBtX29mZnNldCA9PSBvLm1fb2Zmc2V0ICYmIG1faXNBdXRv
ID09IG8ubV9pc0F1dG87CiAgICAgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBP
dXRsaW5lVmFsdWUmIG8pIGNvbnN0CkBAIC00Nyw4ICs0OCwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG8pOwogICAgIH0KICAgICAKLSAgICBpbnQgX29mZnNldDsKLSAg
ICBib29sIF9hdXRvOworICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIGJvb2wgaXNBdXRvKCkgY29uc3QgeyByZXR1cm4gbV9pc0F1dG87IH0KKworcHJpdmF0
ZToKKyAgICBpbnQgbV9vZmZzZXQ7CisgICAgYm9vbCBtX2lzQXV0bzsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAJKHJldmlzaW9uIDU3MzQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzMsMTEgKzczMywxMSBAQCB2b2lkIFJlbmRlclN0
eWxlOjpzZXRCb3hTaGFkb3coU2hhZG93RGF0CiAKIHZvaWQgUmVuZGVyU3R5bGU6OmdldEJvcmRl
clJhZGlpRm9yUmVjdChjb25zdCBJbnRSZWN0JiByLCBJbnRTaXplJiB0b3BMZWZ0LCBJbnRTaXpl
JiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVmdCwgSW50U2l6ZSYgYm90dG9tUmlnaHQpIGNv
bnN0CiB7Ci0gICAgdG9wTGVmdCA9IHN1cnJvdW5kLT5ib3JkZXIudG9wTGVmdDsKLSAgICB0b3BS
aWdodCA9IHN1cnJvdW5kLT5ib3JkZXIudG9wUmlnaHQ7CisgICAgdG9wTGVmdCA9IHN1cnJvdW5k
LT5ib3JkZXIudG9wTGVmdCgpOworICAgIHRvcFJpZ2h0ID0gc3Vycm91bmQtPmJvcmRlci50b3BS
aWdodCgpOwogICAgIAotICAgIGJvdHRvbUxlZnQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbUxl
ZnQ7Ci0gICAgYm90dG9tUmlnaHQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbVJpZ2h0OworICAg
IGJvdHRvbUxlZnQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbUxlZnQoKTsKKyAgICBib3R0b21S
aWdodCA9IHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tUmlnaHQoKTsKIAogICAgIC8vIENvbnN0cmFp
biBjb3JuZXIgcmFkaWkgdXNpbmcgQ1NTMyBydWxlczoKICAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi9jc3MzLWJhY2tncm91bmQvI3RoZS1ib3JkZXItcmFkaXVzCkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDU3MzQ3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzg1LDQ3ICszODUs
NDcgQEAgcHVibGljOgogICAgIExlbmd0aCBtYXhIZWlnaHQoKSBjb25zdCB7IHJldHVybiBib3gt
Pm1heF9oZWlnaHQ7IH0KIAogICAgIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlcigpIGNvbnN0IHsg
cmV0dXJuIHN1cnJvdW5kLT5ib3JkZXI7IH0KLSAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVy
TGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIubGVmdDsgfQotICAgIGNvbnN0
IEJvcmRlclZhbHVlJiBib3JkZXJSaWdodCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3Jk
ZXIucmlnaHQ7IH0KLSAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyVG9wKCkgY29uc3QgeyBy
ZXR1cm4gc3Vycm91bmQtPmJvcmRlci50b3A7IH0KLSAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9y
ZGVyQm90dG9tKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3R0b207IH0KLQot
ICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBib3JkZXJJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIHN1
cnJvdW5kLT5ib3JkZXIuaW1hZ2U7IH0KLQotICAgIGNvbnN0IEludFNpemUmIGJvcmRlclRvcExl
ZnRSYWRpdXMoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcExlZnQ7IH0KLSAg
ICBjb25zdCBJbnRTaXplJiBib3JkZXJUb3BSaWdodFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIHN1
cnJvdW5kLT5ib3JkZXIudG9wUmlnaHQ7IH0KLSAgICBjb25zdCBJbnRTaXplJiBib3JkZXJCb3R0
b21MZWZ0UmFkaXVzKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3R0b21MZWZ0
OyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKSBjb25zdCB7
IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbVJpZ2h0OyB9CisgICAgY29uc3QgQm9yZGVy
VmFsdWUmIGJvcmRlckxlZnQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmxlZnQo
KTsgfQorICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJSaWdodCgpIGNvbnN0IHsgcmV0dXJu
IHN1cnJvdW5kLT5ib3JkZXIucmlnaHQoKTsgfQorICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3Jk
ZXJUb3AoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcCgpOyB9CisgICAgY29u
c3QgQm9yZGVyVmFsdWUmIGJvcmRlckJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5i
b3JkZXIuYm90dG9tKCk7IH0KKworICAgIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBib3JkZXJJbWFn
ZSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuaW1hZ2UoKTsgfQorCisgICAgY29u
c3QgSW50U2l6ZSYgYm9yZGVyVG9wTGVmdFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5k
LT5ib3JkZXIudG9wTGVmdCgpOyB9CisgICAgY29uc3QgSW50U2l6ZSYgYm9yZGVyVG9wUmlnaHRS
YWRpdXMoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcFJpZ2h0KCk7IH0KKyAg
ICBjb25zdCBJbnRTaXplJiBib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPmJvcmRlci5ib3R0b21MZWZ0KCk7IH0KKyAgICBjb25zdCBJbnRTaXplJiBib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cygpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm90
dG9tUmlnaHQoKTsgfQogICAgIGJvb2wgaGFzQm9yZGVyUmFkaXVzKCkgY29uc3QgeyByZXR1cm4g
c3Vycm91bmQtPmJvcmRlci5oYXNCb3JkZXJSYWRpdXMoKTsgfQogCiAgICAgdW5zaWduZWQgc2hv
cnQgYm9yZGVyTGVmdFdpZHRoKCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3Jk
ZXJMZWZ0V2lkdGgoKTsgfQotICAgIEVCb3JkZXJTdHlsZSBib3JkZXJMZWZ0U3R5bGUoKSBjb25z
dCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmxlZnQuc3R5bGUoKTsgfQotICAgIGNvbnN0IENv
bG9yJiBib3JkZXJMZWZ0Q29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmxl
ZnQuY29sb3I7IH0KLSAgICBib29sIGJvcmRlckxlZnRJc1RyYW5zcGFyZW50KCkgY29uc3QgeyBy
ZXR1cm4gc3Vycm91bmQtPmJvcmRlci5sZWZ0LmlzVHJhbnNwYXJlbnQoKTsgfQorICAgIEVCb3Jk
ZXJTdHlsZSBib3JkZXJMZWZ0U3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVy
LmxlZnQoKS5zdHlsZSgpOyB9CisgICAgY29uc3QgQ29sb3ImIGJvcmRlckxlZnRDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIubGVmdCgpLmNvbG9yKCk7IH0KKyAgICBib29s
IGJvcmRlckxlZnRJc1RyYW5zcGFyZW50KCkgY29uc3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRl
ci5sZWZ0KCkuaXNUcmFuc3BhcmVudCgpOyB9CiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVyUmln
aHRXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm9yZGVyUmlnaHRXaWR0
aCgpOyB9Ci0gICAgRUJvcmRlclN0eWxlIGJvcmRlclJpZ2h0U3R5bGUoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+Ym9yZGVyLnJpZ2h0LnN0eWxlKCk7IH0KLSAgICBjb25zdCBDb2xvciYgYm9y
ZGVyUmlnaHRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIucmlnaHQuY29s
b3I7IH0KLSAgICBib29sIGJvcmRlclJpZ2h0SXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJu
IHN1cnJvdW5kLT5ib3JkZXIucmlnaHQuaXNUcmFuc3BhcmVudCgpOyB9CisgICAgRUJvcmRlclN0
eWxlIGJvcmRlclJpZ2h0U3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnJp
Z2h0KCkuc3R5bGUoKTsgfQorICAgIGNvbnN0IENvbG9yJiBib3JkZXJSaWdodENvbG9yKCkgY29u
c3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5yaWdodCgpLmNvbG9yKCk7IH0KKyAgICBib29s
IGJvcmRlclJpZ2h0SXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3Jk
ZXIucmlnaHQoKS5pc1RyYW5zcGFyZW50KCk7IH0KICAgICB1bnNpZ25lZCBzaG9ydCBib3JkZXJU
b3BXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIuYm9yZGVyVG9wV2lkdGgo
KTsgfQotICAgIEVCb3JkZXJTdHlsZSBib3JkZXJUb3BTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN1
cnJvdW5kLT5ib3JkZXIudG9wLnN0eWxlKCk7IH0KLSAgICBjb25zdCBDb2xvciYgYm9yZGVyVG9w
Q29sb3IoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLnRvcC5jb2xvcjsgfQotICAg
IGJvb2wgYm9yZGVyVG9wSXNUcmFuc3BhcmVudCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5i
b3JkZXIudG9wLmlzVHJhbnNwYXJlbnQoKTsgfQorICAgIEVCb3JkZXJTdHlsZSBib3JkZXJUb3BT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIudG9wKCkuc3R5bGUoKTsgfQor
ICAgIGNvbnN0IENvbG9yJiBib3JkZXJUb3BDb2xvcigpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5k
LT5ib3JkZXIudG9wKCkuY29sb3IoKTsgfQorICAgIGJvb2wgYm9yZGVyVG9wSXNUcmFuc3BhcmVu
dCgpIGNvbnN0IHsgcmV0dXJuIHN1cnJvdW5kLT5ib3JkZXIudG9wKCkuaXNUcmFuc3BhcmVudCgp
OyB9CiAgICAgdW5zaWduZWQgc2hvcnQgYm9yZGVyQm90dG9tV2lkdGgoKSBjb25zdCB7IHJldHVy
biBzdXJyb3VuZC0+Ym9yZGVyLmJvcmRlckJvdHRvbVdpZHRoKCk7IH0KLSAgICBFQm9yZGVyU3R5
bGUgYm9yZGVyQm90dG9tU3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJv
dHRvbS5zdHlsZSgpOyB9Ci0gICAgY29uc3QgQ29sb3ImIGJvcmRlckJvdHRvbUNvbG9yKCkgY29u
c3QgeyByZXR1cm4gc3Vycm91bmQtPmJvcmRlci5ib3R0b20uY29sb3I7IH0KLSAgICBib29sIGJv
cmRlckJvdHRvbUlzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVy
LmJvdHRvbS5pc1RyYW5zcGFyZW50KCk7IH0KKyAgICBFQm9yZGVyU3R5bGUgYm9yZGVyQm90dG9t
U3R5bGUoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLnN0eWxlKCk7
IH0KKyAgICBjb25zdCBDb2xvciYgYm9yZGVyQm90dG9tQ29sb3IoKSBjb25zdCB7IHJldHVybiBz
dXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgpLmNvbG9yKCk7IH0KKyAgICBib29sIGJvcmRlckJvdHRv
bUlzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJldHVybiBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbSgp
LmlzVHJhbnNwYXJlbnQoKTsgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgb3V0bGluZVNpemUoKSBj
b25zdCB7IHJldHVybiBtYXgoMCwgb3V0bGluZVdpZHRoKCkgKyBvdXRsaW5lT2Zmc2V0KCkpOyB9
CiAgICAgdW5zaWduZWQgc2hvcnQgb3V0bGluZVdpZHRoKCkgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChiYWNrZ3JvdW5kLT5tX291dGxpbmUuc3R5bGUoKSA9PSBCTk9ORSkKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICByZXR1cm4gYmFja2dyb3VuZC0+bV9vdXRsaW5lLndpZHRoOwor
ICAgICAgICByZXR1cm4gYmFja2dyb3VuZC0+bV9vdXRsaW5lLndpZHRoKCk7CiAgICAgfQogICAg
IGJvb2wgaGFzT3V0bGluZSgpIGNvbnN0IHsgcmV0dXJuIG91dGxpbmVXaWR0aCgpID4gMCAmJiBv
dXRsaW5lU3R5bGUoKSA+IEJISURERU47IH0KICAgICBFQm9yZGVyU3R5bGUgb3V0bGluZVN0eWxl
KCkgY29uc3QgeyByZXR1cm4gYmFja2dyb3VuZC0+bV9vdXRsaW5lLnN0eWxlKCk7IH0KLSAgICBi
b29sIG91dGxpbmVTdHlsZUlzQXV0bygpIGNvbnN0IHsgcmV0dXJuIGJhY2tncm91bmQtPm1fb3V0
bGluZS5fYXV0bzsgfQotICAgIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29sb3IoKSBjb25zdCB7IHJl
dHVybiBiYWNrZ3JvdW5kLT5tX291dGxpbmUuY29sb3I7IH0KKyAgICBib29sIG91dGxpbmVTdHls
ZUlzQXV0bygpIGNvbnN0IHsgcmV0dXJuIGJhY2tncm91bmQtPm1fb3V0bGluZS5pc0F1dG8oKTsg
fQorICAgIGNvbnN0IENvbG9yJiBvdXRsaW5lQ29sb3IoKSBjb25zdCB7IHJldHVybiBiYWNrZ3Jv
dW5kLT5tX291dGxpbmUuY29sb3IoKTsgfQogCiAgICAgRU92ZXJmbG93IG92ZXJmbG93WCgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVPdmVyZmxvdz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9v
dmVyZmxvd1gpOyB9CiAgICAgRU92ZXJmbG93IG92ZXJmbG93WSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEVPdmVyZmxvdz4obm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1kpOyB9CkBA
IC02MTAsNyArNjEwLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGJhY2tncm91bmQt
Pm1fb3V0bGluZS5zdHlsZSgpID09IEJOT05FKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIHJldHVybiBiYWNrZ3JvdW5kLT5tX291dGxpbmUuX29mZnNldDsKKyAgICAgICAgcmV0dXJu
IGJhY2tncm91bmQtPm1fb3V0bGluZS5vZmZzZXQoKTsKICAgICB9CiAKICAgICBTaGFkb3dEYXRh
KiB0ZXh0U2hhZG93KCkgY29uc3QgeyByZXR1cm4gcmFyZUluaGVyaXRlZERhdGEtPnRleHRTaGFk
b3c7IH0KQEAgLTY2MSw3ICs2NjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBdXRvQ29sdW1u
Q291bnQoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+
bV9hdXRvQ291bnQ7IH0KICAgICBmbG9hdCBjb2x1bW5HYXAoKSBjb25zdCB7IHJldHVybiByYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9nYXA7IH0KICAgICBib29sIGhhc05vcm1h
bENvbHVtbkdhcCgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRp
Q29sLT5tX25vcm1hbEdhcDsgfQotICAgIGNvbnN0IENvbG9yJiBjb2x1bW5SdWxlQ29sb3IoKSBj
b25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9ydWxlLmNv
bG9yOyB9CisgICAgY29uc3QgQ29sb3ImIGNvbHVtblJ1bGVDb2xvcigpIGNvbnN0IHsgcmV0dXJu
IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX211bHRpQ29sLT5tX3J1bGUuY29sb3IoKTsgfQogICAg
IEVCb3JkZXJTdHlsZSBjb2x1bW5SdWxlU3R5bGUoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bV9tdWx0aUNvbC0+bV9ydWxlLnN0eWxlKCk7IH0KICAgICB1bnNpZ25lZCBz
aG9ydCBjb2x1bW5SdWxlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0
YS0+bV9tdWx0aUNvbC0+cnVsZVdpZHRoKCk7IH0KICAgICBib29sIGNvbHVtblJ1bGVJc1RyYW5z
cGFyZW50KCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbXVsdGlDb2wt
Pm1fcnVsZS5pc1RyYW5zcGFyZW50KCk7IH0KQEAgLTc1NiwxNiArNzU2LDE2IEBAIHB1YmxpYzoK
ICNlbmRpZgogCiAgICAgdm9pZCByZXNldEJvcmRlcigpIHsgcmVzZXRCb3JkZXJJbWFnZSgpOyBy
ZXNldEJvcmRlclRvcCgpOyByZXNldEJvcmRlclJpZ2h0KCk7IHJlc2V0Qm9yZGVyQm90dG9tKCk7
IHJlc2V0Qm9yZGVyTGVmdCgpOyByZXNldEJvcmRlclJhZGl1cygpOyB9Ci0gICAgdm9pZCByZXNl
dEJvcmRlclRvcCgpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLnRvcCwgQm9yZGVyVmFsdWUo
KSkgfQotICAgIHZvaWQgcmVzZXRCb3JkZXJSaWdodCgpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9y
ZGVyLnJpZ2h0LCBCb3JkZXJWYWx1ZSgpKSB9Ci0gICAgdm9pZCByZXNldEJvcmRlckJvdHRvbSgp
IHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLmJvdHRvbSwgQm9yZGVyVmFsdWUoKSkgfQotICAg
IHZvaWQgcmVzZXRCb3JkZXJMZWZ0KCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubGVmdCwg
Qm9yZGVyVmFsdWUoKSkgfQotICAgIHZvaWQgcmVzZXRCb3JkZXJJbWFnZSgpIHsgU0VUX1ZBUihz
dXJyb3VuZCwgYm9yZGVyLmltYWdlLCBOaW5lUGllY2VJbWFnZSgpKSB9CisgICAgdm9pZCByZXNl
dEJvcmRlclRvcCgpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fdG9wLCBCb3JkZXJWYWx1
ZSgpKSB9CisgICAgdm9pZCByZXNldEJvcmRlclJpZ2h0KCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBi
b3JkZXIubV9yaWdodCwgQm9yZGVyVmFsdWUoKSkgfQorICAgIHZvaWQgcmVzZXRCb3JkZXJCb3R0
b20oKSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX2JvdHRvbSwgQm9yZGVyVmFsdWUoKSkg
fQorICAgIHZvaWQgcmVzZXRCb3JkZXJMZWZ0KCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIu
bV9sZWZ0LCBCb3JkZXJWYWx1ZSgpKSB9CisgICAgdm9pZCByZXNldEJvcmRlckltYWdlKCkgeyBT
RVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV9pbWFnZSwgTmluZVBpZWNlSW1hZ2UoKSkgfQogICAg
IHZvaWQgcmVzZXRCb3JkZXJSYWRpdXMoKSB7IHJlc2V0Qm9yZGVyVG9wTGVmdFJhZGl1cygpOyBy
ZXNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKCk7IHJlc2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cygp
OyByZXNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCk7IH0KLSAgICB2b2lkIHJlc2V0Qm9yZGVy
VG9wTGVmdFJhZGl1cygpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLnRvcExlZnQsIGluaXRp
YWxCb3JkZXJSYWRpdXMoKSkgfQotICAgIHZvaWQgcmVzZXRCb3JkZXJUb3BSaWdodFJhZGl1cygp
IHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLnRvcFJpZ2h0LCBpbml0aWFsQm9yZGVyUmFkaXVz
KCkpIH0KLSAgICB2b2lkIHJlc2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cygpIHsgU0VUX1ZBUihz
dXJyb3VuZCwgYm9yZGVyLmJvdHRvbUxlZnQsIGluaXRpYWxCb3JkZXJSYWRpdXMoKSkgfQotICAg
IHZvaWQgcmVzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cygpIHsgU0VUX1ZBUihzdXJyb3VuZCwg
Ym9yZGVyLmJvdHRvbVJpZ2h0LCBpbml0aWFsQm9yZGVyUmFkaXVzKCkpIH0KKyAgICB2b2lkIHJl
c2V0Qm9yZGVyVG9wTGVmdFJhZGl1cygpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fdG9w
TGVmdCwgaW5pdGlhbEJvcmRlclJhZGl1cygpKSB9CisgICAgdm9pZCByZXNldEJvcmRlclRvcFJp
Z2h0UmFkaXVzKCkgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV90b3BSaWdodCwgaW5pdGlh
bEJvcmRlclJhZGl1cygpKSB9CisgICAgdm9pZCByZXNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMo
KSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX2JvdHRvbUxlZnQsIGluaXRpYWxCb3JkZXJS
YWRpdXMoKSkgfQorICAgIHZvaWQgcmVzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cygpIHsgU0VU
X1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fYm90dG9tUmlnaHQsIGluaXRpYWxCb3JkZXJSYWRpdXMo
KSkgfQogCiAgICAgdm9pZCByZXNldE91dGxpbmUoKSB7IFNFVF9WQVIoYmFja2dyb3VuZCwgbV9v
dXRsaW5lLCBPdXRsaW5lVmFsdWUoKSkgfQogCkBAIC03NzYsMTIgKzc3NiwxMiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRCYWNrZ3JvdW5kU2l6ZShFRmlsbFNpemVUeXBlIGIpIHsgU0VUX1ZBUihi
YWNrZ3JvdW5kLCBtX2JhY2tncm91bmQubV9zaXplVHlwZSwgYikgfQogICAgIHZvaWQgc2V0QmFj
a2dyb3VuZFNpemVMZW5ndGgoTGVuZ3RoU2l6ZSBsKSB7IFNFVF9WQVIoYmFja2dyb3VuZCwgbV9i
YWNrZ3JvdW5kLm1fc2l6ZUxlbmd0aCwgbCkgfQogICAgIAotICAgIHZvaWQgc2V0Qm9yZGVySW1h
Z2UoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGIpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLmlt
YWdlLCBiKSB9CisgICAgdm9pZCBzZXRCb3JkZXJJbWFnZShjb25zdCBOaW5lUGllY2VJbWFnZSYg
YikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV9pbWFnZSwgYikgfQogCi0gICAgdm9pZCBz
ZXRCb3JkZXJUb3BMZWZ0UmFkaXVzKGNvbnN0IEludFNpemUmIHMpIHsgU0VUX1ZBUihzdXJyb3Vu
ZCwgYm9yZGVyLnRvcExlZnQsIHMpIH0KLSAgICB2b2lkIHNldEJvcmRlclRvcFJpZ2h0UmFkaXVz
KGNvbnN0IEludFNpemUmIHMpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLnRvcFJpZ2h0LCBz
KSB9Ci0gICAgdm9pZCBzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKGNvbnN0IEludFNpemUmIHMp
IHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLmJvdHRvbUxlZnQsIHMpIH0KLSAgICB2b2lkIHNl
dEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKGNvbnN0IEludFNpemUmIHMpIHsgU0VUX1ZBUihzdXJy
b3VuZCwgYm9yZGVyLmJvdHRvbVJpZ2h0LCBzKSB9CisgICAgdm9pZCBzZXRCb3JkZXJUb3BMZWZ0
UmFkaXVzKGNvbnN0IEludFNpemUmIHMpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fdG9w
TGVmdCwgcykgfQorICAgIHZvaWQgc2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMoY29uc3QgSW50U2l6
ZSYgcykgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV90b3BSaWdodCwgcykgfQorICAgIHZv
aWQgc2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cyhjb25zdCBJbnRTaXplJiBzKSB7IFNFVF9WQVIo
c3Vycm91bmQsIGJvcmRlci5tX2JvdHRvbUxlZnQsIHMpIH0KKyAgICB2b2lkIHNldEJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzKGNvbnN0IEludFNpemUmIHMpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9y
ZGVyLm1fYm90dG9tUmlnaHQsIHMpIH0KIAogICAgIHZvaWQgc2V0Qm9yZGVyUmFkaXVzKGNvbnN0
IEludFNpemUmIHMpCiAgICAgewpAQCAtNzkzLDI3ICs3OTMsMjcgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgZ2V0Qm9yZGVyUmFkaWlGb3JSZWN0KGNvbnN0IEludFJlY3QmLCBJbnRTaXplJiB0
b3BMZWZ0LCBJbnRTaXplJiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVmdCwgSW50U2l6ZSYg
Ym90dG9tUmlnaHQpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRCb3JkZXJMZWZ0V2lkdGgodW5zaWdu
ZWQgc2hvcnQgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubGVmdC53aWR0aCwgdikgfQot
ICAgIHZvaWQgc2V0Qm9yZGVyTGVmdFN0eWxlKEVCb3JkZXJTdHlsZSB2KSB7IFNFVF9WQVIoc3Vy
cm91bmQsIGJvcmRlci5sZWZ0Lm1fc3R5bGUsIHYpIH0KLSAgICB2b2lkIHNldEJvcmRlckxlZnRD
b2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubGVmdC5jb2xv
ciwgdikgfQotICAgIHZvaWQgc2V0Qm9yZGVyUmlnaHRXaWR0aCh1bnNpZ25lZCBzaG9ydCB2KSB7
IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5yaWdodC53aWR0aCwgdikgfQotICAgIHZvaWQgc2V0
Qm9yZGVyUmlnaHRTdHlsZShFQm9yZGVyU3R5bGUgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3Jk
ZXIucmlnaHQubV9zdHlsZSwgdikgfQotICAgIHZvaWQgc2V0Qm9yZGVyUmlnaHRDb2xvcihjb25z
dCBDb2xvciYgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIucmlnaHQuY29sb3IsIHYpIH0K
LSAgICB2b2lkIHNldEJvcmRlclRvcFdpZHRoKHVuc2lnbmVkIHNob3J0IHYpIHsgU0VUX1ZBUihz
dXJyb3VuZCwgYm9yZGVyLnRvcC53aWR0aCwgdikgfQotICAgIHZvaWQgc2V0Qm9yZGVyVG9wU3R5
bGUoRUJvcmRlclN0eWxlIHYpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLnRvcC5tX3N0eWxl
LCB2KSB9Ci0gICAgdm9pZCBzZXRCb3JkZXJUb3BDb2xvcihjb25zdCBDb2xvciYgdikgeyBTRVRf
VkFSKHN1cnJvdW5kLCBib3JkZXIudG9wLmNvbG9yLCB2KSB9Ci0gICAgdm9pZCBzZXRCb3JkZXJC
b3R0b21XaWR0aCh1bnNpZ25lZCBzaG9ydCB2KSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5i
b3R0b20ud2lkdGgsIHYpIH0KLSAgICB2b2lkIHNldEJvcmRlckJvdHRvbVN0eWxlKEVCb3JkZXJT
dHlsZSB2KSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5ib3R0b20ubV9zdHlsZSwgdikgfQot
ICAgIHZvaWQgc2V0Qm9yZGVyQm90dG9tQ29sb3IoY29uc3QgQ29sb3ImIHYpIHsgU0VUX1ZBUihz
dXJyb3VuZCwgYm9yZGVyLmJvdHRvbS5jb2xvciwgdikgfQotICAgIHZvaWQgc2V0T3V0bGluZVdp
ZHRoKHVuc2lnbmVkIHNob3J0IHYpIHsgU0VUX1ZBUihiYWNrZ3JvdW5kLCBtX291dGxpbmUud2lk
dGgsIHYpIH0KKyAgICB2b2lkIHNldEJvcmRlckxlZnRXaWR0aCh1bnNpZ25lZCBzaG9ydCB2KSB7
IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX2xlZnQubV93aWR0aCwgdikgfQorICAgIHZvaWQg
c2V0Qm9yZGVyTGVmdFN0eWxlKEVCb3JkZXJTdHlsZSB2KSB7IFNFVF9WQVIoc3Vycm91bmQsIGJv
cmRlci5tX2xlZnQubV9zdHlsZSwgdikgfQorICAgIHZvaWQgc2V0Qm9yZGVyTGVmdENvbG9yKGNv
bnN0IENvbG9yJiB2KSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX2xlZnQubV9jb2xvciwg
dikgfQorICAgIHZvaWQgc2V0Qm9yZGVyUmlnaHRXaWR0aCh1bnNpZ25lZCBzaG9ydCB2KSB7IFNF
VF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX3JpZ2h0Lm1fd2lkdGgsIHYpIH0KKyAgICB2b2lkIHNl
dEJvcmRlclJpZ2h0U3R5bGUoRUJvcmRlclN0eWxlIHYpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9y
ZGVyLm1fcmlnaHQubV9zdHlsZSwgdikgfQorICAgIHZvaWQgc2V0Qm9yZGVyUmlnaHRDb2xvcihj
b25zdCBDb2xvciYgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV9yaWdodC5tX2NvbG9y
LCB2KSB9CisgICAgdm9pZCBzZXRCb3JkZXJUb3BXaWR0aCh1bnNpZ25lZCBzaG9ydCB2KSB7IFNF
VF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX3RvcC5tX3dpZHRoLCB2KSB9CisgICAgdm9pZCBzZXRC
b3JkZXJUb3BTdHlsZShFQm9yZGVyU3R5bGUgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIu
bV90b3AubV9zdHlsZSwgdikgfQorICAgIHZvaWQgc2V0Qm9yZGVyVG9wQ29sb3IoY29uc3QgQ29s
b3ImIHYpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fdG9wLm1fY29sb3IsIHYpIH0KKyAg
ICB2b2lkIHNldEJvcmRlckJvdHRvbVdpZHRoKHVuc2lnbmVkIHNob3J0IHYpIHsgU0VUX1ZBUihz
dXJyb3VuZCwgYm9yZGVyLm1fYm90dG9tLm1fd2lkdGgsIHYpIH0KKyAgICB2b2lkIHNldEJvcmRl
ckJvdHRvbVN0eWxlKEVCb3JkZXJTdHlsZSB2KSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5t
X2JvdHRvbS5tX3N0eWxlLCB2KSB9CisgICAgdm9pZCBzZXRCb3JkZXJCb3R0b21Db2xvcihjb25z
dCBDb2xvciYgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV9ib3R0b20ubV9jb2xvciwg
dikgfQorICAgIHZvaWQgc2V0T3V0bGluZVdpZHRoKHVuc2lnbmVkIHNob3J0IHYpIHsgU0VUX1ZB
UihiYWNrZ3JvdW5kLCBtX291dGxpbmUubV93aWR0aCwgdikgfQogCiAgICAgdm9pZCBzZXRPdXRs
aW5lU3R5bGUoRUJvcmRlclN0eWxlIHYsIGJvb2wgaXNBdXRvID0gZmFsc2UpCiAgICAgewogICAg
ICAgICBTRVRfVkFSKGJhY2tncm91bmQsIG1fb3V0bGluZS5tX3N0eWxlLCB2KQotICAgICAgICBT
RVRfVkFSKGJhY2tncm91bmQsIG1fb3V0bGluZS5fYXV0bywgaXNBdXRvKQorICAgICAgICBTRVRf
VkFSKGJhY2tncm91bmQsIG1fb3V0bGluZS5tX2lzQXV0bywgaXNBdXRvKQogICAgIH0KIAotICAg
IHZvaWQgc2V0T3V0bGluZUNvbG9yKGNvbnN0IENvbG9yJiB2KSB7IFNFVF9WQVIoYmFja2dyb3Vu
ZCwgbV9vdXRsaW5lLmNvbG9yLCB2KSB9CisgICAgdm9pZCBzZXRPdXRsaW5lQ29sb3IoY29uc3Qg
Q29sb3ImIHYpIHsgU0VUX1ZBUihiYWNrZ3JvdW5kLCBtX291dGxpbmUubV9jb2xvciwgdikgfQog
CiAgICAgdm9pZCBzZXRPdmVyZmxvd1goRU92ZXJmbG93IHYpIHsgbm9uaW5oZXJpdGVkX2ZsYWdz
Ll9vdmVyZmxvd1ggPSB2OyB9CiAgICAgdm9pZCBzZXRPdmVyZmxvd1koRU92ZXJmbG93IHYpIHsg
bm9uaW5oZXJpdGVkX2ZsYWdzLl9vdmVyZmxvd1kgPSB2OyB9CkBAIC05NDcsNyArOTQ3LDcgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkQmluZGluZ1VSSShTdHJpbmdJbXBsKiB1cmkpOwogI2VuZGlm
CiAKLSAgICB2b2lkIHNldE91dGxpbmVPZmZzZXQoaW50IHYpIHsgU0VUX1ZBUihiYWNrZ3JvdW5k
LCBtX291dGxpbmUuX29mZnNldCwgdikgfQorICAgIHZvaWQgc2V0T3V0bGluZU9mZnNldChpbnQg
dikgeyBTRVRfVkFSKGJhY2tncm91bmQsIG1fb3V0bGluZS5tX29mZnNldCwgdikgfQogICAgIHZv
aWQgc2V0VGV4dFNoYWRvdyhTaGFkb3dEYXRhKiB2YWwsIGJvb2wgYWRkPWZhbHNlKTsKICAgICB2
b2lkIHNldFRleHRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgYykgeyBTRVRfVkFSKHJhcmVJbmhl
cml0ZWREYXRhLCB0ZXh0U3Ryb2tlQ29sb3IsIGMpIH0KICAgICB2b2lkIHNldFRleHRTdHJva2VX
aWR0aChmbG9hdCB3KSB7IFNFVF9WQVIocmFyZUluaGVyaXRlZERhdGEsIHRleHRTdHJva2VXaWR0
aCwgdykgfQpAQCAtOTkxLDkgKzk5MSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhhc0F1dG9D
b2x1bW5Db3VudCgpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9t
dWx0aUNvbCwgbV9hdXRvQ291bnQsIHRydWUpOyBTRVRfVkFSKHJhcmVOb25Jbmhlcml0ZWREYXRh
LmFjY2VzcygpLT5tX211bHRpQ29sLCBtX2NvdW50LCAwKTsgfQogICAgIHZvaWQgc2V0Q29sdW1u
R2FwKGZsb2F0IGYpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9t
dWx0aUNvbCwgbV9ub3JtYWxHYXAsIGZhbHNlKTsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0
YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCwgbV9nYXAsIGYpOyB9CiAgICAgdm9pZCBzZXRIYXNOb3Jt
YWxDb2x1bW5HYXAoKSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1f
bXVsdGlDb2wsIG1fbm9ybWFsR2FwLCB0cnVlKTsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0
YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCwgbV9nYXAsIDApOyB9Ci0gICAgdm9pZCBzZXRDb2x1bW5S
dWxlQ29sb3IoY29uc3QgQ29sb3ImIGMpIHsgU0VUX1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YS5h
Y2Nlc3MoKS0+bV9tdWx0aUNvbCwgbV9ydWxlLmNvbG9yLCBjKTsgfQorICAgIHZvaWQgc2V0Q29s
dW1uUnVsZUNvbG9yKGNvbnN0IENvbG9yJiBjKSB7IFNFVF9WQVIocmFyZU5vbkluaGVyaXRlZERh
dGEuYWNjZXNzKCktPm1fbXVsdGlDb2wsIG1fcnVsZS5tX2NvbG9yLCBjKTsgfQogICAgIHZvaWQg
c2V0Q29sdW1uUnVsZVN0eWxlKEVCb3JkZXJTdHlsZSBiKSB7IFNFVF9WQVIocmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCktPm1fbXVsdGlDb2wsIG1fcnVsZS5tX3N0eWxlLCBiKTsgfQotICAg
IHZvaWQgc2V0Q29sdW1uUnVsZVdpZHRoKHVuc2lnbmVkIHNob3J0IHcpIHsgU0VUX1ZBUihyYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCwgbV9ydWxlLndpZHRoLCB3KTsg
fQorICAgIHZvaWQgc2V0Q29sdW1uUnVsZVdpZHRoKHVuc2lnbmVkIHNob3J0IHcpIHsgU0VUX1ZB
UihyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCwgbV9ydWxlLm1fd2lk
dGgsIHcpOyB9CiAgICAgdm9pZCByZXNldENvbHVtblJ1bGUoKSB7IFNFVF9WQVIocmFyZU5vbklu
aGVyaXRlZERhdGEuYWNjZXNzKCktPm1fbXVsdGlDb2wsIG1fcnVsZSwgQm9yZGVyVmFsdWUoKSkg
fQogICAgIHZvaWQgc2V0Q29sdW1uQnJlYWtCZWZvcmUoRVBhZ2VCcmVhayBwKSB7IFNFVF9WQVIo
cmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fbXVsdGlDb2wsIG1fYnJlYWtCZWZvcmUs
IHApOyB9CiAgICAgdm9pZCBzZXRDb2x1bW5CcmVha0luc2lkZShFUGFnZUJyZWFrIHApIHsgU0VU
X1ZBUihyYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9tdWx0aUNvbCwgbV9icmVha0lu
c2lkZSwgcCk7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1N0eWxlTXVsdGlDb2xE
YXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvU3R5bGVNdWx0aUNv
bERhdGEuaAkocmV2aXNpb24gNTcyOTEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9TdHls
ZU11bHRpQ29sRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIGlmIChtX3J1bGUuc3R5bGUoKSA9PSBCTk9ORSB8fCBtX3J1bGUuc3R5
bGUoKSA9PSBCSElEREVOKQogICAgICAgICAgICAgcmV0dXJuIDA7IAotICAgICAgICByZXR1cm4g
bV9ydWxlLndpZHRoOworICAgICAgICByZXR1cm4gbV9ydWxlLndpZHRoKCk7CiAgICAgfQogCiAg
ICAgZmxvYXQgbV93aWR0aDsK
</data>
<flag name="review"
          id="36620"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
      

    </bug>

</bugzilla>