<?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>46454</bug_id>
          
          <creation_ts>2010-09-24 00:14:09 -0700</creation_ts>
          <short_desc>Renames of a bunch of calcXXX methods.</short_desc>
          <delta_ts>2010-09-24 00:26:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          <blocked>46123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>284272</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-24 00:14:09 -0700</bug_when>
    <thetext>Just doing a bunch of renames together.  Will list them all.

calcReplacedWidth -&gt; computeReplacedWidth

calcHorizontalMargins -&gt; computeInlineDirectionMargins

calcVerticalMargins -&gt; computeBlockDirectionMargins

calcWidthUsing -&gt; computeLogicalWidthUsing

calcHeightUsing -&gt; computeLogicalHeightUsing

calcReplacedHeight/HeightUsing -&gt; computeReplacedHeight/HeightUsing

calcAbsoluteHorizontalValues -&gt; computePositionedLogicalWidthUsing

calcAbsoluteVerticalValues -&gt; computePositionedLogicalHeightUsing

calcAbsoluteHorizontal -&gt; computePositionedLogicalWIdth

calcAbsoluteVertical -&gt; computePositionedLogicalHeight

calcAbsoluteHorizontalReplaced -&gt; computePositionedLogicalWidthReplaced

calcAbsoluteVerticalReplaced -&gt; computePositionedLogicalHeightReplaced

calcBorderBoxWidth/Height -&gt; computeBorderBoxLogicalWidth/LogicalHeight

calcContentBoxWidth/Height -&gt; computeContentBoxLogicalWidth/LogicalHeight

shouldCalculateSizeAsReplaced -&gt; shouldComputeSizeAsReplaced

calcPercentageHeight -&gt; computePercentageLogicalHeight</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284274</commentid>
    <comment_count>1</comment_count>
      <attachid>68658</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-24 00:19:36 -0700</bug_when>
    <thetext>Created attachment 68658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284275</commentid>
    <comment_count>2</comment_count>
      <attachid>68658</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2010-09-24 00:23:06 -0700</bug_when>
    <thetext>Comment on attachment 68658
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284276</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-24 00:26:42 -0700</bug_when>
    <thetext>Fixed in r68239.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68658</attachid>
            <date>2010-09-24 00:19:36 -0700</date>
            <delta_ts>2010-09-24 00:23:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>76048</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIyIEBACisyMDEwLTA5LTI0ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDY0NTQsIHJlbmFtZSBhIGJ1bmNo
IG9mIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGNhbGN1bGF0aW9uIG1ldGhvZHMuCisKKyAgICAgICAg
Y2FsY1JlcGxhY2VkV2lkdGggLT4gY29tcHV0ZVJlcGxhY2VkV2lkdGgKKworICAgICAgICBjYWxj
SG9yaXpvbnRhbE1hcmdpbnMgLT4gY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMKKworICAg
ICAgICBjYWxjVmVydGljYWxNYXJnaW5zIC0+IGNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMK
KworICAgICAgICBjYWxjV2lkdGhVc2luZyAtPiBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcKKwor
ICAgICAgICBjYWxjSGVpZ2h0VXNpbmcgLT4gY29tcHV0ZUxvZ2ljYWxIZWlnaHRVc2luZworCisg
ICAgICAgIGNhbGNSZXBsYWNlZEhlaWdodC9IZWlnaHRVc2luZyAtPiBjb21wdXRlUmVwbGFjZWRI
ZWlnaHQvSGVpZ2h0VXNpbmcKKworICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVz
IC0+IGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcKKworICAgICAgICBjYWxjQWJz
b2x1dGVWZXJ0aWNhbFZhbHVlcyAtPiBjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRVc2lu
ZworCisgICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWwgLT4gY29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsV0lkdGgKKworICAgICAgICBjYWxjQWJzb2x1dGVWZXJ0aWNhbCAtPiBjb21wdXRlUG9z
aXRpb25lZExvZ2ljYWxIZWlnaHQKKworICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmVw
bGFjZWQgLT4gY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZAorCisgICAgICAg
IGNhbGNBYnNvbHV0ZVZlcnRpY2FsUmVwbGFjZWQgLT4gY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2Fs
SGVpZ2h0UmVwbGFjZWQKKworICAgICAgICBjYWxjQm9yZGVyQm94V2lkdGgvSGVpZ2h0IC0+IGNv
bXB1dGVCb3JkZXJCb3hMb2dpY2FsV2lkdGgvTG9naWNhbEhlaWdodAorCisgICAgICAgIGNhbGND
b250ZW50Qm94V2lkdGgvSGVpZ2h0IC0+IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoL0xv
Z2ljYWxIZWlnaHQKKworICAgICAgICBzaG91bGRDYWxjdWxhdGVTaXplQXNSZXBsYWNlZCAtPiBz
aG91bGRDb21wdXRlU2l6ZUFzUmVwbGFjZWQKKworICAgICAgICBjYWxjUGVyY2VudGFnZUhlaWdo
dCAtPiBjb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQKKworICAgICAgICAqIHJlbmRlcmlu
Zy9BdXRvVGFibGVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5b3V0
OjpyZWNhbGNDb2x1bW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0UG9zaXRpb25lZEJsb2NrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpkZXRlcm1pbmVIb3Jpem9udGFsUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1
dGVCb3JkZXJCb3hMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
b21wdXRlQm9yZGVyQm94TG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGhVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRXaWR0aFVzaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjphdmFpbGFibGVIZWlnaHRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoVXNpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWln
aHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxIZWlnaHRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVQb3Np
dGlvbmVkTG9naWNhbFdpZHRoUmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
Ojpjb21wdXRlUG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzaG91bGRD
b21wdXRlU2l6ZUFzUmVwbGFjZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3Jp
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJEYXRhR3JpZDo6Y2FsY1ByZWZXaWR0aHMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2FsY1ByZWZXaWR0aHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEhvcml6b250YWxCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm94KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6
OmNvbXB1dGVSZXBsYWNlZFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpj
b21wdXRlUmVwbGFjZWRIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmNh
bGNBc3BlY3RSYXRpb1dpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpjYWxj
QXNwZWN0UmF0aW9IZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RCb3g6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTWVudUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWVudUxpc3Q6OmNhbGNQ
cmVmV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29udGFpbmVyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbXB1
dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxh
Y2VkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBs
YWNlZEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6Y2FsY0FzcGVj
dFJhdGlvV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNhbGNBc3Bl
Y3RSYXRpb0hlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6Y2FsY1By
ZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jvb3Q6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jv
b3Q6OmNvbXB1dGVSZXBsYWNlZFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jv
b3Q6OmNvbXB1dGVSZXBsYWNlZEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNW
R1Jvb3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y29t
cHV0ZUxvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVSb3c6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpj
YWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZGVvOjpjb21wdXRlUmVwbGFjZWRXaWR0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJWaWRlbzo6Y29tcHV0ZVJlcGxhY2VkSGVpZ2h0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVmlkZW8uaDoKKwogMjAxMC0wOS0yMyAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gNjgxNzQpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw3ICs5Nyw3IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4oaW50IGUK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBGaXhlZDoKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGlnbm9yZSB3aWR0aD0wCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAody52YWx1ZSgp
ID4gMCAmJiAoaW50KWwud2lkdGgudHlwZSgpICE9IFBlcmNlbnQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgd3ZhbCA9IGNlbGwtPmNhbGNCb3JkZXJCb3hXaWR0aCh3LnZhbHVl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3dmFsID0gY2VsbC0+Y29tcHV0
ZUJvcmRlckJveExvZ2ljYWxXaWR0aCh3LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChsLndpZHRoLmlzRml4ZWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBOYXYvSUUgd2VpcmRuZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICgod3ZhbCA+IGwud2lkdGgudmFsdWUoKSkgfHwKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMwLDcgKzEzMzAsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGp1c3RQb3NpdGlvbmVkQmxvY2soCiAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5o
YXNTdGF0aWNZKCkpIHsKICAgICAgICAgaW50IHkgPSBoZWlnaHQoKTsKICAgICAgICAgaWYgKCFt
YXJnaW5JbmZvLmNhbkNvbGxhcHNlV2l0aFRvcCgpKSB7Ci0gICAgICAgICAgICBjaGlsZC0+Y2Fs
Y1ZlcnRpY2FsTWFyZ2lucygpOworICAgICAgICAgICAgY2hpbGQtPmNvbXB1dGVCbG9ja0RpcmVj
dGlvbk1hcmdpbnMoKTsKICAgICAgICAgICAgIGludCBtYXJnaW5Ub3AgPSBjaGlsZC0+bWFyZ2lu
VG9wKCk7CiAgICAgICAgICAgICBpbnQgY29sbGFwc2VkVG9wUG9zID0gbWFyZ2luSW5mby5wb3NN
YXJnaW4oKTsKICAgICAgICAgICAgIGludCBjb2xsYXBzZWRUb3BOZWcgPSBtYXJnaW5JbmZvLm5l
Z01hcmdpbigpOwpAQCAtMTY1OSw5ICsxNjU5LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6ZGV0ZXJt
aW5lSG9yaXpvbnRhbFBvcwogICAgICAgICAgICAgICAgIC8vIFRoZSBvYmplY3QgaXMgc2hpZnRp
bmcgcmlnaHQuIFRoZSBvYmplY3QgbWlnaHQgYmUgY2VudGVyZWQsIHNvIHdlIG5lZWQgdG8KICAg
ICAgICAgICAgICAgICAvLyByZWNhbGN1bGF0ZSBvdXIgaG9yaXpvbnRhbCBtYXJnaW5zLiBOb3Rl
IHRoYXQgdGhlIGNvbnRhaW5pbmcgYmxvY2sgY29udGVudAogICAgICAgICAgICAgICAgIC8vIHdp
ZHRoIGNvbXB1dGF0aW9uIHdpbGwgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRlbHRhIGJldHdlZW4g
fGxlZnRPZmZ8IGFuZCB8eFBvc3wKLSAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBq
dXN0IHBhc3MgdGhlIGNvbnRlbnQgd2lkdGggaW4gZGlyZWN0bHkgdG8gdGhlIHxjYWxjSG9yaXpv
bnRhbE1hcmdpbnN8CisgICAgICAgICAgICAgICAgLy8gc28gdGhhdCB3ZSBjYW4ganVzdCBwYXNz
IHRoZSBjb250ZW50IHdpZHRoIGluIGRpcmVjdGx5IHRvIHRoZSB8Y29tcHV0ZUlubGluZURpcmVj
dGlvbk1hcmdpbnN8CiAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb24uCi0gICAgICAgICAgICAg
ICAgY2hpbGQtPmNhbGNIb3Jpem9udGFsTWFyZ2lucyhjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVm
dCgpLCBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKSwgbGluZVdpZHRoKGNoaWxkLT55KCks
IGZhbHNlKSk7CisgICAgICAgICAgICAgICAgY2hpbGQtPmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25N
YXJnaW5zKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJn
aW5SaWdodCgpLCBsaW5lV2lkdGgoY2hpbGQtPnkoKSwgZmFsc2UpKTsKICAgICAgICAgICAgICAg
ICBjaFBvcyA9IGxlZnRPZmYgKyBjaGlsZC0+bWFyZ2luTGVmdCgpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC0xNjgwLDkgKzE2ODAsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1p
bmVIb3Jpem9udGFsUG9zCiAgICAgICAgICAgICAgICAgLy8gVGhlIG9iamVjdCBpcyBzaGlmdGlu
ZyBsZWZ0LiBUaGUgb2JqZWN0IG1pZ2h0IGJlIGNlbnRlcmVkLCBzbyB3ZSBuZWVkIHRvCiAgICAg
ICAgICAgICAgICAgLy8gcmVjYWxjdWxhdGUgb3VyIGhvcml6b250YWwgbWFyZ2lucy4gTm90ZSB0
aGF0IHRoZSBjb250YWluaW5nIGJsb2NrIGNvbnRlbnQKICAgICAgICAgICAgICAgICAvLyB3aWR0
aCBjb21wdXRhdGlvbiB3aWxsIHRha2UgaW50byBhY2NvdW50IHRoZSBkZWx0YSBiZXR3ZWVuIHxy
aWdodE9mZnwgYW5kIHx4UG9zfAotICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGp1
c3QgcGFzcyB0aGUgY29udGVudCB3aWR0aCBpbiBkaXJlY3RseSB0byB0aGUgfGNhbGNIb3Jpem9u
dGFsTWFyZ2luc3wKKyAgICAgICAgICAgICAgICAvLyBzbyB0aGF0IHdlIGNhbiBqdXN0IHBhc3Mg
dGhlIGNvbnRlbnQgd2lkdGggaW4gZGlyZWN0bHkgdG8gdGhlIHxjb21wdXRlSW5saW5lRGlyZWN0
aW9uTWFyZ2luc3wKICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAg
ICBjaGlsZC0+Y2FsY0hvcml6b250YWxNYXJnaW5zKGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0
KCksIGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBsaW5lV2lkdGgoY2hpbGQtPnkoKSwg
ZmFsc2UpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+Y29tcHV0ZUlubGluZURpcmVjdGlvbk1h
cmdpbnMoY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKSwgY2hpbGQtPnN0eWxlKCktPm1hcmdp
blJpZ2h0KCksIGxpbmVXaWR0aChjaGlsZC0+eSgpLCBmYWxzZSkpOwogICAgICAgICAgICAgICAg
IGNoUG9zID0gcmlnaHRPZmYgLSBjaGlsZC0+bWFyZ2luUmlnaHQoKSAtIGNoaWxkLT53aWR0aCgp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODAzLDcgKzE4MDMsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgaW50IG9sZFRvcE5lZ01hcmdp
biA9IG1heFRvcE5lZ01hcmdpbigpOwogCiAgICAgLy8gVGhlIGNoaWxkIGlzIGEgbm9ybWFsIGZs
b3cgb2JqZWN0LiAgQ29tcHV0ZSBpdHMgdmVydGljYWwgbWFyZ2lucyBub3cuCi0gICAgY2hpbGQt
PmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKKyAgICBjaGlsZC0+Y29tcHV0ZUJsb2NrRGlyZWN0aW9u
TWFyZ2lucygpOwogCiAgICAgLy8gRG8gbm90IGFsbG93IGEgY29sbGFwc2UgaWYgdGhlIG1hcmdp
biB0b3AgY29sbGFwc2Ugc3R5bGUgaXMgc2V0IHRvIFNFUEFSQVRFLgogICAgIGlmIChjaGlsZC0+
c3R5bGUoKS0+bWFyZ2luVG9wQ29sbGFwc2UoKSA9PSBNU0VQQVJBVEUpIHsKQEAgLTI5MjUsNyAr
MjkyNSw3IEBAIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCogUmVuZGVyQmxvY2sKICAgICAg
ICAgby0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICBlbHNlIHsKICAgICAgICAgby0+Y29tcHV0ZUxv
Z2ljYWxXaWR0aCgpOwotICAgICAgICBvLT5jYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAgICAg
IG8tPmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMoKTsKICAgICB9CiAgICAgbmV3T2JqLT5t
X3dpZHRoID0gby0+d2lkdGgoKSArIG8tPm1hcmdpbkxlZnQoKSArIG8tPm1hcmdpblJpZ2h0KCk7
CiAKQEAgLTQ1OTcsNyArNDU5Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhz
KCkKICAgICB1cGRhdGVGaXJzdExldHRlcigpOwogCiAgICAgaWYgKCFpc1RhYmxlQ2VsbCgpICYm
IHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+
IDApCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVu
dEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZldp
ZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHls
ZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBtX21pblByZWZXaWR0
aCA9IDA7CiAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gMDsKQEAgLTQ2MjAsMTggKzQ2MjAsMTgg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKQogICAgICAgICBpZiAoaXNUYWJs
ZUNlbGwoKSkgewogICAgICAgICAgICAgTGVuZ3RoIHcgPSB0b1JlbmRlclRhYmxlQ2VsbCh0aGlz
KS0+c3R5bGVPckNvbFdpZHRoKCk7CiAgICAgICAgICAgICBpZiAody5pc0ZpeGVkKCkgJiYgdy52
YWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21pblBy
ZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aCh3LnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAg
ICBtX21heFByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hM
b2dpY2FsV2lkdGgody52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYg
KHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgs
IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0
aCA9IG1heChtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4
KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKHN0eWxlKCktPm1heFdp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmlu
ZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgs
IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0
aCA9IG1pbihtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWlu
KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSAwOwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Nyw3ICs1ODcsNyBAQCBpbnQg
UmVuZGVyQm94OjpvdmVycmlkZUhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIGhhc092ZXJyaWRl
U2l6ZSgpID8gb3ZlcnJpZGVTaXplKCkgOiBoZWlnaHQoKTsKIH0KIAotaW50IFJlbmRlckJveDo6
Y2FsY0JvcmRlckJveFdpZHRoKGludCB3aWR0aCkgY29uc3QKK2ludCBSZW5kZXJCb3g6OmNvbXB1
dGVCb3JkZXJCb3hMb2dpY2FsV2lkdGgoaW50IHdpZHRoKSBjb25zdAogewogICAgIGludCBib3Jk
ZXJzUGx1c1BhZGRpbmcgPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKICAgICBpZiAoc3R5bGUo
KS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpCkBAIC01OTUsNyArNTk1LDcgQEAgaW50IFJl
bmRlckJveDo6Y2FsY0JvcmRlckJveFdpZHRoKGludCB3aQogICAgIHJldHVybiBtYXgod2lkdGgs
IGJvcmRlcnNQbHVzUGFkZGluZyk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNhbGNCb3JkZXJCb3hI
ZWlnaHQoaW50IGhlaWdodCkgY29uc3QKK2ludCBSZW5kZXJCb3g6OmNvbXB1dGVCb3JkZXJCb3hM
b2dpY2FsSGVpZ2h0KGludCBoZWlnaHQpIGNvbnN0CiB7CiAgICAgaW50IGJvcmRlcnNQbHVzUGFk
ZGluZyA9IGJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKTsKICAgICBpZiAoc3R5bGUoKS0+Ym94U2l6
aW5nKCkgPT0gQ09OVEVOVF9CT1gpCkBAIC02MDMsMTQgKzYwMywxNCBAQCBpbnQgUmVuZGVyQm94
OjpjYWxjQm9yZGVyQm94SGVpZ2h0KGludCBoCiAgICAgcmV0dXJuIG1heChoZWlnaHQsIGJvcmRl
cnNQbHVzUGFkZGluZyk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNhbGNDb250ZW50Qm94V2lkdGgo
aW50IHdpZHRoKSBjb25zdAoraW50IFJlbmRlckJveDo6Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgoaW50IHdpZHRoKSBjb25zdAogewogICAgIGlmIChzdHlsZSgpLT5ib3hTaXppbmcoKSA9
PSBCT1JERVJfQk9YKQogICAgICAgICB3aWR0aCAtPSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsK
ICAgICByZXR1cm4gbWF4KDAsIHdpZHRoKTsKIH0KIAotaW50IFJlbmRlckJveDo6Y2FsY0NvbnRl
bnRCb3hIZWlnaHQoaW50IGhlaWdodCkgY29uc3QKK2ludCBSZW5kZXJCb3g6OmNvbXB1dGVDb250
ZW50Qm94TG9naWNhbEhlaWdodChpbnQgaGVpZ2h0KSBjb25zdAogewogICAgIGlmIChzdHlsZSgp
LT5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YKQogICAgICAgICBoZWlnaHQgLT0gYm9yZGVyQW5k
UGFkZGluZ0hlaWdodCgpOwpAQCAtMTM1MCw3ICsxMzUwLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnJl
cGFpbnREdXJpbmdMYXlvdXRJZk1vdgogdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lk
dGgoKQogewogICAgIGlmIChpc1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBjYWxjQWJzb2x1dGVI
b3Jpem9udGFsKCk7CisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzNjgsOSArMTM2OCw5IEBAIHZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlTG9naWNhbFdpZHRoKCkKIAogICAgIGJvb2wgaW5WZXJ0aWNhbEJveCA9IHBh
cmVudCgpLT5pc0ZsZXhpYmxlQm94KCkgJiYgKHBhcmVudCgpLT5zdHlsZSgpLT5ib3hPcmllbnQo
KSA9PSBWRVJUSUNBTCk7CiAgICAgYm9vbCBzdHJldGNoaW5nID0gKHBhcmVudCgpLT5zdHlsZSgp
LT5ib3hBbGlnbigpID09IEJTVFJFVENIKTsKLSAgICBib29sIHRyZWF0QXNSZXBsYWNlZCA9IHNo
b3VsZENhbGN1bGF0ZVNpemVBc1JlcGxhY2VkKCkgJiYgKCFpblZlcnRpY2FsQm94IHx8ICFzdHJl
dGNoaW5nKTsKKyAgICBib29sIHRyZWF0QXNSZXBsYWNlZCA9IHNob3VsZENvbXB1dGVTaXplQXNS
ZXBsYWNlZCgpICYmICghaW5WZXJ0aWNhbEJveCB8fCAhc3RyZXRjaGluZyk7CiAKLSAgICBMZW5n
dGggdyA9ICh0cmVhdEFzUmVwbGFjZWQpID8gTGVuZ3RoKGNhbGNSZXBsYWNlZFdpZHRoKCksIEZp
eGVkKSA6IHN0eWxlKCktPndpZHRoKCk7CisgICAgTGVuZ3RoIHcgPSAodHJlYXRBc1JlcGxhY2Vk
KSA/IExlbmd0aChjb21wdXRlUmVwbGFjZWRXaWR0aCgpLCBGaXhlZCkgOiBzdHlsZSgpLT53aWR0
aCgpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgaW50
IGNvbnRhaW5lcldpZHRoID0gbWF4KDAsIGNvbnRhaW5pbmdCbG9ja1dpZHRoRm9yQ29udGVudCgp
KTsKQEAgLTEzOTMsMTEgKzEzOTMsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2Fs
V2lkdGgoKQogICAgICAgICBzZXRXaWR0aCh3LnZhbHVlKCkgKyBib3JkZXJBbmRQYWRkaW5nV2lk
dGgoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIENhbGN1bGF0ZSBXaWR0aAotICAgICAgICBz
ZXRXaWR0aChjYWxjV2lkdGhVc2luZyhXaWR0aCwgY29udGFpbmVyV2lkdGgpKTsKKyAgICAgICAg
c2V0V2lkdGgoY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKFdpZHRoLCBjb250YWluZXJXaWR0aCkp
OwogCiAgICAgICAgIC8vIENhbGN1bGF0ZSBNYXhXaWR0aAogICAgICAgICBpZiAoIXN0eWxlKCkt
Pm1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSkgewotICAgICAgICAgICAgaW50IG1heFcgPSBjYWxj
V2lkdGhVc2luZyhNYXhXaWR0aCwgY29udGFpbmVyV2lkdGgpOworICAgICAgICAgICAgaW50IG1h
eFcgPSBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTWF4V2lkdGgsIGNvbnRhaW5lcldpZHRoKTsK
ICAgICAgICAgICAgIGlmICh3aWR0aCgpID4gbWF4VykgewogICAgICAgICAgICAgICAgIHNldFdp
ZHRoKG1heFcpOwogICAgICAgICAgICAgICAgIHcgPSBzdHlsZSgpLT5tYXhXaWR0aCgpOwpAQCAt
MTQwNSw3ICsxNDA1LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQog
ICAgICAgICB9CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIE1pbldpZHRoCi0gICAgICAgIGludCBt
aW5XID0gY2FsY1dpZHRoVXNpbmcoTWluV2lkdGgsIGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAg
aW50IG1pblcgPSBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoTWluV2lkdGgsIGNvbnRhaW5lcldp
ZHRoKTsKICAgICAgICAgaWYgKHdpZHRoKCkgPCBtaW5XKSB7CiAgICAgICAgICAgICBzZXRXaWR0
aChtaW5XKTsKICAgICAgICAgICAgIHcgPSBzdHlsZSgpLT5taW5XaWR0aCgpOwpAQCAtMTQyNCw3
ICsxNDI0LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQogICAgIH0g
ZWxzZSB7CiAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7CiAgICAgICAgIG1fbWFyZ2luUmlnaHQg
PSAwOwotICAgICAgICBjYWxjSG9yaXpvbnRhbE1hcmdpbnMobWFyZ2luTGVmdCwgbWFyZ2luUmln
aHQsIGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdp
bnMobWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsIGNvbnRhaW5lcldpZHRoKTsKICAgICB9CiAKICAg
ICBpZiAoY29udGFpbmVyV2lkdGggJiYgY29udGFpbmVyV2lkdGggIT0gKHdpZHRoKCkgKyBtX21h
cmdpbkxlZnQgKyBtX21hcmdpblJpZ2h0KQpAQCAtMTQzNiw3ICsxNDM2LDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVMb2dpY2FsV2lkdGgoKQogICAgIH0KIH0KIAotaW50IFJlbmRlckJveDo6
Y2FsY1dpZHRoVXNpbmcoV2lkdGhUeXBlIHdpZHRoVHlwZSwgaW50IGN3KQoraW50IFJlbmRlckJv
eDo6Y29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5nKFdpZHRoVHlwZSB3aWR0aFR5cGUsIGludCBjdykK
IHsKICAgICBpbnQgd2lkdGhSZXN1bHQgPSB3aWR0aCgpOwogICAgIExlbmd0aCB3OwpAQCAtMTQ1
OCw3ICsxNDU4LDcgQEAgaW50IFJlbmRlckJveDo6Y2FsY1dpZHRoVXNpbmcoV2lkdGhUeXBlIAog
ICAgICAgICAgICAgd2lkdGhSZXN1bHQgPSBtaW4od2lkdGhSZXN1bHQsIG1heFByZWZXaWR0aCgp
KTsKICAgICAgICAgfQogICAgIH0gZWxzZQotICAgICAgICB3aWR0aFJlc3VsdCA9IGNhbGNCb3Jk
ZXJCb3hXaWR0aCh3LmNhbGNWYWx1ZShjdykpOworICAgICAgICB3aWR0aFJlc3VsdCA9IGNvbXB1
dGVCb3JkZXJCb3hMb2dpY2FsV2lkdGgody5jYWxjVmFsdWUoY3cpKTsKIAogICAgIHJldHVybiB3
aWR0aFJlc3VsdDsKIH0KQEAgLTE0OTksNyArMTQ5OSw3IEBAIGJvb2wgUmVuZGVyQm94OjpzaXpl
c1RvSW50cmluc2ljV2lkdGgoV2kKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVy
Qm94OjpjYWxjSG9yaXpvbnRhbE1hcmdpbnMoY29uc3QgTGVuZ3RoJiBtYXJnaW5MZWZ0LCBjb25z
dCBMZW5ndGgmIG1hcmdpblJpZ2h0LCBpbnQgY29udGFpbmVyV2lkdGgpCit2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoY29uc3QgTGVuZ3RoJiBtYXJnaW5MZWZ0
LCBjb25zdCBMZW5ndGgmIG1hcmdpblJpZ2h0LCBpbnQgY29udGFpbmVyV2lkdGgpCiB7CiAgICAg
aWYgKGlzRmxvYXRpbmcoKSB8fCBpc0lubGluZSgpKSB7CiAgICAgICAgIC8vIElubGluZSBibG9j
a3MvdGFibGVzIGFuZCBmbG9hdHMgZG9uJ3QgaGF2ZSB0aGVpciBtYXJnaW5zIGluY3JlYXNlZC4K
QEAgLTE1MzUsOSArMTUzNSw5IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdo
dCgpCiAKICAgICBMZW5ndGggaDsKICAgICBpZiAoaXNQb3NpdGlvbmVkKCkpCi0gICAgICAgIGNh
bGNBYnNvbHV0ZVZlcnRpY2FsKCk7CisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhl
aWdodCgpOwogICAgIGVsc2UgewotICAgICAgICBjYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAg
ICAgIGNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMoKTsKIAogICAgICAgICAvLyBGb3IgdGFi
bGVzLCBjYWxjdWxhdGUgbWFyZ2lucyBvbmx5LgogICAgICAgICBpZiAoaXNUYWJsZSgpKQpAQCAt
MTU0NSw3ICsxNTQ1LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVMb2dpY2FsSGVpZ2h0KCkK
IAogICAgICAgICBib29sIGluSG9yaXpvbnRhbEJveCA9IHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94
KCkgJiYgcGFyZW50KCktPnN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUw7CiAgICAg
ICAgIGJvb2wgc3RyZXRjaGluZyA9IHBhcmVudCgpLT5zdHlsZSgpLT5ib3hBbGlnbigpID09IEJT
VFJFVENIOwotICAgICAgICBib29sIHRyZWF0QXNSZXBsYWNlZCA9IHNob3VsZENhbGN1bGF0ZVNp
emVBc1JlcGxhY2VkKCkgJiYgKCFpbkhvcml6b250YWxCb3ggfHwgIXN0cmV0Y2hpbmcpOworICAg
ICAgICBib29sIHRyZWF0QXNSZXBsYWNlZCA9IHNob3VsZENvbXB1dGVTaXplQXNSZXBsYWNlZCgp
ICYmICghaW5Ib3Jpem9udGFsQm94IHx8ICFzdHJldGNoaW5nKTsKICAgICAgICAgYm9vbCBjaGVj
a01pbk1heEhlaWdodCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFRoZSBwYXJlbnQgYm94IGlzIGZs
ZXhpbmcgdXMsIHNvIGl0IGhhcyBpbmNyZWFzZWQgb3IgZGVjcmVhc2VkIG91ciBoZWlnaHQuICBX
ZSBoYXZlIHRvCkBAIC0xNTU0LDcgKzE1NTQsNyBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxv
Z2ljYWxIZWlnaHQoKQogICAgICAgICAgICAgICAgICYmIHBhcmVudCgpLT5pc0ZsZXhpbmdDaGls
ZHJlbigpKQogICAgICAgICAgICAgaCA9IExlbmd0aChvdmVycmlkZVNpemUoKSAtIGJvcmRlckFu
ZFBhZGRpbmdIZWlnaHQoKSwgRml4ZWQpOwogICAgICAgICBlbHNlIGlmICh0cmVhdEFzUmVwbGFj
ZWQpCi0gICAgICAgICAgICBoID0gTGVuZ3RoKGNhbGNSZXBsYWNlZEhlaWdodCgpLCBGaXhlZCk7
CisgICAgICAgICAgICBoID0gTGVuZ3RoKGNvbXB1dGVSZXBsYWNlZEhlaWdodCgpLCBGaXhlZCk7
CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaCA9IHN0eWxlKCktPmhlaWdodCgpOwogICAg
ICAgICAgICAgY2hlY2tNaW5NYXhIZWlnaHQgPSB0cnVlOwpAQCAtMTU2OSwxMSArMTU2OSwxMSBA
QCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKQogCiAgICAgICAgIGludCBo
ZWlnaHRSZXN1bHQ7CiAgICAgICAgIGlmIChjaGVja01pbk1heEhlaWdodCkgewotICAgICAgICAg
ICAgaGVpZ2h0UmVzdWx0ID0gY2FsY0hlaWdodFVzaW5nKHN0eWxlKCktPmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIGhlaWdodFJlc3VsdCA9IGNvbXB1dGVMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUo
KS0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKGhlaWdodFJlc3VsdCA9PSAtMSkKICAgICAg
ICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBoZWlnaHQoKTsKLSAgICAgICAgICAgIGludCBtaW5I
ID0gY2FsY0hlaWdodFVzaW5nKHN0eWxlKCktPm1pbkhlaWdodCgpKTsgLy8gTGVhdmUgYXMgLTEg
aWYgdW5zZXQuCi0gICAgICAgICAgICBpbnQgbWF4SCA9IHN0eWxlKCktPm1heEhlaWdodCgpLmlz
VW5kZWZpbmVkKCkgPyBoZWlnaHRSZXN1bHQgOiBjYWxjSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWF4
SGVpZ2h0KCkpOworICAgICAgICAgICAgaW50IG1pbkggPSBjb21wdXRlTG9naWNhbEhlaWdodFVz
aW5nKHN0eWxlKCktPm1pbkhlaWdodCgpKTsgLy8gTGVhdmUgYXMgLTEgaWYgdW5zZXQuCisgICAg
ICAgICAgICBpbnQgbWF4SCA9IHN0eWxlKCktPm1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBo
ZWlnaHRSZXN1bHQgOiBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPm1heEhlaWdo
dCgpKTsKICAgICAgICAgICAgIGlmIChtYXhIID09IC0xKQogICAgICAgICAgICAgICAgIG1heEgg
PSBoZWlnaHRSZXN1bHQ7CiAgICAgICAgICAgICBoZWlnaHRSZXN1bHQgPSBtaW4obWF4SCwgaGVp
Z2h0UmVzdWx0KTsKQEAgLTE2MDcsMjMgKzE2MDcsMjMgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1
dGVMb2dpY2FsSGVpZ2h0KCkKICAgICB9CiB9CiAKLWludCBSZW5kZXJCb3g6OmNhbGNIZWlnaHRV
c2luZyhjb25zdCBMZW5ndGgmIGgpCitpbnQgUmVuZGVyQm94Ojpjb21wdXRlTG9naWNhbEhlaWdo
dFVzaW5nKGNvbnN0IExlbmd0aCYgaCkKIHsKICAgICBpbnQgaGVpZ2h0ID0gLTE7CiAgICAgaWYg
KCFoLmlzQXV0bygpKSB7CiAgICAgICAgIGlmIChoLmlzRml4ZWQoKSkKICAgICAgICAgICAgIGhl
aWdodCA9IGgudmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAoaC5pc1BlcmNlbnQoKSkKLSAgICAg
ICAgICAgIGhlaWdodCA9IGNhbGNQZXJjZW50YWdlSGVpZ2h0KGgpOworICAgICAgICAgICAgaGVp
Z2h0ID0gY29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGgpOwogICAgICAgICBpZiAoaGVp
Z2h0ICE9IC0xKSB7Ci0gICAgICAgICAgICBoZWlnaHQgPSBjYWxjQm9yZGVyQm94SGVpZ2h0KGhl
aWdodCk7CisgICAgICAgICAgICBoZWlnaHQgPSBjb21wdXRlQm9yZGVyQm94TG9naWNhbEhlaWdo
dChoZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKICAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gaGVpZ2h0OwogfQogCi1pbnQgUmVuZGVyQm94OjpjYWxjUGVyY2VudGFnZUhl
aWdodChjb25zdCBMZW5ndGgmIGhlaWdodCkKK2ludCBSZW5kZXJCb3g6OmNvbXB1dGVQZXJjZW50
YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCkKIHsKICAgICBpbnQgcmVzdWx0
ID0gLTE7CiAgICAgYm9vbCBza2lwcGVkQXV0b0hlaWdodENvbnRhaW5pbmdCbG9jayA9IGZhbHNl
OwpAQCAtMTY3MSwxMiArMTY3MSwxMiBAQCBpbnQgUmVuZGVyQm94OjpjYWxjUGVyY2VudGFnZUhl
aWdodChjb25zCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG9ubHkgdXNlIG91ciBwZXJjZW50YWdlIGhl
aWdodCBpZiBvdXIgY29udGFpbmluZyBibG9jayBoYWQgYSBzcGVjaWZpZWQKICAgICAvLyBoZWln
aHQuCiAgICAgZWxzZSBpZiAoY2ItPnN0eWxlKCktPmhlaWdodCgpLmlzRml4ZWQoKSkKLSAgICAg
ICAgcmVzdWx0ID0gY2ItPmNhbGNDb250ZW50Qm94SGVpZ2h0KGNiLT5zdHlsZSgpLT5oZWlnaHQo
KS52YWx1ZSgpKTsKKyAgICAgICAgcmVzdWx0ID0gY2ItPmNvbXB1dGVDb250ZW50Qm94TG9naWNh
bEhlaWdodChjYi0+c3R5bGUoKS0+aGVpZ2h0KCkudmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoY2It
PnN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpICYmICFpc1Bvc2l0aW9uZWRXaXRoU3BlY2lm
aWVkSGVpZ2h0KSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcmVjdXIgYW5kIGNvbXB1dGUgdGhl
IHBlcmNlbnRhZ2UgaGVpZ2h0IGZvciBvdXIgY29udGFpbmluZyBibG9jay4KLSAgICAgICAgcmVz
dWx0ID0gY2ItPmNhbGNQZXJjZW50YWdlSGVpZ2h0KGNiLT5zdHlsZSgpLT5oZWlnaHQoKSk7Cisg
ICAgICAgIHJlc3VsdCA9IGNiLT5jb21wdXRlUGVyY2VudGFnZUxvZ2ljYWxIZWlnaHQoY2ItPnN0
eWxlKCktPmhlaWdodCgpKTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IGNiLT5jYWxjQ29udGVudEJveEhlaWdodChyZXN1bHQpOworICAgICAgICAgICAg
cmVzdWx0ID0gY2ItPmNvbXB1dGVDb250ZW50Qm94TG9naWNhbEhlaWdodChyZXN1bHQpOwogICAg
IH0gZWxzZSBpZiAoY2ItPmlzUmVuZGVyVmlldygpIHx8IChjYi0+aXNCb2R5KCkgJiYgZG9jdW1l
bnQoKS0+aW5RdWlya3NNb2RlKCkpIHx8IGlzUG9zaXRpb25lZFdpdGhTcGVjaWZpZWRIZWlnaHQp
IHsKICAgICAgICAgLy8gRG9uJ3QgYWxsb3cgdGhpcyB0byBhZmZlY3QgdGhlIGJsb2NrJyBoZWln
aHQoKSBtZW1iZXIgdmFyaWFibGUsIHNpbmNlIHRoaXMKICAgICAgICAgLy8gY2FuIGdldCBjYWxs
ZWQgd2hpbGUgdGhlIGJsb2NrIGlzIHN0aWxsIGxheWluZyBvdXQgaXRzIGtpZHMuCkBAIC0xNjg2
LDggKzE2ODYsOCBAQCBpbnQgUmVuZGVyQm94OjpjYWxjUGVyY2VudGFnZUhlaWdodChjb25zCiAg
ICAgICAgIGNiLT5zZXRIZWlnaHQob2xkSGVpZ2h0KTsKICAgICB9IGVsc2UgaWYgKGNiLT5pc1Jv
b3QoKSAmJiBpc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgLy8gTWF0Y2ggdGhlIHBvc2l0aW9uZWQg
b2JqZWN0cyBiZWhhdmlvciwgd2hpY2ggaXMgdGhhdCBwb3NpdGlvbmVkIG9iamVjdHMgd2lsbCBm
aWxsIHRoZWlyIHZpZXdwb3J0Ci0gICAgICAgIC8vIGFsd2F5cy4gIE5vdGUgd2UgY291bGQgb25s
eSBoaXQgdGhpcyBjYXNlIGJ5IHJlY3VycmluZyBpbnRvIGNhbGNQZXJjZW50YWdlSGVpZ2h0IG9u
IGEgcG9zaXRpb25lZCBjb250YWluaW5nIGJsb2NrLgotICAgICAgICByZXN1bHQgPSBjYi0+Y2Fs
Y0NvbnRlbnRCb3hIZWlnaHQoY2ItPmF2YWlsYWJsZUhlaWdodCgpKTsKKyAgICAgICAgLy8gYWx3
YXlzLiAgTm90ZSB3ZSBjb3VsZCBvbmx5IGhpdCB0aGlzIGNhc2UgYnkgcmVjdXJyaW5nIGludG8g
Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0IG9uIGEgcG9zaXRpb25lZCBjb250YWluaW5n
IGJsb2NrLgorICAgICAgICByZXN1bHQgPSBjYi0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVp
Z2h0KGNiLT5hdmFpbGFibGVIZWlnaHQoKSk7CiAKICAgICBpZiAocmVzdWx0ICE9IC0xKSB7CiAg
ICAgICAgIHJlc3VsdCA9IGhlaWdodC5jYWxjVmFsdWUocmVzdWx0KTsKQEAgLTE3MDIsMjQgKzE3
MDIsMjQgQEAgaW50IFJlbmRlckJveDo6Y2FsY1BlcmNlbnRhZ2VIZWlnaHQoY29ucwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNhbGNSZXBsYWNlZFdpZHRoKGJvb2wg
aW5jbHVkZU1heFdpZHRoKSBjb25zdAoraW50IFJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkV2lk
dGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CiB7Ci0gICAgaW50IHdpZHRoID0gY2FsY1Jl
cGxhY2VkV2lkdGhVc2luZyhzdHlsZSgpLT53aWR0aCgpKTsKLSAgICBpbnQgbWluVyA9IGNhbGNS
ZXBsYWNlZFdpZHRoVXNpbmcoc3R5bGUoKS0+bWluV2lkdGgoKSk7Ci0gICAgaW50IG1heFcgPSAh
aW5jbHVkZU1heFdpZHRoIHx8IHN0eWxlKCktPm1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IHdp
ZHRoIDogY2FsY1JlcGxhY2VkV2lkdGhVc2luZyhzdHlsZSgpLT5tYXhXaWR0aCgpKTsKKyAgICBp
bnQgd2lkdGggPSBjb21wdXRlUmVwbGFjZWRXaWR0aFVzaW5nKHN0eWxlKCktPndpZHRoKCkpOwor
ICAgIGludCBtaW5XID0gY29tcHV0ZVJlcGxhY2VkV2lkdGhVc2luZyhzdHlsZSgpLT5taW5XaWR0
aCgpKTsKKyAgICBpbnQgbWF4VyA9ICFpbmNsdWRlTWF4V2lkdGggfHwgc3R5bGUoKS0+bWF4V2lk
dGgoKS5pc1VuZGVmaW5lZCgpID8gd2lkdGggOiBjb21wdXRlUmVwbGFjZWRXaWR0aFVzaW5nKHN0
eWxlKCktPm1heFdpZHRoKCkpOwogCiAgICAgcmV0dXJuIG1heChtaW5XLCBtaW4od2lkdGgsIG1h
eFcpKTsKIH0KIAotaW50IFJlbmRlckJveDo6Y2FsY1JlcGxhY2VkV2lkdGhVc2luZyhMZW5ndGgg
d2lkdGgpIGNvbnN0CitpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRXaWR0aFVzaW5nKExl
bmd0aCB3aWR0aCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKHdpZHRoLnR5cGUoKSkgewogICAgICAg
ICBjYXNlIEZpeGVkOgotICAgICAgICAgICAgcmV0dXJuIGNhbGNDb250ZW50Qm94V2lkdGgod2lk
dGgudmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgod2lkdGgudmFsdWUoKSk7CiAgICAgICAgIGNhc2UgUGVyY2VudDogewogICAgICAgICAg
ICAgY29uc3QgaW50IGN3ID0gaXNQb3NpdGlvbmVkKCkgPyBjb250YWluaW5nQmxvY2tXaWR0aEZv
clBvc2l0aW9uZWQodG9SZW5kZXJCb3hNb2RlbE9iamVjdChjb250YWluZXIoKSkpIDogY29udGFp
bmluZ0Jsb2NrV2lkdGhGb3JDb250ZW50KCk7CiAgICAgICAgICAgICBpZiAoY3cgPiAwKQotICAg
ICAgICAgICAgICAgIHJldHVybiBjYWxjQ29udGVudEJveFdpZHRoKHdpZHRoLmNhbGNNaW5WYWx1
ZShjdykpOworICAgICAgICAgICAgICAgIHJldHVybiBjb21wdXRlQ29udGVudEJveExvZ2ljYWxX
aWR0aCh3aWR0aC5jYWxjTWluVmFsdWUoY3cpKTsKICAgICAgICAgfQogICAgICAgICAvLyBmYWxs
IHRocm91Z2gKICAgICAgICAgZGVmYXVsdDoKQEAgLTE3MjcsMjAgKzE3MjcsMjAgQEAgaW50IFJl
bmRlckJveDo6Y2FsY1JlcGxhY2VkV2lkdGhVc2luZyhMZQogICAgICB9CiB9CiAKLWludCBSZW5k
ZXJCb3g6OmNhbGNSZXBsYWNlZEhlaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyQm94Ojpjb21wdXRl
UmVwbGFjZWRIZWlnaHQoKSBjb25zdAogewotICAgIGludCBoZWlnaHQgPSBjYWxjUmVwbGFjZWRI
ZWlnaHRVc2luZyhzdHlsZSgpLT5oZWlnaHQoKSk7Ci0gICAgaW50IG1pbkggPSBjYWxjUmVwbGFj
ZWRIZWlnaHRVc2luZyhzdHlsZSgpLT5taW5IZWlnaHQoKSk7Ci0gICAgaW50IG1heEggPSBzdHls
ZSgpLT5tYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0IDogY2FsY1JlcGxhY2VkSGVp
Z2h0VXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCkpOworICAgIGludCBoZWlnaHQgPSBjb21wdXRl
UmVwbGFjZWRIZWlnaHRVc2luZyhzdHlsZSgpLT5oZWlnaHQoKSk7CisgICAgaW50IG1pbkggPSBj
b21wdXRlUmVwbGFjZWRIZWlnaHRVc2luZyhzdHlsZSgpLT5taW5IZWlnaHQoKSk7CisgICAgaW50
IG1heEggPSBzdHlsZSgpLT5tYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0IDogY29t
cHV0ZVJlcGxhY2VkSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCkpOwogCiAgICAgcmV0
dXJuIG1heChtaW5ILCBtaW4oaGVpZ2h0LCBtYXhIKSk7CiB9CiAKLWludCBSZW5kZXJCb3g6OmNh
bGNSZXBsYWNlZEhlaWdodFVzaW5nKExlbmd0aCBoZWlnaHQpIGNvbnN0CitpbnQgUmVuZGVyQm94
Ojpjb21wdXRlUmVwbGFjZWRIZWlnaHRVc2luZyhMZW5ndGggaGVpZ2h0KSBjb25zdAogewogICAg
IHN3aXRjaCAoaGVpZ2h0LnR5cGUoKSkgewogICAgICAgICBjYXNlIEZpeGVkOgotICAgICAgICAg
ICAgcmV0dXJuIGNhbGNDb250ZW50Qm94SGVpZ2h0KGhlaWdodC52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWlnaHQoaGVpZ2h0LnZhbHVlKCkp
OwogICAgICAgICBjYXNlIFBlcmNlbnQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogY2IgPSBpc1Bvc2l0aW9uZWQoKSA/IGNvbnRhaW5lcigpIDogY29udGFpbmluZ0Jsb2Nr
KCk7CkBAIC0xNzU0LDkgKzE3NTQsOSBAQCBpbnQgUmVuZGVyQm94OjpjYWxjUmVwbGFjZWRIZWln
aHRVc2luZyhMCiAgICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJC
bG9jayhjYik7CiAgICAgICAgICAgICAgICAgaW50IG9sZEhlaWdodCA9IGJsb2NrLT5oZWlnaHQo
KTsKICAgICAgICAgICAgICAgICBibG9jay0+Y29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAg
ICAgICAgICAgICBpbnQgbmV3SGVpZ2h0ID0gYmxvY2stPmNhbGNDb250ZW50Qm94SGVpZ2h0KGJs
b2NrLT5jb250ZW50SGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGludCBuZXdIZWlnaHQgPSBi
bG9jay0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGJsb2NrLT5jb250ZW50SGVpZ2h0
KCkpOwogICAgICAgICAgICAgICAgIGJsb2NrLT5zZXRIZWlnaHQob2xkSGVpZ2h0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNhbGNWYWx1ZShu
ZXdIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsSGVpZ2h0KGhlaWdodC5jYWxjVmFsdWUobmV3SGVpZ2h0KSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGludCBhdmFpbGFibGVIZWlnaHQgPSBpc1Bvc2l0aW9u
ZWQoKSA/IGNvbnRhaW5pbmdCbG9ja0hlaWdodEZvclBvc2l0aW9uZWQodG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChjYikpIDogdG9SZW5kZXJCb3goY2IpLT5hdmFpbGFibGVIZWlnaHQoKTsKQEAgLTE3
NzEsNyArMTc3MSw3IEBAIGludCBSZW5kZXJCb3g6OmNhbGNSZXBsYWNlZEhlaWdodFVzaW5nKEwK
ICAgICAgICAgICAgICAgICByZXR1cm4gaGVpZ2h0LmNhbGNWYWx1ZShhdmFpbGFibGVIZWlnaHQg
LSBib3JkZXJBbmRQYWRkaW5nSGVpZ2h0KCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICByZXR1cm4gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0LmNhbGNWYWx1ZShhdmFpbGFibGVI
ZWlnaHQpKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWln
aHQoaGVpZ2h0LmNhbGNWYWx1ZShhdmFpbGFibGVIZWlnaHQpKTsKICAgICAgICAgfQogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGludHJpbnNpY1NpemUoKS5oZWlnaHQoKTsK
QEAgLTE3ODYsNyArMTc4Niw3IEBAIGludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUhlaWdodCgpIGNv
bnN0CiBpbnQgUmVuZGVyQm94OjphdmFpbGFibGVIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGgp
IGNvbnN0CiB7CiAgICAgaWYgKGguaXNGaXhlZCgpKQotICAgICAgICByZXR1cm4gY2FsY0NvbnRl
bnRCb3hIZWlnaHQoaC52YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDb250ZW50Qm94
TG9naWNhbEhlaWdodChoLnZhbHVlKCkpOwogCiAgICAgaWYgKGlzUmVuZGVyVmlldygpKQogICAg
ICAgICByZXR1cm4gdG9SZW5kZXJWaWV3KHRoaXMpLT5mcmFtZVZpZXcoKS0+dmlzaWJsZUhlaWdo
dCgpOwpAQCAtMTc5OCwxNSArMTc5OCwxNSBAQCBpbnQgUmVuZGVyQm94OjphdmFpbGFibGVIZWln
aHRVc2luZyhjb25zCiAgICAgICAgIHJldHVybiBvdmVycmlkZVNpemUoKSAtIGJvcmRlckFuZFBh
ZGRpbmdXaWR0aCgpOwogCiAgICAgaWYgKGguaXNQZXJjZW50KCkpCi0gICAgICAgcmV0dXJuIGNh
bGNDb250ZW50Qm94SGVpZ2h0KGguY2FsY1ZhbHVlKGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFi
bGVIZWlnaHQoKSkpOworICAgICAgIHJldHVybiBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWln
aHQoaC5jYWxjVmFsdWUoY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgpKSk7CiAK
ICAgICBpZiAoaXNSZW5kZXJCbG9jaygpICYmIGlzUG9zaXRpb25lZCgpICYmIHN0eWxlKCktPmhl
aWdodCgpLmlzQXV0bygpICYmICEoc3R5bGUoKS0+dG9wKCkuaXNBdXRvKCkgfHwgc3R5bGUoKS0+
Ym90dG9tKCkuaXNBdXRvKCkpKSB7CiAgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNvbnN0
X2Nhc3Q8UmVuZGVyQmxvY2sqPih0b1JlbmRlckJsb2NrKHRoaXMpKTsKICAgICAgICAgaW50IG9s
ZEhlaWdodCA9IGJsb2NrLT5oZWlnaHQoKTsKICAgICAgICAgYmxvY2stPmNvbXB1dGVMb2dpY2Fs
SGVpZ2h0KCk7Ci0gICAgICAgIGludCBuZXdIZWlnaHQgPSBibG9jay0+Y2FsY0NvbnRlbnRCb3hI
ZWlnaHQoYmxvY2stPmNvbnRlbnRIZWlnaHQoKSk7CisgICAgICAgIGludCBuZXdIZWlnaHQgPSBi
bG9jay0+Y29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGJsb2NrLT5jb250ZW50SGVpZ2h0
KCkpOwogICAgICAgICBibG9jay0+c2V0SGVpZ2h0KG9sZEhlaWdodCk7Ci0gICAgICAgIHJldHVy
biBjYWxjQ29udGVudEJveEhlaWdodChuZXdIZWlnaHQpOworICAgICAgICByZXR1cm4gY29tcHV0
ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KG5ld0hlaWdodCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IGNvbnRhaW5pbmdCbG9jaygpLT5hdmFpbGFibGVIZWlnaHQoKTsKQEAgLTE4MTksNyArMTgxOSw3
IEBAIGludCBSZW5kZXJCb3g6OmF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpIGMKICAgICByZXR1cm4g
Y29udGVudEhlaWdodCgpOwogfQogCi12b2lkIFJlbmRlckJveDo6Y2FsY1ZlcnRpY2FsTWFyZ2lu
cygpCit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucygpCiB7CiAg
ICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKICAgICAgICAgbV9tYXJnaW5Ub3AgPSAwOwpAQCAtMTg3
NywxMCArMTg3NywxMCBAQCBpbnQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tIZWlnaHRGb3JQ
CiAgICAgcmV0dXJuIGhlaWdodFJlc3VsdCAtIGNvbnRhaW5pbmdCbG9jay0+Ym9yZGVyVG9wKCkg
LSBjb250YWluaW5nQmxvY2stPmJvcmRlckJvdHRvbSgpOwogfQogCi12b2lkIFJlbmRlckJveDo6
Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsV2lkdGgoKQogewogICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKLSAgICAgICAgY2Fs
Y0Fic29sdXRlSG9yaXpvbnRhbFJlcGxhY2VkKCk7CisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVk
TG9naWNhbFdpZHRoUmVwbGFjZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTg5
MSw3ICsxODkxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQog
ICAgIC8vIHdhcyBhbHNvIHByZXZpb3VzbHkgZG9uZSBmb3IgZGVjaWRpbmcgd2hhdCB0byBvdmVy
cmlkZSB3aGVuIHlvdSBoYWQKICAgICAvLyBvdmVyLWNvbnN0cmFpbmVkIG1hcmdpbnM/ICBBbHNv
IG5vdGUgdGhhdCB0aGUgY29udGFpbmVyIGJsb2NrIGlzIHVzZWQKICAgICAvLyBpbiBzaW1pbGFy
IHNpdHVhdGlvbnMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIFJlbmRlckJveCBjbGFzcyAoc2VlIGNv
bXB1dGVMb2dpY2FsV2lkdGgoKQotICAgIC8vIGFuZCBjYWxjSG9yaXpvbnRhbE1hcmdpbnMoKSku
IEZvciBub3cgd2UgYXJlIHVzaW5nIHRoZSBwYXJlbnQgZm9yIHF1aXJrcworICAgIC8vIGFuZCBj
b21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucygpKS4gRm9yIG5vdyB3ZSBhcmUgdXNpbmcgdGhl
IHBhcmVudCBmb3IgcXVpcmtzCiAgICAgLy8gbW9kZSBhbmQgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
Zm9yIHN0cmljdCBtb2RlLgogCiAgICAgLy8gRklYTUUgMjogU2hvdWxkIHdlIHN0aWxsIGRlYWwg
d2l0aCB0aGVzZSB0aGUgY2FzZXMgb2YgJ2xlZnQnIG9yICdyaWdodCcgaGF2aW5nCkBAIC0xOTA1
LDcgKzE5MDUsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiAg
ICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBXb3JraW5nIERyYWZ0
IGZyb20gQXByaWwgMTEsIDIwMDYgb2YKICAgICAvLyBDU1MgMi4xOiBTZWN0aW9uIDEwLjMuNyAi
QWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMiCiAgICAgLy8gPGh0
dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3Zpc3VkZXQuaHRtbCNhYnMtbm9uLXJlcGxhY2VkLXdp
ZHRoPgotICAgIC8vIChibG9jay1zdHlsZS1jb21tZW50cyBpbiB0aGlzIGZ1bmN0aW9uIGFuZCBp
biBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKCkKKyAgICAvLyAoYmxvY2stc3R5bGUtY29t
bWVudHMgaW4gdGhpcyBmdW5jdGlvbiBhbmQgaW4gY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhVc2luZygpCiAgICAgLy8gY29ycmVzcG9uZCB0byB0ZXh0IGZyb20gdGhlIHNwZWMpCiAKIApA
QCAtMTk3Nyw3ICsxOTc3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250
YWwoKQogICAgIC8vIENhbGN1bGF0ZSBjb25zdHJhaW50IGVxdWF0aW9uIHZhbHVlcyBmb3IgJ3dp
ZHRoJyBjYXNlLgogICAgIGludCB3aWR0aFJlc3VsdDsKICAgICBpbnQgeFJlc3VsdDsKLSAgICBj
YWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKHN0eWxlKCktPndpZHRoKCksIGNvbnRhaW5lckJs
b2NrLCBjb250YWluZXJEaXJlY3Rpb24sCisgICAgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lk
dGhVc2luZyhzdHlsZSgpLT53aWR0aCgpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGgsIGJv
cmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQs
IHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoUmVzdWx0LCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIHhSZXN1
bHQpOwpAQCAtMTk5MSw3ICsxOTkxLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhv
cml6b250YWwoKQogICAgICAgICBpbnQgbWF4TWFyZ2luUmlnaHQ7CiAgICAgICAgIGludCBtYXhY
UG9zOwogCi0gICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoc3R5bGUoKS0+bWF4
V2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKKyAgICAgICAgY29t
cHV0ZVBvc2l0aW9uZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5tYXhXaWR0aCgpLCBjb250
YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1h
cmdpblJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRo
LCBtYXhNYXJnaW5MZWZ0LCBtYXhNYXJnaW5SaWdodCwgbWF4WFBvcyk7CkBAIC0yMDExLDcgKzIw
MTEsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbCgpCiAgICAgICAg
IGludCBtaW5NYXJnaW5SaWdodDsKICAgICAgICAgaW50IG1pblhQb3M7CiAKLSAgICAgICAgY2Fs
Y0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhzdHlsZSgpLT5taW5XaWR0aCgpLCBjb250YWluZXJC
bG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAorICAgICAgICBjb21wdXRlUG9zaXRpb25lZExvZ2lj
YWxXaWR0aFVzaW5nKHN0eWxlKCktPm1pbldpZHRoKCksIGNvbnRhaW5lckJsb2NrLCBjb250YWlu
ZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFp
bmVyV2lkdGgsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0LCByaWdodCwgbWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluV2lkdGgsIG1pbk1hcmdpbkxlZnQsIG1p
bk1hcmdpblJpZ2h0LCBtaW5YUG9zKTsKQEAgLTIwMjUsNyArMjAyNSw3IEBAIHZvaWQgUmVuZGVy
Qm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICB9CiAKICAgICBpZiAoc3RyZXRjaGVz
VG9NaW5JbnRyaW5zaWNXaWR0aCgpICYmIHdpZHRoKCkgPCBtaW5QcmVmV2lkdGgoKSAtIGJvcmRl
cnNQbHVzUGFkZGluZykgewotICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExl
bmd0aChtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZywgRml4ZWQpLCBjb250YWlu
ZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAorICAgICAgICBjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxXaWR0aFVzaW5nKExlbmd0aChtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGlu
ZywgRml4ZWQpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoLCBib3JkZXJzUGx1c1Bh
ZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQs
IG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoUmVzdWx0LCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIHhSZXN1bHQp
OwpAQCAtMjAzNyw3ICsyMDM3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6
b250YWwoKQogICAgIHNldFdpZHRoKHdpZHRoKCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogfQog
Ci12b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhMZW5ndGggd2lk
dGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywgVGV4dERpcmVj
dGlvbiBjb250YWluZXJEaXJlY3Rpb24sCit2b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9u
ZWRMb2dpY2FsV2lkdGhVc2luZyhMZW5ndGggd2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBjb250YWluZXJCbG9jaywgVGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29u
dGFpbmVyV2lkdGgsIGNvbnN0IGludCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBMZW5ndGggbGVmdCwgY29uc3Qg
TGVuZ3RoIHJpZ2h0LCBjb25zdCBMZW5ndGggbWFyZ2luTGVmdCwgY29uc3QgTGVuZ3RoIG1hcmdp
blJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
JiB3aWR0aFZhbHVlLCBpbnQmIG1hcmdpbkxlZnRWYWx1ZSwgaW50JiBtYXJnaW5SaWdodFZhbHVl
LCBpbnQmIHhQb3MpCkBAIC0yMDY5LDcgKzIwNjksNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fi
c29sdXRlSG9yaXpvbnRhbFZhCiAgICAgICAgIC8vIGNhc2UgYmVjYXVzZSB0aGUgdmFsdWUgaXMg
bm90IHVzZWQgZm9yIGFueSBmdXJ0aGVyIGNhbGN1bGF0aW9ucy4KIAogICAgICAgICBsZWZ0VmFs
dWUgPSBsZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7Ci0gICAgICAgIHdpZHRoVmFsdWUg
PSBjYWxjQ29udGVudEJveFdpZHRoKHdpZHRoLmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCkpOwor
ICAgICAgICB3aWR0aFZhbHVlID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgod2lkdGgu
Y2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKSk7CiAKICAgICAgICAgY29uc3QgaW50IGF2YWlsYWJs
ZVNwYWNlID0gY29udGFpbmVyV2lkdGggLSAobGVmdFZhbHVlICsgd2lkdGhWYWx1ZSArIHJpZ2h0
LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCkgKyBib3JkZXJzUGx1c1BhZGRpbmcpOwogCkBAIC0y
MTc3LDcgKzIxNzcsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZh
CiAgICAgICAgICAgICB3aWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZh
aWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAobGVmdElz
QXV0byAmJiAhd2lkdGguaXNBdXRvKCkgJiYgIXJpZ2h0SXNBdXRvKSB7CiAgICAgICAgICAgICAv
LyBSVUxFIDQ6IChzb2x2ZSBmb3IgbGVmdCkKLSAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBjYWxj
Q29udGVudEJveFdpZHRoKHdpZHRoLmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCkpOworICAgICAg
ICAgICAgd2lkdGhWYWx1ZSA9IGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHdpZHRoLmNh
bGNWYWx1ZShjb250YWluZXJXaWR0aCkpOwogICAgICAgICAgICAgbGVmdFZhbHVlID0gYXZhaWxh
YmxlU3BhY2UgLSAod2lkdGhWYWx1ZSArIHJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCkp
OwogICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0SXNBdXRvICYmIHdpZHRoSXNBdXRvICYmICFyaWdo
dElzQXV0bykgewogICAgICAgICAgICAgLy8gUlVMRSA1OiAoc29sdmUgZm9yIHdpZHRoKQpAQCAt
MjE4Niw3ICsyMTg2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxW
YQogICAgICAgICB9IGVsc2UgaWYgKCFsZWZ0SXNBdXRvJiYgIXdpZHRoSXNBdXRvICYmIHJpZ2h0
SXNBdXRvKSB7CiAgICAgICAgICAgICAvLyBSVUxFIDY6IChubyBuZWVkIHNvbHZlIGZvciByaWdo
dCkKICAgICAgICAgICAgIGxlZnRWYWx1ZSA9IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRo
KTsKLSAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBjYWxjQ29udGVudEJveFdpZHRoKHdpZHRoLmNh
bGNWYWx1ZShjb250YWluZXJXaWR0aCkpOworICAgICAgICAgICAgd2lkdGhWYWx1ZSA9IGNvbXB1
dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHdpZHRoLmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCkp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMjA5LDE3ICsyMjA5LDE3IEBAIHZvaWQgUmVuZGVy
Qm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmEKICAgICB4UG9zID0gbGVmdFZhbHVlICsgbWFy
Z2luTGVmdFZhbHVlICsgY29udGFpbmVyQmxvY2stPmJvcmRlckxlZnQoKTsKIH0KIAotdm9pZCBS
ZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKK3ZvaWQgUmVuZGVyQm94Ojpjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxIZWlnaHQoKQogewogICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKLSAg
ICAgICAgY2FsY0Fic29sdXRlVmVydGljYWxSZXBsYWNlZCgpOworICAgICAgICBjb21wdXRlUG9z
aXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgLy8gVGhlIGZvbGxvd2luZyBpcyBiYXNlZCBvZmYgb2YgdGhlIFczQyBXb3JraW5nIERy
YWZ0IGZyb20gQXByaWwgMTEsIDIwMDYgb2YKICAgICAvLyBDU1MgMi4xOiBTZWN0aW9uIDEwLjYu
NCAiQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMiCiAgICAgLy8g
PGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDUvV0QtQ1NTMjEtMjAwNTA2MTMvdmlzdWRldC5odG1s
I2Ficy1ub24tcmVwbGFjZWQtaGVpZ2h0PgotICAgIC8vIChibG9jay1zdHlsZS1jb21tZW50cyBp
biB0aGlzIGZ1bmN0aW9uIGFuZCBpbiBjYWxjQWJzb2x1dGVWZXJ0aWNhbFZhbHVlcygpCisgICAg
Ly8gKGJsb2NrLXN0eWxlLWNvbW1lbnRzIGluIHRoaXMgZnVuY3Rpb24gYW5kIGluIGNvbXB1dGVQ
b3NpdGlvbmVkTG9naWNhbEhlaWdodFVzaW5nKCkKICAgICAvLyBjb3JyZXNwb25kIHRvIHRleHQg
ZnJvbSB0aGUgc3BlYykKIAogCkBAIC0yMjY4LDcgKzIyNjgsNyBAQCB2b2lkIFJlbmRlckJveDo6
Y2FsY0Fic29sdXRlVmVydGljYWwoKQogICAgIGludCB5OwogCiAgICAgLy8gQ2FsY3VsYXRlIGNv
bnN0cmFpbnQgZXF1YXRpb24gdmFsdWVzIGZvciAnaGVpZ2h0JyBjYXNlLgotICAgIGNhbGNBYnNv
bHV0ZVZlcnRpY2FsVmFsdWVzKHN0eWxlKCktPmhlaWdodCgpLCBjb250YWluZXJCbG9jaywgY29u
dGFpbmVySGVpZ2h0LCBib3JkZXJzUGx1c1BhZGRpbmcsCisgICAgY29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+aGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250
YWluZXJIZWlnaHQsIGJvcmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0b3AsIGJvdHRvbSwgbWFyZ2luVG9wLCBtYXJnaW5Cb3R0b20sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaCwgbV9tYXJnaW5Ub3AsIG1fbWFyZ2luQm90dG9tLCB5KTsK
ICAgICBzZXRZKHkpOwpAQCAtMjI4Myw3ICsyMjgzLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNB
YnNvbHV0ZVZlcnRpY2FsKCkKICAgICAgICAgaW50IG1heE1hcmdpbkJvdHRvbTsKICAgICAgICAg
aW50IG1heFlQb3M7CiAKLSAgICAgICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoc3R5bGUo
KS0+bWF4SGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJIZWlnaHQsIGJvcmRlcnNQ
bHVzUGFkZGluZywKKyAgICAgICAgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmco
c3R5bGUoKS0+bWF4SGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJIZWlnaHQsIGJv
cmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9w
LCBib3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXhIZWlnaHQsIG1heE1hcmdpblRvcCwgbWF4TWFyZ2luQm90dG9tLCBt
YXhZUG9zKTsKIApAQCAtMjMwMiw3ICsyMzAyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNv
bHV0ZVZlcnRpY2FsKCkKICAgICAgICAgaW50IG1pbk1hcmdpbkJvdHRvbTsKICAgICAgICAgaW50
IG1pbllQb3M7CiAKLSAgICAgICAgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1ZXMoc3R5bGUoKS0+
bWluSGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJIZWlnaHQsIGJvcmRlcnNQbHVz
UGFkZGluZywKKyAgICAgICAgY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5
bGUoKS0+bWluSGVpZ2h0KCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJIZWlnaHQsIGJvcmRl
cnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLCBi
b3R0b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtaW5IZWlnaHQsIG1pbk1hcmdpblRvcCwgbWluTWFyZ2luQm90dG9tLCBtaW5Z
UG9zKTsKIApAQCAtMjMxOCwxMyArMjMxOCwxMyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29s
dXRlVmVydGljYWwoKQogICAgIHNldEhlaWdodChoICsgYm9yZGVyc1BsdXNQYWRkaW5nKTsKIH0K
IAotdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKExlbmd0aCBoLCBj
b25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY29udGFpbmVyQmxvY2ssCit2b2lkIFJlbmRlckJv
eDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0VXNpbmcoTGVuZ3RoIGgsIGNvbnN0IFJl
bmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluZXJCbG9jaywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgY29udGFpbmVySGVpZ2h0LCBjb25zdCBp
bnQgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IExlbmd0aCB0b3AsIGNvbnN0IExlbmd0aCBib3R0b20sIGNvbnN0IExl
bmd0aCBtYXJnaW5Ub3AsIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBoZWlnaHRWYWx1ZSwgaW50JiBtYXJn
aW5Ub3BWYWx1ZSwgaW50JiBtYXJnaW5Cb3R0b21WYWx1ZSwgaW50JiB5UG9zKQogewogICAgIC8v
ICd0b3AnIGFuZCAnYm90dG9tJyBjYW5ub3QgYm90aCBiZSAnYXV0bycgYmVjYXVzZSAndG9wIHdv
dWxkIG9mIGJlZW4KLSAgICAvLyBjb252ZXJ0ZWQgdG8gdGhlIHN0YXRpYyBwb3NpdGlvbiBpbiBj
YWxjQWJzb2x1dGVWZXJ0aWNhbCgpCisgICAgLy8gY29udmVydGVkIHRvIHRoZSBzdGF0aWMgcG9z
aXRpb24gaW4gY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0KCkKICAgICBBU1NFUlQoISh0
b3AuaXNBdXRvKCkgJiYgYm90dG9tLmlzQXV0bygpKSk7CiAKICAgICBpbnQgY29udGVudEhlaWdo
dCA9IGhlaWdodCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwpAQCAtMjM1Myw3ICsyMzUzLDcgQEAg
dm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdQogICAgICAgICAvLyBOT1RF
OiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBzb2x2ZSBmb3IgJ2JvdHRvbScgaW4gdGhlIG92ZXIg
Y29uc3RyYWluZWQKICAgICAgICAgLy8gY2FzZSBiZWNhdXNlIHRoZSB2YWx1ZSBpcyBub3QgdXNl
ZCBmb3IgYW55IGZ1cnRoZXIgY2FsY3VsYXRpb25zLgogCi0gICAgICAgIGhlaWdodFZhbHVlID0g
Y2FsY0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7CisgICAg
ICAgIGhlaWdodFZhbHVlID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGguY2FsY1Zh
bHVlKGNvbnRhaW5lckhlaWdodCkpOwogICAgICAgICB0b3BWYWx1ZSA9IHRvcC5jYWxjVmFsdWUo
Y29udGFpbmVySGVpZ2h0KTsKIAogICAgICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBj
b250YWluZXJIZWlnaHQgLSAodG9wVmFsdWUgKyBoZWlnaHRWYWx1ZSArIGJvdHRvbS5jYWxjVmFs
dWUoY29udGFpbmVySGVpZ2h0KSArIGJvcmRlcnNQbHVzUGFkZGluZyk7CkBAIC0yNDIwLDcgKzI0
MjAsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxWYWx1CiAgICAgICAg
ICAgICBoZWlnaHRWYWx1ZSA9IGNvbnRlbnRIZWlnaHQ7CiAgICAgICAgIH0gZWxzZSBpZiAodG9w
SXNBdXRvICYmICFoZWlnaHRJc0F1dG8gJiYgIWJvdHRvbUlzQXV0bykgewogICAgICAgICAgICAg
Ly8gUlVMRSA0OiAoc29sdmUgb2YgdG9wKQotICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBjYWxj
Q29udGVudEJveEhlaWdodChoLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKKyAgICAgICAg
ICAgIGhlaWdodFZhbHVlID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsSGVpZ2h0KGguY2FsY1Zh
bHVlKGNvbnRhaW5lckhlaWdodCkpOwogICAgICAgICAgICAgdG9wVmFsdWUgPSBhdmFpbGFibGVT
cGFjZSAtIChoZWlnaHRWYWx1ZSArIGJvdHRvbS5jYWxjVmFsdWUoY29udGFpbmVySGVpZ2h0KSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoIXRvcElzQXV0byAmJiBoZWlnaHRJc0F1dG8gJiYgIWJvdHRv
bUlzQXV0bykgewogICAgICAgICAgICAgLy8gUlVMRSA1OiAoc29sdmUgb2YgaGVpZ2h0KQpAQCAt
MjQyOCw3ICsyNDI4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFs
dQogICAgICAgICAgICAgaGVpZ2h0VmFsdWUgPSBtYXgoMCwgYXZhaWxhYmxlU3BhY2UgLSAodG9w
VmFsdWUgKyBib3R0b20uY2FsY1ZhbHVlKGNvbnRhaW5lckhlaWdodCkpKTsKICAgICAgICAgfSBl
bHNlIGlmICghdG9wSXNBdXRvICYmICFoZWlnaHRJc0F1dG8gJiYgYm90dG9tSXNBdXRvKSB7CiAg
ICAgICAgICAgICAvLyBSVUxFIDY6IChubyBuZWVkIHNvbHZlIG9mIGJvdHRvbSkKLSAgICAgICAg
ICAgIGhlaWdodFZhbHVlID0gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFsdWUoY29udGFp
bmVySGVpZ2h0KSk7CisgICAgICAgICAgICBoZWlnaHRWYWx1ZSA9IGNvbXB1dGVDb250ZW50Qm94
TG9naWNhbEhlaWdodChoLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpKTsKICAgICAgICAgICAg
IHRvcFZhbHVlID0gdG9wLmNhbGNWYWx1ZShjb250YWluZXJIZWlnaHQpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMjQzNyw3ICsyNDM3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZl
cnRpY2FsVmFsdQogICAgIHlQb3MgPSB0b3BWYWx1ZSArIG1hcmdpblRvcFZhbHVlICsgY29udGFp
bmVyQmxvY2stPmJvcmRlclRvcCgpOwogfQogCi12b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRl
SG9yaXpvbnRhbFJlcGxhY2VkKCkKK3ZvaWQgUmVuZGVyQm94Ojpjb21wdXRlUG9zaXRpb25lZExv
Z2ljYWxXaWR0aFJlcGxhY2VkKCkKIHsKICAgICAvLyBUaGUgZm9sbG93aW5nIGlzIGJhc2VkIG9m
ZiBvZiB0aGUgVzNDIFdvcmtpbmcgRHJhZnQgZnJvbSBBcHJpbCAxMSwgMjAwNiBvZgogICAgIC8v
IENTUyAyLjE6IFNlY3Rpb24gMTAuMy44ICJBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIHJlcGxhY2Vk
IGVsZW1lbnRzIgpAQCAtMjQ2Nyw5ICsyNDY3LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNv
bHV0ZUhvcml6b250YWxSZQogICAgICAqICAgIGVsZW1lbnRzLgogICAgIFwqLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLwogICAgIC8vIE5PVEU6IFRoaXMgdmFsdWUgb2Ygd2lkdGggaXMgRklOQUwgaW4gdGhhdCB0
aGUgbWluL21heCB3aWR0aCBjYWxjdWxhdGlvbnMKLSAgICAvLyBhcmUgZGVhbHQgd2l0aCBpbiBj
YWxjUmVwbGFjZWRXaWR0aCgpLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBzdGVwcyB0byBwcm9kdWNl
CisgICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY29tcHV0ZVJlcGxhY2VkV2lkdGgoKS4gIFRoaXMg
bWVhbnMgdGhhdCB0aGUgc3RlcHMgdG8gcHJvZHVjZQogICAgIC8vIGNvcnJlY3QgbWF4L21pbiBp
biB0aGUgbm9uLXJlcGxhY2VkIHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5LgotICAgIHNldFdp
ZHRoKGNhbGNSZXBsYWNlZFdpZHRoKCkgKyBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKSk7CisgICAg
c2V0V2lkdGgoY29tcHV0ZVJlcGxhY2VkV2lkdGgoKSArIGJvcmRlckFuZFBhZGRpbmdXaWR0aCgp
KTsKICAgICBjb25zdCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJXaWR0aCAtIHdpZHRo
KCk7CiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKQEAgLTI2MTUsNyArMjYxNSw3IEBAIHZvaWQg
UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmUKICAgICBtX2ZyYW1lUmVjdC5zZXRY
KGxlZnRWYWx1ZSArIG1fbWFyZ2luTGVmdCArIGNvbnRhaW5lckJsb2NrLT5ib3JkZXJMZWZ0KCkp
OwogfQogCi12b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxSZXBsYWNlZCgpCit2
b2lkIFJlbmRlckJveDo6Y29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0UmVwbGFjZWQoKQog
ewogICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFzZWQgb2ZmIG9mIHRoZSBXM0MgV29ya2luZyBE
cmFmdCBmcm9tIEFwcmlsIDExLCAyMDA2IG9mCiAgICAgLy8gQ1NTIDIuMTogU2VjdGlvbiAxMC42
LjUgIkFic29sdXRlbHkgcG9zaXRpb25lZCwgcmVwbGFjZWQgZWxlbWVudHMiCkBAIC0yNjQwLDkg
KzI2NDAsOSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWxSZXBsCiAgICAg
ICogICAgZWxlbWVudHMuCiAgICAgXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgLy8gTk9URTogVGhp
cyB2YWx1ZSBvZiBoZWlnaHQgaXMgRklOQUwgaW4gdGhhdCB0aGUgbWluL21heCBoZWlnaHQgY2Fs
Y3VsYXRpb25zCi0gICAgLy8gYXJlIGRlYWx0IHdpdGggaW4gY2FsY1JlcGxhY2VkSGVpZ2h0KCku
ICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0ZXBzIHRvIHByb2R1Y2UKKyAgICAvLyBhcmUgZGVhbHQg
d2l0aCBpbiBjb21wdXRlUmVwbGFjZWRIZWlnaHQoKS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3Rl
cHMgdG8gcHJvZHVjZQogICAgIC8vIGNvcnJlY3QgbWF4L21pbiBpbiB0aGUgbm9uLXJlcGxhY2Vk
IHZlcnNpb24sIGFyZSBub3QgbmVjZXNzYXJ5LgotICAgIHNldEhlaWdodChjYWxjUmVwbGFjZWRI
ZWlnaHQoKSArIGJvcmRlckFuZFBhZGRpbmdIZWlnaHQoKSk7CisgICAgc2V0SGVpZ2h0KGNvbXB1
dGVSZXBsYWNlZEhlaWdodCgpICsgYm9yZGVyQW5kUGFkZGluZ0hlaWdodCgpKTsKICAgICBjb25z
dCBpbnQgYXZhaWxhYmxlU3BhY2UgPSBjb250YWluZXJIZWlnaHQgLSBoZWlnaHQoKTsKIAogICAg
IC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qXApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDY4
MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSwxMCArMTg1LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50U2l6ZSBvZmZzZXRG
cm9tQ29udGFpbmVyKFJlbmRlck9iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAg
Ci0gICAgaW50IGNhbGNCb3JkZXJCb3hXaWR0aChpbnQgd2lkdGgpIGNvbnN0OwotICAgIGludCBj
YWxjQm9yZGVyQm94SGVpZ2h0KGludCBoZWlnaHQpIGNvbnN0OwotICAgIGludCBjYWxjQ29udGVu
dEJveFdpZHRoKGludCB3aWR0aCkgY29uc3Q7Ci0gICAgaW50IGNhbGNDb250ZW50Qm94SGVpZ2h0
KGludCBoZWlnaHQpIGNvbnN0OworICAgIGludCBjb21wdXRlQm9yZGVyQm94TG9naWNhbFdpZHRo
KGludCB3aWR0aCkgY29uc3Q7CisgICAgaW50IGNvbXB1dGVCb3JkZXJCb3hMb2dpY2FsSGVpZ2h0
KGludCBoZWlnaHQpIGNvbnN0OworICAgIGludCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChpbnQgd2lkdGgpIGNvbnN0OworICAgIGludCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxIZWln
aHQoaW50IGhlaWdodCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRqdXN0
KGludCYgLyp4Ki8sIGludCYgLyp3Ki8pIGNvbnN0IHsgfSAvLyBTaHJpbmsgdGhlIGJveCBpbiB3
aGljaCB0aGUgYm9yZGVyIHBhaW50cyBpZiBib3JkZXItZml0IGlzIHNldC4KIApAQCAtMTk2LDcg
KzE5Niw3IEBAIHB1YmxpYzoKICAgICAvLyBzaGlmdGVkIHJpZ2h0IGJ5IGxlZnQtYWxpZ25lZCBm
bG9hdHMgY2FuIHJlY29tcHV0ZSB0aGVpciBsZWZ0IGFuZAogICAgIC8vIHJpZ2h0IG1hcmdpbnMg
KHNvIHRoYXQgdGhleSBjYW4gcmVtYWluIGNlbnRlcmVkIGFmdGVyIGJlaW5nCiAgICAgLy8gc2hp
ZnRlZC4gLWR3aAotICAgIHZvaWQgY2FsY0hvcml6b250YWxNYXJnaW5zKGNvbnN0IExlbmd0aCYg
bWFyZ2luTGVmdCwgY29uc3QgTGVuZ3RoJiBtYXJnaW5SaWdodCwgaW50IGNvbnRhaW5lcldpZHRo
KTsKKyAgICB2b2lkIGNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKGNvbnN0IExlbmd0aCYg
bWFyZ2luTGVmdCwgY29uc3QgTGVuZ3RoJiBtYXJnaW5SaWdodCwgaW50IGNvbnRhaW5lcldpZHRo
KTsKIAogICAgIHZvaWQgcG9zaXRpb25MaW5lQm94KElubGluZUJveCopOwogCkBAIC0yMzYsMTUg
KzIzNiwxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaXplc1RvSW50cmluc2ljV2lkdGgoV2lkdGhU
eXBlKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBpbnQgY2FsY1dpZHRoVXNpbmcoV2lk
dGhUeXBlLCBpbnQgY29udGFpbmVyV2lkdGgpOwotICAgIGludCBjYWxjSGVpZ2h0VXNpbmcoY29u
c3QgTGVuZ3RoJiBoZWlnaHQpOwotICAgIGludCBjYWxjUmVwbGFjZWRXaWR0aFVzaW5nKExlbmd0
aCB3aWR0aCkgY29uc3Q7Ci0gICAgaW50IGNhbGNSZXBsYWNlZEhlaWdodFVzaW5nKExlbmd0aCBo
ZWlnaHQpIGNvbnN0OworICAgIGludCBjb21wdXRlTG9naWNhbFdpZHRoVXNpbmcoV2lkdGhUeXBl
LCBpbnQgY29udGFpbmVyV2lkdGgpOworICAgIGludCBjb21wdXRlTG9naWNhbEhlaWdodFVzaW5n
KGNvbnN0IExlbmd0aCYgaGVpZ2h0KTsKKyAgICBpbnQgY29tcHV0ZVJlcGxhY2VkV2lkdGhVc2lu
ZyhMZW5ndGggd2lkdGgpIGNvbnN0OworICAgIGludCBjb21wdXRlUmVwbGFjZWRIZWlnaHRVc2lu
ZyhMZW5ndGggaGVpZ2h0KSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNlZFdp
ZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQg
Y2FsY1JlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxh
Y2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCBjb21wdXRlUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAotICAgIGludCBjYWxjUGVyY2Vu
dGFnZUhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCk7CisgICAgaW50IGNvbXB1dGVQZXJjZW50
YWdlTG9naWNhbEhlaWdodChjb25zdCBMZW5ndGgmIGhlaWdodCk7CiAKICAgICAvLyBCbG9jayBm
bG93cyBzdWJjbGFzcyBhdmFpbGFibGVXaWR0aCB0byBoYW5kbGUgbXVsdGkgY29sdW1uIGxheW91
dCAoc2hyaW5raW5nIHRoZSB3aWR0aCBhdmFpbGFibGUgdG8gY2hpbGRyZW4gd2hlbiBsYXlpbmcg
b3V0LikKICAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnRlbnRXaWR0aCgpOyB9IC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSByZW1vdmluZyBldmVudHVhbGx5
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYxMjcKQEAgLTI1Miw3
ICsyNTIsNyBAQCBwdWJsaWM6CiAgICAgaW50IGF2YWlsYWJsZUhlaWdodFVzaW5nKGNvbnN0IExl
bmd0aCYpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpIGNv
bnN0OwogCi0gICAgdm9pZCBjYWxjVmVydGljYWxNYXJnaW5zKCk7CisgICAgdm9pZCBjb21wdXRl
QmxvY2tEaXJlY3Rpb25NYXJnaW5zKCk7CiAKICAgICB2aXJ0dWFsIGludCB2ZXJ0aWNhbFNjcm9s
bGJhcldpZHRoKCkgY29uc3Q7CiAgICAgaW50IGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKSBj
b25zdDsKQEAgLTMyNCw5ICszMjQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwYWludEN1c3Rv
bUhpZ2hsaWdodChpbnQgdHgsIGludCB0eSwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBib29s
IGJlaGluZFRleHQpOwogI2VuZGlmCiAKLSAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWwo
KTsKKyAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKCk7CiAgICAgCi0gICAg
dmlydHVhbCBib29sIHNob3VsZENhbGN1bGF0ZVNpemVBc1JlcGxhY2VkKCkgY29uc3QgeyByZXR1
cm4gaXNSZXBsYWNlZCgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpOyB9CisgICAg
dmlydHVhbCBib29sIHNob3VsZENvbXB1dGVTaXplQXNSZXBsYWNlZCgpIGNvbnN0IHsgcmV0dXJu
IGlzUmVwbGFjZWQoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKTsgfQogCiAgICAg
dmlydHVhbCB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIGJvb2wgZml4ZWQsIGJvb2wgdXNlVHJhbnNmb3JtcywgVHJhbnNmb3Jt
U3RhdGUmKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQo
Ym9vbCBmaXhlZCwgYm9vbCB1c2VUcmFuc2Zvcm1zLCBUcmFuc2Zvcm1TdGF0ZSYpIGNvbnN0OwpA
QCAtMzQyLDE4ICszNDIsMTggQEAgcHJpdmF0ZToKICAgICBpbnQgY29udGFpbmluZ0Jsb2NrV2lk
dGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxv
Y2spIGNvbnN0OwogICAgIGludCBjb250YWluaW5nQmxvY2tIZWlnaHRGb3JQb3NpdGlvbmVkKGNv
bnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjb250YWluaW5nQmxvY2spIGNvbnN0OwogCi0gICAg
dm9pZCBjYWxjQWJzb2x1dGVWZXJ0aWNhbCgpOwotICAgIHZvaWQgY2FsY0Fic29sdXRlSG9yaXpv
bnRhbFZhbHVlcyhMZW5ndGggd2lkdGgsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjYiwg
VGV4dERpcmVjdGlvbiBjb250YWluZXJEaXJlY3Rpb24sCisgICAgdm9pZCBjb21wdXRlUG9zaXRp
b25lZExvZ2ljYWxIZWlnaHQoKTsKKyAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdp
ZHRoVXNpbmcoTGVuZ3RoIHdpZHRoLCBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogY2IsIFRl
eHREaXJlY3Rpb24gY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgY29udGFpbmVyV2lkdGgsIGludCBib3JkZXJzUGx1c1BhZGRpbmcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsZWZ0LCBMZW5n
dGggcmlnaHQsIExlbmd0aCBtYXJnaW5MZWZ0LCBMZW5ndGggbWFyZ2luUmlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgd2lkdGhWYWx1ZSwgaW50JiBtYXJn
aW5MZWZ0VmFsdWUsIGludCYgbWFyZ2luUmlnaHRWYWx1ZSwgaW50JiB4UG9zKTsKLSAgICB2b2lk
IGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKExlbmd0aCBoZWlnaHQsIGNvbnN0IFJlbmRlckJv
eE1vZGVsT2JqZWN0KiBjYiwKKyAgICB2b2lkIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbEhlaWdo
dFVzaW5nKExlbmd0aCBoZWlnaHQsIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBjYiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb250YWluZXJIZWlnaHQsIGlu
dCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMZW5ndGggdG9wLCBMZW5ndGggYm90dG9tLCBMZW5ndGggbWFyZ2luVG9wLCBMZW5ndGggbWFy
Z2luQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBoZWln
aHRWYWx1ZSwgaW50JiBtYXJnaW5Ub3BWYWx1ZSwgaW50JiBtYXJnaW5Cb3R0b21WYWx1ZSwgaW50
JiB5UG9zKTsKIAotICAgIHZvaWQgY2FsY0Fic29sdXRlVmVydGljYWxSZXBsYWNlZCgpOwotICAg
IHZvaWQgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlcGxhY2VkKCk7CisgICAgdm9pZCBjb21wdXRl
UG9zaXRpb25lZExvZ2ljYWxIZWlnaHRSZXBsYWNlZCgpOworICAgIHZvaWQgY29tcHV0ZVBvc2l0
aW9uZWRMb2dpY2FsV2lkdGhSZXBsYWNlZCgpOwogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjYWxj
dWxhdGVzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByZWZlcnJlZCB3aWR0aHMgZm9yIGFuIG9i
amVjdC4KICAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgaW4gc2hyaW5rLXRvLWZpdCBsYXlv
dXQgc3lzdGVtcy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFHcmlkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5jcHAJKHJldmlz
aW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGF0YUdyaWQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NCwyMSArOTQsMjEgQEAgdm9pZCBSZW5kZXJEYXRhR3JpZDo6Y2FsY1By
ZWZXaWR0aHMoKQogICAgIG1fbWF4UHJlZldpZHRoID0gMDsKIAogICAgIGlmIChzdHlsZSgpLT53
aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4
UHJlZldpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+d2lkdGgo
KS52YWx1ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRl
bnRCb3hXaWR0aChjRGVmYXVsdFdpZHRoKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBjb21w
dXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChjRGVmYXVsdFdpZHRoKTsKIAogICAgIGlmIChzdHls
ZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkg
PiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBt
YXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCkt
Pm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21p
blByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWluV2lk
dGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2Vu
dCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlz
UGVyY2VudCgpKSkKICAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UKICAgICAg
ICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsKIAogICAgIGlmIChzdHlsZSgpLT5t
YXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5k
ZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldp
ZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwot
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRC
b3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVm
V2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9
IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50IHRvQWRkID0gYm9yZGVy
QW5kUGFkZGluZ1dpZHRoKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY1LDcgKzI2
NSw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNhbGNQcmVmV2kKICAgICBtX21h
eFByZWZXaWR0aCA9IDA7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYg
c3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBt
X21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1
ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNvbXB1dGVD
b250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZmlsZW5hbWUgc3BhY2UgbmVl
ZHMgdG8gYmUgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMKICAgICAgICAgLy8gKHVz
aW5nICIwIiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgpAQCAtMjc1LDE2ICsyNzUsMTYgQEAg
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2FsY1ByZWZXaQogICAgIH0KIAogICAgIGlm
IChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZh
bHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldpZHRo
LCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAg
ICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hX
aWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lk
dGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0
eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1h
eChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+
bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlz
UGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdo
dCgpLmlzUGVyY2VudCgpKSkKICAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UK
ICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsKIAogICAgIGlmIChzdHls
ZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkg
IT0gdW5kZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4
UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSkpOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0Nv
bnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9t
YXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNh
bFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50IHRvQWRkID0g
Ym9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
bGV4aWJsZUJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxl
eGlibGVCb3guY3BwCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQg
UmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBBU1NFUlQocHJlZldpZHRo
c0RpcnR5KCkpOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxl
KCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQ
cmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7
CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlQ29udGVu
dEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2Ugewog
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gMDsKIApAQCAtMTgxLDEz
ICsxODEsMTMgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY1ByZWZXaWR0aHMoKQogICAg
IH0KIAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1f
bWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSkpOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2Fs
Y0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9n
aWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogICAgIAogICAgIGlmIChz
dHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVl
KCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1f
bWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSkpOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY2Fs
Y0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9n
aWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lk
dGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50IHRvQWRk
ID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9pZCBSZW5k
ZXJGbGV4aWJsZUJveDo6bGF5b3V0SG9yaXpvbnRhbAogICAgICAgICAgICAgfQogICAgIAogICAg
ICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgY2hpbGQncyB2ZXJ0aWNhbCBtYXJnaW5zLgotICAgICAg
ICAgICAgY2hpbGQtPmNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKKyAgICAgICAgICAgIGNoaWxkLT5j
b21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKCk7CiAgICAgCiAgICAgICAgICAgICBpZiAoIWNo
aWxkLT5uZWVkc0xheW91dCgpICYmIHBhZ2luYXRlZCAmJiB2aWV3KCktPmxheW91dFN0YXRlKCkt
Pm1fcGFnZUhlaWdodCkgewogICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjaGlsZFJlbmRl
ckJsb2NrID0gY2hpbGQtPmlzUmVuZGVyQmxvY2soKSA/IHRvUmVuZGVyQmxvY2soY2hpbGQpIDog
MDsKQEAgLTYzNSw3ICs2MzUsNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRIb3Jp
em9udGFsCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgLy8gU28gdGhhdCB0aGUgY2FsY0hl
aWdodCBpbiBsYXlvdXRCbG9jaygpIGtub3dzIHRvIHJlbGF5b3V0IHBvc2l0aW9uZWQgb2JqZWN0
cyBiZWNhdXNlIG9mCisgICAgLy8gU28gdGhhdCB0aGUgY29tcHV0ZUxvZ2ljYWxIZWlnaHQgaW4g
bGF5b3V0QmxvY2soKSBrbm93cyB0byByZWxheW91dCBwb3NpdGlvbmVkIG9iamVjdHMgYmVjYXVz
ZSBvZgogICAgIC8vIGEgaGVpZ2h0IGNoYW5nZSwgd2UgcmV2ZXJ0IG91ciBoZWlnaHQgYmFjayB0
byB0aGUgaW50cmluc2ljIGhlaWdodCBiZWZvcmUgcmV0dXJuaW5nLgogICAgIGlmIChoZWlnaHRT
cGVjaWZpZWQpCiAgICAgICAgIHNldEhlaWdodChvbGRIZWlnaHQpOwpAQCAtNzA1LDcgKzcwNSw3
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dFZlcnRpY2FsQm8KICAgICAgICAgICAg
IH0gCiAgICAgCiAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBjaGlsZCdzIHZlcnRpY2FsIG1h
cmdpbnMuCi0gICAgICAgICAgICBjaGlsZC0+Y2FsY1ZlcnRpY2FsTWFyZ2lucygpOworICAgICAg
ICAgICAgY2hpbGQtPmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMoKTsKICAgICAKICAgICAg
ICAgICAgIC8vIEFkZCBpbiB0aGUgY2hpbGQncyBtYXJnaW5Ub3AgdG8gb3VyIGhlaWdodC4KICAg
ICAgICAgICAgIHNldEhlaWdodChoZWlnaHQoKSArIGNoaWxkLT5tYXJnaW5Ub3AoKSk7CkBAIC05
MTcsNyArOTE3LDcgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0VmVydGljYWxCbwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gU28gdGhhdCB0aGUgY2FsY0hlaWdodCBpbiBsYXlv
dXRCbG9jaygpIGtub3dzIHRvIHJlbGF5b3V0IHBvc2l0aW9uZWQgb2JqZWN0cyBiZWNhdXNlIG9m
CisgICAgLy8gU28gdGhhdCB0aGUgY29tcHV0ZUxvZ2ljYWxIZWlnaHQgaW4gbGF5b3V0QmxvY2so
KSBrbm93cyB0byByZWxheW91dCBwb3NpdGlvbmVkIG9iamVjdHMgYmVjYXVzZSBvZgogICAgIC8v
IGEgaGVpZ2h0IGNoYW5nZSwgd2UgcmV2ZXJ0IG91ciBoZWlnaHQgYmFjayB0byB0aGUgaW50cmlu
c2ljIGhlaWdodCBiZWZvcmUgcmV0dXJuaW5nLgogICAgIGlmIChoZWlnaHRTcGVjaWZpZWQpCiAg
ICAgICAgIHNldEhlaWdodChvbGRIZWlnaHQpOyAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjksNyArNDI5LDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6
aXNIZWlnaHRTcGVjaWZpZWQoKSBjbwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW50IFJlbmRl
ckltYWdlOjpjYWxjUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKK2lu
dCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgp
IGNvbnN0CiB7CiAgICAgaWYgKG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VIYXNSZWxhdGl2ZVdpZHRo
KCkpCiAgICAgICAgIGlmIChSZW5kZXJPYmplY3QqIGNiID0gaXNQb3NpdGlvbmVkKCkgPyBjb250
YWluZXIoKSA6IGNvbnRhaW5pbmdCbG9jaygpKSB7CkBAIC00MzksNyArNDM5LDcgQEAgaW50IFJl
bmRlckltYWdlOjpjYWxjUmVwbGFjZWRXaWR0aChib29sIAogCiAgICAgaW50IHdpZHRoOwogICAg
IGlmIChpc1dpZHRoU3BlY2lmaWVkKCkpCi0gICAgICAgIHdpZHRoID0gY2FsY1JlcGxhY2VkV2lk
dGhVc2luZyhzdHlsZSgpLT53aWR0aCgpKTsKKyAgICAgICAgd2lkdGggPSBjb21wdXRlUmVwbGFj
ZWRXaWR0aFVzaW5nKHN0eWxlKCktPndpZHRoKCkpOwogICAgIGVsc2UgaWYgKG1faW1hZ2VSZXNv
dXJjZS0+dXNlc0ltYWdlQ29udGFpbmVyU2l6ZSgpKQogICAgICAgICB3aWR0aCA9IG1faW1hZ2VS
ZXNvdXJjZS0+aW1hZ2VTaXplKHN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkud2lkdGgoKTsKICAg
ICBlbHNlIGlmIChtX2ltYWdlUmVzb3VyY2UtPmltYWdlSGFzUmVsYXRpdmVXaWR0aCgpKQpAQCAt
NDQ3LDE3ICs0NDcsMTcgQEAgaW50IFJlbmRlckltYWdlOjpjYWxjUmVwbGFjZWRXaWR0aChib29s
IAogICAgIGVsc2UKICAgICAgICAgd2lkdGggPSBjYWxjQXNwZWN0UmF0aW9XaWR0aCgpOwogCi0g
ICAgaW50IG1pblcgPSBjYWxjUmVwbGFjZWRXaWR0aFVzaW5nKHN0eWxlKCktPm1pbldpZHRoKCkp
OwotICAgIGludCBtYXhXID0gIWluY2x1ZGVNYXhXaWR0aCB8fCBzdHlsZSgpLT5tYXhXaWR0aCgp
LmlzVW5kZWZpbmVkKCkgPyB3aWR0aCA6IGNhbGNSZXBsYWNlZFdpZHRoVXNpbmcoc3R5bGUoKS0+
bWF4V2lkdGgoKSk7CisgICAgaW50IG1pblcgPSBjb21wdXRlUmVwbGFjZWRXaWR0aFVzaW5nKHN0
eWxlKCktPm1pbldpZHRoKCkpOworICAgIGludCBtYXhXID0gIWluY2x1ZGVNYXhXaWR0aCB8fCBz
dHlsZSgpLT5tYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkgPyB3aWR0aCA6IGNvbXB1dGVSZXBsYWNl
ZFdpZHRoVXNpbmcoc3R5bGUoKS0+bWF4V2lkdGgoKSk7CiAKICAgICByZXR1cm4gbWF4KG1pblcs
IG1pbih3aWR0aCwgbWF4VykpOwogfQogCi1pbnQgUmVuZGVySW1hZ2U6OmNhbGNSZXBsYWNlZEhl
aWdodCgpIGNvbnN0CitpbnQgUmVuZGVySW1hZ2U6OmNvbXB1dGVSZXBsYWNlZEhlaWdodCgpIGNv
bnN0CiB7CiAgICAgaW50IGhlaWdodDsKICAgICBpZiAoaXNIZWlnaHRTcGVjaWZpZWQoKSkKLSAg
ICAgICAgaGVpZ2h0ID0gY2FsY1JlcGxhY2VkSGVpZ2h0VXNpbmcoc3R5bGUoKS0+aGVpZ2h0KCkp
OworICAgICAgICBoZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRIZWlnaHRVc2luZyhzdHlsZSgpLT5o
ZWlnaHQoKSk7CiAgICAgZWxzZSBpZiAobV9pbWFnZVJlc291cmNlLT51c2VzSW1hZ2VDb250YWlu
ZXJTaXplKCkpCiAgICAgICAgIGhlaWdodCA9IG1faW1hZ2VSZXNvdXJjZS0+aW1hZ2VTaXplKHN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkuaGVpZ2h0KCk7CiAgICAgZWxzZSBpZiAobV9pbWFnZVJl
c291cmNlLT5pbWFnZUhhc1JlbGF0aXZlSGVpZ2h0KCkpCkBAIC00NjUsOCArNDY1LDggQEAgaW50
IFJlbmRlckltYWdlOjpjYWxjUmVwbGFjZWRIZWlnaHQoKSBjbwogICAgIGVsc2UKICAgICAgICAg
aGVpZ2h0ID0gY2FsY0FzcGVjdFJhdGlvSGVpZ2h0KCk7CiAKLSAgICBpbnQgbWluSCA9IGNhbGNS
ZXBsYWNlZEhlaWdodFVzaW5nKHN0eWxlKCktPm1pbkhlaWdodCgpKTsKLSAgICBpbnQgbWF4SCA9
IHN0eWxlKCktPm1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBoZWlnaHQgOiBjYWxjUmVwbGFj
ZWRIZWlnaHRVc2luZyhzdHlsZSgpLT5tYXhIZWlnaHQoKSk7CisgICAgaW50IG1pbkggPSBjb21w
dXRlUmVwbGFjZWRIZWlnaHRVc2luZyhzdHlsZSgpLT5taW5IZWlnaHQoKSk7CisgICAgaW50IG1h
eEggPSBzdHlsZSgpLT5tYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gaGVpZ2h0IDogY29tcHV0
ZVJlcGxhY2VkSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWF4SGVpZ2h0KCkpOwogCiAgICAgcmV0dXJu
IG1heChtaW5ILCBtaW4oaGVpZ2h0LCBtYXhIKSk7CiB9CkBAIC00NzgsNyArNDc4LDcgQEAgaW50
IFJlbmRlckltYWdlOjpjYWxjQXNwZWN0UmF0aW9XaWR0aCgpIAogICAgICAgICByZXR1cm4gMDsK
ICAgICBpZiAoIW1faW1hZ2VSZXNvdXJjZS0+aGFzSW1hZ2UoKSB8fCBtX2ltYWdlUmVzb3VyY2Ut
PmVycm9yT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIHNpemUud2lkdGgoKTsgLy8gRG9uJ3Qg
Ym90aGVyIHNjYWxpbmcuCi0gICAgcmV0dXJuIFJlbmRlckJveDo6Y2FsY1JlcGxhY2VkSGVpZ2h0
KCkgKiBzaXplLndpZHRoKCkgLyBzaXplLmhlaWdodCgpOworICAgIHJldHVybiBSZW5kZXJCb3g6
OmNvbXB1dGVSZXBsYWNlZEhlaWdodCgpICogc2l6ZS53aWR0aCgpIC8gc2l6ZS5oZWlnaHQoKTsK
IH0KIAogaW50IFJlbmRlckltYWdlOjpjYWxjQXNwZWN0UmF0aW9IZWlnaHQoKSBjb25zdApAQCAt
NDg4LDcgKzQ4OCw3IEBAIGludCBSZW5kZXJJbWFnZTo6Y2FsY0FzcGVjdFJhdGlvSGVpZ2h0KCkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFtX2ltYWdlUmVzb3VyY2UtPmhhc0ltYWdlKCkg
fHwgbV9pbWFnZVJlc291cmNlLT5lcnJvck9jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBzaXpl
LmhlaWdodCgpOyAvLyBEb24ndCBib3RoZXIgc2NhbGluZy4KLSAgICByZXR1cm4gUmVuZGVyQm94
OjpjYWxjUmVwbGFjZWRXaWR0aCgpICogc2l6ZS5oZWlnaHQoKSAvIHNpemUud2lkdGgoKTsKKyAg
ICByZXR1cm4gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRXaWR0aCgpICogc2l6ZS5oZWlnaHQo
KSAvIHNpemUud2lkdGgoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbWFnZS5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDggKzgwLDggQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKLSAg
ICB2aXJ0dWFsIGludCBjYWxjUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRy
dWUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNlZEhlaWdodCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IGNvbXB1dGVSZXBsYWNlZFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRo
ID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkSGVpZ2h0KCkg
Y29uc3Q7CiAKICAgICBpbnQgY2FsY0FzcGVjdFJhdGlvV2lkdGgoKSBjb25zdDsKICAgICBpbnQg
Y2FsY0FzcGVjdFJhdGlvSGVpZ2h0KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIHZvaWQgUmVuZGVy
TGlzdEJveDo6Y2FsY1ByZWZXaWR0aHMoKQogICAgIG1fbWF4UHJlZldpZHRoID0gMDsKIAogICAg
IGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVl
KCkgPiAwKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0Nv
bnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgo
c3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgbV9tYXhQcmVm
V2lkdGggPSBtX29wdGlvbnNXaWR0aCArIDIgKiBvcHRpb25zU3BhY2luZ0hvcml6b250YWw7CiAg
ICAgICAgIGlmIChtX3ZCYXIpCkBAIC0xNzYsMTYgKzE3NiwxNiBAQCB2b2lkIFJlbmRlckxpc3RC
b3g6OmNhbGNQcmVmV2lkdGhzKCkKICAgICB9CiAKICAgICBpZiAoc3R5bGUoKS0+bWluV2lkdGgo
KS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewotICAgICAg
ICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0
aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5QcmVmV2lkdGgg
PSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lk
dGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldp
ZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZh
bHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNv
bXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkp
OwogICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5bGUo
KS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkpCiAg
ICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBlbHNlCiAgICAgICAgIG1fbWluUHJlZldp
ZHRoID0gbV9tYXhQcmVmV2lkdGg7CiAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0Zp
eGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkg
ewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZXaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5Q
cmVmV2lkdGggPSBtaW4obV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1f
bWF4UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5tYXhX
aWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtaW4obV9taW5QcmVm
V2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IGJvcmRlckFuZFBhZGRpbmdXaWR0
aCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gNjgx
NzQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0NSwyMSArMjQ1LDIxIEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmNhbGNQcmVmV2lk
dGhzKCkKICAgICBtX21heFByZWZXaWR0aCA9IDA7CiAgICAgCiAgICAgaWYgKHN0eWxlKCktPndp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAg
IG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0
eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQ
cmVmV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgp
LnZhbHVlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9vcHRp
b25zV2lkdGgsIHRoZW1lKCktPm1pbmltdW1NZW51TGlzdFNpemUoc3R5bGUoKSkpICsgbV9pbm5l
ckJsb2NrLT5wYWRkaW5nTGVmdCgpICsgbV9pbm5lckJsb2NrLT5wYWRkaW5nUmlnaHQoKTsKIAog
ICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJl
ZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkp
OwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdp
ZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0
aCA9IG1heChtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0
aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCkt
PmhlaWdodCgpLmlzUGVyY2VudCgpKSkKICAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAg
IGVsc2UKICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsKIAogICAgIGlm
IChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWlu
KG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSkpOwotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAg
ICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94
TG9naWNhbFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21p
blByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2Fs
V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50IHRv
QWRkID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5NSw4ICsyMDk1LDggQEAgUmVuZGVyT2JqZWN0
KiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5lcihSZQogICAgIC8vICgyKSBGb3Igbm9ybWFsIGZsb3cg
ZWxlbWVudHMsIGl0IGp1c3QgcmV0dXJucyB0aGUgcGFyZW50LgogICAgIC8vICgzKSBGb3IgYWJz
b2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cywgaXQgd2lsbCByZXR1cm4gYSByZWxhdGl2ZSBwb3Np
dGlvbmVkIGlubGluZS4KICAgICAvLyBjb250YWluaW5nQmxvY2soKSBzaW1wbHkgc2tpcHMgcmVs
cG9zaXRpb25lZCBpbmxpbmVzIGFuZCBsZXRzIGFuIGVuY2xvc2luZyBibG9jayBoYW5kbGUKLSAg
ICAvLyB0aGUgbGF5b3V0IG9mIHRoZSBwb3NpdGlvbmVkIG9iamVjdC4gIFRoaXMgZG9lcyBtZWFu
IHRoYXQgY2FsY0Fic29sdXRlSG9yaXpvbnRhbCBhbmQKLSAgICAvLyBjYWxjQWJzb2x1dGVWZXJ0
aWNhbCBoYXZlIHRvIHVzZSBjb250YWluZXIoKS4KKyAgICAvLyB0aGUgbGF5b3V0IG9mIHRoZSBw
b3NpdGlvbmVkIG9iamVjdC4gIFRoaXMgZG9lcyBtZWFuIHRoYXQgY29tcHV0ZVBvc2l0aW9uZWRM
b2dpY2FsV2lkdGggYW5kCisgICAgLy8gY29tcHV0ZVBvc2l0aW9uZWRMb2dpY2FsSGVpZ2h0IGhh
dmUgdG8gdXNlIGNvbnRhaW5lcigpLgogICAgIFJlbmRlck9iamVjdCogbyA9IHBhcmVudCgpOwog
CiAgICAgaWYgKGlzVGV4dCgpKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlz
aW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY4OCw3ICs2ODgsNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdmlydHVhbCBJ
bnRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgaW50KiBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjVmVydGlj
YWxNYXJnaW5zKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVCbG9ja0RpcmVjdGlvbk1h
cmdpbnMoKSB7IH0KICAgICBib29sIGlzVG9wTWFyZ2luUXVpcmsoKSBjb25zdCB7IHJldHVybiBt
X3RvcE1hcmdpblF1aXJrOyB9CiAgICAgYm9vbCBpc0JvdHRvbU1hcmdpblF1aXJrKCkgY29uc3Qg
eyByZXR1cm4gbV9ib3R0b21NYXJnaW5RdWlyazsgfQogICAgIHZvaWQgc2V0VG9wTWFyZ2luUXVp
cmsoYm9vbCBiID0gdHJ1ZSkgeyBtX3RvcE1hcmdpblF1aXJrID0gYjsgfQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gNjgyMzgpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNywzNCArMjA3
LDM0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBsZW5ndGhJc1NwZWNpZmllZChMZW4KICAgICByZXR1
cm4gbGVuZ3RoVHlwZSA9PSBGaXhlZCB8fCBsZW5ndGhUeXBlID09IFBlcmNlbnQ7CiB9CiAKLWlu
dCBSZW5kZXJSZXBsYWNlZDo6Y2FsY1JlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgp
IGNvbnN0CitpbnQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWNlZFdpZHRoKGJvb2wgaW5j
bHVkZU1heFdpZHRoKSBjb25zdAogewogICAgIGludCB3aWR0aDsKICAgICBpZiAobGVuZ3RoSXNT
cGVjaWZpZWQoc3R5bGUoKS0+d2lkdGgoKSkpCi0gICAgICAgIHdpZHRoID0gY2FsY1JlcGxhY2Vk
V2lkdGhVc2luZyhzdHlsZSgpLT53aWR0aCgpKTsKKyAgICAgICAgd2lkdGggPSBjb21wdXRlUmVw
bGFjZWRXaWR0aFVzaW5nKHN0eWxlKCktPndpZHRoKCkpOwogICAgIGVsc2UgaWYgKG1faGFzSW50
cmluc2ljU2l6ZSkKICAgICAgICAgd2lkdGggPSBjYWxjQXNwZWN0UmF0aW9XaWR0aCgpOwogICAg
IGVsc2UKICAgICAgICAgd2lkdGggPSBpbnRyaW5zaWNTaXplKCkud2lkdGgoKTsKIAotICAgIGlu
dCBtaW5XID0gY2FsY1JlcGxhY2VkV2lkdGhVc2luZyhzdHlsZSgpLT5taW5XaWR0aCgpKTsKLSAg
ICBpbnQgbWF4VyA9ICFpbmNsdWRlTWF4V2lkdGggfHwgc3R5bGUoKS0+bWF4V2lkdGgoKS5pc1Vu
ZGVmaW5lZCgpID8gd2lkdGggOiBjYWxjUmVwbGFjZWRXaWR0aFVzaW5nKHN0eWxlKCktPm1heFdp
ZHRoKCkpOworICAgIGludCBtaW5XID0gY29tcHV0ZVJlcGxhY2VkV2lkdGhVc2luZyhzdHlsZSgp
LT5taW5XaWR0aCgpKTsKKyAgICBpbnQgbWF4VyA9ICFpbmNsdWRlTWF4V2lkdGggfHwgc3R5bGUo
KS0+bWF4V2lkdGgoKS5pc1VuZGVmaW5lZCgpID8gd2lkdGggOiBjb21wdXRlUmVwbGFjZWRXaWR0
aFVzaW5nKHN0eWxlKCktPm1heFdpZHRoKCkpOwogCiAgICAgcmV0dXJuIG1heChtaW5XLCBtaW4o
d2lkdGgsIG1heFcpKTsKIH0KIAotaW50IFJlbmRlclJlcGxhY2VkOjpjYWxjUmVwbGFjZWRIZWln
aHQoKSBjb25zdAoraW50IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRIZWlnaHQoKSBj
b25zdAogewogICAgIGludCBoZWlnaHQ7CiAgICAgaWYgKGxlbmd0aElzU3BlY2lmaWVkKHN0eWxl
KCktPmhlaWdodCgpKSkKLSAgICAgICAgaGVpZ2h0ID0gY2FsY1JlcGxhY2VkSGVpZ2h0VXNpbmco
c3R5bGUoKS0+aGVpZ2h0KCkpOworICAgICAgICBoZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRIZWln
aHRVc2luZyhzdHlsZSgpLT5oZWlnaHQoKSk7CiAgICAgZWxzZSBpZiAobV9oYXNJbnRyaW5zaWNT
aXplKQogICAgICAgICBoZWlnaHQgPSBjYWxjQXNwZWN0UmF0aW9IZWlnaHQoKTsKICAgICBlbHNl
CiAgICAgICAgIGhlaWdodCA9IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKTsKIAotICAgIGludCBt
aW5IID0gY2FsY1JlcGxhY2VkSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bWluSGVpZ2h0KCkpOwotICAg
IGludCBtYXhIID0gc3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGhlaWdodCA6
IGNhbGNSZXBsYWNlZEhlaWdodFVzaW5nKHN0eWxlKCktPm1heEhlaWdodCgpKTsKKyAgICBpbnQg
bWluSCA9IGNvbXB1dGVSZXBsYWNlZEhlaWdodFVzaW5nKHN0eWxlKCktPm1pbkhlaWdodCgpKTsK
KyAgICBpbnQgbWF4SCA9IHN0eWxlKCktPm1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBoZWln
aHQgOiBjb21wdXRlUmVwbGFjZWRIZWlnaHRVc2luZyhzdHlsZSgpLT5tYXhIZWlnaHQoKSk7CiAK
ICAgICByZXR1cm4gbWF4KG1pbkgsIG1pbihoZWlnaHQsIG1heEgpKTsKIH0KQEAgLTI0NSw3ICsy
NDUsNyBAQCBpbnQgUmVuZGVyUmVwbGFjZWQ6OmNhbGNBc3BlY3RSYXRpb1dpZHRoCiAgICAgaW50
IGludHJpbnNpY0hlaWdodCA9IGludHJpbnNpY1NpemUoKS5oZWlnaHQoKTsKICAgICBpZiAoIWlu
dHJpbnNpY0hlaWdodCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFJlbmRlckJveDo6
Y2FsY1JlcGxhY2VkSGVpZ2h0KCkgKiBpbnRyaW5zaWNXaWR0aCAvIGludHJpbnNpY0hlaWdodDsK
KyAgICByZXR1cm4gUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRIZWlnaHQoKSAqIGludHJpbnNp
Y1dpZHRoIC8gaW50cmluc2ljSGVpZ2h0OwogfQogCiBpbnQgUmVuZGVyUmVwbGFjZWQ6OmNhbGNB
c3BlY3RSYXRpb0hlaWdodCgpIGNvbnN0CkBAIC0yNTQsNyArMjU0LDcgQEAgaW50IFJlbmRlclJl
cGxhY2VkOjpjYWxjQXNwZWN0UmF0aW9IZWlnaAogICAgIGludCBpbnRyaW5zaWNIZWlnaHQgPSBp
bnRyaW5zaWNTaXplKCkuaGVpZ2h0KCk7CiAgICAgaWYgKCFpbnRyaW5zaWNXaWR0aCkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFJlbmRlckJveDo6Y2FsY1JlcGxhY2VkV2lkdGgoKSAq
IGludHJpbnNpY0hlaWdodCAvIGludHJpbnNpY1dpZHRoOworICAgIHJldHVybiBSZW5kZXJCb3g6
OmNvbXB1dGVSZXBsYWNlZFdpZHRoKCkgKiBpbnRyaW5zaWNIZWlnaHQgLyBpbnRyaW5zaWNXaWR0
aDsKIH0KIAogdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y2FsY1ByZWZXaWR0aHMoKQpAQCAtMjYyLDcg
KzI2Miw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBBU1NF
UlQocHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgaW50IGJvcmRlckFuZFBhZGRpbmcgPSBib3Jk
ZXJBbmRQYWRkaW5nV2lkdGgoKTsKLSAgICBtX21heFByZWZXaWR0aCA9IGNhbGNSZXBsYWNlZFdp
ZHRoKGZhbHNlKSArIGJvcmRlckFuZFBhZGRpbmc7CisgICAgbV9tYXhQcmVmV2lkdGggPSBjb21w
dXRlUmVwbGFjZWRXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRkaW5nOwogCiAgICAgaWYgKHN0
eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSAhPSB1bmRlZmluZWRMZW5ndGgpCiAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4
UHJlZldpZHRoLCBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6
aW5nKCkgPT0gQ09OVEVOVF9CT1ggPyBib3JkZXJBbmRQYWRkaW5nIDogMCkpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDggKzM5LDggQEAg
cHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBJbnRTaXplIGludHJpbnNpY1NpemUoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNlZFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRo
ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgY2FsY1JlcGxhY2VkSGVpZ2h0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4
V2lkdGggPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRIZWln
aHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25z
dCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2Vs
ZWN0aW9uU3RhdGUpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJldmlz
aW9uIDY4MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBSZW5kZXJTVkdSb290OjpjYWxjUHJlZldp
ZHRocygpCiAgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKIAogICAgIGludCBib3JkZXJB
bmRQYWRkaW5nID0gYm9yZGVyQW5kUGFkZGluZ1dpZHRoKCk7Ci0gICAgaW50IHdpZHRoID0gY2Fs
Y1JlcGxhY2VkV2lkdGgoZmFsc2UpICsgYm9yZGVyQW5kUGFkZGluZzsKKyAgICBpbnQgd2lkdGgg
PSBjb21wdXRlUmVwbGFjZWRXaWR0aChmYWxzZSkgKyBib3JkZXJBbmRQYWRkaW5nOwogCiAgICAg
aWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpCiAgICAgICAgIHdpZHRoID0gbWluKHdpZHRoLCBz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgKyAoc3R5bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09O
VEVOVF9CT1ggPyBib3JkZXJBbmRQYWRkaW5nIDogMCkpOwpAQCAtODIsOSArODIsOSBAQCB2b2lk
IFJlbmRlclNWR1Jvb3Q6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBzZXRQcmVmV2lkdGhzRGlydHko
ZmFsc2UpOwogfQogCi1pbnQgUmVuZGVyU1ZHUm9vdDo6Y2FsY1JlcGxhY2VkV2lkdGgoYm9vbCBp
bmNsdWRlTWF4V2lkdGgpIGNvbnN0CitpbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2Vk
V2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CiB7Ci0gICAgaW50IHJlcGxhY2VkV2lk
dGggPSBSZW5kZXJCb3g6OmNhbGNSZXBsYWNlZFdpZHRoKGluY2x1ZGVNYXhXaWR0aCk7CisgICAg
aW50IHJlcGxhY2VkV2lkdGggPSBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZFdpZHRoKGluY2x1
ZGVNYXhXaWR0aCk7CiAgICAgaWYgKCFzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpKQogICAg
ICAgICByZXR1cm4gcmVwbGFjZWRXaWR0aDsKIApAQCAtOTMsOSArOTMsOSBAQCBpbnQgUmVuZGVy
U1ZHUm9vdDo6Y2FsY1JlcGxhY2VkV2lkdGgoYm9vCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4ocm91bmRmKHJlcGxhY2VkV2lkdGggKiBzdmctPmN1cnJlbnRTY2FsZSgpKSk7CiB9CiAKLWlu
dCBSZW5kZXJTVkdSb290OjpjYWxjUmVwbGFjZWRIZWlnaHQoKSBjb25zdAoraW50IFJlbmRlclNW
R1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZEhlaWdodCgpIGNvbnN0CiB7Ci0gICAgaW50IHJlcGxhY2Vk
SGVpZ2h0ID0gUmVuZGVyQm94OjpjYWxjUmVwbGFjZWRIZWlnaHQoKTsKKyAgICBpbnQgcmVwbGFj
ZWRIZWlnaHQgPSBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZEhlaWdodCgpOwogICAgIGlmICgh
c3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpCiAgICAgICAgIHJldHVybiByZXBsYWNlZEhl
aWdodDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3QuaAkocmV2aXNpb24gNjgxNzQp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0LDggKzU0LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBsaW5lSGVpZ2h0KGJvb2wg
YiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGJh
c2VsaW5lUG9zaXRpb24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBpbnQgY2Fs
Y1JlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGludCBjYWxjUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBj
b21wdXRlUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCA9IHRydWUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IGNvbXB1dGVSZXBsYWNlZEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50
IHBhcmVudFgsIGludCBwYXJlbnRZKTsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwCShyZXZpc2lvbiA2ODIzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNsaWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NiwyMSArMTY2LDIxIEBAIHZvaWQgUmVuZGVyU2xpZGVy
OjpjYWxjUHJlZldpZHRocygpCiAgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgaWYgKHN0
eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDAp
Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJv
eFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRo
ID0gbV9tYXhQcmVmV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgp
LT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBk
ZWZhdWx0VHJhY2tMZW5ndGggKiBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKICAgICBpZiAo
c3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1
ZSgpID4gMCkgewotICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAg
ICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lk
dGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRo
ID0gbWF4KG1fbWF4UHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHls
ZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgo
bV9taW5QcmVmV2lkdGgsIGNvbXB1dGVDb250ZW50Qm94TG9naWNhbFdpZHRoKHN0eWxlKCktPm1p
bldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQo
KS5pc1BlcmNlbnQoKSkpCiAgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBlbHNlCiAg
ICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CiAgICAgCiAgICAgaWYgKHN0
eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9t
YXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpKSk7Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBt
X21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dp
Y2FsV2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJl
ZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0
aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQg
PSBib3JkZXJBbmRQYWRkaW5nV2lkdGgoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5j
cHAJKHJldmlzaW9uIDY4MjM4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cmVt
b3ZlQ2hpbGQoUmVuZGVyT2JqZQogdm9pZCBSZW5kZXJUYWJsZTo6Y29tcHV0ZUxvZ2ljYWxXaWR0
aCgpCiB7CiAgICAgaWYgKGlzUG9zaXRpb25lZCgpKQotICAgICAgICBjYWxjQWJzb2x1dGVIb3Jp
em9udGFsKCk7CisgICAgICAgIGNvbXB1dGVQb3NpdGlvbmVkTG9naWNhbFdpZHRoKCk7CiAKICAg
ICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKICAgICBpbnQgYXZhaWxhYmxl
V2lkdGggPSBjYi0+YXZhaWxhYmxlV2lkdGgoKTsKQEAgLTIzMSw3ICsyMzEsNyBAQCB2b2lkIFJl
bmRlclRhYmxlOjpjb21wdXRlTG9naWNhbFdpZHRoKCkKICAgICAvLyBGaW5hbGx5LCB3aXRoIG91
ciB0cnVlIHdpZHRoIGRldGVybWluZWQsIGNvbXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwuCiAg
ICAgbV9tYXJnaW5SaWdodCA9IDA7CiAgICAgbV9tYXJnaW5MZWZ0ID0gMDsKLSAgICBjYWxjSG9y
aXpvbnRhbE1hcmdpbnMoc3R5bGUoKS0+bWFyZ2luTGVmdCgpLCBzdHlsZSgpLT5tYXJnaW5SaWdo
dCgpLCBhdmFpbGFibGVXaWR0aCk7CisgICAgY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMo
c3R5bGUoKS0+bWFyZ2luTGVmdCgpLCBzdHlsZSgpLT5tYXJnaW5SaWdodCgpLCBhdmFpbGFibGVX
aWR0aCk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCkBAIC0zMjYsNyArMzI2LDcg
QEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgLy8gVGFibGVzIHNpemUgYXMg
dGhvdWdoIENTUyBoZWlnaHQgaW5jbHVkZXMgYm9yZGVyL3BhZGRpbmcuCiAgICAgICAgIHRoID0g
aC52YWx1ZSgpIC0gKGJwVG9wICsgYnBCb3R0b20pOwogICAgIGVsc2UgaWYgKGguaXNQZXJjZW50
KCkpCi0gICAgICAgIHRoID0gY2FsY1BlcmNlbnRhZ2VIZWlnaHQoaCk7CisgICAgICAgIHRoID0g
Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSGVpZ2h0KGgpOwogICAgIHRoID0gbWF4KDAsIHRoKTsK
IAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVJvdy5jcHAJKHJldmlzaW9uIDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZVJvdzo6bGF5b3V0KCkKICAgICAgICAgICAgICAgICBjZWxsLT5zZXRDaGlsZE5lZWRz
TGF5b3V0KHRydWUsIGZhbHNlKTsKIAogICAgICAgICAgICAgaWYgKGNoaWxkLT5uZWVkc0xheW91
dCgpKSB7Ci0gICAgICAgICAgICAgICAgY2VsbC0+Y2FsY1ZlcnRpY2FsTWFyZ2lucygpOworICAg
ICAgICAgICAgICAgIGNlbGwtPmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMoKTsKICAgICAg
ICAgICAgICAgICBjZWxsLT5sYXlvdXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNjgyMzgp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjYWxjUHJlZldp
ZHRocygpCiAgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRo
KCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1f
bWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxl
KCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVm
V2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZh
bHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBVc2UgYXZlcmFnZSBjaGFyYWN0ZXIgd2lk
dGguIE1hdGNoZXMgSUUuCiAgICAgICAgIEF0b21pY1N0cmluZyBmYW1pbHkgPSBzdHlsZSgpLT5m
b250KCkuZmFtaWx5KCkuZmFtaWx5KCk7CkBAIC01MjAsMTYgKzUyMCwxNiBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sOjpjYWxjUHJlZldpZHRocygpCiAgICAgfQogCiAgICAgaWYgKHN0eWxlKCkt
Pm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDAp
IHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNhbGNDb250
ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWlu
UHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxl
KCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heCht
X21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUoKS0+bWlu
V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJl
ZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgp
LnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkg
fHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJj
ZW50KCkpKQogICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7CiAgICAgZWxzZQogICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmlu
ZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgs
IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0
aCA9IG1pbihtX21heFByZWZXaWR0aCwgY29tcHV0ZUNvbnRlbnRCb3hMb2dpY2FsV2lkdGgoc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWlu
KG1fbWluUHJlZldpZHRoLCBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBib3JkZXJBbmRQ
YWRkaW5nV2lkdGgoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAJKHJldmlzaW9u
IDY4MTc0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDYsMTQgKzI0NiwxNCBAQCB2b2lkIFJlbmRlclZpZGVvOjp1cGRhdGVQbGF5ZXIo
KQogICAgIG1lZGlhUGxheWVyLT5zZXRWaXNpYmxlKHRydWUpOwogfQogCi1pbnQgUmVuZGVyVmlk
ZW86OmNhbGNSZXBsYWNlZFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAoraW50IFJl
bmRlclZpZGVvOjpjb21wdXRlUmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCkgY29u
c3QKIHsKLSAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNhbGNSZXBsYWNlZFdpZHRoKGluY2x1
ZGVNYXhXaWR0aCk7CisgICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRX
aWR0aChpbmNsdWRlTWF4V2lkdGgpOwogfQogCi1pbnQgUmVuZGVyVmlkZW86OmNhbGNSZXBsYWNl
ZEhlaWdodCgpIGNvbnN0CitpbnQgUmVuZGVyVmlkZW86OmNvbXB1dGVSZXBsYWNlZEhlaWdodCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjYWxjUmVwbGFjZWRIZWlnaHQo
KTsKKyAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWNlZEhlaWdodCgpOwog
fQogCiBpbnQgUmVuZGVyVmlkZW86Om1pbmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0IApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJWaWRlby5oCShyZXZpc2lvbiA2ODE3NCkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZGVvLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDggKzcwLDggQEAgcHJp
dmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgaW50IGNh
bGNSZXBsYWNlZFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBpbnQgY2FsY1JlcGxhY2VkSGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
Y29tcHV0ZVJlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0cnVlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGludCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAogICAgIHZvaWQgdXBkYXRl
UGxheWVyKCk7Cg==
</data>
<flag name="review"
          id="58216"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>