<?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>12394</bug_id>
          
          <creation_ts>2007-01-24 11:58:51 -0800</creation_ts>
          <short_desc>Cleanup RenderBox</short_desc>
          <delta_ts>2007-01-24 13:49:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>32869</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-24 11:58:51 -0800</bug_when>
    <thetext>Patch forthcoming!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32870</commentid>
    <comment_count>1</comment_count>
      <attachid>12644</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-24 12:01:12 -0800</bug_when>
    <thetext>Created attachment 12644
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32840</commentid>
    <comment_count>2</comment_count>
      <attachid>12644</attachid>
    <who name="">mitz</who>
    <bug_when>2007-01-24 12:53:27 -0800</bug_when>
    <thetext>Comment on attachment 12644
patch

-    if (isFloating() || (isCompact() &amp;&amp; isInline()) || 
+    if (isFloating() || (isCompact() &amp;&amp; isInline()) ||
         (isInlineBlockOrInlineTable() &amp;&amp; !isHTMLMarquee()))

In other places in this patch you moved the operator after the line break. Same here:

-            m_height = max(m_height, visHeight - 
-                            (margins + parent()-&gt;marginTop() + parent()-&gt;marginBottom() + 
+            m_height = max(m_height, visHeight -
+                            (margins + parent()-&gt;marginTop() + parent()-&gt;marginBottom() +

and here:

+        for (; !cb-&gt;isRenderView() &amp;&amp; !cb-&gt;isBody() &amp;&amp; !cb-&gt;isTableCell() &amp;&amp; !cb-&gt;isPositioned() &amp;&amp;
                 cb-&gt;style()-&gt;height().isAuto(); cb = cb-&gt;containingBlock());

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>32740</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-24 13:49:16 -0800</bug_when>
    <thetext>Landed in r19080.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12644</attachid>
            <date>2007-01-24 12:01:12 -0800</date>
            <delta_ts>2007-01-24 12:53:27 -0800</delta_ts>
            <desc>patch</desc>
            <filename>renderBoxCleaning.diff</filename>
            <type>text/plain</type>
            <size>69098</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTA3OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjkgQEAKKzIwMDctMDEtMjQgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQYXRjaCBm
b3IgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTQKKyAgICAgICAg
Q2xlYW51cCBSZW5kZXJCb3gKKworICAgICAgICBObyBmdW5jdGlvbmFsaXR5IGNoYW5nZXMsIGp1
c3QgYSBnb29kIG9sZCBmYXNoaW9uIGNsZWFudXAsCisgICAgICAgIHRodXMgbm8gdGVzdHMuCisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6UmVuZGVyQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpkZXN0cm95KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0UG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y2FsY0JvcmRlckJveFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY0Jv
cmRlckJveEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNDb250ZW50
Qm94V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQ29udGVudEJveEhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om5vZGVBdFBvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRSb290Qm94RGVjb3JhdGlvbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OnBhaW50QmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpjYWNsdWF0ZUJh
Y2tncm91bmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCYWNrZ3Jv
dW5kRXh0ZW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpnZXRPdmVyZmxvd0Ns
aXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Z2V0Q2xpcFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tXaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCb3g6OmFic29sdXRlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpkaXJ0eUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OnBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Z2V0QWJzb2x1dGVS
ZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0
ZVJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVwYWludER1cmlu
Z0xheW91dElmTW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpyZWxhdGl2ZVBv
c2l0aW9uT2Zmc2V0WCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnJlbGF0aXZlUG9z
aXRpb25PZmZzZXRZKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY1dpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY1dpZHRoVXNpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpzaXplc1RvSW50cmluc2ljV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjpjYWxjSG9yaXpvbnRhbE1hcmdpbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94OjpjYWxjSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6
Y2FsY1BlcmNlbnRhZ2VIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxj
UmVwbGFjZWRXaWR0aFVzaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY1Jl
cGxhY2VkSGVpZ2h0VXNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphdmFpbGFi
bGVIZWlnaHRVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNWZXJ0aWNh
bE1hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tX
aWR0aEZvclBvc2l0aW9uZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJz
b2x1dGVIb3Jpem9udGFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY0Fic29s
dXRlSG9yaXpvbnRhbFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNB
YnNvbHV0ZVZlcnRpY2FsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y2FsY0Fic29s
dXRlVmVydGljYWxWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJz
b2x1dGVIb3Jpem9udGFsUmVwbGFjZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
YXJldFJlY3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0T3ZlcnJpZGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJveDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRXaWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OnNldEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Omlu
bGluZUJveFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzZXRJbmxpbmVC
b3hXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c3RyZXRjaGVzVG9WaWV3
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2V0U3RhdGljWCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFN0YXRpY1kpOgorCiAyMDA3LTAxLTI0ICBFcmlj
IFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBhcC4KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMTkwNzkpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMiArMzQsMTEgQEAK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIlJlbmRlckFyZW5hLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKKyNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJl
bmRlclRoZW1lLmgiCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxtYXRoLmg+CiAKQEAgLTQ3LDcgKzQ2
LDggQEAKICNpbmNsdWRlICJGcmFtZU1hYy5oIgogI2VuZGlmCiAKLXVzaW5nIG5hbWVzcGFjZSBz
dGQ7Cit1c2luZyBzdGQ6Om1pbjsKK3VzaW5nIHN0ZDo6bWF4OwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTU1LDIxICs1NSwyMiBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBS
ZW5kZXJCb3g6OlJlbmRlckJveChOb2RlKiBub2RlKQogICAgIDogUmVuZGVyT2JqZWN0KG5vZGUp
CisgICAgLCBtX3dpZHRoKDApCisgICAgLCBtX2hlaWdodCgwKQorICAgICwgbV94KDApCisgICAg
LCBtX3koMCkKKyAgICAsIG1fbWFyZ2luTGVmdCgwKQorICAgICwgbV9tYXJnaW5SaWdodCgwKQor
ICAgICwgbV9tYXJnaW5Ub3AoMCkKKyAgICAsIG1fbWFyZ2luQm90dG9tKDApCisgICAgLCBtX21p
bldpZHRoKC0xKQorICAgICwgbV9tYXhXaWR0aCgtMSkKKyAgICAsIG1fbGF5ZXIoMCkKKyAgICAs
IG1faW5saW5lQm94V3JhcHBlcigwKQorICAgICwgbV9vdmVycmlkZVNpemUoLTEpCisgICAgLCBt
X3N0YXRpY1goMCkKKyAgICAsIG1fc3RhdGljWSgwKQogewotICAgIG1fbWluV2lkdGggPSAtMTsK
LSAgICBtX21heFdpZHRoID0gLTE7Ci0gICAgbV9vdmVycmlkZVNpemUgPSAtMTsKLSAgICBtX3dp
ZHRoID0gbV9oZWlnaHQgPSAwOwotICAgIG1feCA9IDA7Ci0gICAgbV95ID0gMDsKLSAgICBtX21h
cmdpblRvcCA9IDA7Ci0gICAgbV9tYXJnaW5Cb3R0b20gPSAwOwotICAgIG1fbWFyZ2luTGVmdCA9
IDA7Ci0gICAgbV9tYXJnaW5SaWdodCA9IDA7Ci0gICAgbV9zdGF0aWNYID0gMDsKLSAgICBtX3N0
YXRpY1kgPSAwOwotICAgIG1fbGF5ZXIgPSAwOwotICAgIG1faW5saW5lQm94V3JhcHBlciA9IDA7
CiB9CiAKIHN0YXRpYyBSZW5kZXJCbG9jayogYmxvY2tUaGF0UGFpbnRzRmxvYXQoUmVuZGVyT2Jq
ZWN0KiBmKQpAQCAtMTM2LDcgKzEzNyw3IEBAIHZvaWQgUmVuZGVyQm94OjpzZXRTdHlsZShSZW5k
ZXJTdHlsZSogbmUKICAgICAgICAgICAgICAgICBtX2xheWVyLT51cGRhdGVMYXllclBvc2l0aW9u
cygpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2xheWVyICYmICFpc1Jvb3QoKSAmJiAh
aXNSZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgYXNzZXJ0KG1fbGF5ZXItPnBhcmVudCgpKTsKKyAg
ICAgICAgQVNTRVJUKG1fbGF5ZXItPnBhcmVudCgpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gbV9sYXllcjsKICAgICAgICAgbV9sYXllciA9IDA7CiAgICAgICAgIGxheWVyLT5yZW1v
dmVPbmx5VGhpc0xheWVyKCk7CkBAIC0xNDgsMTEgKzE0OSwxMSBAQCB2b2lkIFJlbmRlckJveDo6
c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5lCiAKICAgICBpZiAobV9sYXllcikKICAgICAgICAgbV9s
YXllci0+c3R5bGVDaGFuZ2VkKCk7Ci0gICAgCisKICAgICAvLyBTZXQgdGhlIHRleHQgY29sb3Ig
aWYgd2UncmUgdGhlIGJvZHkuCiAgICAgaWYgKGlzQm9keSgpKQogICAgICAgICBlbGVtZW50KCkt
PmRvY3VtZW50KCktPnNldFRleHRDb2xvcihuZXdTdHlsZS0+Y29sb3IoKSk7Ci0gICAgCisKICAg
ICBpZiAoc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgPiAwICYmIHN0eWxlKCktPm91dGxpbmVTaXpl
KCkgPiBtYXhpbWFsT3V0bGluZVNpemUoUGFpbnRQaGFzZU91dGxpbmUpKQogICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJWaWV3Kj4oZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSktPnNldE1heGltYWxP
dXRsaW5lU2l6ZShzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpKTsKIH0KQEAgLTE2NSwxNyArMTY2LDE3
IEBAIHZvaWQgUmVuZGVyQm94OjpkZXN0cm95KCkKIHsKICAgICAvLyBBIGxvdCBvZiB0aGUgY29k
ZSBpbiB0aGlzIGZ1bnRpb24gaXMganVzdCBwYXN0ZWQgaW50bwogICAgIC8vIFJlbmRlcldpZGdl
dDo6ZGVzdHJveS4gSWYgYW55dGhpbmcgaW4gdGhpcyBmdW5jdGlvbiBjaGFuZ2VzLAotICAgIC8v
IGJlIHN1cmUgdG8gZml4IFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIGFzIHdlbGwuIAorICAgIC8v
IGJlIHN1cmUgdG8gZml4IFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIGFzIHdlbGwuCiAKICAgICBS
ZW5kZXJMYXllciogbGF5ZXIgPSBtX2xheWVyOwogICAgIFJlbmRlckFyZW5hKiBhcmVuYSA9IHJl
bmRlckFyZW5hKCk7Ci0gICAgCisKICAgICAvLyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgd2Ug
ZGVzdHJveSB0aGUgUmVuZGVyT2JqZWN0LgogICAgIGlmIChsYXllcikKICAgICAgICAgbGF5ZXIt
PmNsZWFyQ2xpcFJlY3QoKTsKIAogICAgIFJlbmRlck9iamVjdDo6ZGVzdHJveSgpOwotICAgIAor
CiAgICAgaWYgKGxheWVyKQogICAgICAgICBsYXllci0+ZGVzdHJveShhcmVuYSk7CiB9CkBAIC0x
OTIsNTEgKzE5Myw0MiBAQCBpbnQgUmVuZGVyQm94OjpvdmVycmlkZUhlaWdodCgpIGNvbnN0CiAK
IHZvaWQgUmVuZGVyQm94OjpzZXRQb3MoaW50IHhQb3MsIGludCB5UG9zKQogeworICAgIC8vIE9w
dGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBkb24ndCBtb3ZlIGF0IGFsbC4KICAgICBpZiAo
eFBvcyA9PSBtX3ggJiYgeVBvcyA9PSBtX3kpCi0gICAgICAgIHJldHVybjsgLy8gT3B0aW1pemUg
Zm9yIHRoZSBjYXNlIHdoZXJlIHdlIGRvbid0IG1vdmUgYXQgYWxsLgotICAgIAorICAgICAgICBy
ZXR1cm47CisKICAgICBtX3ggPSB4UG9zOwogICAgIG1feSA9IHlQb3M7CiB9CiAKLWludCBSZW5k
ZXJCb3g6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV93aWR0aDsKLX0KLQotaW50IFJl
bmRlckJveDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oZWlnaHQ7Ci19Ci0KLWlu
dCBSZW5kZXJCb3g6OmNhbGNCb3JkZXJCb3hXaWR0aChpbnQgdykgY29uc3QKK2ludCBSZW5kZXJC
b3g6OmNhbGNCb3JkZXJCb3hXaWR0aChpbnQgd2lkdGgpIGNvbnN0CiB7Ci0gICAgaW50IHRvQWRk
ID0gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5n
UmlnaHQoKTsKKyAgICBpbnQgYm9yZGVyc1BsdXNQYWRkaW5nID0gYm9yZGVyTGVmdCgpICsgYm9y
ZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKICAgICBpZiAoc3R5
bGUoKS0+Ym94U2l6aW5nKCkgPT0gQ09OVEVOVF9CT1gpCi0gICAgICAgIHJldHVybiB3ICsgdG9B
ZGQ7Ci0gICAgcmV0dXJuIG1heCh3LCB0b0FkZCk7CisgICAgICAgIHJldHVybiB3aWR0aCArIGJv
cmRlcnNQbHVzUGFkZGluZzsKKyAgICByZXR1cm4gbWF4KHdpZHRoLCBib3JkZXJzUGx1c1BhZGRp
bmcpOwogfQogCi1pbnQgUmVuZGVyQm94OjpjYWxjQm9yZGVyQm94SGVpZ2h0KGludCBoKSBjb25z
dAoraW50IFJlbmRlckJveDo6Y2FsY0JvcmRlckJveEhlaWdodChpbnQgaGVpZ2h0KSBjb25zdAog
ewotICAgIGludCB0b0FkZCA9IGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5n
VG9wKCkgKyBwYWRkaW5nQm90dG9tKCk7CisgICAgaW50IGJvcmRlcnNQbHVzUGFkZGluZyA9IGJv
cmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9t
KCk7CiAgICAgaWYgKHN0eWxlKCktPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQotICAgICAg
ICByZXR1cm4gaCArIHRvQWRkOwotICAgIHJldHVybiBtYXgoaCwgdG9BZGQpOworICAgICAgICBy
ZXR1cm4gaGVpZ2h0ICsgYm9yZGVyc1BsdXNQYWRkaW5nOworICAgIHJldHVybiBtYXgoaGVpZ2h0
LCBib3JkZXJzUGx1c1BhZGRpbmcpOwogfQogCi1pbnQgUmVuZGVyQm94OjpjYWxjQ29udGVudEJv
eFdpZHRoKGludCB3KSBjb25zdAoraW50IFJlbmRlckJveDo6Y2FsY0NvbnRlbnRCb3hXaWR0aChp
bnQgd2lkdGgpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlKCktPmJveFNpemluZygpID09IEJPUkRF
Ul9CT1gpCi0gICAgICAgIHcgLT0gKGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRk
aW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkpOwotICAgIHJldHVybiBtYXgoMCwgdyk7CisgICAg
ICAgIHdpZHRoIC09IChib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQo
KSArIHBhZGRpbmdSaWdodCgpKTsKKyAgICByZXR1cm4gbWF4KDAsIHdpZHRoKTsKIH0KIAotaW50
IFJlbmRlckJveDo6Y2FsY0NvbnRlbnRCb3hIZWlnaHQoaW50IGgpIGNvbnN0CitpbnQgUmVuZGVy
Qm94OjpjYWxjQ29udGVudEJveEhlaWdodChpbnQgaGVpZ2h0KSBjb25zdAogewogICAgIGlmIChz
dHlsZSgpLT5ib3hTaXppbmcoKSA9PSBCT1JERVJfQk9YKQotICAgICAgICBoIC09IChib3JkZXJU
b3AoKSArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgpKTsK
LSAgICByZXR1cm4gbWF4KDAsIGgpOworICAgICAgICBoZWlnaHQgLT0gKGJvcmRlclRvcCgpICsg
Ym9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBwYWRkaW5nQm90dG9tKCkpOworICAgIHJl
dHVybiBtYXgoMCwgaGVpZ2h0KTsKIH0KIAogLy8gSGl0IFRlc3RpbmcKQEAgLTI1Niw3ICsyNDgs
NyBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIENoZWNrIG91
ciBib3VuZHMgbmV4dC4gRm9yIHRoaXMgcHVycG9zZSBhbHdheXMgYXNzdW1lIHRoYXQgd2UgY2Fu
IG9ubHkgYmUgaGl0IGluIHRoZQogICAgIC8vIGZvcmVncm91bmQgcGhhc2UgKHdoaWNoIGlzIHRy
dWUgZm9yIHJlcGxhY2VkIGVsZW1lbnRzIGxpa2UgaW1hZ2VzKS4KICAgICBpZiAoYWN0aW9uID09
IEhpdFRlc3RGb3JlZ3JvdW5kICYmIEludFJlY3QodHgsIHR5LCBtX3dpZHRoLCBtX2hlaWdodCku
Y29udGFpbnMoeCwgeSkpIHsKQEAgLTMwMSw3ICsyOTMsOCBAQCB2b2lkIFJlbmRlckJveDo6cGFp
bnRSb290Qm94RGVjb3JhdGlvbnMoCiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0g
aGVpZ2h0KCk7CiAKLSAgICBpbnQgcncsIHJoOworICAgIGludCBydzsKKyAgICBpbnQgcmg7CiAg
ICAgaWYgKHZpZXcoKS0+ZnJhbWVWaWV3KCkpIHsKICAgICAgICAgcncgPSB2aWV3KCktPmZyYW1l
VmlldygpLT5jb250ZW50c1dpZHRoKCk7CiAgICAgICAgIHJoID0gdmlldygpLT5mcmFtZVZpZXco
KS0+Y29udGVudHNIZWlnaHQoKTsKQEAgLTMzMiw4ICszMjUsMTAgQEAgdm9pZCBSZW5kZXJCb3g6
OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbgogICAgIGlmICghc2hvdWxkUGFpbnRXaXRoaW5Sb290
KHBhaW50SW5mbykpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpc1Jvb3QoKSkKLSAgICAg
ICAgcmV0dXJuIHBhaW50Um9vdEJveERlY29yYXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKKyAg
ICBpZiAoaXNSb290KCkpIHsKKyAgICAgICAgcGFpbnRSb290Qm94RGVjb3JhdGlvbnMocGFpbnRJ
bmZvLCB0eCwgdHkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaW50IHcgPSB3aWR0
aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90
dG9tRXh0cmEoKTsKQEAgLTM1MCw3ICszNDUsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hE
ZWNvcmF0aW9ucyhQYWluCiAgICAgLy8gY3VzdG9tIHNoYWRvd3Mgb2YgdGhlaXIgb3duLgogICAg
IHBhaW50Qm94U2hhZG93KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCkp
OwogCi0gICAgLy8gSWYgd2UgaGF2ZSBhIG5hdGl2ZSB0aGVtZSBhcHBlYXJhbmNlLCBwYWludCB0
aGF0IGJlZm9yZSBwYWludGluZyBvdXIgYmFja2dyb3VuZC4gIAorICAgIC8vIElmIHdlIGhhdmUg
YSBuYXRpdmUgdGhlbWUgYXBwZWFyYW5jZSwgcGFpbnQgdGhhdCBiZWZvcmUgcGFpbnRpbmcgb3Vy
IGJhY2tncm91bmQuCiAgICAgLy8gVGhlIHRoZW1lIHdpbGwgdGVsbCB1cyB3aGV0aGVyIG9yIG5v
dCB3ZSBzaG91bGQgYWxzbyBwYWludCB0aGUgQ1NTIGJhY2tncm91bmQuCiAgICAgYm9vbCB0aGVt
ZVBhaW50ZWQgPSBzdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCktPnBhaW50KHRo
aXMsIHBhaW50SW5mbywgSW50UmVjdCh0eCwgdHksIHcsIGgpKTsKICAgICBpZiAoIXRoZW1lUGFp
bnRlZCkgewpAQCAtMzY4LDI2ICszNjMsMzAgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVj
b3JhdGlvbnMoUGFpbgogICAgICAgICBwYWludEJvcmRlcihwYWludEluZm8uY29udGV4dCwgdHgs
IHR5LCB3LCBoLCBzdHlsZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnBhaW50QmFja2dyb3Vu
ZHMoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBDb2xvciYgYywgY29uc3QgQmFja2dyb3VuZExh
eWVyKiBiZ0xheWVyLCBpbnQgY2xpcHksIGludCBjbGlwaCwgaW50IF90eCwgaW50IF90eSwgaW50
IHcsIGludCBoZWlnaHQpCit2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kcyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIq
IGJnTGF5ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpcFksIGlu
dCBjbGlwSCwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBp
ZiAoIWJnTGF5ZXIpIHJldHVybjsKLSAgICBwYWludEJhY2tncm91bmRzKHAsIGMsIGJnTGF5ZXIt
Pm5leHQoKSwgY2xpcHksIGNsaXBoLCBfdHgsIF90eSwgdywgaGVpZ2h0KTsKLSAgICBwYWludEJh
Y2tncm91bmQocCwgYywgYmdMYXllciwgY2xpcHksIGNsaXBoLCBfdHgsIF90eSwgdywgaGVpZ2h0
KTsKKyAgICBpZiAoIWJnTGF5ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIHBhaW50QmFja2dy
b3VuZHMoY29udGV4dCwgYywgYmdMYXllci0+bmV4dCgpLCBjbGlwWSwgY2xpcEgsIHR4LCB0eSwg
d2lkdGgsIGhlaWdodCk7CisgICAgcGFpbnRCYWNrZ3JvdW5kKGNvbnRleHQsIGMsIGJnTGF5ZXIs
IGNsaXBZLCBjbGlwSCwgdHgsIHR5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBSZW5kZXJC
b3g6OnBhaW50QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IENvbG9yJiBjLCBj
b25zdCBCYWNrZ3JvdW5kTGF5ZXIqIGJnTGF5ZXIsIGludCBjbGlweSwgaW50IGNsaXBoLCBpbnQg
X3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGhlaWdodCkKK3ZvaWQgUmVuZGVyQm94OjpwYWludEJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBDb2xvciYgYywgY29uc3Qg
QmFja2dyb3VuZExheWVyKiBiZ0xheWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY2xpcFksIGludCBjbGlwSCwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgaW50IGhl
aWdodCkKIHsKLSAgICBwYWludEJhY2tncm91bmRFeHRlbmRlZChwLCBjLCBiZ0xheWVyLCBjbGlw
eSwgY2xpcGgsIF90eCwgX3R5LCB3LCBoZWlnaHQpOworICAgIHBhaW50QmFja2dyb3VuZEV4dGVu
ZGVkKGNvbnRleHQsIGMsIGJnTGF5ZXIsIGNsaXBZLCBjbGlwSCwgdHgsIHR5LCB3aWR0aCwgaGVp
Z2h0KTsKIH0KIAogc3RhdGljIHZvaWQgY2FjbHVhdGVCYWNrZ3JvdW5kU2l6ZShjb25zdCBCYWNr
Z3JvdW5kTGF5ZXIqIGJnTGF5ZXIsIGludCYgc2NhbGVkV2lkdGgsIGludCYgc2NhbGVkSGVpZ2h0
KQogewogICAgIENhY2hlZEltYWdlKiBiZyA9IGJnTGF5ZXItPmJhY2tncm91bmRJbWFnZSgpOwot
ICAgIAorCiAgICAgaWYgKGJnTGF5ZXItPmlzQmFja2dyb3VuZFNpemVTZXQoKSkgewogICAgICAg
ICBMZW5ndGggYmdXaWR0aCA9IGJnTGF5ZXItPmJhY2tncm91bmRTaXplKCkud2lkdGg7CiAgICAg
ICAgIExlbmd0aCBiZ0hlaWdodCA9IGJnTGF5ZXItPmJhY2tncm91bmRTaXplKCkuaGVpZ2h0Owot
ICAgICAgICAKKwogICAgICAgICBpZiAoYmdXaWR0aC5pc1BlcmNlbnQoKSkKICAgICAgICAgICAg
IHNjYWxlZFdpZHRoID0gYmdXaWR0aC5jYWxjVmFsdWUoc2NhbGVkV2lkdGgpOwogICAgICAgICBl
bHNlIGlmIChiZ1dpZHRoLmlzRml4ZWQoKSkKQEAgLTQwMSw3ICs0MDAsNyBAQCBzdGF0aWMgdm9p
ZCBjYWNsdWF0ZUJhY2tncm91bmRTaXplKGNvbnN0CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGJn
SGVpZ2h0LmlzRml4ZWQoKSkKICAgICAgICAgICAgICAgICBzY2FsZWRXaWR0aCA9IGJnLT5pbWFn
ZVNpemUoKS53aWR0aCgpICogYmdIZWlnaHQudmFsdWUoKSAvIGJnLT5pbWFnZVNpemUoKS5oZWln
aHQoKTsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgaWYgKGJnSGVpZ2h0Lmlz
UGVyY2VudCgpKQogICAgICAgICAgICAgc2NhbGVkSGVpZ2h0ID0gYmdIZWlnaHQuY2FsY1ZhbHVl
KHNjYWxlZEhlaWdodCk7CiAgICAgICAgIGVsc2UgaWYgKGJnSGVpZ2h0LmlzRml4ZWQoKSkKQEAg
LTQyNiw0MCArNDI1LDQwIEBAIHN0YXRpYyB2b2lkIGNhY2x1YXRlQmFja2dyb3VuZFNpemUoY29u
c3QKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZChH
cmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IENvbG9yJiBjLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIq
IGJnTGF5ZXIsIGludCBjbGlweSwgaW50IGNsaXBoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfdHgsIGludCBfdHksIGludCB3LCBpbnQgaCwgYm9vbCBpbmNs
dWRlTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSkKK3ZvaWQgUmVuZGVyQm94OjpwYWlu
dEJhY2tncm91bmRFeHRlbmRlZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IENvbG9y
JiBjLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIqIGJnTGF5ZXIsIGludCBjbGlwWSwgaW50IGNsaXBI
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eCwgaW50IHR5
LCBpbnQgdywgaW50IGgsIGJvb2wgaW5jbHVkZUxlZnRFZGdlLCBib29sIGluY2x1ZGVSaWdodEVk
Z2UpCiB7Ci0gICAgaW50IGJsZWZ0ID0gaW5jbHVkZUxlZnRFZGdlID8gYm9yZGVyTGVmdCgpIDog
MDsKLSAgICBpbnQgYnJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IGJvcmRlclJpZ2h0KCkgOiAw
OwotICAgIGludCBwbGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IHBhZGRpbmdMZWZ0KCkgOiAwOwot
ICAgIGludCBwcmlnaHQgPSBpbmNsdWRlUmlnaHRFZGdlID8gcGFkZGluZ1JpZ2h0KCkgOiAwOwor
ICAgIGludCBiTGVmdCA9IGluY2x1ZGVMZWZ0RWRnZSA/IGJvcmRlckxlZnQoKSA6IDA7CisgICAg
aW50IGJSaWdodCA9IGluY2x1ZGVSaWdodEVkZ2UgPyBib3JkZXJSaWdodCgpIDogMDsKKyAgICBp
bnQgcExlZnQgPSBpbmNsdWRlTGVmdEVkZ2UgPyBwYWRkaW5nTGVmdCgpIDogMDsKKyAgICBpbnQg
cFJpZ2h0ID0gaW5jbHVkZVJpZ2h0RWRnZSA/IHBhZGRpbmdSaWdodCgpIDogMDsKIAogICAgIGJv
b2wgY2xpcHBlZFRvQm9yZGVyUmFkaXVzID0gZmFsc2U7CiAgICAgaWYgKHN0eWxlKCktPmhhc0Jv
cmRlclJhZGl1cygpICYmIChpbmNsdWRlTGVmdEVkZ2UgfHwgaW5jbHVkZVJpZ2h0RWRnZSkpIHsK
LSAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICBwLT5hZGRSb3VuZGVkUmVjdENsaXAoSW50UmVj
dChfdHgsIF90eSwgdywgaCksCisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgY29u
dGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKEludFJlY3QodHgsIHR5LCB3LCBoKSwKICAgICAgICAg
ICAgIGluY2x1ZGVMZWZ0RWRnZSA/IHN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSA6IElu
dFNpemUoKSwKICAgICAgICAgICAgIGluY2x1ZGVSaWdodEVkZ2UgPyBzdHlsZSgpLT5ib3JkZXJU
b3BSaWdodFJhZGl1cygpIDogSW50U2l6ZSgpLAogICAgICAgICAgICAgaW5jbHVkZUxlZnRFZGdl
ID8gc3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpIDogSW50U2l6ZSgpLAogICAgICAg
ICAgICAgaW5jbHVkZVJpZ2h0RWRnZSA/IHN0eWxlKCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
KCkgOiBJbnRTaXplKCkpOwogICAgICAgICBjbGlwcGVkVG9Cb3JkZXJSYWRpdXMgPSB0cnVlOwog
ICAgIH0KLSAgICAKKwogICAgIGlmIChiZ0xheWVyLT5iYWNrZ3JvdW5kQ2xpcCgpICE9IEJHQk9S
REVSKSB7CiAgICAgICAgIC8vIENsaXAgdG8gdGhlIHBhZGRpbmcgb3IgY29udGVudCBib3hlcyBh
cyBuZWNlc3NhcnkuCiAgICAgICAgIGJvb2wgaW5jbHVkZVBhZGRpbmcgPSBiZ0xheWVyLT5iYWNr
Z3JvdW5kQ2xpcCgpID09IEJHQ09OVEVOVDsKLSAgICAgICAgaW50IHggPSBfdHggKyBibGVmdCAr
IChpbmNsdWRlUGFkZGluZyA/IHBsZWZ0IDogMCk7Ci0gICAgICAgIGludCB5ID0gX3R5ICsgYm9y
ZGVyVG9wKCkgKyAoaW5jbHVkZVBhZGRpbmcgPyBwYWRkaW5nVG9wKCkgOiAwKTsKLSAgICAgICAg
aW50IHdpZHRoID0gdyAtIGJsZWZ0IC0gYnJpZ2h0IC0gKGluY2x1ZGVQYWRkaW5nID8gcGxlZnQg
KyBwcmlnaHQgOiAwKTsKKyAgICAgICAgaW50IHggPSB0eCArIGJMZWZ0ICsgKGluY2x1ZGVQYWRk
aW5nID8gcExlZnQgOiAwKTsKKyAgICAgICAgaW50IHkgPSB0eSArIGJvcmRlclRvcCgpICsgKGlu
Y2x1ZGVQYWRkaW5nID8gcGFkZGluZ1RvcCgpIDogMCk7CisgICAgICAgIGludCB3aWR0aCA9IHcg
LSBiTGVmdCAtIGJSaWdodCAtIChpbmNsdWRlUGFkZGluZyA/IHBMZWZ0ICsgcFJpZ2h0IDogMCk7
CiAgICAgICAgIGludCBoZWlnaHQgPSBoIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAt
IChpbmNsdWRlUGFkZGluZyA/IHBhZGRpbmdUb3AoKSArIHBhZGRpbmdCb3R0b20oKSA6IDApOwot
ICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPmNsaXAoSW50UmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KSk7CisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgY29udGV4dC0+Y2xp
cChJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKICAgICB9CiAKICAgICBDYWNoZWRJbWFn
ZSogYmcgPSBiZ0xheWVyLT5iYWNrZ3JvdW5kSW1hZ2UoKTsKICAgICBib29sIHNob3VsZFBhaW50
QmFja2dyb3VuZEltYWdlID0gYmcgJiYgYmctPmNhblJlbmRlcigpOwogICAgIENvbG9yIGJnQ29s
b3IgPSBjOwotICAgIAorCiAgICAgLy8gV2hlbiB0aGlzIHN0eWxlIGZsYWcgaXMgc2V0LCBjaGFu
Z2UgZXhpc3RpbmcgYmFja2dyb3VuZCBjb2xvcnMgYW5kIGltYWdlcyB0byBhIHNvbGlkIHdoaXRl
IGJhY2tncm91bmQuCiAgICAgLy8gSWYgdGhlcmUncyBubyBiZyBjb2xvciBvciBpbWFnZSwgbGVh
dmUgaXQgdW50b3VjaGVkIHRvIGF2b2lkIGFmZmVjdGluZyB0cmFuc3BhcmVuY3kuCiAgICAgLy8g
V2UgZG9uJ3QgdHJ5IHRvIGF2b2lkIGxvYWRpbmcgdGhlIGJhY2tncm91bmQgaW1hZ2VzLCBiZWNh
dXNlIHRoaXMgc3R5bGUgZmxhZyBpcyBvbmx5IHNldApAQCAtNDgxLDkgKzQ4MCw3IEBAIHZvaWQg
UmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICBpZiAoIWJnTGF5ZXItPm5l
eHQoKSAmJiBpc1Jvb3QoKSAmJiAhKGJnQ29sb3IuaXNWYWxpZCgpICYmIGJnQ29sb3IuYWxwaGEo
KSA+IDApICYmIHZpZXcoKS0+ZnJhbWVWaWV3KCkpIHsKICAgICAgICAgTm9kZSogZWx0ID0gZG9j
dW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CiAgICAgICAgIGlmIChlbHQpIHsKLSAgICAgICAgICAg
IGlmIChlbHQtPmhhc1RhZ05hbWUoZnJhbWVUYWcpKQotICAgICAgICAgICAgICAgIGlzVHJhbnNw
YXJlbnQgPSBmYWxzZTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCFlbHQt
Pmhhc1RhZ05hbWUoZnJhbWVUYWcpKSB7CiAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSA8
Ym9keT4gZWxlbWVudCB1c2luZyB0aGUgRE9NLiAgVGhpcyBpcyBlYXNpZXIgdGhhbiB0cnlpbmcK
ICAgICAgICAgICAgICAgICAvLyB0byBjcmF3bCBhcm91bmQgYSByZW5kZXIgdHJlZSB3aXRoIHBv
dGVudGlhbCA6YmVmb3JlLzphZnRlciBjb250ZW50IGFuZAogICAgICAgICAgICAgICAgIC8vIGFu
b255bW91cyBibG9ja3MgY3JlYXRlZCBieSBpbmxpbmUgPGJvZHk+IHRhZ3MgZXRjLiAgV2UgY2Fu
IGxvY2F0ZSB0aGUgPGJvZHk+CkBAIC00OTMsNTkgKzQ5MCw2NCBAQCB2b2lkIFJlbmRlckJveDo6
cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9IHZpZXcoKS0+ZnJhbWVWaWV3KCktPmlzVHJhbnNw
YXJlbnQoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGlzVHJhbnNwYXJlbnQpCiAgICAgICAg
ICAgICB2aWV3KCktPmZyYW1lVmlldygpLT5zZXRVc2VTbG93UmVwYWludHMoKTsgLy8gVGhlIHBh
cmVudCBtdXN0IHNob3cgYmVoaW5kIHRoZSBjaGlsZC4KICAgICB9CiAKICAgICAvLyBQYWludCB0
aGUgY29sb3IgZmlyc3QgdW5kZXJuZWF0aCBhbGwgaW1hZ2VzLgogICAgIGlmICghYmdMYXllci0+
bmV4dCgpKSB7Ci0gICAgICAgIEludFJlY3QgcmVjdChfdHgsIGNsaXB5LCB3LCBjbGlwaCk7Cisg
ICAgICAgIEludFJlY3QgcmVjdCh0eCwgY2xpcFksIHcsIGNsaXBIKTsKICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBhbiBhbHBoYSBhbmQgd2UgYXJlIHBhaW50aW5nIHRoZSByb290IGVsZW1lbnQsIGdv
IGFoZWFkIGFuZCBibGVuZCB3aXRoIHRoZSBiYXNlIGJhY2tncm91bmQgY29sb3IuCiAgICAgICAg
IGlmIChpc1Jvb3QoKSAmJiAoIWJnQ29sb3IuaXNWYWxpZCgpIHx8IGJnQ29sb3IuYWxwaGEoKSA8
IDB4RkYpICYmICFpc1RyYW5zcGFyZW50KSB7CiAgICAgICAgICAgICBDb2xvciBiYXNlQ29sb3Ig
PSB2aWV3KCktPmZyYW1lVmlldygpLT5iYXNlQmFja2dyb3VuZENvbG9yKCk7CiAgICAgICAgICAg
ICBpZiAoYmFzZUNvbG9yLmFscGhhKCkgPiAwKSB7Ci0gICAgICAgICAgICAgICAgcC0+c2F2ZSgp
OwotICAgICAgICAgICAgICAgIHAtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5
KTsKLSAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBiYXNlQ29sb3IpOwotICAgICAg
ICAgICAgICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zYXZlKCk7
CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZUNvcHkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHJlY3QsIGJhc2VDb2xv
cik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgcC0+Y2xlYXJSZWN0KHJlY3QpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmNsZWFyUmVjdChyZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChiZ0Nv
bG9yLmlzVmFsaWQoKSAmJiBiZ0NvbG9yLmFscGhhKCkgPiAwKQotICAgICAgICAgICAgcC0+Zmls
bFJlY3QocmVjdCwgYmdDb2xvcik7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChyZWN0
LCBiZ0NvbG9yKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBubyBwcm9ncmVzc2l2ZSBsb2FkaW5n
IG9mIHRoZSBiYWNrZ3JvdW5kIGltYWdlCiAgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZElt
YWdlKSB7CiAgICAgICAgIGludCBzeCA9IDA7CiAgICAgICAgIGludCBzeSA9IDA7Ci0gICAgICAg
IGludCBjdyxjaDsKLSAgICAgICAgaW50IGN4LGN5OwotICAgICAgICBpbnQgc2NhbGVkSW1hZ2VX
aWR0aCwgc2NhbGVkSW1hZ2VIZWlnaHQ7CisgICAgICAgIGludCBjdzsKKyAgICAgICAgaW50IGNo
OworICAgICAgICBpbnQgY3g7CisgICAgICAgIGludCBjeTsKKyAgICAgICAgaW50IHNjYWxlZElt
YWdlV2lkdGg7CisgICAgICAgIGludCBzY2FsZWRJbWFnZUhlaWdodDsKIAotICAgICAgICAKICAg
ICAgICAgLy8gQ1NTMiBjaGFwdGVyIDE0LjIuMQogCiAgICAgICAgIGlmIChiZ0xheWVyLT5iYWNr
Z3JvdW5kQXR0YWNobWVudCgpKSB7CiAgICAgICAgICAgICAvLyBzY3JvbGwKLSAgICAgICAgICAg
IGludCBocGFiID0gMCwgdnBhYiA9IDAsIGxlZnQgPSAwLCB0b3AgPSAwOyAvLyBJbml0IHRvIDAg
Zm9yIGJhY2tncm91bmQtb3JpZ2luIG9mICdib3JkZXInCisgICAgICAgICAgICBpbnQgaG9yaXpv
bnRhbFBhZGRpbmdQbHVzQm9yZGVyID0gMDsKKyAgICAgICAgICAgIGludCB2ZXJ0aWNhbFBhZGRp
bmdQbHVzQm9yZGVyID0gMDsKKyAgICAgICAgICAgIGludCBsZWZ0ID0gMDsKKyAgICAgICAgICAg
IGludCB0b3AgPSAwOyAvLyBJbml0IHRvIDAgZm9yIGJhY2tncm91bmQtb3JpZ2luIG9mICdib3Jk
ZXInCiAgICAgICAgICAgICBpZiAoYmdMYXllci0+YmFja2dyb3VuZE9yaWdpbigpICE9IEJHQk9S
REVSKSB7Ci0gICAgICAgICAgICAgICAgaHBhYiArPSBibGVmdCArIGJyaWdodDsKLSAgICAgICAg
ICAgICAgICB2cGFiICs9IGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCk7Ci0gICAgICAgICAg
ICAgICAgbGVmdCArPSBibGVmdDsKKyAgICAgICAgICAgICAgICBob3Jpem9udGFsUGFkZGluZ1Bs
dXNCb3JkZXIgKz0gYkxlZnQgKyBiUmlnaHQ7CisgICAgICAgICAgICAgICAgdmVydGljYWxQYWRk
aW5nUGx1c0JvcmRlciArPSBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpOworICAgICAgICAg
ICAgICAgIGxlZnQgKz0gYkxlZnQ7CiAgICAgICAgICAgICAgICAgdG9wICs9IGJvcmRlclRvcCgp
OwogICAgICAgICAgICAgICAgIGlmIChiZ0xheWVyLT5iYWNrZ3JvdW5kT3JpZ2luKCkgPT0gQkdD
T05URU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGhwYWIgKz0gcGxlZnQgKyBwcmlnaHQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHZwYWIgKz0gcGFkZGluZ1RvcCgpICsgcGFkZGluZ0JvdHRvbSgp
OwotICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBsZWZ0OworICAgICAgICAgICAgICAgICAg
ICBob3Jpem9udGFsUGFkZGluZ1BsdXNCb3JkZXIgKz0gcExlZnQgKyBwUmlnaHQ7CisgICAgICAg
ICAgICAgICAgICAgIHZlcnRpY2FsUGFkZGluZ1BsdXNCb3JkZXIgKz0gcGFkZGluZ1RvcCgpICsg
cGFkZGluZ0JvdHRvbSgpOworICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHBMZWZ0OwogICAg
ICAgICAgICAgICAgICAgICB0b3AgKz0gcGFkZGluZ1RvcCgpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50IHB3ID0gdyAtIGhw
YWI7Ci0gICAgICAgICAgICBpbnQgcGggPSBoIC0gdnBhYjsKKworICAgICAgICAgICAgaW50IHB3
ID0gdyAtIGhvcml6b250YWxQYWRkaW5nUGx1c0JvcmRlcjsKKyAgICAgICAgICAgIGludCBwaCA9
IGggLSB2ZXJ0aWNhbFBhZGRpbmdQbHVzQm9yZGVyOwogICAgICAgICAgICAgc2NhbGVkSW1hZ2VX
aWR0aCA9IHB3OwogICAgICAgICAgICAgc2NhbGVkSW1hZ2VIZWlnaHQgPSBwaDsKICAgICAgICAg
ICAgIGNhY2x1YXRlQmFja2dyb3VuZFNpemUoYmdMYXllciwgc2NhbGVkSW1hZ2VXaWR0aCwgc2Nh
bGVkSW1hZ2VIZWlnaHQpOwpAQCAtNTU1LDkgKzU1Nyw5IEBAIHZvaWQgUmVuZGVyQm94OjpwYWlu
dEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgICAgICAgICBjdyA9IHNjYWxlZEltYWdlV2lk
dGg7CiAgICAgICAgICAgICAgICAgaW50IHhQb3NpdGlvbiA9IGJnTGF5ZXItPmJhY2tncm91bmRY
UG9zaXRpb24oKS5jYWxjTWluVmFsdWUocHcgLSBzY2FsZWRJbWFnZVdpZHRoKTsKICAgICAgICAg
ICAgICAgICBpZiAoeFBvc2l0aW9uID49IDApCi0gICAgICAgICAgICAgICAgICAgIGN4ID0gX3R4
ICsgeFBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICBjeCA9IHR4ICsgeFBvc2l0aW9uOwog
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjeCA9IF90eDsKKyAg
ICAgICAgICAgICAgICAgICAgY3ggPSB0eDsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNjYWxl
ZEltYWdlV2lkdGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzeCA9IC14UG9zaXRp
b247CiAgICAgICAgICAgICAgICAgICAgICAgICBjdyArPSB4UG9zaXRpb247CkBAIC01NjcsNyAr
NTY5LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKAogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyByZXBlYXQgb3ZlciB4IG9yIGJhY2tn
cm91bmQgaXMgd2lkZXIgdGhhbiBib3gKICAgICAgICAgICAgICAgICBjdyA9IHc7Ci0gICAgICAg
ICAgICAgICAgY3ggPSBfdHg7CisgICAgICAgICAgICAgICAgY3ggPSB0eDsKICAgICAgICAgICAg
ICAgICBpZiAoc2NhbGVkSW1hZ2VXaWR0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW50
IHhQb3NpdGlvbiA9IGJnTGF5ZXItPmJhY2tncm91bmRYUG9zaXRpb24oKS5jYWxjTWluVmFsdWUo
cHcgLSBzY2FsZWRJbWFnZVdpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCh4UG9zaXRp
b24gPiAwKSAmJiAoYmdyID09IE5PX1JFUEVBVCkpIHsKQEAgLTU4MCwyNCArNTgyLDI0IEBAIHZv
aWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmKChiZ3IgPT0gTk9fUkVQRUFUIHx8IGJn
ciA9PSBSRVBFQVRfWCkgJiYgaCA+IHNjYWxlZEltYWdlSGVpZ2h0KSB7CisgICAgICAgICAgICBp
ZiAoKGJnciA9PSBOT19SRVBFQVQgfHwgYmdyID09IFJFUEVBVF9YKSAmJiBoID4gc2NhbGVkSW1h
Z2VIZWlnaHQpIHsKICAgICAgICAgICAgICAgICBjaCA9IHNjYWxlZEltYWdlSGVpZ2h0OwogICAg
ICAgICAgICAgICAgIGludCB5UG9zaXRpb24gPSBiZ0xheWVyLT5iYWNrZ3JvdW5kWVBvc2l0aW9u
KCkuY2FsY01pblZhbHVlKHBoIC0gc2NhbGVkSW1hZ2VIZWlnaHQpOwogICAgICAgICAgICAgICAg
IGlmICh5UG9zaXRpb24gPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgY3kgPSBfdHkgKyB5UG9z
aXRpb247CisgICAgICAgICAgICAgICAgICAgIGN5ID0gdHkgKyB5UG9zaXRpb247CiAgICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGN5ID0gX3R5OworICAgICAgICAg
ICAgICAgICAgICBjeSA9IHR5OwogICAgICAgICAgICAgICAgICAgICBpZiAoc2NhbGVkSW1hZ2VI
ZWlnaHQgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IC15UG9zaXRpb247CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaCArPSB5UG9zaXRpb247CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAg
ICAgICBjeSArPSB0b3A7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8v
IHJlcGVhdCBvdmVyIHkgb3IgYmFja2dyb3VuZCBpcyB0YWxsZXIgdGhhbiBib3gKICAgICAgICAg
ICAgICAgICBjaCA9IGg7Ci0gICAgICAgICAgICAgICAgY3kgPSBfdHk7CisgICAgICAgICAgICAg
ICAgY3kgPSB0eTsKICAgICAgICAgICAgICAgICBpZiAoc2NhbGVkSW1hZ2VIZWlnaHQgPiAwKSB7
CiAgICAgICAgICAgICAgICAgICAgIGludCB5UG9zaXRpb24gPSBiZ0xheWVyLT5iYWNrZ3JvdW5k
WVBvc2l0aW9uKCkuY2FsY01pblZhbHVlKHBoIC0gc2NhbGVkSW1hZ2VIZWlnaHQpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoKHlQb3NpdGlvbiA+IDApICYmIChiZ3IgPT0gTk9fUkVQRUFUKSkg
ewpAQCAtNjA5LDkgKzYxMSw4IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRl
bmRlZCgKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vZml4ZWQKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGZpeGVkCiAgICAgICAgICAgICBJbnRSZWN0
IHZyID0gdmlld1JlY3QoKTsKICAgICAgICAgICAgIGludCBwdyA9IHZyLndpZHRoKCk7CiAgICAg
ICAgICAgICBpbnQgcGggPSB2ci5oZWlnaHQoKTsKQEAgLTYxOSw3ICs2MjAsNyBAQCB2b2lkIFJl
bmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgICAgICBzY2FsZWRJbWFn
ZUhlaWdodCA9IHBoOwogICAgICAgICAgICAgY2FjbHVhdGVCYWNrZ3JvdW5kU2l6ZShiZ0xheWVy
LCBzY2FsZWRJbWFnZVdpZHRoLCBzY2FsZWRJbWFnZUhlaWdodCk7CiAgICAgICAgICAgICBFQmFj
a2dyb3VuZFJlcGVhdCBiZ3IgPSBiZ0xheWVyLT5iYWNrZ3JvdW5kUmVwZWF0KCk7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICAgICAgaWYgKChiZ3IgPT0gTk9fUkVQRUFUIHx8IGJnciA9PSBSRVBF
QVRfWSkgJiYgcHcgPiBzY2FsZWRJbWFnZVdpZHRoKSB7CiAgICAgICAgICAgICAgICAgY3cgPSBz
Y2FsZWRJbWFnZVdpZHRoOwogICAgICAgICAgICAgICAgIGN4ID0gdnIueCgpICsgYmdMYXllci0+
YmFja2dyb3VuZFhQb3NpdGlvbigpLmNhbGNNaW5WYWx1ZShwdyAtIHNjYWxlZEltYWdlV2lkdGgp
OwpAQCAtNjQwLDcgKzY0MSw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRl
bmRlZCgKICAgICAgICAgICAgICAgICAgICAgc3kgPSBzY2FsZWRJbWFnZUhlaWdodCAtIGJnTGF5
ZXItPmJhY2tncm91bmRZUG9zaXRpb24oKS5jYWxjTWluVmFsdWUocGggLSBzY2FsZWRJbWFnZUhl
aWdodCkgJSBzY2FsZWRJbWFnZUhlaWdodDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
SW50UmVjdCBiID0gaW50ZXJzZWN0aW9uKEludFJlY3QoY3gsIGN5LCBjdywgY2gpLCBJbnRSZWN0
KF90eCwgX3R5LCB3LCBoKSk7CisgICAgICAgICAgICBJbnRSZWN0IGIgPSBpbnRlcnNlY3Rpb24o
SW50UmVjdChjeCwgY3ksIGN3LCBjaCksIEludFJlY3QodHgsIHR5LCB3LCBoKSk7CiAgICAgICAg
ICAgICBzeCArPSBiLngoKSAtIGN4OwogICAgICAgICAgICAgc3kgKz0gYi55KCkgLSBjeTsKICAg
ICAgICAgICAgIGN4ID0gYi54KCk7CkBAIC02NTAsMTYgKzY1MSwxOCBAQCB2b2lkIFJlbmRlckJv
eDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY3cg
PiAwICYmIGNoID4gMCkgewotICAgICAgICAgICAgcC0+ZHJhd1RpbGVkSW1hZ2UoYmctPmltYWdl
KCksIEludFJlY3QoY3gsIGN5LCBjdywgY2gpLCBJbnRQb2ludChzeCwgc3kpLCBJbnRTaXplKHNj
YWxlZEltYWdlV2lkdGgsIHNjYWxlZEltYWdlSGVpZ2h0KSwKKyAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdUaWxlZEltYWdlKGJnLT5pbWFnZSgpLCBJbnRSZWN0KGN4LCBjeSwgY3csIGNoKSwgSW50
UG9pbnQoc3gsIHN5KSwgSW50U2l6ZShzY2FsZWRJbWFnZVdpZHRoLCBzY2FsZWRJbWFnZUhlaWdo
dCksCiAgICAgICAgICAgICAgICAgYmdMYXllci0+YmFja2dyb3VuZENvbXBvc2l0ZSgpKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmIChiZ0xheWVyLT5iYWNrZ3JvdW5kQ2xpcCgp
ICE9IEJHQk9SREVSKQotICAgICAgICBwLT5yZXN0b3JlKCk7IC8vIFVuZG8gdGhlIGJhY2tncm91
bmQgY2xpcAotICAgICAgICAKKyAgICAgICAgLy8gVW5kbyB0aGUgYmFja2dyb3VuZCBjbGlwCisg
ICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKwogICAgIGlmIChjbGlwcGVkVG9Cb3JkZXJSYWRp
dXMpCi0gICAgICAgIHAtPnJlc3RvcmUoKTsgLy8gVW5kbyB0aGUgYm9yZGVyIHJhZGl1cyBjbGlw
CisgICAgICAgIC8vIFVuZG8gdGhlIGJvcmRlciByYWRpdXMgY2xpcAorICAgICAgICBjb250ZXh0
LT5yZXN0b3JlKCk7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC02ODAsNTIgKzY4Myw1MiBA
QCB2b2lkIFJlbmRlckJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoaW50CiAKIEludFJlY3QgUmVu
ZGVyQm94OjpnZXRPdmVyZmxvd0NsaXBSZWN0KGludCB0eCwgaW50IHR5KQogewotICAgIC8vIFhY
WCBXaGVuIG92ZXJmbG93LWNsaXAgKENTUzMpIGlzIGltcGxlbWVudGVkLCB3ZSdsbCBvYnRhaW4g
dGhlIHByb3BlcnR5CisgICAgLy8gRklYTUU6IFdoZW4gb3ZlcmZsb3ctY2xpcCAoQ1NTMykgaXMg
aW1wbGVtZW50ZWQsIHdlJ2xsIG9idGFpbiB0aGUgcHJvcGVydHkKICAgICAvLyBoZXJlLgotICAg
IGludCBibD1ib3JkZXJMZWZ0KCksYnQ9Ym9yZGVyVG9wKCksYmI9Ym9yZGVyQm90dG9tKCksYnI9
Ym9yZGVyUmlnaHQoKTsKLSAgICBpbnQgY2xpcHggPSB0eCArIGJsOwotICAgIGludCBjbGlweSA9
IHR5ICsgYnQ7Ci0gICAgaW50IGNsaXB3ID0gbV93aWR0aCAtIGJsIC0gYnI7Ci0gICAgaW50IGNs
aXBoID0gbV9oZWlnaHQgLSBidCAtIGJiICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRv
bUV4dHJhKCk7CisKKyAgICBpbnQgYkxlZnQgPSBib3JkZXJMZWZ0KCk7CisgICAgaW50IGJUb3Ag
PSBib3JkZXJUb3AoKTsKKworICAgIGludCBjbGlwWCA9IHR4ICsgYkxlZnQ7CisgICAgaW50IGNs
aXBZID0gdHkgKyBiVG9wOworICAgIGludCBjbGlwV2lkdGggPSBtX3dpZHRoIC0gYkxlZnQgLSBi
b3JkZXJSaWdodCgpOworICAgIGludCBjbGlwSGVpZ2h0ID0gbV9oZWlnaHQgLSBiVG9wIC0gYm9y
ZGVyQm90dG9tKCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKIAog
ICAgIC8vIFN1YnRyYWN0IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhlbS4KICAgICBpZiAo
bV9sYXllcikgewotICAgICAgICBjbGlwdyAtPSBtX2xheWVyLT52ZXJ0aWNhbFNjcm9sbGJhcldp
ZHRoKCk7Ci0gICAgICAgIGNsaXBoIC09IG1fbGF5ZXItPmhvcml6b250YWxTY3JvbGxiYXJIZWln
aHQoKTsKKyAgICAgICAgY2xpcFdpZHRoIC09IG1fbGF5ZXItPnZlcnRpY2FsU2Nyb2xsYmFyV2lk
dGgoKTsKKyAgICAgICAgY2xpcEhlaWdodCAtPSBtX2xheWVyLT5ob3Jpem9udGFsU2Nyb2xsYmFy
SGVpZ2h0KCk7CiAgICAgfQotICAgIHJldHVybiBJbnRSZWN0KGNsaXB4LGNsaXB5LGNsaXB3LGNs
aXBoKTsKKworICAgIHJldHVybiBJbnRSZWN0KGNsaXBYLCBjbGlwWSwgY2xpcFdpZHRoLCBjbGlw
SGVpZ2h0KTsKIH0KIAogSW50UmVjdCBSZW5kZXJCb3g6OmdldENsaXBSZWN0KGludCB0eCwgaW50
IHR5KQogewotICAgIGludCBjbGlweCA9IHR4OwotICAgIGludCBjbGlweSA9IHR5OwotICAgIGlu
dCBjbGlwdyA9IG1fd2lkdGg7Ci0gICAgaW50IGNsaXBoID0gbV9oZWlnaHQ7CisgICAgaW50IGNs
aXBYID0gdHg7CisgICAgaW50IGNsaXBZID0gdHk7CisgICAgaW50IGNsaXBXaWR0aCA9IG1fd2lk
dGg7CisgICAgaW50IGNsaXBIZWlnaHQgPSBtX2hlaWdodDsKIAogICAgIGlmICghc3R5bGUoKS0+
Y2xpcExlZnQoKS5pc0F1dG8oKSkgewogICAgICAgICBpbnQgYyA9IHN0eWxlKCktPmNsaXBMZWZ0
KCkuY2FsY1ZhbHVlKG1fd2lkdGgpOwotICAgICAgICBjbGlweCArPSBjOwotICAgICAgICBjbGlw
dyAtPSBjOworICAgICAgICBjbGlwWCArPSBjOworICAgICAgICBjbGlwV2lkdGggLT0gYzsKICAg
ICB9Ci0gICAgICAgIAotICAgIGlmICghc3R5bGUoKS0+Y2xpcFJpZ2h0KCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgaW50IHcgPSBzdHlsZSgpLT5jbGlwUmlnaHQoKS5jYWxjVmFsdWUobV93aWR0aCk7
Ci0gICAgICAgIGNsaXB3IC09IG1fd2lkdGggLSB3OwotICAgIH0KLSAgICAKKworICAgIGlmICgh
c3R5bGUoKS0+Y2xpcFJpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIGNsaXBXaWR0aCAtPSBtX3dp
ZHRoIC0gc3R5bGUoKS0+Y2xpcFJpZ2h0KCkuY2FsY1ZhbHVlKG1fd2lkdGgpOworCiAgICAgaWYg
KCFzdHlsZSgpLT5jbGlwVG9wKCkuaXNBdXRvKCkpIHsKICAgICAgICAgaW50IGMgPSBzdHlsZSgp
LT5jbGlwVG9wKCkuY2FsY1ZhbHVlKG1faGVpZ2h0KTsKLSAgICAgICAgY2xpcHkgKz0gYzsKLSAg
ICAgICAgY2xpcGggLT0gYzsKKyAgICAgICAgY2xpcFkgKz0gYzsKKyAgICAgICAgY2xpcEhlaWdo
dCAtPSBjOwogICAgIH0KIAotICAgIGlmICghc3R5bGUoKS0+Y2xpcEJvdHRvbSgpLmlzQXV0bygp
KSB7Ci0gICAgICAgIGludCBoID0gc3R5bGUoKS0+Y2xpcEJvdHRvbSgpLmNhbGNWYWx1ZShtX2hl
aWdodCk7Ci0gICAgICAgIGNsaXBoIC09IG1faGVpZ2h0IC0gaDsKLSAgICB9CisgICAgaWYgKCFz
dHlsZSgpLT5jbGlwQm90dG9tKCkuaXNBdXRvKCkpCisgICAgICAgIGNsaXBIZWlnaHQgLT0gbV9o
ZWlnaHQgLSBzdHlsZSgpLT5jbGlwQm90dG9tKCkuY2FsY1ZhbHVlKG1faGVpZ2h0KTsKIAotICAg
IHJldHVybiBJbnRSZWN0KGNsaXB4LCBjbGlweSwgY2xpcHcsIGNsaXBoKTsKKyAgICByZXR1cm4g
SW50UmVjdChjbGlwWCwgY2xpcFksIGNsaXBXaWR0aCwgY2xpcEhlaWdodCk7CiB9CiAKIGludCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja1dpZHRoKCkgY29uc3QKQEAgLTczNSwyNSArNzM4LDI1
IEBAIGludCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja1dpZHRoKCkgY28KICAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKHVzZXNMaW5lV2lkdGgoKSkKICAgICAgICAgcmV0dXJuIGNiLT5saW5l
V2lkdGgobV95KTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBjYi0+YXZhaWxhYmxlV2lkdGgo
KTsKKyAgICByZXR1cm4gY2ItPmF2YWlsYWJsZVdpZHRoKCk7CiB9CiAKLWJvb2wgUmVuZGVyQm94
OjphYnNvbHV0ZVBvc2l0aW9uKGludCAmeFBvcywgaW50ICZ5UG9zLCBib29sIGYpIGNvbnN0Citi
b29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBvcywgYm9v
bCBmaXhlZCkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBv
c2l0aW9uKQotICAgICAgICBmID0gdHJ1ZTsKLSAgICBSZW5kZXJPYmplY3QgKm8gPSBjb250YWlu
ZXIoKTsKLSAgICBpZiAobyAmJiBvLT5hYnNvbHV0ZVBvc2l0aW9uKHhQb3MsIHlQb3MsIGYpKSB7
CisgICAgICAgIGZpeGVkID0gdHJ1ZTsKKworICAgIFJlbmRlck9iamVjdCogbyA9IGNvbnRhaW5l
cigpOworICAgIGlmIChvICYmIG8tPmFic29sdXRlUG9zaXRpb24oeFBvcywgeVBvcywgZml4ZWQp
KSB7CiAgICAgICAgIHlQb3MgKz0gby0+Ym9yZGVyVG9wRXh0cmEoKTsKLSAgICAgICAgCisKICAg
ICAgICAgaWYgKHN0eWxlKCktPnBvc2l0aW9uKCkgPT0gQWJzb2x1dGVQb3NpdGlvbiAmJiBvLT5p
c1JlbFBvc2l0aW9uZWQoKSAmJiBvLT5pc0lubGluZUZsb3coKSkgewogICAgICAgICAgICAgLy8g
V2hlbiB3ZSBoYXZlIGFuIGVuY2xvc2luZyByZWxwb3NpdGlvbmVkIGlubGluZSwgd2UgbmVlZCB0
byBhZGQgaW4gdGhlIG9mZnNldCBvZiB0aGUgZmlyc3QgbGluZQogICAgICAgICAgICAgLy8gYm94
IGZyb20gdGhlIHJlc3Qgb2YgdGhlIGNvbnRlbnQsIGJ1dCBvbmx5IGluIHRoZSBjYXNlcyB3aGVy
ZSB3ZSBrbm93IHdlJ3JlIHBvc2l0aW9uZWQKICAgICAgICAgICAgIC8vIHJlbGF0aXZlIHRvIHRo
ZSBpbmxpbmUgaXRzZWxmLgogICAgICAgICAgICAgUmVuZGVyRmxvdyogZmxvdyA9IHN0YXRpY19j
YXN0PFJlbmRlckZsb3cqPihvKTsKLSAgICAgICAgICAgIGludCBzeCA9IDA7Ci0gICAgICAgICAg
ICBpbnQgc3kgPSAwOworICAgICAgICAgICAgaW50IHN4OworICAgICAgICAgICAgaW50IHN5Owog
ICAgICAgICAgICAgaWYgKGZsb3ctPmZpcnN0TGluZUJveCgpKSB7CiAgICAgICAgICAgICAgICAg
c3ggPSBmbG93LT5maXJzdExpbmVCb3goKS0+eFBvcygpOwogICAgICAgICAgICAgICAgIHN5ID0g
Zmxvdy0+Zmlyc3RMaW5lQm94KCktPnlQb3MoKTsKQEAgLTc2MSw5ICs3NjQsOSBAQCBib29sIFJl
bmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQCiAgICAgICAgICAgICAgICAgc3ggPSBm
bG93LT5zdGF0aWNYKCk7CiAgICAgICAgICAgICAgICAgc3kgPSBmbG93LT5zdGF0aWNZKCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgYm9vbCBpc0lubGluZVR5
cGUgPSBzdHlsZSgpLT5pc09yaWdpbmFsRGlzcGxheUlubGluZVR5cGUoKTsKLSAgICAgICAgICAg
IAorCiAgICAgICAgICAgICBpZiAoIWhhc1N0YXRpY1goKSkKICAgICAgICAgICAgICAgICB4UG9z
ICs9IHN4OwogICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGVycmlibHkgaW50dWl0aXZlLCBi
dXQgd2UgaGF2ZSB0byBtYXRjaCBvdGhlciBicm93c2Vycy4gIERlc3BpdGUgYmVpbmcgYSBibG9j
ayBkaXNwbGF5IHR5cGUgaW5zaWRlCkBAIC03NzMsMTcgKzc3NiwxNyBAQCBib29sIFJlbmRlckJv
eDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQCiAgICAgICAgICAgICBpZiAoaGFzU3RhdGljWCgp
ICYmICFpc0lubGluZVR5cGUpCiAgICAgICAgICAgICAgICAgLy8gQXZvaWQgYWRkaW5nIGluIHRo
ZSBsZWZ0IGJvcmRlci9wYWRkaW5nIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIHR3aWNlLiAgU3Vi
dHJhY3QgaXQgb3V0LgogICAgICAgICAgICAgICAgIHhQb3MgKz0gc3ggLSAoY29udGFpbmluZ0Js
b2NrKCktPmJvcmRlckxlZnQoKSArIGNvbnRhaW5pbmdCbG9jaygpLT5wYWRkaW5nTGVmdCgpKTsK
LSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoIWhhc1N0YXRpY1koKSkKICAgICAgICAg
ICAgICAgICB5UG9zICs9IHN5OwogICAgICAgICB9CiAgICAgICAgIGlmIChvLT5oYXNPdmVyZmxv
d0NsaXAoKSkKLSAgICAgICAgICAgIG8tPmxheWVyKCktPnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHhQ
b3MsIHlQb3MpOyAKLSAgICAgICAgICAgIAorICAgICAgICAgICAgby0+bGF5ZXIoKS0+c3VidHJh
Y3RTY3JvbGxPZmZzZXQoeFBvcywgeVBvcyk7CisKICAgICAgICAgaWYgKCFpc0lubGluZSgpIHx8
IGlzUmVwbGFjZWQoKSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNiOwotICAgICAgICAg
ICAgaWYgKG8tPmlzQmxvY2tGbG93KCkgJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0
ZVBvc2l0aW9uICYmIHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbiAmJgotICAg
ICAgICAgICAgICAgIChjYiA9IHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4obykpLT5oYXNDb2x1
bW5zKCkpIHsKKyAgICAgICAgICAgIGlmIChvLT5pc0Jsb2NrRmxvdygpICYmIHN0eWxlKCktPnBv
c2l0aW9uKCkgIT0gQWJzb2x1dGVQb3NpdGlvbiAmJiBzdHlsZSgpLT5wb3NpdGlvbigpICE9IEZp
eGVkUG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgJiYgKGNiID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyQmxvY2sqPihvKSktPmhhc0NvbHVtbnMoKSkgewogICAgICAgICAgICAgICAgIEludFJlY3Qg
cmVjdChtX3gsIG1feSwgMSwgMSk7CiAgICAgICAgICAgICAgICAgY2ItPmFkanVzdFJlY3RGb3JD
b2x1bW5zKHJlY3QpOwogICAgICAgICAgICAgICAgIHhQb3MgKz0gcmVjdC54KCk7CkBAIC03OTYs
MjUgKzc5OSwyNCBAQCBib29sIFJlbmRlckJveDo6YWJzb2x1dGVQb3NpdGlvbihpbnQgJnhQCiAK
ICAgICAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICB4UG9zICs9IHJl
bGF0aXZlUG9zaXRpb25PZmZzZXRYKCk7Ci0gICAgICAgICAgICB5UG9zICs9IHJlbGF0aXZlUG9z
aXRpb25PZmZzZXRZKCk7ICAgICAgICAgICAgCisgICAgICAgICAgICB5UG9zICs9IHJlbGF0aXZl
UG9zaXRpb25PZmZzZXRZKCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHhQb3MgPSB5UG9zID0gMDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB4UG9zID0gMDsKKyAgICAgICAgeVBvcyA9IDA7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQm94OjpkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxM
YXlvdXQsIGJvb2wpCit2b2lkIFJlbmRlckJveDo6ZGlydHlMaW5lQm94ZXMoYm9vbCBmdWxsTGF5
b3V0LCBib29sIC8qaXNSb290TGluZUJveCovKQogewogICAgIGlmIChtX2lubGluZUJveFdyYXBw
ZXIpIHsKICAgICAgICAgaWYgKGZ1bGxMYXlvdXQpIHsKICAgICAgICAgICAgIG1faW5saW5lQm94
V3JhcHBlci0+ZGVzdHJveShyZW5kZXJBcmVuYSgpKTsKICAgICAgICAgICAgIG1faW5saW5lQm94
V3JhcHBlciA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIG1faW5saW5lQm94V3JhcHBlci0+ZGlydHlMaW5lQm94ZXMoKTsKICAgICB9CiB9
CkBAIC04MzAsOCArODMyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBvc2l0aW9uKElubGluZUJveCog
Ym94KQogICAgICAgICAgICAgLy8gdGhlIGlubGluZXMuCiAgICAgICAgICAgICBtX3N0YXRpY1gg
PSBib3gtPnhQb3MoKTsKICAgICAgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFs
c2UpOyAvLyBKdXN0IGdvIGFoZWFkIGFuZCBtYXJrIHRoZSBwb3NpdGlvbmVkIG9iamVjdCBhcyBu
ZWVkaW5nIGxheW91dCwgc28gaXQgd2lsbCB1cGRhdGUgaXRzIHBvc2l0aW9uIHByb3Blcmx5Lgot
ICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCF3YXNJbmxpbmUgJiYgaGFzU3RhdGljWSgpKSB7
CisgICAgICAgIH0gZWxzZSBpZiAoIXdhc0lubGluZSAmJiBoYXNTdGF0aWNZKCkpIHsKICAgICAg
ICAgICAgIC8vIE91ciBvYmplY3Qgd2FzIGEgYmxvY2sgb3JpZ2luYWxseSwgc28gd2UgbWFrZSBv
dXIgbm9ybWFsIGZsb3cgcG9zaXRpb24gYmUKICAgICAgICAgICAgIC8vIGp1c3QgYmVsb3cgdGhl
IGxpbmUgYm94IChhcyB0aG91Z2ggYWxsIHRoZSBpbmxpbmVzIHRoYXQgY2FtZSBiZWZvcmUgdXMg
Z290CiAgICAgICAgICAgICAvLyB3cmFwcGVkIGluIGFuIGFub255bW91cyBibG9jaywgd2hpY2gg
aXMgd2hhdCB3b3VsZCBoYXZlIGhhcHBlbmVkIGhhZCB3ZSBiZWVuCkBAIC04NDMsMjIgKzg0NCwx
MyBAQCB2b2lkIFJlbmRlckJveDo6cG9zaXRpb24oSW5saW5lQm94KiBib3gpCiAgICAgICAgIC8v
IE51a2UgdGhlIGJveC4KICAgICAgICAgYm94LT5yZW1vdmUoKTsKICAgICAgICAgYm94LT5kZXN0
cm95KHJlbmRlckFyZW5hKCkpOwotICAgIH0KLSAgICBlbHNlIGlmIChpc1JlcGxhY2VkKCkpIHsK
KyAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZWQoKSkgewogICAgICAgICBtX3ggPSBib3gtPnhQb3Mo
KTsKICAgICAgICAgbV95ID0gYm94LT55UG9zKCk7CiAgICAgICAgIG1faW5saW5lQm94V3JhcHBl
ciA9IGJveDsKICAgICB9CiB9CiAKLS8vIEZvciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIHRo
aXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgaW5saW5lIGJveCB0aGF0IG93bnMgdXMuICBFbmFibGVz
Ci0vLyB0aGUgcmVwbGFjZWQgUmVuZGVyT2JqZWN0IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoYXQg
bGluZSBpdCBpcyBjb250YWluZWQgb24gYW5kIHRvIGVhc2lseQotLy8gaXRlcmF0ZSBvdmVyIHN0
cnVjdHVyZXMgb24gdGhlIGxpbmUuCi1JbmxpbmVCb3gqIFJlbmRlckJveDo6aW5saW5lQm94V3Jh
cHBlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1faW5saW5lQm94V3JhcHBlcjsKLX0KLQogdm9p
ZCBSZW5kZXJCb3g6OmRlbGV0ZUxpbmVCb3hXcmFwcGVyKCkKIHsKICAgICBpZiAobV9pbmxpbmVC
b3hXcmFwcGVyKSB7CkBAIC04NjksMTEgKzg2MSw2IEBAIHZvaWQgUmVuZGVyQm94OjpkZWxldGVM
aW5lQm94V3JhcHBlcigpCiAgICAgfQogfQogCi12b2lkIFJlbmRlckJveDo6c2V0SW5saW5lQm94
V3JhcHBlcihJbmxpbmVCb3gqIGIpCi17Ci0gICAgbV9pbmxpbmVCb3hXcmFwcGVyID0gYjsKLX0K
LQogSW50UmVjdCBSZW5kZXJCb3g6OmdldEFic29sdXRlUmVwYWludFJlY3QoKQogewogICAgIElu
dFJlY3QgciA9IG92ZXJmbG93UmVjdChmYWxzZSk7CkBAIC04ODEsMzcgKzg2OCwzOSBAQCBJbnRS
ZWN0IFJlbmRlckJveDo6Z2V0QWJzb2x1dGVSZXBhaW50UmVjCiAgICAgICAgIGlmIChzdHlsZSgp
LT5oYXNBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICAvLyBUaGUgdGhlbWUgbWF5IHdpc2ggdG8g
aW5mbGF0ZSB0aGUgcmVjdCB1c2VkIHdoZW4gcmVwYWludGluZy4KICAgICAgICAgICAgIHRoZW1l
KCktPmFkanVzdFJlcGFpbnRSZWN0KHRoaXMsIHIpOwotICAgICAgICByLmluZmxhdGUoc3R5bGUo
KS0+b3V0bGluZVNpemUoKSk7IC8vIEZJWE1FOiBUZWNobmljYWxseSB0aGUgb3V0bGluZSBpbmZs
YXRpb24gY291bGQgZml0IHdpdGhpbiB0aGUgdGhlbWUgaW5mbGF0aW9uLgorCisgICAgICAgIC8v
IEZJWE1FOiBUZWNobmljYWxseSB0aGUgb3V0bGluZSBpbmZsYXRpb24gY291bGQgZml0IHdpdGhp
biB0aGUgdGhlbWUgaW5mbGF0aW9uLgorICAgICAgICByLmluZmxhdGUoc3R5bGUoKS0+b3V0bGlu
ZVNpemUoKSk7CiAgICAgfQogICAgIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIpOwogICAg
IHJldHVybiByOwogfQogCi12b2lkIFJlbmRlckJveDo6Y29tcHV0ZUFic29sdXRlUmVwYWludFJl
Y3QoSW50UmVjdCYgciwgYm9vbCBmKQordm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJl
cGFpbnRSZWN0KEludFJlY3QmIHJlY3QsIGJvb2wgZml4ZWQpCiB7Ci0gICAgaW50IHggPSByLngo
KSArIG1feDsKLSAgICBpbnQgeSA9IHIueSgpICsgbV95OwotICAgICAKKyAgICBpbnQgeCA9IHJl
Y3QueCgpICsgbV94OworICAgIGludCB5ID0gcmVjdC55KCkgKyBtX3k7CisKICAgICAvLyBBcHBs
eSB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2Zmc2V0IHdoZW4gaW52YWxpZGF0aW5nIGEgcmVjdGFu
Z2xlLiAgVGhlIGxheWVyCiAgICAgLy8gaXMgdHJhbnNsYXRlZCwgYnV0IHRoZSByZW5kZXIgYm94
IGlzbid0LCBzbyB3ZSBuZWVkIHRvIGRvIHRoaXMgdG8gZ2V0IHRoZQogICAgIC8vIHJpZ2h0IGRp
cnR5IHJlY3QuICBTaW5jZSB0aGlzIGlzIGNhbGxlZCBmcm9tIFJlbmRlck9iamVjdDo6c2V0U3R5
bGUsIHRoZSByZWxhdGl2ZSBwb3NpdGlvbgogICAgIC8vIGZsYWcgb24gdGhlIFJlbmRlck9iamVj
dCBoYXMgYmVlbiBjbGVhcmVkLCBzbyB1c2UgdGhlIG9uZSBvbiB0aGUgc3R5bGUoKS4KICAgICBp
ZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIG1fbGF5ZXIpCi0g
ICAgICAgIG1fbGF5ZXItPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoeCx5KTsKLSAgICAKLSAgICBp
ZiAoc3R5bGUoKS0+cG9zaXRpb24oKT09Rml4ZWRQb3NpdGlvbikKLSAgICAgICAgZiA9IHRydWU7
CisgICAgICAgIG1fbGF5ZXItPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQoeCwgeSk7CisKKyAgICBp
ZiAoc3R5bGUoKS0+cG9zaXRpb24oKSA9PSBGaXhlZFBvc2l0aW9uKQorICAgICAgICBmaXhlZCA9
IHRydWU7CiAKICAgICBSZW5kZXJPYmplY3QqIG8gPSBjb250YWluZXIoKTsKICAgICBpZiAobykg
ewogICAgICAgICBpZiAoby0+aXNCbG9ja0Zsb3coKSAmJiBzdHlsZSgpLT5wb3NpdGlvbigpICE9
IEFic29sdXRlUG9zaXRpb24gJiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBGaXhlZFBvc2l0aW9u
KSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9j
ayo+KG8pOwogICAgICAgICAgICAgaWYgKGNiLT5oYXNDb2x1bW5zKCkpIHsKLSAgICAgICAgICAg
ICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHgsIHksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgSW50UmVjdCByZXBhaW50UmVjdCh4LCB5LCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIGNiLT5hZGp1c3RSZWN0Rm9yQ29sdW1ucyhy
ZXBhaW50UmVjdCk7CiAgICAgICAgICAgICAgICAgeCA9IHJlcGFpbnRSZWN0LngoKTsKICAgICAg
ICAgICAgICAgICB5ID0gcmVwYWludFJlY3QueSgpOwotICAgICAgICAgICAgICAgIHIgPSByZXBh
aW50UmVjdDsKKyAgICAgICAgICAgICAgICByZWN0ID0gcmVwYWludFJlY3Q7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIApAQCAtOTIwLDggKzkwOSw4IEBAIHZvaWQgUmVuZGVyQm94Ojpjb21w
dXRlQWJzb2x1dGVSZXBhaW50UmUKICAgICAgICAgICAgIC8vIGJveCBmcm9tIHRoZSByZXN0IG9m
IHRoZSBjb250ZW50LCBidXQgb25seSBpbiB0aGUgY2FzZXMgd2hlcmUgd2Uga25vdyB3ZSdyZSBw
b3NpdGlvbmVkCiAgICAgICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGUgaW5saW5lIGl0c2VsZi4K
ICAgICAgICAgICAgIFJlbmRlckZsb3cqIGZsb3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4o
byk7Ci0gICAgICAgICAgICBpbnQgc3ggPSAwOwotICAgICAgICAgICAgaW50IHN5ID0gMDsKKyAg
ICAgICAgICAgIGludCBzeDsKKyAgICAgICAgICAgIGludCBzeTsKICAgICAgICAgICAgIGlmIChm
bG93LT5maXJzdExpbmVCb3goKSkgewogICAgICAgICAgICAgICAgIHN4ID0gZmxvdy0+Zmlyc3RM
aW5lQm94KCktPnhQb3MoKTsKICAgICAgICAgICAgICAgICBzeSA9IGZsb3ctPmZpcnN0TGluZUJv
eCgpLT55UG9zKCk7CkBAIC05MjksOSArOTE4LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVB
YnNvbHV0ZVJlcGFpbnRSZQogICAgICAgICAgICAgICAgIHN4ID0gZmxvdy0+c3RhdGljWCgpOwog
ICAgICAgICAgICAgICAgIHN5ID0gZmxvdy0+c3RhdGljWSgpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIGJvb2wgaXNJbmxpbmVUeXBlID0gc3R5bGUoKS0+aXNP
cmlnaW5hbERpc3BsYXlJbmxpbmVUeXBlKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAg
aWYgKCFoYXNTdGF0aWNYKCkpCiAgICAgICAgICAgICAgICAgeCArPSBzeDsKICAgICAgICAgICAg
IC8vIFRoaXMgaXMgbm90IHRlcnJpYmx5IGludHVpdGl2ZSwgYnV0IHdlIGhhdmUgdG8gbWF0Y2gg
b3RoZXIgYnJvd3NlcnMuICBEZXNwaXRlIGJlaW5nIGEgYmxvY2sgZGlzcGxheSB0eXBlIGluc2lk
ZQpAQCAtOTQxLDExICs5MzAsMTEgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJl
cGFpbnRSZQogICAgICAgICAgICAgaWYgKGhhc1N0YXRpY1goKSAmJiAhaXNJbmxpbmVUeXBlKQog
ICAgICAgICAgICAgICAgIC8vIEF2b2lkIGFkZGluZyBpbiB0aGUgbGVmdCBib3JkZXIvcGFkZGlu
ZyBvZiB0aGUgY29udGFpbmluZyBibG9jayB0d2ljZS4gIFN1YnRyYWN0IGl0IG91dC4KICAgICAg
ICAgICAgICAgICB4ICs9IHN4IC0gKGNvbnRhaW5pbmdCbG9jaygpLT5ib3JkZXJMZWZ0KCkgKyBj
b250YWluaW5nQmxvY2soKS0+cGFkZGluZ0xlZnQoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAgICAgaWYgKCFoYXNTdGF0aWNZKCkpCiAgICAgICAgICAgICAgICAgeSArPSBzeTsKICAgICAg
ICAgfQotICAgICAgICAKKwogICAgICAgICAvLyA8Ym9keT4gbWF5IG5vdCBoYXZlIG92ZXJmbG93
LCBzaW5jZSBpdCBtaWdodCBiZSBhcHBseWluZyBpdHMgb3ZlcmZsb3cgdmFsdWUgdG8gdGhlCiAg
ICAgICAgIC8vIHNjcm9sbGJhcnMuCiAgICAgICAgIGlmIChvLT5oYXNPdmVyZmxvd0NsaXAoKSkg
ewpAQCAtOTUzLDIzICs5NDIsMjMgQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVBYnNvbHV0ZVJl
cGFpbnRSZQogICAgICAgICAgICAgLy8gbGF5ZXIncyBzaXplIGluc3RlYWQuICBFdmVuIGlmIHRo
ZSBsYXllcidzIHNpemUgaXMgd3JvbmcsIHRoZSBsYXllciBpdHNlbGYgd2lsbCByZXBhaW50CiAg
ICAgICAgICAgICAvLyBhbnl3YXkgaWYgaXRzIHNpemUgZG9lcyBjaGFuZ2UuCiAgICAgICAgICAg
ICBJbnRSZWN0IGJveFJlY3QoMCwgMCwgby0+bGF5ZXIoKS0+d2lkdGgoKSwgby0+bGF5ZXIoKS0+
aGVpZ2h0KCkpOwotICAgICAgICAgICAgby0+bGF5ZXIoKS0+c3VidHJhY3RTY3JvbGxPZmZzZXQo
eCx5KTsgLy8gRm9yIG92ZXJmbG93OmF1dG8vc2Nyb2xsL2hpZGRlbi4KLSAgICAgICAgICAgIElu
dFJlY3QgcmVwYWludFJlY3QoeCwgeSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIHIgPSBpbnRlcnNlY3Rpb24ocmVwYWludFJlY3QsIGJveFJlY3QpOwotICAgICAgICAgICAg
aWYgKHIuaXNFbXB0eSgpKQorICAgICAgICAgICAgby0+bGF5ZXIoKS0+c3VidHJhY3RTY3JvbGxP
ZmZzZXQoeCwgeSk7IC8vIEZvciBvdmVyZmxvdzphdXRvL3Njcm9sbC9oaWRkZW4uCisgICAgICAg
ICAgICBJbnRSZWN0IHJlcGFpbnRSZWN0KHgsIHksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7CisgICAgICAgICAgICByZWN0ID0gaW50ZXJzZWN0aW9uKHJlcGFpbnRSZWN0LCBib3hSZWN0
KTsKKyAgICAgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0gZWxzZSBpZiAoby0+aGFzQ29udHJvbENsaXAoKSkgewogICAgICAgICAg
ICAgLy8gU29tZSBmb3JtIGNvbnRyb2xzIHVzZSBhIGxpZ2h0d2VpZ2h0IGNsaXBwaW5nIHNjaGVt
ZSB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgYSBsYXllci4KICAgICAgICAgICAgIEludFJlY3Qg
Ym94UmVjdChib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpLCBtX3dpZHRoIC0gYm9yZGVyTGVmdCgp
IC0gYm9yZGVyUmlnaHQoKSwgbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgp
KTsKLSAgICAgICAgICAgIEludFJlY3QgcmVwYWludFJlY3QoeCwgeSwgci53aWR0aCgpLCByLmhl
aWdodCgpKTsKLSAgICAgICAgICAgIHIgPSBpbnRlcnNlY3Rpb24ocmVwYWludFJlY3QsIGJveFJl
Y3QpOwotICAgICAgICAgICAgaWYgKHIuaXNFbXB0eSgpKQorICAgICAgICAgICAgSW50UmVjdCBy
ZXBhaW50UmVjdCh4LCB5LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgcmVjdCA9IGludGVyc2VjdGlvbihyZXBhaW50UmVjdCwgYm94UmVjdCk7CisgICAgICAgICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgci5zZXRYKHgpOwotICAgICAgICAgICAgci5zZXRZKHkpOwor
ICAgICAgICAgICAgcmVjdC5zZXRYKHgpOworICAgICAgICAgICAgcmVjdC5zZXRZKHkpOwogICAg
ICAgICB9Ci0gICAgICAgIG8tPmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KHIsIGYpOworICAg
ICAgICBvLT5jb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChyZWN0LCBmaXhlZCk7CiAgICAgfQog
fQogCkBAIC05ODIsMTAgKzk3MSwxNyBAQCB2b2lkIFJlbmRlckJveDo6cmVwYWludER1cmluZ0xh
eW91dElmTW92CiAgICAgaWYgKHJlY3QueCgpICE9IG5ld1ggfHwgcmVjdC55KCkgIT0gbmV3WSkg
ewogICAgICAgICAvLyBUaGUgY2hpbGQgbW92ZWQuICBJbnZhbGlkYXRlIHRoZSBvYmplY3QncyBv
bGQgYW5kIG5ldyBwb3NpdGlvbnMuICBXZSBoYXZlIHRvIGRvIHRoaXMKICAgICAgICAgLy8gc2lu
Y2UgdGhlIG9iamVjdCBtYXkgbm90IGhhdmUgZ290dGVuIGEgbGF5b3V0LgotICAgICAgICBtX3gg
PSByZWN0LngoKTsgbV95ID0gcmVjdC55KCk7IG1fd2lkdGggPSByZWN0LndpZHRoKCk7IG1faGVp
Z2h0ID0gcmVjdC5oZWlnaHQoKTsKKyAgICAgICAgbV94ID0gcmVjdC54KCk7CisgICAgICAgIG1f
eSA9IHJlY3QueSgpOworICAgICAgICBtX3dpZHRoID0gcmVjdC53aWR0aCgpOworICAgICAgICBt
X2hlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIHJlcGFpbnQoKTsKICAgICAgICAgcmVw
YWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUpOwotICAgICAgICBtX3ggPSBuZXdYOyBtX3kgPSBu
ZXdZOyBtX3dpZHRoID0gbmV3V2lkdGg7IG1faGVpZ2h0ID0gbmV3SGVpZ2h0OworCisgICAgICAg
IG1feCA9IG5ld1g7CisgICAgICAgIG1feSA9IG5ld1k7CisgICAgICAgIG1fd2lkdGggPSBuZXdX
aWR0aDsKKyAgICAgICAgbV9oZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICAgICAgIHJlcGFpbnQoKTsK
ICAgICAgICAgcmVwYWludE92ZXJoYW5naW5nRmxvYXRzKHRydWUpOwogICAgIH0KQEAgLTk5OCwy
NyArOTk0LDIxIEBAIGludCBSZW5kZXJCb3g6OnJlbGF0aXZlUG9zaXRpb25PZmZzZXRYKCkKICAg
ICAgICAgICAgIHJldHVybiAtc3R5bGUoKS0+cmlnaHQoKS5jYWxjVmFsdWUoY29udGFpbmluZ0Js
b2NrV2lkdGgoKSk7CiAgICAgICAgIHJldHVybiBzdHlsZSgpLT5sZWZ0KCkuY2FsY1ZhbHVlKGNv
bnRhaW5pbmdCbG9ja1dpZHRoKCkpOwogICAgIH0KLSAgICBpZighc3R5bGUoKS0+cmlnaHQoKS5p
c0F1dG8oKSkKKyAgICBpZiAoIXN0eWxlKCktPnJpZ2h0KCkuaXNBdXRvKCkpCiAgICAgICAgIHJl
dHVybiAtc3R5bGUoKS0+cmlnaHQoKS5jYWxjVmFsdWUoY29udGFpbmluZ0Jsb2NrV2lkdGgoKSk7
CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludCBSZW5kZXJCb3g6OnJlbGF0aXZlUG9zaXRpb25PZmZz
ZXRZKCkgY29uc3QKIHsKLSAgICBpbnQgdHkgPSAwOwotICAgIGlmKCFzdHlsZSgpLT50b3AoKS5p
c0F1dG8oKSkKLSAgICB7Ci0gICAgICAgIGlmICghc3R5bGUoKS0+dG9wKCkuaXNQZXJjZW50KCkK
LSAgICAgICAgICAgICAgICB8fCBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+aGVpZ2h0KCku
aXNGaXhlZCgpKQotICAgICAgICAgICAgdHkgPSBzdHlsZSgpLT50b3AoKS5jYWxjVmFsdWUoY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0KCkpOwotICAgIH0KLSAgICBlbHNlIGlmKCFzdHlsZSgpLT5ib3R0
b20oKS5pc0F1dG8oKSkKLSAgICB7Ci0gICAgICAgIGlmICghc3R5bGUoKS0+Ym90dG9tKCkuaXNQ
ZXJjZW50KCkKLSAgICAgICAgICAgICAgICB8fCBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+
aGVpZ2h0KCkuaXNGaXhlZCgpKQotICAgICAgICAgICAgdHkgPSAtc3R5bGUoKS0+Ym90dG9tKCku
Y2FsY1ZhbHVlKGNvbnRhaW5pbmdCbG9ja0hlaWdodCgpKTsKKyAgICBpZiAoIXN0eWxlKCktPnRv
cCgpLmlzQXV0bygpKSB7CisgICAgICAgIGlmICghc3R5bGUoKS0+dG9wKCkuaXNQZXJjZW50KCkg
fHwgY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPmhlaWdodCgpLmlzRml4ZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdHlsZSgpLT50b3AoKS5jYWxjVmFsdWUoY29udGFpbmluZ0Jsb2NrSGVp
Z2h0KCkpOworICAgIH0gZWxzZSBpZiAoIXN0eWxlKCktPmJvdHRvbSgpLmlzQXV0bygpKSB7Cisg
ICAgICAgIGlmICghc3R5bGUoKS0+Ym90dG9tKCkuaXNQZXJjZW50KCkgfHwgY29udGFpbmluZ0Js
b2NrKCktPnN0eWxlKCktPmhlaWdodCgpLmlzRml4ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAt
c3R5bGUoKS0+Ym90dG9tKCkuY2FsY1ZhbHVlKGNvbnRhaW5pbmdCbG9ja0hlaWdodCgpKTsKICAg
ICB9Ci0gICAgcmV0dXJuIHR5OworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFJlbmRlckJveDo6
Y2FsY1dpZHRoKCkKQEAgLTEwMjcsNyArMTAxNyw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjV2lk
dGgoKQogICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgCisKICAgICAvLyBJZiBsYXlvdXQgaXMgbGltaXRlZCB0byBhIHN1YnRyZWUs
IHRoZSBzdWJ0cmVlIHJvb3QncyB3aWR0aCBkb2VzIG5vdCBjaGFuZ2UuCiAgICAgaWYgKG5vZGUo
KSAmJiB2aWV3KCktPmZyYW1lVmlldygpICYmIHZpZXcoKS0+ZnJhbWVWaWV3KCktPmxheW91dFJv
b3QoKSA9PSBub2RlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNDMsOSArMTAzMyw5IEBAIHZv
aWQgUmVuZGVyQm94OjpjYWxjV2lkdGgoKQogICAgIGJvb2wgaW5WZXJ0aWNhbEJveCA9IHBhcmVu
dCgpLT5pc0ZsZXhpYmxlQm94KCkgJiYgKHBhcmVudCgpLT5zdHlsZSgpLT5ib3hPcmllbnQoKSA9
PSBWRVJUSUNBTCk7CiAgICAgYm9vbCBzdHJldGNoaW5nID0gKHBhcmVudCgpLT5zdHlsZSgpLT5i
b3hBbGlnbigpID09IEJTVFJFVENIKTsKICAgICBib29sIHRyZWF0QXNSZXBsYWNlZCA9IGlzUmVw
bGFjZWQoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSAmJiAoIWluVmVydGljYWxC
b3ggfHwgIXN0cmV0Y2hpbmcpOwotICAgIAorCiAgICAgTGVuZ3RoIHdpZHRoID0gKHRyZWF0QXNS
ZXBsYWNlZCkgPyBMZW5ndGgoY2FsY1JlcGxhY2VkV2lkdGgoKSwgRml4ZWQpIDogc3R5bGUoKS0+
d2lkdGgoKTsKLSAgICAKKwogICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygp
OwogICAgIGludCBjb250YWluZXJXaWR0aCA9IG1heCgwLCBjb250YWluaW5nQmxvY2tXaWR0aCgp
KTsKIApAQCAtMTA1OCw3ICsxMDQ4LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAg
ICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjTWluVmFsdWUoY29udGFpbmVy
V2lkdGgpOwogICAgICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQogICAgICAgICAgICAgbV93aWR0
aCA9IG1heCh3aWR0aC52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSwgbV9taW5XaWR0aCk7Ci0gICAgICAgIAorCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwNjgsNyArMTA1OCw3IEBAIHZvaWQgUmVuZGVy
Qm94OjpjYWxjV2lkdGgoKQogICAgIGVsc2UgewogICAgICAgICAvLyBDYWxjdWxhdGUgV2lkdGgK
ICAgICAgICAgbV93aWR0aCA9IGNhbGNXaWR0aFVzaW5nKFdpZHRoLCBjb250YWluZXJXaWR0aCk7
Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENhbGN1bGF0ZSBNYXhXaWR0aAogICAgICAgICBpZiAo
IXN0eWxlKCktPm1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSkgewogICAgICAgICAgICAgaW50IG1h
eFcgPSBjYWxjV2lkdGhVc2luZyhNYXhXaWR0aCwgY29udGFpbmVyV2lkdGgpOwpAQCAtMTA3OSwx
MyArMTA2OSwxMyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY1dpZHRoKCkKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIENhbGN1bGF0ZSBNaW5XaWR0aAotICAgICAgICBpbnQgbWluVyA9IGNhbGNXaWR0
aFVzaW5nKE1pbldpZHRoLCBjb250YWluZXJXaWR0aCk7ICAgICAgICAKKyAgICAgICAgaW50IG1p
blcgPSBjYWxjV2lkdGhVc2luZyhNaW5XaWR0aCwgY29udGFpbmVyV2lkdGgpOwogICAgICAgICBp
ZiAobV93aWR0aCA8IG1pblcpIHsKICAgICAgICAgICAgIG1fd2lkdGggPSBtaW5XOwogICAgICAg
ICAgICAgd2lkdGggPSBzdHlsZSgpLT5taW5XaWR0aCgpOwogICAgICAgICB9CiAgICAgfQotICAg
IAorCiAgICAgaWYgKG1fd2lkdGggPCBtX21pbldpZHRoICYmIHN0cmV0Y2hlc1RvTWluSW50cmlu
c2ljV2lkdGgoKSkgewogICAgICAgICBtX3dpZHRoID0gbV9taW5XaWR0aDsKICAgICAgICAgd2lk
dGggPSBMZW5ndGgobV93aWR0aCwgRml4ZWQpOwpAQCAtMTEwMCw3ICsxMDkwLDcgQEAgdm9pZCBS
ZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAwOwogICAgICAg
ICBjYWxjSG9yaXpvbnRhbE1hcmdpbnMobWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsIGNvbnRhaW5l
cldpZHRoKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoY29udGFpbmVyV2lkdGggJiYgY29udGFp
bmVyV2lkdGggIT0gKG1fd2lkdGggKyBtX21hcmdpbkxlZnQgKyBtX21hcmdpblJpZ2h0KQogICAg
ICAgICAgICAgJiYgIWlzRmxvYXRpbmcoKSAmJiAhaXNJbmxpbmUoKSAmJiAhY2ItPmlzRmxleGli
bGVCb3goKSkgewogICAgICAgICBpZiAoY2ItPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikK
QEAgLTExMjYsMTQgKzExMTYsMTQgQEAgaW50IFJlbmRlckJveDo6Y2FsY1dpZHRoVXNpbmcoV2lk
dGhUeXBlIAogICAgICAgICBpbnQgbWFyZ2luUmlnaHQgPSBzdHlsZSgpLT5tYXJnaW5SaWdodCgp
LmNhbGNNaW5WYWx1ZShjdyk7CiAgICAgICAgIGlmIChjdykKICAgICAgICAgICAgIHdpZHRoID0g
Y3cgLSBtYXJnaW5MZWZ0IC0gbWFyZ2luUmlnaHQ7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChz
aXplc1RvSW50cmluc2ljV2lkdGgod2lkdGhUeXBlKSkgewogICAgICAgICAgICAgd2lkdGggPSBt
YXgod2lkdGgsIG1fbWluV2lkdGgpOwogICAgICAgICAgICAgd2lkdGggPSBtaW4od2lkdGgsIG1f
bWF4V2lkdGgpOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIHdpZHRoID0gY2FsY0Jv
cmRlckJveFdpZHRoKHcuY2FsY1ZhbHVlKGN3KSk7Ci0gICAgCisKICAgICByZXR1cm4gd2lkdGg7
CiB9CiAKQEAgLTExNDEsMTYgKzExMzEsMTYgQEAgYm9vbCBSZW5kZXJCb3g6OnNpemVzVG9JbnRy
aW5zaWNXaWR0aChXaQogewogICAgIC8vIE1hcnF1ZWVzIGluIFdpbklFIGFyZSBsaWtlIGEgbWl4
dHVyZSBvZiBibG9ja3MgYW5kIGlubGluZS1ibG9ja3MuICBUaGV5IHNpemUgYXMgdGhvdWdoIHRo
ZXkncmUgYmxvY2tzLAogICAgIC8vIGJ1dCB0aGV5IGFsbG93IHRleHQgdG8gc2l0IG9uIHRoZSBz
YW1lIGxpbmUgYXMgdGhlIG1hcnF1ZWUuCi0gICAgaWYgKGlzRmxvYXRpbmcoKSB8fCAoaXNDb21w
YWN0KCkgJiYgaXNJbmxpbmUoKSkgfHwgCisgICAgaWYgKGlzRmxvYXRpbmcoKSB8fCAoaXNDb21w
YWN0KCkgJiYgaXNJbmxpbmUoKSkgfHwKICAgICAgICAgKGlzSW5saW5lQmxvY2tPcklubGluZVRh
YmxlKCkgJiYgIWlzSFRNTE1hcnF1ZWUoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAor
CiAgICAgLy8gVGhpcyBjb2RlIG1heSBsb29rIGEgYml0IHN0cmFuZ2UuICBCYXNpY2FsbHkgd2lk
dGg6aW50cmluc2ljIHNob3VsZCBjbGFtcCB0aGUgc2l6ZSB3aGVuIHRlc3RpbmcgYm90aAogICAg
IC8vIG1pbi13aWR0aCBhbmQgd2lkdGguICBtYXgtd2lkdGggaXMgb25seSBjbGFtcGVkIGlmIGl0
IGlzIGFsc28gaW50cmluc2ljLgogICAgIExlbmd0aCB3aWR0aCA9ICh3aWR0aFR5cGUgPT0gTWF4
V2lkdGgpID8gc3R5bGUoKS0+bWF4V2lkdGgoKSA6IHN0eWxlKCktPndpZHRoKCk7CiAgICAgaWYg
KHdpZHRoLnR5cGUoKSA9PSBJbnRyaW5zaWMpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIAor
CiAgICAgLy8gQ2hpbGRyZW4gb2YgYSBob3Jpem9udGFsIG1hcnF1ZWUgZG8gbm90IGZpbGwgdGhl
IGNvbnRhaW5lciBieSBkZWZhdWx0LgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRlYWwgd2l0aCBN
QVVUTyB2YWx1ZSBwcm9wZXJseS4gIEl0IGNvdWxkIGJlIHZlcnRpY2FsLgogICAgIGlmIChwYXJl
bnQoKS0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT01BUlFVRUUpIHsKQEAgLTExNTgsNyArMTE0
OCw3IEBAIGJvb2wgUmVuZGVyQm94OjpzaXplc1RvSW50cmluc2ljV2lkdGgoV2kKICAgICAgICAg
aWYgKGRpciA9PSBNQVVUTyB8fCBkaXIgPT0gTUZPUldBUkQgfHwgZGlyID09IE1CQUNLV0FSRCB8
fCBkaXIgPT0gTUxFRlQgfHwgZGlyID09IE1SSUdIVCkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICAKKwogICAgIC8vIEZsZXhpYmxlIGhvcml6b250YWwgYm94ZXMgbGF5IG91
dCBjaGlsZHJlbiBhdCB0aGVpciBpbnRyaW5zaWMgd2lkdGhzLiAgQWxzbyB2ZXJ0aWNhbCBib3hl
cwogICAgIC8vIHRoYXQgZG9uJ3Qgc3RyZXRjaCB0aGVpciBraWRzIGxheSBvdXQgdGhlaXIgY2hp
bGRyZW4gYXQgdGhlaXIgaW50cmluc2ljIHdpZHRocy4KICAgICBpZiAocGFyZW50KCktPmlzRmxl
eGlibGVCb3goKSAmJgpAQCAtMTE2OCwzMSArMTE1OCwzMSBAQCBib29sIFJlbmRlckJveDo6c2l6
ZXNUb0ludHJpbnNpY1dpZHRoKFdpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRl
ckJveDo6Y2FsY0hvcml6b250YWxNYXJnaW5zKGNvbnN0IExlbmd0aCYgbWwsIGNvbnN0IExlbmd0
aCYgbXIsIGludCBjdykKK3ZvaWQgUmVuZGVyQm94OjpjYWxjSG9yaXpvbnRhbE1hcmdpbnMoY29u
c3QgTGVuZ3RoJiBtYXJnaW5MZWZ0LCBjb25zdCBMZW5ndGgmIG1hcmdpblJpZ2h0LCBpbnQgY29u
dGFpbmVyV2lkdGgpCiB7CiAgICAgaWYgKGlzRmxvYXRpbmcoKSB8fCBpc0lubGluZSgpKSB7CiAg
ICAgICAgIC8vIElubGluZSBibG9ja3MvdGFibGVzIGFuZCBmbG9hdHMgZG9uJ3QgaGF2ZSB0aGVp
ciBtYXJnaW5zIGluY3JlYXNlZC4KLSAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWwuY2FsY01pblZh
bHVlKGN3KTsKLSAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1yLmNhbGNNaW5WYWx1ZShjdyk7Cisg
ICAgICAgIG1fbWFyZ2luTGVmdCA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldp
ZHRoKTsKKyAgICAgICAgbV9tYXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1ZShj
b250YWluZXJXaWR0aCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoKG1sLmlz
QXV0bygpICYmIG1yLmlzQXV0bygpICYmIG1fd2lkdGggPCBjdykgfHwKLSAgICAgICAgKCFtbC5p
c0F1dG8oKSAmJiAhbXIuaXNBdXRvKCkgJiYgY29udGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPnRl
eHRBbGlnbigpID09IEtIVE1MX0NFTlRFUikpIHsKLSAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWF4
KDAsIChjdyAtIG1fd2lkdGgpIC8gMik7Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjdyAtIG1f
d2lkdGggLSBtX21hcmdpbkxlZnQ7Ci0gICAgfSBlbHNlIGlmICgobXIuaXNBdXRvKCkgJiYgbV93
aWR0aCA8IGN3KSB8fAotICAgICAgICghbWwuaXNBdXRvKCkgJiYgY29udGFpbmluZ0Jsb2NrKCkt
PnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCAmJiBjb250YWluaW5nQmxvY2soKS0+c3R5bGUo
KS0+dGV4dEFsaWduKCkgPT0gS0hUTUxfTEVGVCkpIHsKLSAgICAgICAgbV9tYXJnaW5MZWZ0ID0g
bWwuY2FsY1ZhbHVlKGN3KTsKLSAgICAgICAgbV9tYXJnaW5SaWdodCA9IGN3IC0gbV93aWR0aCAt
IG1fbWFyZ2luTGVmdDsKLSAgICB9IGVsc2UgaWYgKChtbC5pc0F1dG8oKSAmJiBtX3dpZHRoIDwg
Y3cpIHx8Ci0gICAgICAgICghbXIuaXNBdXRvKCkgJiYgY29udGFpbmluZ0Jsb2NrKCktPnN0eWxl
KCktPmRpcmVjdGlvbigpID09IExUUiAmJiBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+dGV4
dEFsaWduKCkgPT0gS0hUTUxfUklHSFQpKSB7Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtci5j
YWxjVmFsdWUoY3cpOwotICAgICAgICBtX21hcmdpbkxlZnQgPSBjdyAtIG1fd2lkdGggLSBtX21h
cmdpblJpZ2h0OworICAgIGlmICgobWFyZ2luTGVmdC5pc0F1dG8oKSAmJiBtYXJnaW5SaWdodC5p
c0F1dG8oKSAmJiBtX3dpZHRoIDwgY29udGFpbmVyV2lkdGgpCisgICAgICAgICAgICB8fCAoIW1h
cmdpbkxlZnQuaXNBdXRvKCkgJiYgIW1hcmdpblJpZ2h0LmlzQXV0bygpICYmIGNvbnRhaW5pbmdC
bG9jaygpLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBLSFRNTF9DRU5URVIpKSB7CisgICAgICAg
IG1fbWFyZ2luTGVmdCA9IG1heCgwLCAoY29udGFpbmVyV2lkdGggLSBtX3dpZHRoKSAvIDIpOwor
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoIC0gbV9tYXJn
aW5MZWZ0OworICAgIH0gZWxzZSBpZiAoKG1hcmdpblJpZ2h0LmlzQXV0bygpICYmIG1fd2lkdGgg
PCBjb250YWluZXJXaWR0aCkKKyAgICAgICAgICAgIHx8ICghbWFyZ2luTGVmdC5pc0F1dG8oKSAm
JiBjb250YWluaW5nQmxvY2soKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMICYmIGNvbnRh
aW5pbmdCbG9jaygpLT5zdHlsZSgpLT50ZXh0QWxpZ24oKSA9PSBLSFRNTF9MRUZUKSkgeworICAg
ICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7
CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjb250YWluZXJXaWR0aCAtIG1fd2lkdGggLSBtX21h
cmdpbkxlZnQ7CisgICAgfSBlbHNlIGlmICgobWFyZ2luTGVmdC5pc0F1dG8oKSAmJiBtX3dpZHRo
IDwgY29udGFpbmVyV2lkdGgpCisgICAgICAgICAgICB8fCAoIW1hcmdpblJpZ2h0LmlzQXV0bygp
ICYmIGNvbnRhaW5pbmdCbG9jaygpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgJiYgY29u
dGFpbmluZ0Jsb2NrKCktPnN0eWxlKCktPnRleHRBbGlnbigpID09IEtIVE1MX1JJR0hUKSkgewor
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldp
ZHRoKTsKKyAgICAgICAgbV9tYXJnaW5MZWZ0ID0gY29udGFpbmVyV2lkdGggLSBtX3dpZHRoIC0g
bV9tYXJnaW5SaWdodDsKICAgICB9IGVsc2UgewotICAgICAgICAvLyBUaGlzIG1ha2VzIGF1dG8g
bWFyZ2lucyAwIGlmIHdlIGZhaWxlZCBhIG1fd2lkdGggPCBjdyB0ZXN0IGFib3ZlIChjc3MyLjEs
IDEwLjMuMykuCi0gICAgICAgIG1fbWFyZ2luTGVmdCA9IG1sLmNhbGNNaW5WYWx1ZShjdyk7Ci0g
ICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtci5jYWxjTWluVmFsdWUoY3cpOworICAgICAgICAvLyBU
aGlzIG1ha2VzIGF1dG8gbWFyZ2lucyAwIGlmIHdlIGZhaWxlZCBhIG1fd2lkdGggPCBjb250YWlu
ZXJXaWR0aCB0ZXN0IGFib3ZlIChjc3MyLjEsIDEwLjMuMykuCisgICAgICAgIG1fbWFyZ2luTGVm
dCA9IG1hcmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKKyAgICAgICAgbV9t
YXJnaW5SaWdodCA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAg
ICAgfQogfQogCkBAIC0xMjA0LDIwICsxMTk0LDE5IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjSGVp
Z2h0KCkKIAogICAgIGlmIChpc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgY2FsY0Fic29sdXRlVmVy
dGljYWwoKTsKLSAgICBlbHNlCi0gICAgeworICAgIGVsc2UgewogICAgICAgICBjYWxjVmVydGlj
YWxNYXJnaW5zKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBGb3IgdGFibGVzLCBjYWxjdWxhdGUg
bWFyZ2lucyBvbmx5CisKKyAgICAgICAgLy8gRm9yIHRhYmxlcywgY2FsY3VsYXRlIG1hcmdpbnMg
b25seS4KICAgICAgICAgaWYgKGlzVGFibGUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCisKICAgICAgICAgTGVuZ3RoIGg7CiAgICAgICAgIGJvb2wgaW5Ib3Jpem9udGFsQm94ID0g
cGFyZW50KCktPmlzRmxleGlibGVCb3goKSAmJiBwYXJlbnQoKS0+c3R5bGUoKS0+Ym94T3JpZW50
KCkgPT0gSE9SSVpPTlRBTDsKICAgICAgICAgYm9vbCBzdHJldGNoaW5nID0gcGFyZW50KCktPnN0
eWxlKCktPmJveEFsaWduKCkgPT0gQlNUUkVUQ0g7CiAgICAgICAgIGJvb2wgdHJlYXRBc1JlcGxh
Y2VkID0gaXNSZXBsYWNlZCgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpICYmICgh
aW5Ib3Jpem9udGFsQm94IHx8ICFzdHJldGNoaW5nKTsKICAgICAgICAgYm9vbCBjaGVja01pbk1h
eEhlaWdodCA9IGZhbHNlOwotICAgICAgICAKKwogICAgICAgICAvLyBUaGUgcGFyZW50IGJveCBp
cyBmbGV4aW5nIHVzLCBzbyBpdCBoYXMgaW5jcmVhc2VkIG9yIGRlY3JlYXNlZCBvdXIgaGVpZ2h0
LiAgV2UgaGF2ZSB0bwogICAgICAgICAvLyBncmFiIG91ciBjYWNoZWQgZmxleGlibGUgaGVpZ2h0
LgogICAgICAgICBpZiAobV9vdmVycmlkZVNpemUgIT0gLTEgJiYgcGFyZW50KCktPmlzRmxleGli
bGVCb3goKSAmJiBwYXJlbnQoKS0+c3R5bGUoKS0+Ym94T3JpZW50KCkgPT0gVkVSVElDQUwKQEAg
LTEyMjksMTAgKzEyMTgsMTAgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNIZWlnaHQoKQogICAgICAg
ICAgICAgaCA9IHN0eWxlKCktPmhlaWdodCgpOwogICAgICAgICAgICAgY2hlY2tNaW5NYXhIZWln
aHQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEJsb2NrIGNoaWxk
cmVuIG9mIGhvcml6b250YWwgZmxleGlibGUgYm94ZXMgZmlsbCB0aGUgaGVpZ2h0IG9mIHRoZSBi
b3guCiAgICAgICAgIGlmIChoLmlzQXV0bygpICYmIHBhcmVudCgpLT5pc0ZsZXhpYmxlQm94KCkg
JiYgcGFyZW50KCktPnN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUwKLSAgICAgICAg
ICAgICYmIHBhcmVudCgpLT5pc1N0cmV0Y2hpbmdDaGlsZHJlbigpKSB7CisgICAgICAgICAgICAg
ICAgJiYgcGFyZW50KCktPmlzU3RyZXRjaGluZ0NoaWxkcmVuKCkpIHsKICAgICAgICAgICAgIGgg
PSBMZW5ndGgocGFyZW50KCktPmNvbnRlbnRIZWlnaHQoKSAtIG1hcmdpblRvcCgpIC0gbWFyZ2lu
Qm90dG9tKCkgLQogICAgICAgICAgICAgICAgICAgICAgICBib3JkZXJUb3AoKSAtIHBhZGRpbmdU
b3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ0JvdHRvbSgpLCBGaXhlZCk7CiAgICAgICAg
ICAgICBjaGVja01pbk1heEhlaWdodCA9IGZhbHNlOwpAQCAtMTI0OSwxNiArMTIzOCwxNSBAQCB2
b2lkIFJlbmRlckJveDo6Y2FsY0hlaWdodCgpCiAgICAgICAgICAgICAgICAgbWF4SCA9IGhlaWdo
dDsKICAgICAgICAgICAgIGhlaWdodCA9IG1pbihtYXhILCBoZWlnaHQpOwogICAgICAgICAgICAg
aGVpZ2h0ID0gbWF4KG1pbkgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgLy8gVGhlIG9ubHkgdGltZXMgd2UgZG9uJ3QgY2hlY2sgbWluL21heCBoZWlnaHQg
YXJlIHdoZW4gYSBmaXhlZCBsZW5ndGggaGFzIAorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IC8vIFRoZSBvbmx5IHRpbWVzIHdlIGRvbid0IGNoZWNrIG1pbi9tYXggaGVpZ2h0IGFyZSB3aGVu
IGEgZml4ZWQgbGVuZ3RoIGhhcwogICAgICAgICAgICAgLy8gYmVlbiBnaXZlbiBhcyBhbiBvdmVy
cmlkZS4gIEp1c3QgdXNlIHRoYXQuICBUaGUgdmFsdWUgaGFzIGFscmVhZHkgYmVlbiBhZGp1c3Rl
ZAogICAgICAgICAgICAgLy8gZm9yIGJveC1zaXppbmcuCiAgICAgICAgICAgICBoZWlnaHQgPSBo
LnZhbHVlKCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ1RvcCgpICsg
cGFkZGluZ0JvdHRvbSgpOwogCiAgICAgICAgIG1faGVpZ2h0ID0gaGVpZ2h0OwogICAgIH0KLSAg
ICAKKwogICAgIC8vIFdpbklFIHF1aXJrOiBUaGUgPGh0bWw+IGJsb2NrIGFsd2F5cyBmaWxscyB0
aGUgZW50aXJlIGNhbnZhcyBpbiBxdWlya3MgbW9kZS4gIFRoZSA8Ym9keT4gYWx3YXlzIGZpbGxz
IHRoZQogICAgIC8vIDxodG1sPiBibG9jayBpbiBxdWlya3MgbW9kZS4gIE9ubHkgYXBwbHkgdGhp
cyBxdWlyayBpZiB0aGUgYmxvY2sgaXMgbm9ybWFsIGZsb3cgYW5kIG5vIGhlaWdodAogICAgIC8v
IGlzIHNwZWNpZmllZC4KQEAgLTEyNjgsOCArMTI1Niw4IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxj
SGVpZ2h0KCkKICAgICAgICAgaWYgKGlzUm9vdCgpKQogICAgICAgICAgICAgbV9oZWlnaHQgPSBt
YXgobV9oZWlnaHQsIHZpc0hlaWdodCAtIG1hcmdpbnMpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBtX2hlaWdodCA9IG1heChtX2hlaWdodCwgdmlzSGVpZ2h0IC0gCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG1hcmdpbnMgKyBwYXJlbnQoKS0+bWFyZ2luVG9wKCkgKyBwYXJlbnQo
KS0+bWFyZ2luQm90dG9tKCkgKyAKKyAgICAgICAgICAgIG1faGVpZ2h0ID0gbWF4KG1faGVpZ2h0
LCB2aXNIZWlnaHQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXJnaW5zICsgcGFy
ZW50KCktPm1hcmdpblRvcCgpICsgcGFyZW50KCktPm1hcmdpbkJvdHRvbSgpICsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50KCktPmJvcmRlclRvcCgpICsgcGFyZW50KCktPmJv
cmRlckJvdHRvbSgpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50KCktPnBh
ZGRpbmdUb3AoKSArIHBhcmVudCgpLT5wYWRkaW5nQm90dG9tKCkpKTsKICAgICB9CkBAIC0xMzAx
LDcgKzEyODksNyBAQCBpbnQgUmVuZGVyQm94OjpjYWxjUGVyY2VudGFnZUhlaWdodChjb25zCiAg
ICAgICAgIC8vIGJsb2NrIHRoYXQgbWF5IGhhdmUgYSBzcGVjaWZpZWQgaGVpZ2h0IGFuZCB0aGVu
IHVzZSBpdC4gIEluIHN0cmljdCBtb2RlLCB0aGlzIHZpb2xhdGVzIHRoZQogICAgICAgICAvLyBz
cGVjaWZpY2F0aW9uLCB3aGljaCBzdGF0ZXMgdGhhdCBwZXJjZW50YWdlIGhlaWdodHMganVzdCBy
ZXZlcnQgdG8gYXV0byBpZiB0aGUgY29udGFpbmluZwogICAgICAgICAvLyBibG9jayBoYXMgYW4g
YXV0byBoZWlnaHQuCi0gICAgICAgIGZvciAoIDsgIWNiLT5pc1JlbmRlclZpZXcoKSAmJiAhY2It
PmlzQm9keSgpICYmICFjYi0+aXNUYWJsZUNlbGwoKSAmJiAhY2ItPmlzUG9zaXRpb25lZCgpICYm
CisgICAgICAgIGZvciAoOyAhY2ItPmlzUmVuZGVyVmlldygpICYmICFjYi0+aXNCb2R5KCkgJiYg
IWNiLT5pc1RhYmxlQ2VsbCgpICYmICFjYi0+aXNQb3NpdGlvbmVkKCkgJiYKICAgICAgICAgICAg
ICAgICBjYi0+c3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCk7IGNiID0gY2ItPmNvbnRhaW5pbmdC
bG9jaygpKTsKICAgICB9CiAKQEAgLTEzNzEsNyArMTM1OSw3IEBAIGludCBSZW5kZXJCb3g6OmNh
bGNSZXBsYWNlZFdpZHRoKCkgY29uc3QKIH0KIAogaW50IFJlbmRlckJveDo6Y2FsY1JlcGxhY2Vk
V2lkdGhVc2luZyhMZW5ndGggd2lkdGgpIGNvbnN0Ci17ICAgIAorewogICAgIHN3aXRjaCAod2lk
dGgudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgRml4ZWQ6CiAgICAgICAgICAgICByZXR1cm4gY2Fs
Y0NvbnRlbnRCb3hXaWR0aCh3aWR0aC52YWx1ZSgpKTsKQEAgLTE0MDgsNyArMTM5Niw3IEBAIGlu
dCBSZW5kZXJCb3g6OmNhbGNSZXBsYWNlZEhlaWdodFVzaW5nKEwKICAgICAgICAgICAgICAgICBj
Yi0+Y2FsY0hlaWdodCgpOwogICAgICAgICAgICAgICAgIGludCBuZXdIZWlnaHQgPSBjYi0+Y2Fs
Y0NvbnRlbnRCb3hIZWlnaHQoY2ItPmNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAg
Y2ItPnNldEhlaWdodChvbGRIZWlnaHQpOwotICAgICAgICAKKwogICAgICAgICAgICAgICAgIHJl
dHVybiBjYWxjQ29udGVudEJveEhlaWdodChoZWlnaHQuY2FsY1ZhbHVlKG5ld0hlaWdodCkpOwog
ICAgICAgICAgICAgfQogCkBAIC0xNDM3LDEwICsxNDI1LDEwIEBAIGludCBSZW5kZXJCb3g6OmF2
YWlsYWJsZUhlaWdodFVzaW5nKGNvbnMKICAgICAvLyBoZWlnaHQsIGFuZCB0aGVuIHdoZW4gd2Ug
bGF5IG91dCBhZ2FpbiB3ZSdsbCB1c2UgdGhlIGNhbGN1bGF0aW9uIGJlbG93LgogICAgIGlmIChp
c1RhYmxlQ2VsbCgpICYmIChoLmlzQXV0bygpIHx8IGguaXNQZXJjZW50KCkpKQogICAgICAgICBy
ZXR1cm4gb3ZlcnJpZGVTaXplKCkgLSAoYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSk7Ci0gICAgCisKICAgICBpZiAoaC5pc1BlcmNl
bnQoKSkKICAgICAgICByZXR1cm4gY2FsY0NvbnRlbnRCb3hIZWlnaHQoaC5jYWxjVmFsdWUoY29u
dGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgpKSk7Ci0gICAgICAgCisKICAgICByZXR1
cm4gY29udGFpbmluZ0Jsb2NrKCktPmF2YWlsYWJsZUhlaWdodCgpOwogfQogCkBAIC0xNDUyLDM2
ICsxNDQwLDIzIEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjVmVydGljYWxNYXJnaW5zKCkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIExlbmd0aCB0bSA9IHN0eWxlKCktPm1hcmdpblRvcCgp
OwotICAgIExlbmd0aCBibSA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpOwotCiAgICAgLy8gbWFy
Z2lucyBhcmUgY2FsY3VsYXRlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIF93aWR0aF8gb2YKICAgICAv
LyB0aGUgY29udGFpbmluZyBibG9jayAoOC4zKQogICAgIGludCBjdyA9IGNvbnRhaW5pbmdCbG9j
aygpLT5jb250ZW50V2lkdGgoKTsKIAotICAgIG1fbWFyZ2luVG9wID0gdG0uY2FsY01pblZhbHVl
KGN3KTsKLSAgICBtX21hcmdpbkJvdHRvbSA9IGJtLmNhbGNNaW5WYWx1ZShjdyk7Ci19Ci0KLXZv
aWQgUmVuZGVyQm94OjpzZXRTdGF0aWNYKGludCBzdGF0aWNYKQotewotICAgIG1fc3RhdGljWCA9
IHN0YXRpY1g7Ci19Ci0KLXZvaWQgUmVuZGVyQm94OjpzZXRTdGF0aWNZKGludCBzdGF0aWNZKQot
ewotICAgIG1fc3RhdGljWSA9IHN0YXRpY1k7CisgICAgbV9tYXJnaW5Ub3AgPSBzdHlsZSgpLT5t
YXJnaW5Ub3AoKS5jYWxjTWluVmFsdWUoY3cpOworICAgIG1fbWFyZ2luQm90dG9tID0gc3R5bGUo
KS0+bWFyZ2luQm90dG9tKCkuY2FsY01pblZhbHVlKGN3KTsKIH0KIAogaW50IFJlbmRlckJveDo6
Y29udGFpbmluZ0Jsb2NrV2lkdGhGb3JQb3NpdGlvbmVkKGNvbnN0IFJlbmRlck9iamVjdCogY29u
dGFpbmluZ0Jsb2NrKSBjb25zdAogewogICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzSW5saW5l
KCkpIHsKICAgICAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jay0+aXNSZWxQb3NpdGlvbmVkKCkp
OwotICAgIAorCiAgICAgICAgIGNvbnN0IFJlbmRlckZsb3cqIGZsb3cgPSBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJGbG93Kj4oY29udGFpbmluZ0Jsb2NrKTsKICAgICAgICAgSW5saW5lRmxvd0Jv
eCogZmlyc3QgPSBmbG93LT5maXJzdExpbmVCb3goKTsKICAgICAgICAgSW5saW5lRmxvd0JveCog
bGFzdCA9IGZsb3ctPmxhc3RMaW5lQm94KCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIElmIHRo
ZSBjb250YWluaW5nIGJsb2NrIGlzIGVtcHR5LCByZXR1cm4gYSB3aWR0aCBvZiAwLgogICAgICAg
ICBpZiAoIWZpcnN0IHx8ICFsYXN0KQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTExLDEw
ICsxNDg2LDkgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogewog
ICAgIGlmIChpc1JlcGxhY2VkKCkpIHsKICAgICAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFJl
cGxhY2VkKCk7Ci0gICAgICAgIHJldHVybjsgCisgICAgICAgIHJldHVybjsKICAgICB9CiAKLQog
ICAgIC8vIFFVRVNUSU9OUwogICAgIC8vIEZJWE1FIDE6IFdoaWNoIFJlbmRlck9iamVjdCdzICdk
aXJlY3Rpb24nIHByb3BlcnR5IHNob3VsZCB1c2VkOiB0aGUKICAgICAvLyBjb250YWluaW5nIGJs
b2NrIChjYikgYXMgdGhlIHNwZWMgc2VlbXMgdG8gaW1wbHksIHRoZSBwYXJlbnQgKHBhcmVudCgp
KSBhcwpAQCAtMTYzMiw3ICsxNjA2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhv
cml6b250YWwoKQogICAgICAgICBpbnQgbWluTWFyZ2luUmlnaHQ7CiAgICAgICAgIGludCBtaW5Y
UG9zOwogCi0gICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoc3R5bGUoKS0+bWlu
V2lkdGgoKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwgCisgICAgICAgIGNh
bGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoc3R5bGUoKS0+bWluV2lkdGgoKSwgY29udGFpbmVy
QmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5S
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aCwgbWlu
TWFyZ2luTGVmdCwgbWluTWFyZ2luUmlnaHQsIG1pblhQb3MpOwpAQCAtMTY0Niw3ICsxNjIwLDcg
QEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogICAgIH0KIAogICAg
IGlmIChtX3dpZHRoIDwgbV9taW5XaWR0aCAtIGJvcmRlcnNQbHVzUGFkZGluZyAmJiBzdHJldGNo
ZXNUb01pbkludHJpbnNpY1dpZHRoKCkpCi0gICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxW
YWx1ZXMoTGVuZ3RoKG1fbWluV2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmcsIEZpeGVkKSwgY29u
dGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwgCisgICAgICAgIGNhbGNBYnNvbHV0ZUhv
cml6b250YWxWYWx1ZXMoTGVuZ3RoKG1fbWluV2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmcsIEZp
eGVkKSwgY29udGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5n
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJn
aW5MZWZ0LCBtYXJnaW5SaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX3dpZHRoLCBtX21hcmdpbkxlZnQsIG1fbWFyZ2luUmlnaHQsIG1feCk7CkBAIC0xODEwLDkg
KzE3ODQsOSBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhCiAKICAg
ICAvLyBVc2UgY29tcHV0ZWQgdmFsdWVzIHRvIGNhbGN1bGF0ZSB0aGUgaG9yaXpvbnRhbCBwb3Np
dGlvbi4KIAotICAgIC8vIEZJWE1FOiBUaGlzIGhhY2sgaXMgbmVlZGVkIHRvIGNhbGN1bGF0ZSB0
aGUgeFBvcyBmb3IgYSAncnRsJyByZWxhdGl2ZWx5IAotICAgIC8vIHBvc2l0aW9uZWQsIGlubGlu
ZSBjb250YWluaW5nIGJsb2NrIGJlY2F1c2UgcmlnaHQgbm93LCBpdCBpcyB1c2luZyB0aGUgeFBv
cyAKLSAgICAvLyBvZiB0aGUgZmlyc3QgbGluZSBib3ggd2hlbiByZWFsbHkgaXQgc2hvdWxkIHVz
ZSB0aGUgbGFzdCBsaW5lIGJveC4gIFdoZW4gCisgICAgLy8gRklYTUU6IFRoaXMgaGFjayBpcyBu
ZWVkZWQgdG8gY2FsY3VsYXRlIHRoZSB4UG9zIGZvciBhICdydGwnIHJlbGF0aXZlbHkKKyAgICAv
LyBwb3NpdGlvbmVkLCBpbmxpbmUgY29udGFpbmluZyBibG9jayBiZWNhdXNlIHJpZ2h0IG5vdywg
aXQgaXMgdXNpbmcgdGhlIHhQb3MKKyAgICAvLyBvZiB0aGUgZmlyc3QgbGluZSBib3ggd2hlbiBy
ZWFsbHkgaXQgc2hvdWxkIHVzZSB0aGUgbGFzdCBsaW5lIGJveC4gIFdoZW4KICAgICAvLyB0aGlz
IGlzIGZpeGVkIGVsc2V3aGVyZSwgdGhpcyBibG9jayBzaG91bGQgYmUgcmVtb3ZlZC4KICAgICBp
ZiAoY29udGFpbmVyQmxvY2stPmlzSW5saW5lKCkgJiYgY29udGFpbmVyQmxvY2stPnN0eWxlKCkt
PmRpcmVjdGlvbigpID09IFJUTCkgewogICAgICAgICBjb25zdCBSZW5kZXJGbG93KiBmbG93ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyRmxvdyo+KGNvbnRhaW5lckJsb2NrKTsKQEAgLTE4NDUs
NyArMTgxOSw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVWZXJ0aWNhbCgpCiAgICAg
Y29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXJCbG9jayA9IGNvbnRhaW5lcigpOwogCiAgICAg
Y29uc3QgaW50IGNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5pbmdCbG9ja0hlaWdodEZvclBvc2l0
aW9uZWQoY29udGFpbmVyQmxvY2spOwotICAgIAorCiAgICAgY29uc3QgaW50IGJvcmRlcnNQbHVz
UGFkZGluZyA9IGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkgKyBwYWRkaW5nVG9wKCkgKyBw
YWRkaW5nQm90dG9tKCk7CiAgICAgY29uc3QgTGVuZ3RoIG1hcmdpblRvcCA9IHN0eWxlKCktPm1h
cmdpblRvcCgpOwogICAgIGNvbnN0IExlbmd0aCBtYXJnaW5Cb3R0b20gPSBzdHlsZSgpLT5tYXJn
aW5Cb3R0b20oKTsKQEAgLTE4ODksNyArMTg2Myw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJz
b2x1dGVWZXJ0aWNhbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wLCBib3R0
b20sIG1hcmdpblRvcCwgbWFyZ2luQm90dG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlaWdodCwgbV9tYXJnaW5Ub3AsIG1fbWFyZ2luQm90dG9tLCBtX3kpOwogCi0gICAgLy8g
QXZvaWQgZG9pbmcgYW55IHdvcmsgaW4gdGhlIGNvbW1vbiBjYXNlICh3aGVyZSB0aGUgdmFsdWVz
IG9mIG1pbi1oZWlnaHQgYW5kIG1heC1oZWlnaHQgYXJlIHRoZWlyIGRlZmF1bHRzKS4gICAgCisg
ICAgLy8gQXZvaWQgZG9pbmcgYW55IHdvcmsgaW4gdGhlIGNvbW1vbiBjYXNlICh3aGVyZSB0aGUg
dmFsdWVzIG9mIG1pbi1oZWlnaHQgYW5kIG1heC1oZWlnaHQgYXJlIHRoZWlyIGRlZmF1bHRzKS4K
ICAgICAvLyBzZWUgRklYTUUgMwogCiAgICAgLy8gQ2FsY3VsYXRlIGNvbnN0cmFpbnQgZXF1YXRp
b24gdmFsdWVzIGZvciAnbWF4LWhlaWdodCcgY2FzZS4KQEAgLTE5MzAsMTAgKzE5MDQsOCBAQCB2
b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRlVmVydGljYWwoKQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaGVpZ2h0ICs9IGJvcmRlcnNQbHVzUGFkZGluZzsKLQogICAgIC8vIFNldCBmaW5hbCBo
ZWlnaHQgdmFsdWUuCi0gICAgbV9oZWlnaHQgPSBoZWlnaHQ7CisgICAgbV9oZWlnaHQgPSBoZWln
aHQgKyBib3JkZXJzUGx1c1BhZGRpbmc7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1
dGVWZXJ0aWNhbFZhbHVlcyhMZW5ndGggaGVpZ2h0LCBjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRh
aW5lckJsb2NrLApAQCAtMTk0NSw3ICsxOTE3LDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNv
bHV0ZVZlcnRpY2FsVmFsdQogICAgIC8vIGNvbnZlcnRlZCB0byB0aGUgc3RhdGljIHBvc2l0aW9u
IGluIGNhbGNBYnNvbHV0ZVZlcnRpY2FsKCkKICAgICBBU1NFUlQoISh0b3AuaXNBdXRvKCkgJiYg
Ym90dG9tLmlzQXV0bygpKSk7CiAKLSAgICBpbnQgY29udGVudEhlaWdodCA9IG1faGVpZ2h0IC0g
Ym9yZGVyc1BsdXNQYWRkaW5nOyAgICAKKyAgICBpbnQgY29udGVudEhlaWdodCA9IG1faGVpZ2h0
IC0gYm9yZGVyc1BsdXNQYWRkaW5nOwogCiAgICAgaW50IHRvcFZhbHVlID0gMDsKIApAQCAtMjAw
MCw3ICsxOTcyLDcgQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdQog
ICAgICAgICAgKiBPdGhlcndpc2UsIHNldCAnYXV0bycgdmFsdWVzIGZvciAnbWFyZ2luLXRvcCcg
YW5kICdtYXJnaW4tYm90dG9tJwogICAgICAgICAgKiB0byAwLCBhbmQgcGljayB0aGUgb25lIG9m
IHRoZSBmb2xsb3dpbmcgc2l4IHJ1bGVzIHRoYXQgYXBwbGllcy4KICAgICAgICAgICoKLSAgICAg
ICAgICogMS4gJ3RvcCcgYW5kICdoZWlnaHQnIGFyZSAnYXV0bycgYW5kICdib3R0b20nIGlzIG5v
dCAnYXV0bycsIHRoZW4gCisgICAgICAgICAqIDEuICd0b3AnIGFuZCAnaGVpZ2h0JyBhcmUgJ2F1
dG8nIGFuZCAnYm90dG9tJyBpcyBub3QgJ2F1dG8nLCB0aGVuCiAgICAgICAgICAqICAgIHRoZSBo
ZWlnaHQgaXMgYmFzZWQgb24gdGhlIGNvbnRlbnQsIGFuZCBzb2x2ZSBmb3IgJ3RvcCcuCiAgICAg
ICAgICAqCiAgICAgICAgICAqICAgICAgICAgICAgICBPTUlUIFJVTEUgMiBBUyBJVCBTSE9VTEQg
TkVWRVIgQkUgSElUCkBAIC0yMDU2LDcgKzIwMjgsNyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fi
c29sdXRlVmVydGljYWxWYWx1CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jp
em9udGFsUmVwbGFjZWQoKQoteyAgIAorewogICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYmFzZWQg
b2ZmIG9mIHRoZSBXM0MgV29ya2luZyBEcmFmdCBmcm9tIEFwcmlsIDExLCAyMDA2IG9mCiAgICAg
Ly8gQ1NTIDIuMTogU2VjdGlvbiAxMC4zLjggIkFic29sdXRseSBwb3NpdGlvbmVkLCByZXBsYWNl
ZCBlbGVtZW50cyIKICAgICAvLyA8aHR0cDovL3d3dy53My5vcmcvVFIvMjAwNS9XRC1DU1MyMS0y
MDA1MDYxMy92aXN1ZGV0Lmh0bWwjYWJzLXJlcGxhY2VkLXdpZHRoPgpAQCAtMjA2OCw4ICsyMDQw
LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxSZQogICAgIGNvbnN0
IFJlbmRlck9iamVjdCogY29udGFpbmVyQmxvY2sgPSBjb250YWluZXIoKTsKIAogICAgIGNvbnN0
IGludCBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja1dpZHRoRm9yUG9zaXRpb25lZChj
b250YWluZXJCbG9jayk7Ci0gICAgCi0gICAgLy8gVG8gbWF0Y2ggV2luSUUsIGluIHF1aXJrcyBt
b2RlIHVzZSB0aGUgcGFyZW50J3MgJ2RpcmVjdGlvbicgcHJvcGVydHkgCisKKyAgICAvLyBUbyBt
YXRjaCBXaW5JRSwgaW4gcXVpcmtzIG1vZGUgdXNlIHRoZSBwYXJlbnQncyAnZGlyZWN0aW9uJyBw
cm9wZXJ0eQogICAgIC8vIGluc3RlYWQgb2YgdGhlIHRoZSBjb250YWluZXIgYmxvY2sncy4KICAg
ICBUZXh0RGlyZWN0aW9uIGNvbnRhaW5lckRpcmVjdGlvbiA9IChzdHlsZSgpLT5odG1sSGFja3Mo
KSkgPyBwYXJlbnQoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgOiBjb250YWluZXJCbG9jay0+c3R5
bGUoKS0+ZGlyZWN0aW9uKCk7CiAKQEAgLTIyMTIsOSArMjE4NCw5IEBAIHZvaWQgUmVuZGVyQm94
OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsUmUKIAogICAgIC8vIFVzZSBjb21wdXRlZCB2YWx1ZXMg
dG8gY2FsY3VsYXRlIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uLgogCi0gICAgLy8gRklYTUU6IFRo
aXMgaGFjayBpcyBuZWVkZWQgdG8gY2FsY3VsYXRlIHRoZSB4UG9zIGZvciBhICdydGwnIHJlbGF0
aXZlbHkgCi0gICAgLy8gcG9zaXRpb25lZCwgaW5saW5lIGNvbnRhaW5pbmcgYmxvY2sgYmVjYXVz
ZSByaWdodCBub3csIGl0IGlzIHVzaW5nIHRoZSB4UG9zIAotICAgIC8vIG9mIHRoZSBmaXJzdCBs
aW5lIGJveCB3aGVuIHJlYWxseSBpdCBzaG91bGQgdXNlIHRoZSBsYXN0IGxpbmUgYm94LiAgV2hl
biAKKyAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGlzIG5lZWRlZCB0byBjYWxjdWxhdGUgdGhlIHhQ
b3MgZm9yIGEgJ3J0bCcgcmVsYXRpdmVseQorICAgIC8vIHBvc2l0aW9uZWQsIGlubGluZSBjb250
YWluaW5nIGJsb2NrIGJlY2F1c2UgcmlnaHQgbm93LCBpdCBpcyB1c2luZyB0aGUgeFBvcworICAg
IC8vIG9mIHRoZSBmaXJzdCBsaW5lIGJveCB3aGVuIHJlYWxseSBpdCBzaG91bGQgdXNlIHRoZSBs
YXN0IGxpbmUgYm94LiAgV2hlbgogICAgIC8vIHRoaXMgaXMgZml4ZWQgZWxzZXdoZXJlLCB0aGlz
IGJsb2NrIHNob3VsZCBiZSByZW1vdmVkLgogICAgIGlmIChjb250YWluZXJCbG9jay0+aXNJbmxp
bmUoKSAmJiBjb250YWluZXJCbG9jay0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSB7CiAg
ICAgICAgIGNvbnN0IFJlbmRlckZsb3cqIGZsb3cgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJG
bG93Kj4oY29udGFpbmVyQmxvY2spOwpAQCAtMjM2NywxMSArMjMzOSwxMSBAQCBJbnRSZWN0IFJl
bmRlckJveDo6Y2FyZXRSZWN0KGludCBvZmZzZXQsCiAgICAgLy8gdGhvc2UgY29udGFpbmVycyAo
dGFibGVzIGFuZCBzZWxlY3QgZWxlbWVudHMpIG9yIGIpIHJlZmVyIHRvIHRoZSBwb3NpdGlvbiBp
bnNpZGUgYW4gZW1wdHkgYmxvY2suCiAgICAgLy8gVGhleSBuZXZlciByZWZlciB0byBjaGlsZHJl
bi4KICAgICAvLyBGSVhNRTogUGFpbnQgdGhlIGNhcmV0cyBpbnNpZGUgZW1wdHkgYmxvY2tzIGRp
ZmZlcmVudGx5IHRoYW4gdGhlIGNhcmV0cyBiZWZvcmUvYWZ0ZXIgZWxlbWVudHMuCi0gICAgCisK
ICAgICAvLyBGSVhNRTogV2hhdCBhYm91dCBib3JkZXIgYW5kIHBhZGRpbmc/CiAgICAgY29uc3Qg
aW50IGNhcmV0V2lkdGggPSAxOwogICAgIEludFJlY3QgcmVjdCh4UG9zKCksIHlQb3MoKSwgY2Fy
ZXRXaWR0aCwgbV9oZWlnaHQpOwotICAgIGlmIChvZmZzZXQgIT0gMCkKKyAgICBpZiAob2Zmc2V0
KQogICAgICAgICByZWN0Lm1vdmUoSW50U2l6ZShtX3dpZHRoIC0gY2FyZXRXaWR0aCwgMCkpOwog
ICAgIGlmIChJbmxpbmVCb3gqIGJveCA9IGlubGluZUJveFdyYXBwZXIoKSkgewogICAgICAgICBS
b290SW5saW5lQm94KiByb290Qm94ID0gYm94LT5yb290KCk7CkBAIC0yMzgyLDcgKzIzNTQsNyBA
QCBJbnRSZWN0IFJlbmRlckJveDo6Y2FyZXRSZWN0KGludCBvZmZzZXQsCiAKICAgICAvLyBJZiBo
ZWlnaHQgb2YgYm94IGlzIHNtYWxsZXIgdGhhbiBmb250IGhlaWdodCwgdXNlIHRoZSBsYXR0ZXIg
b25lLAogICAgIC8vIG90aGVyd2lzZSB0aGUgY2FyZXQgbWlnaHQgYmVjb21lIGludmlzaWJsZS4K
LSAgICAvLyAKKyAgICAvLwogICAgIC8vIEFsc28sIGlmIHRoZSBib3ggaXMgbm90IGEgcmVwbGFj
ZWQgZWxlbWVudCwgYWx3YXlzIHVzZSB0aGUgZm9udCBoZWlnaHQuCiAgICAgLy8gVGhpcyBwcmV2
ZW50cyB0aGUgImJpZyBjYXJldCIgYnVnIGRlc2NyaWJlZCBpbjoKICAgICAvLyA8cmRhcjovL3By
b2JsZW0vMzc3NzgwND4gRGVsZXRpbmcgYWxsIGNvbnRlbnQgaW4gYSBkb2N1bWVudCBjYW4gcmVz
dWx0IGluIGdpYW50IHRhbGwtYXMtd2luZG93IGluc2VydGlvbiBwb2ludApAQCAtMjQzNSw0ICsy
NDA3LDQgQEAgaW50IFJlbmRlckJveDo6bGVmdG1vc3RQb3NpdGlvbihib29sIGluYwogICAgIHJl
dHVybiBsZWZ0OwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAkocmV2aXNpb24gMTkwNzkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKICAgICBlbnVtIFdpZHRoVHlw
ZSB7IFdpZHRoLCBNaW5XaWR0aCwgTWF4V2lkdGggfTsKLSAgICAKKwogY2xhc3MgUmVuZGVyQm94
IDogcHVibGljIFJlbmRlck9iamVjdCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyQm94KE5vZGUqKTsK
QEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0
eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7
Ci0gICAgCisKICAgICB2aXJ0dWFsIGludCBtaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWlu
V2lkdGg7IH0KICAgICB2aXJ0dWFsIGludCBtYXhXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4
V2lkdGg7IH0KIApAQCAtNDksNDggKzQ5LDQ3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBv
dmVycmlkZVdpZHRoKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgb3ZlcnJpZGVIZWlnaHQoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0T3ZlcnJpZGVTaXplKGludCBzKSB7IG1fb3ZlcnJp
ZGVTaXplID0gczsgfQotICAgIAotICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvc2l0aW9uKGlu
dCYgeCwgaW50JiB5LCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2
b2lkIHNldFBvcyhpbnQgeCwgaW50IHkpOworICAgIHZpcnR1YWwgYm9vbCBhYnNvbHV0ZVBvc2l0
aW9uKGludCYgeCwgaW50JiB5LCBib29sIGZpeGVkID0gZmFsc2UpIGNvbnN0OwogCiAgICAgdmly
dHVhbCBpbnQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQogICAgIHZpcnR1YWwgaW50IHlQ
b3MoKSBjb25zdCB7IHJldHVybiBtX3k7IH0KLSAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
b3MoaW50IHgsIGludCB5KTsKKworICAgIHZpcnR1YWwgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV93aWR0aDsgfQorICAgIHZpcnR1YWwgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGVpZ2h0OyB9CisgICAgdmlydHVhbCB2b2lkIHNldFdpZHRoKGludCB3aWR0aCkgeyBtX3dpZHRo
ID0gd2lkdGg7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SGVpZ2h0KGludCBoZWlnaHQpIHsgbV9o
ZWlnaHQgPSBoZWlnaHQ7IH0KIAogICAgIHZpcnR1YWwgaW50IG1hcmdpblRvcCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFyZ2luVG9wOyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luQm90dG9tKCkgY29u
c3QgeyByZXR1cm4gbV9tYXJnaW5Cb3R0b207IH0KICAgICB2aXJ0dWFsIGludCBtYXJnaW5MZWZ0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5MZWZ0OyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2lu
UmlnaHQoKSBjb25zdCB7IHJldHVybiBtX21hcmdpblJpZ2h0OyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IG1fd2lkdGggPSB3aWR0aDsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQotCiAgICAg
dmlydHVhbCBJbnRSZWN0IGJvcmRlckJveCgpIGNvbnN0IHsgcmV0dXJuIEludFJlY3QoMCwgLWJv
cmRlclRvcEV4dHJhKCksIHdpZHRoKCksIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJv
cmRlckJvdHRvbUV4dHJhKCkpOyB9CiAKLSAgICBpbnQgY2FsY0JvcmRlckJveFdpZHRoKGludCB3
KSBjb25zdDsKLSAgICBpbnQgY2FsY0JvcmRlckJveEhlaWdodChpbnQgaCkgY29uc3Q7Ci0gICAg
aW50IGNhbGNDb250ZW50Qm94V2lkdGgoaW50IHcpIGNvbnN0OwotICAgIGludCBjYWxjQ29udGVu
dEJveEhlaWdodChpbnQgaCkgY29uc3Q7Ci0gICAgCisgICAgaW50IGNhbGNCb3JkZXJCb3hXaWR0
aChpbnQgd2lkdGgpIGNvbnN0OworICAgIGludCBjYWxjQm9yZGVyQm94SGVpZ2h0KGludCBoZWln
aHQpIGNvbnN0OworICAgIGludCBjYWxjQ29udGVudEJveFdpZHRoKGludCB3aWR0aCkgY29uc3Q7
CisgICAgaW50IGNhbGNDb250ZW50Qm94SGVpZ2h0KGludCBoZWlnaHQpIGNvbnN0OworCiAgICAg
Ly8gVGhpcyBtZXRob2QgaXMgbm93IHB1YmxpYyBzbyB0aGF0IGNlbnRlcmVkIG9iamVjdHMgbGlr
ZSB0YWJsZXMgdGhhdCBhcmUKICAgICAvLyBzaGlmdGVkIHJpZ2h0IGJ5IGxlZnQtYWxpZ25lZCBm
bG9hdHMgY2FuIHJlY29tcHV0ZSB0aGVpciBsZWZ0IGFuZAotICAgIC8vIHJpZ2h0IG1hcmdpbnMg
KHNvIHRoYXQgdGhleSBjYW4gcmVtYWluIGNlbnRlcmVkIGFmdGVyIGJlaW5nIAorICAgIC8vIHJp
Z2h0IG1hcmdpbnMgKHNvIHRoYXQgdGhleSBjYW4gcmVtYWluIGNlbnRlcmVkIGFmdGVyIGJlaW5n
CiAgICAgLy8gc2hpZnRlZC4gLWR3aAotICAgIHZvaWQgY2FsY0hvcml6b250YWxNYXJnaW5zKGNv
bnN0IExlbmd0aCYgbWwsIGNvbnN0IExlbmd0aCYgbXIsIGludCBjdyk7CisgICAgdm9pZCBjYWxj
SG9yaXpvbnRhbE1hcmdpbnMoY29uc3QgTGVuZ3RoJiBtYXJnaW5MZWZ0LCBjb25zdCBMZW5ndGgm
IG1hcmdpblJpZ2h0LCBpbnQgY29udGFpbmVyV2lkdGgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBv
c2l0aW9uKElubGluZUJveCopOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIGRpcnR5TGluZUJv
eGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpOwogCiAgICAg
Ly8gRm9yIGlubGluZSByZXBsYWNlZCBlbGVtZW50cywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRo
ZSBpbmxpbmUgYm94IHRoYXQgb3ducyB1cy4gIEVuYWJsZXMKICAgICAvLyB0aGUgcmVwbGFjZWQg
UmVuZGVyT2JqZWN0IHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoYXQgbGluZSBpdCBpcyBjb250YWlu
ZWQgb24gYW5kIHRvIGVhc2lseQogICAgIC8vIGl0ZXJhdGUgb3ZlciBzdHJ1Y3R1cmVzIG9uIHRo
ZSBsaW5lLgotICAgIHZpcnR1YWwgSW5saW5lQm94KiBpbmxpbmVCb3hXcmFwcGVyKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCB2b2lkIHNldElubGluZUJveFdyYXBwZXIoSW5saW5lQm94Kik7CisgICAg
dmlydHVhbCBJbmxpbmVCb3gqIGlubGluZUJveFdyYXBwZXIoKSBjb25zdCB7IHJldHVybiBtX2lu
bGluZUJveFdyYXBwZXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SW5saW5lQm94V3JhcHBlcihJ
bmxpbmVCb3gqIGJveFdyYXBwZXIpIHsgbV9pbmxpbmVCb3hXcmFwcGVyID0gYm94V3JhcHBlcjsg
fQogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVMaW5lQm94V3JhcHBlcigpOwotICAgIAorCiAgICAg
dmlydHVhbCBpbnQgbG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9
IHRydWUsIGJvb2wgaW5jbHVkZVNlbGYgPSB0cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBy
aWdodG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yID0gdHJ1ZSwgYm9v
bCBpbmNsdWRlU2VsZiA9IHRydWUpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGxlZnRtb3N0UG9z
aXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciA9IHRydWUsIGJvb2wgaW5jbHVkZVNl
bGYgPSB0cnVlKSBjb25zdDsKQEAgLTk5LDI0ICs5OCwyNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmLCBib29sIGZpeGVkID0g
ZmFsc2UpOwogCiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnREdXJpbmdMYXlvdXRJZk1vdmVkKGNv
bnN0IEludFJlY3QmKTsKLSAgICAKKwogICAgIHZpcnR1YWwgaW50IGNvbnRhaW5pbmdCbG9ja1dp
ZHRoKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CiAgICAgdmlydHVh
bCB2b2lkIGNhbGNIZWlnaHQoKTsKIAotICAgIGJvb2wgc3RyZXRjaGVzVG9WaWV3SGVpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCku
aXNBdXRvKCkgJiYKLSAgICAgICAgIWlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAoaXNSb290
KCkgfHwgaXNCb2R5KCkpOyB9CisgICAgYm9vbCBzdHJldGNoZXNUb1ZpZXdIZWlnaHQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0eWxlKCktPmh0bWxIYWNrcygpICYmIHN0eWxlKCkt
PmhlaWdodCgpLmlzQXV0bygpICYmICFpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgKGlzUm9v
dCgpIHx8IGlzQm9keSgpKTsKKyAgICB9CisKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZWxl
bWVudCBzaHJpbmtzIHRvIGl0cyBpbnRyaW5zaWMgd2lkdGggKHJhdGhlciB0aGFuIGZpbGxpbmcg
dGhlIHdpZHRoCiAgICAgLy8gb2YgYSBjb250YWluaW5nIGJsb2NrKS4gIEhUTUw0IGJ1dHRvbnMs
IDxzZWxlY3Q+cywgPGlucHV0PnMsIGxlZ2VuZHMsIGFuZCBmbG9hdGluZy9jb21wYWN0IGVsZW1l
bnRzIGRvIHRoaXMuCiAgICAgYm9vbCBzaXplc1RvSW50cmluc2ljV2lkdGgoV2lkdGhUeXBlKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBpbnQgY2FsY1dpZHRoVXNpbmcoV2lkdGhUeXBl
LCBpbnQgY3cpOworICAgIGludCBjYWxjV2lkdGhVc2luZyhXaWR0aFR5cGUsIGludCBjb250YWlu
ZXJXaWR0aCk7CiAgICAgaW50IGNhbGNIZWlnaHRVc2luZyhjb25zdCBMZW5ndGgmIGhlaWdodCk7
CiAgICAgaW50IGNhbGNSZXBsYWNlZFdpZHRoVXNpbmcoTGVuZ3RoIHdpZHRoKSBjb25zdDsKICAg
ICBpbnQgY2FsY1JlcGxhY2VkSGVpZ2h0VXNpbmcoTGVuZ3RoIGhlaWdodCkgY29uc3Q7Ci0gICAg
CisKICAgICB2aXJ0dWFsIGludCBjYWxjUmVwbGFjZWRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgaW50IGNhbGNSZXBsYWNlZEhlaWdodCgpIGNvbnN0OwogCkBAIC0xMjQsMjQgKzEyNiwyMyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVIZWlnaHQoKSBjb25zdDsKICAg
ICBpbnQgYXZhaWxhYmxlSGVpZ2h0VXNpbmcoY29uc3QgTGVuZ3RoJikgY29uc3Q7Ci0gICAgCisK
ICAgICB2b2lkIGNhbGNWZXJ0aWNhbE1hcmdpbnMoKTsKIAogICAgIGludCByZWxhdGl2ZVBvc2l0
aW9uT2Zmc2V0WCgpIGNvbnN0OwogICAgIGludCByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WSgpIGNv
bnN0OwogCiAgICAgdmlydHVhbCBSZW5kZXJMYXllciogbGF5ZXIoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KGludCBvZmZz
ZXQsIEVBZmZpbml0eSA9IFVQU1RSRUFNLCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDAp
OwogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50QmFja2dyb3VuZEV4dGVuZGVkKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IENvbG9yJiwgY29uc3QgQmFja2dyb3VuZExheWVyKiwgaW50IGNsaXB5LCBp
bnQgY2xpcGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0
eCwgaW50IHR5LCBpbnQgdywgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlTGVmdEVkZ2UgPSB0cnVlLCBib29sIGluY2x1ZGVS
aWdodEVkZ2UgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRXh0ZW5k
ZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgQ29sb3ImLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIq
LCBpbnQgY2xpcFksIGludCBjbGlwSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgdHgsIGludCB0eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBib29s
IGluY2x1ZGVMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSA9IHRydWUpOwog
Ci0gICAgdmlydHVhbCB2b2lkIHNldFN0YXRpY1goaW50IHN0YXRpY1gpOwotICAgIHZpcnR1YWwg
dm9pZCBzZXRTdGF0aWNZKGludCBzdGF0aWNZKTsKICAgICB2aXJ0dWFsIGludCBzdGF0aWNYKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0aWNYOyB9CiAgICAgdmlydHVhbCBpbnQgc3RhdGljWSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGljWTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRTdGF0aWNYKGlu
dCBzdGF0aWNYKSB7IG1fc3RhdGljWCA9IHN0YXRpY1g7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0
U3RhdGljWShpbnQgc3RhdGljWSkgeyBtX3N0YXRpY1kgPSBzdGF0aWNZOyB9CiAKICAgICB2aXJ0
dWFsIEludFJlY3QgZ2V0T3ZlcmZsb3dDbGlwUmVjdChpbnQgdHgsIGludCB0eSk7CiAgICAgdmly
dHVhbCBJbnRSZWN0IGdldENsaXBSZWN0KGludCB0eCwgaW50IHR5KTsKQEAgLTE0OSw3ICsxNTAs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBwYWludEJhY2tn
cm91bmQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgQ29sb3ImLCBjb25zdCBCYWNrZ3JvdW5kTGF5
ZXIqLCBpbnQgY2xpcHksIGludCBjbGlwaCwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCk7
CisgICAgdm9pZCBwYWludEJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgQ29sb3Im
LCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIqLCBpbnQgY2xpcFksIGludCBjbGlwSGVpZ2h0LCBpbnQg
dHgsIGludCB0eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChpbnQgdHgsIGludCB0eSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB0eXBlLCBib29sIGJlaGluZFRleHQpOwogI2VuZGlmCkBAIC0xNTksMTcgKzE2MCwx
NyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZvaWQgcGFpbnRSb290Qm94RGVjb3JhdGlv
bnMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCi0gICAgdm9pZCBwYWludEJhY2tncm91
bmRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiwgY29uc3QgQmFja2dyb3VuZExheWVy
KiwgaW50IGNsaXB5LCBpbnQgY2xpcGgsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgpOwor
ICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBDb2xvciYs
IGNvbnN0IEJhY2tncm91bmRMYXllciosIGludCBjbGlwWSwgaW50IGNsaXBIZWlnaHQsIGludCB0
eCwgaW50IHR5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCiAgICAgaW50IGNvbnRhaW5pbmdC
bG9ja1dpZHRoRm9yUG9zaXRpb25lZChjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdCbG9j
aykgY29uc3Q7CiAgICAgaW50IGNvbnRhaW5pbmdCbG9ja0hlaWdodEZvclBvc2l0aW9uZWQoY29u
c3QgUmVuZGVyT2JqZWN0KiBjb250YWluaW5nQmxvY2spIGNvbnN0OwogCiAgICAgdm9pZCBjYWxj
QWJzb2x1dGVWZXJ0aWNhbCgpOwogICAgIHZvaWQgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVl
cyhMZW5ndGggd2lkdGgsIGNvbnN0IFJlbmRlck9iamVjdCogY2IsIFRleHREaXJlY3Rpb24gY29u
dGFpbmVyRGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgY29udGFpbmVyV2lkdGgsIGludCBib3JkZXJzUGx1c1BhZGRpbmcsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29udGFpbmVyV2lkdGgsIGludCBib3JkZXJz
UGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0
aCBsZWZ0LCBMZW5ndGggcmlnaHQsIExlbmd0aCBtYXJnaW5MZWZ0LCBMZW5ndGggbWFyZ2luUmln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgd2lkdGhWYWx1
ZSwgaW50JiBtYXJnaW5MZWZ0VmFsdWUsIGludCYgbWFyZ2luUmlnaHRWYWx1ZSwgaW50JiB4UG9z
KTsKLSAgICB2b2lkIGNhbGNBYnNvbHV0ZVZlcnRpY2FsVmFsdWVzKExlbmd0aCBoZWlnaHQsIGNv
bnN0IFJlbmRlck9iamVjdCogY2IsIAorICAgIHZvaWQgY2FsY0Fic29sdXRlVmVydGljYWxWYWx1
ZXMoTGVuZ3RoIGhlaWdodCwgY29uc3QgUmVuZGVyT2JqZWN0KiBjYiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBjb250YWluZXJIZWlnaHQsIGludCBib3JkZXJzUGx1
c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggdG9w
LCBMZW5ndGggYm90dG9tLCBMZW5ndGggbWFyZ2luVG9wLCBMZW5ndGggbWFyZ2luQm90dG9tLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBoZWlnaHRWYWx1ZSwgaW50
JiBtYXJnaW5Ub3BWYWx1ZSwgaW50JiBtYXJnaW5Cb3R0b21WYWx1ZSwgaW50JiB5UG9zKTsKQEAg
LTE3OCwxOCArMTc5LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYWxjQWJzb2x1dGVIb3Jpem9u
dGFsUmVwbGFjZWQoKTsKIAogcHJvdGVjdGVkOgotICAgIGludCBtX2hlaWdodDsgLy8gdGhlIGFj
dHVhbCBoZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcKLQotICAgIGlu
dCBtX3k7Ci0KLSAgICBpbnQgbV94OworICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGNv
bnRlbnRzICsgYm9yZGVycyArIHBhZGRpbmcuCiAgICAgaW50IG1fd2lkdGg7CisgICAgaW50IG1f
aGVpZ2h0OwogCi0gICAgaW50IG1fbWFyZ2luVG9wOwotICAgIGludCBtX21hcmdpbkJvdHRvbTsK
KyAgICBpbnQgbV94OworICAgIGludCBtX3k7CiAKICAgICBpbnQgbV9tYXJnaW5MZWZ0OwogICAg
IGludCBtX21hcmdpblJpZ2h0OworICAgIGludCBtX21hcmdpblRvcDsKKyAgICBpbnQgbV9tYXJn
aW5Cb3R0b207CiAKICAgICAvLyBUaGUgbWluaW11bSB3aWR0aCB0aGUgZWxlbWVudCBuZWVkcyB0
byBiZSBhYmxlIHRvIHJlbmRlcgogICAgIC8vIGl0cyBjb250ZW50IHdpdGhvdXQgY2xpcHBpbmcu
CkBAIC0yMTQsNiArMjE0LDYgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zdGF0aWNZOwogfTsKIAot
fSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAv
LyBSZW5kZXJCb3hfaAo=
</data>
<flag name="review"
          id="4806"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>